Skip to content

Commit 87a8695

Browse files
author
Robert Jackson
authored
Added support to update manifest appfiles from index.html (#701)
Added support to update manifest appfiles from index.html
2 parents 2ad9389 + 0a12a6f commit 87a8695

3 files changed

Lines changed: 145 additions & 3 deletions

File tree

index.js

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -346,6 +346,7 @@ module.exports = {
346346
},
347347

348348
postBuild(result) {
349+
this._updateAppFilesInManifest(result.directory);
349350
if (this.fastboot) {
350351
// should we reload fastboot if there are only css changes? Seems it maynot be needed.
351352
// TODO(future): we can do a smarter reload here by running fs-tree-diff on files loaded
@@ -376,5 +377,51 @@ module.exports = {
376377

377378
_isModuleUnification() {
378379
return (typeof this.project.isModuleUnification === 'function') && this.project.isModuleUnification();
380+
},
381+
382+
_updateAppFilesInManifest(appDir) {
383+
const pkgPath = path.join(appDir, 'package.json');
384+
const pkg = require(pkgPath);
385+
const {
386+
fastboot
387+
} = pkg;
388+
389+
if(fastboot) {
390+
const { manifest: { appFiles: manifestAppFiles } } = fastboot;
391+
let appFilePath = '';
392+
if(Array.isArray(manifestAppFiles) && typeof manifestAppFiles[0] === 'string') {
393+
appFilePath = path.resolve(appDir, manifestAppFiles[0]);
394+
}
395+
// If app file in package.json doesn't exist, update manifest.appFiles in package.json
396+
// with appFiles defined in index.html. This check will ensure the existing behavior is intact and
397+
// only update from index.html for embroider flow.
398+
if(appFilePath && !existsSync(appFilePath)) {
399+
const appFiles = this._getAppFilesFromIndexHtml(appDir);
400+
manifestAppFiles.splice(0, 1, ...appFiles);
401+
fs.writeFileSync(pkgPath, JSON.stringify(pkg));
402+
}
403+
}
404+
},
405+
406+
_getAppFilesFromIndexHtml(appDir) {
407+
const cheerio = require('cheerio');
408+
const indexHtml = fs.readFileSync(path.join(appDir, 'index.html'));
409+
const $ = cheerio.load(indexHtml);
410+
const scriptFileNameRegEx = /([a-zA-Z0-9_\.\-\(\):])+(\.js)/ig;
411+
const filesToSkipRgex = /^vendor|^vendor-static|^ember-cli-live-reload/gi;
412+
const appFiles = [];
413+
414+
$('script').each(function(i, elem) {
415+
const src = $(elem).attr('src');
416+
if (src) {
417+
const fileName = src.match(scriptFileNameRegEx)[0];
418+
const filePath = path.join(appDir, 'assets', fileName);
419+
if (fileName && existsSync(filePath) && !filesToSkipRgex.test(fileName)) {
420+
appFiles.push(path.relative(appDir, filePath));
421+
}
422+
}
423+
});
424+
425+
return appFiles;
379426
}
380427
};

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
"chai": "^4.1.2",
4646
"chai-fs": "^2.0.0",
4747
"chai-string": "^1.4.0",
48+
"cheerio": "^1.0.0-rc.3",
4849
"co": "^4.6.0",
4950
"ember-ajax": "^3.1.0",
5051
"ember-cli": "~3.3.0",

yarn.lock

Lines changed: 97 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1635,6 +1635,10 @@ body@^5.1.0:
16351635
raw-body "~1.1.0"
16361636
safe-json-parse "~1.0.1"
16371637

1638+
boolbase@~1.0.0:
1639+
version "1.0.0"
1640+
resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
1641+
16381642
bower-config@^1.3.0:
16391643
version "1.4.1"
16401644
resolved "https://registry.yarnpkg.com/bower-config/-/bower-config-1.4.1.tgz#85fd9df367c2b8dbbd0caa4c5f2bad40cd84c2cc"
@@ -2387,6 +2391,17 @@ check-error@^1.0.1:
23872391
version "1.0.2"
23882392
resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82"
23892393

2394+
cheerio@^1.0.0-rc.3:
2395+
version "1.0.0-rc.3"
2396+
resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.3.tgz#094636d425b2e9c0f4eb91a46c05630c9a1a8bf6"
2397+
dependencies:
2398+
css-select "~1.2.0"
2399+
dom-serializer "~0.1.1"
2400+
entities "~1.1.1"
2401+
htmlparser2 "^3.9.1"
2402+
lodash "^4.15.0"
2403+
parse5 "^3.0.1"
2404+
23902405
chownr@^1.0.1:
23912406
version "1.0.1"
23922407
resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.0.1.tgz#e2a75042a9551908bebd25b8523d5f9769d79181"
@@ -2749,6 +2764,19 @@ crypto-random-string@^1.0.0:
27492764
version "1.0.0"
27502765
resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e"
27512766

2767+
css-select@~1.2.0:
2768+
version "1.2.0"
2769+
resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858"
2770+
dependencies:
2771+
boolbase "~1.0.0"
2772+
css-what "2.1"
2773+
domutils "1.5.1"
2774+
nth-check "~1.0.1"
2775+
2776+
2777+
version "2.1.3"
2778+
resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2"
2779+
27522780
currently-unhandled@^0.4.1:
27532781
version "0.4.1"
27542782
resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea"
@@ -2950,6 +2978,37 @@ doctrine@^2.1.0:
29502978
dependencies:
29512979
esutils "^2.0.2"
29522980

2981+
dom-serializer@0, dom-serializer@~0.1.1:
2982+
version "0.1.1"
2983+
resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.1.tgz#1ec4059e284babed36eec2941d4a970a189ce7c0"
2984+
dependencies:
2985+
domelementtype "^1.3.0"
2986+
entities "^1.1.1"
2987+
2988+
domelementtype@1, domelementtype@^1.3.0, domelementtype@^1.3.1:
2989+
version "1.3.1"
2990+
resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f"
2991+
2992+
domhandler@^2.3.0:
2993+
version "2.4.2"
2994+
resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803"
2995+
dependencies:
2996+
domelementtype "1"
2997+
2998+
2999+
version "1.5.1"
3000+
resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf"
3001+
dependencies:
3002+
dom-serializer "0"
3003+
domelementtype "1"
3004+
3005+
domutils@^1.5.1:
3006+
version "1.7.0"
3007+
resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a"
3008+
dependencies:
3009+
dom-serializer "0"
3010+
domelementtype "1"
3011+
29533012
dot-prop@^4.1.0:
29543013
version "4.2.0"
29553014
resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57"
@@ -3458,6 +3517,10 @@ ensure-posix-path@^1.0.0, ensure-posix-path@^1.0.1, ensure-posix-path@^1.0.2:
34583517
version "1.0.2"
34593518
resolved "https://registry.yarnpkg.com/ensure-posix-path/-/ensure-posix-path-1.0.2.tgz#a65b3e42d0b71cfc585eb774f9943c8d9b91b0c2"
34603519

3520+
entities@^1.1.1:
3521+
version "1.1.2"
3522+
resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56"
3523+
34613524
entities@~1.1.1:
34623525
version "1.1.1"
34633526
resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0"
@@ -4645,6 +4708,17 @@ hosted-git-info@^2.1.4, hosted-git-info@^2.6.0:
46454708
version "2.7.1"
46464709
resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047"
46474710

4711+
htmlparser2@^3.9.1:
4712+
version "3.10.1"
4713+
resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f"
4714+
dependencies:
4715+
domelementtype "^1.3.1"
4716+
domhandler "^2.3.0"
4717+
domutils "^1.5.1"
4718+
entities "^1.1.1"
4719+
inherits "^2.0.1"
4720+
readable-stream "^3.1.1"
4721+
46484722
http-cache-semantics@^3.8.1:
46494723
version "3.8.1"
46504724
resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2"
@@ -5761,7 +5835,7 @@ lodash.values@~2.3.0:
57615835
dependencies:
57625836
lodash.keys "~2.3.0"
57635837

5764-
[email protected], lodash@^4.17.11:
5838+
[email protected], lodash@^4.15.0, lodash@^4.17.11:
57655839
version "4.17.11"
57665840
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d"
57675841

@@ -6364,6 +6438,12 @@ npmlog@^4.0.0, npmlog@^4.0.2:
63646438
gauge "~2.7.3"
63656439
set-blocking "~2.0.0"
63666440

6441+
nth-check@~1.0.1:
6442+
version "1.0.2"
6443+
resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c"
6444+
dependencies:
6445+
boolbase "~1.0.0"
6446+
63676447
number-is-nan@^1.0.0:
63686448
version "1.0.1"
63696449
resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
@@ -6615,7 +6695,7 @@ parse-url@^5.0.0:
66156695
parse-path "^4.0.0"
66166696
protocols "^1.4.0"
66176697

6618-
parse5@^3.0.3:
6698+
parse5@^3.0.1, parse5@^3.0.3:
66196699
version "3.0.3"
66206700
resolved "https://registry.yarnpkg.com/parse5/-/parse5-3.0.3.tgz#042f792ffdd36851551cf4e9e066b3874ab45b5c"
66216701
dependencies:
@@ -6965,6 +7045,14 @@ read-pkg@^1.0.0:
69657045
string_decoder "~1.1.1"
69667046
util-deprecate "~1.0.1"
69677047

7048+
readable-stream@^3.1.1:
7049+
version "3.4.0"
7050+
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.4.0.tgz#a51c26754658e0a3c21dbf59163bd45ba6f447fc"
7051+
dependencies:
7052+
inherits "^2.0.3"
7053+
string_decoder "^1.1.1"
7054+
util-deprecate "^1.0.1"
7055+
69687056
readable-stream@~1.0.2:
69697057
version "1.0.34"
69707058
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c"
@@ -7880,6 +7968,12 @@ [email protected], string_decoder@~0.10.x:
78807968
version "0.10.31"
78817969
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
78827970

7971+
string_decoder@^1.1.1:
7972+
version "1.2.0"
7973+
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.2.0.tgz#fe86e738b19544afe70469243b2a1ee9240eae8d"
7974+
dependencies:
7975+
safe-buffer "~5.1.0"
7976+
78837977
string_decoder@~1.1.1:
78847978
version "1.1.1"
78857979
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
@@ -8394,7 +8488,7 @@ username@^1.0.1:
83948488
dependencies:
83958489
meow "^3.4.0"
83968490

8397-
util-deprecate@^1.0.2, util-deprecate@~1.0.1:
8491+
util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1:
83988492
version "1.0.2"
83998493
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
84008494

0 commit comments

Comments
 (0)