@merkur/integration 0.27.0 → 0.28.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/index.cjs +1 -1
- package/lib/index.es5.js +1 -1
- package/lib/index.es9.cjs +1 -1
- package/lib/index.es9.mjs +1 -1
- package/lib/index.js +1 -1
- package/lib/index.mjs +1 -1
- package/lib/index.umd.js +1 -1
- package/package.json +5 -5
- package/server/__tests__/__snapshots__/indexSpec.js.snap +20 -0
- package/server/__tests__/indexSpec.js +97 -0
- package/server/index.js +67 -43
package/lib/index.cjs
CHANGED
|
@@ -54,7 +54,7 @@ function _loadScript(asset, root) {
|
|
|
54
54
|
if (asset.type === 'script') {
|
|
55
55
|
script.defer = true;
|
|
56
56
|
script.onload = resolve;
|
|
57
|
-
script.onerror = reject;
|
|
57
|
+
script.onerror = asset.optional ? resolve : reject;
|
|
58
58
|
script.src = asset.source;
|
|
59
59
|
|
|
60
60
|
const { attr } = asset;
|
package/lib/index.es5.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var e,r;require("core-js/modules/es.object.define-property.js"),require("core-js/modules/es.object.values.js"),require("core-js/modules/es.object.to-string.js"),require("core-js/modules/es.promise.js"),require("core-js/modules/es.object.keys.js"),require("core-js/modules/es.array.filter.js"),require("core-js/modules/es.array.reduce.js"),require("core-js/modules/es.array.from.js"),require("core-js/modules/es.string.iterator.js"),require("core-js/modules/es.array.iterator.js"),require("core-js/modules/web.dom-collections.iterator.js"),require("core-js/modules/es.array.map.js"),require("core-js/modules/es.object.assign.js"),require("core-js/modules/es.function.name.js"),Object.defineProperty(exports,"__esModule",{value:!0});var t={isES9Supported:function(){return void 0===e&&(e=t.test("return (() => { const o = { t: 1 }; return { ...o }; })() && (async () => ({}))()")&&!!Object.values),e},isES11Supported:function(){return void 0===r&&(r=t.test("return (() => { const o = { t: { q: true } }; return o?.t?.q && (o?.a?.q ?? true); })()")&&t.test('return typeof Promise.allSettled === "function"')&&t.test('return typeof globalThis !== "undefined"')&&t.test('return typeof 9007199254740991n === "bigint"')),r},test:function(e){try{return!!new Function(e)()}catch(e){return!1}}};function s(e,r){return new Promise((function(t,s){var o=document.createElement("script");if("script"===e.type){o.defer=!0,o.onload=t,o.onerror=s,o.src=e.source;var n=e.attr;if(n&&Object.keys(n).length)for(var u in n){var c=n[u];"boolean"==typeof c?c?o.setAttribute(u,""):o.removeAttribute(u):o.setAttribute(u,c)}}else o.text=e.source,t();r.appendChild(o)}))}function o(e,r){return new Promise((function(t,s){if("stylesheet"===e.type){var o=document.createElement("link");o.onload=t,o.onerror=s,o.rel="stylesheet",o.href=e.source,r.appendChild(o)}else{var n=document.createElement("style");n.innerHTML=e.source,r.appendChild(n),t()}}))}function n(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:document.head,t=r.querySelectorAll("style"),s=e.filter((function(e){return e.source&&("stylesheet"===e.type&&!r.querySelector("link[href='".concat(e.source,"']"))||"inlineStyle"===e.type&&Array.from(t).reduce((function(r,t){return t.innerHTML!==e.source&&r}),!0))}));return Promise.all(s.map((function(e){return o(e,r)})))}function u(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:document.head,o=r.querySelectorAll("script"),n=e.reduce((function(e,s){var n=s.source,u=Object.assign({},s);return"script"!==u.type&&"inlineScript"!==u.type?e:n!==Object(n)||(n.es11&&t.isES11Supported()?u.source=n.es11:n.es9&&t.isES9Supported()?u.source=n.es9:u.source=n.es5,u.source)?(r.querySelector("script[src='".concat(u.source,"']"))||Array.from(o).reduce((function(e,r){return r.text===u.source||e}),!1)||u.test&&t.test(u.test)||e.push(u),e):(console.warn("Asset '".concat(u.name,"' is missing ES variant and could not be loaded.")),e)}),[]);return Promise.all(n.map((function(e){return s(e,r)})))}exports.loadAssets=function(e,r){return Promise.all([u(e,r),n(e,r)])},exports.loadScriptAssets=u,exports.loadStyleAssets=n,exports.testScript=t;
|
|
1
|
+
"use strict";var e,r;require("core-js/modules/es.object.define-property.js"),require("core-js/modules/es.regexp.exec.js"),require("core-js/modules/es.object.values.js"),require("core-js/modules/es.object.to-string.js"),require("core-js/modules/es.promise.js"),require("core-js/modules/es.object.keys.js"),require("core-js/modules/es.array.filter.js"),require("core-js/modules/es.array.reduce.js"),require("core-js/modules/es.array.from.js"),require("core-js/modules/es.string.iterator.js"),require("core-js/modules/es.array.iterator.js"),require("core-js/modules/web.dom-collections.iterator.js"),require("core-js/modules/es.array.map.js"),require("core-js/modules/es.object.assign.js"),require("core-js/modules/es.function.name.js"),Object.defineProperty(exports,"__esModule",{value:!0});var t={isES9Supported:function(){return void 0===e&&(e=t.test("return (() => { const o = { t: 1 }; return { ...o }; })() && (async () => ({}))()")&&!!Object.values),e},isES11Supported:function(){return void 0===r&&(r=t.test("return (() => { const o = { t: { q: true } }; return o?.t?.q && (o?.a?.q ?? true); })()")&&t.test('return typeof Promise.allSettled === "function"')&&t.test('return typeof globalThis !== "undefined"')&&t.test('return typeof 9007199254740991n === "bigint"')),r},test:function(e){try{return!!new Function(e)()}catch(e){return!1}}};function s(e,r){return new Promise((function(t,s){var o=document.createElement("script");if("script"===e.type){o.defer=!0,o.onload=t,o.onerror=e.optional?t:s,o.src=e.source;var n=e.attr;if(n&&Object.keys(n).length)for(var u in n){var c=n[u];"boolean"==typeof c?c?o.setAttribute(u,""):o.removeAttribute(u):o.setAttribute(u,c)}}else o.text=e.source,t();r.appendChild(o)}))}function o(e,r){return new Promise((function(t,s){if("stylesheet"===e.type){var o=document.createElement("link");o.onload=t,o.onerror=s,o.rel="stylesheet",o.href=e.source,r.appendChild(o)}else{var n=document.createElement("style");n.innerHTML=e.source,r.appendChild(n),t()}}))}function n(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:document.head,t=r.querySelectorAll("style"),s=e.filter((function(e){return e.source&&("stylesheet"===e.type&&!r.querySelector("link[href='".concat(e.source,"']"))||"inlineStyle"===e.type&&Array.from(t).reduce((function(r,t){return t.innerHTML!==e.source&&r}),!0))}));return Promise.all(s.map((function(e){return o(e,r)})))}function u(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:document.head,o=r.querySelectorAll("script"),n=e.reduce((function(e,s){var n=s.source,u=Object.assign({},s);return"script"!==u.type&&"inlineScript"!==u.type?e:n!==Object(n)||(n.es11&&t.isES11Supported()?u.source=n.es11:n.es9&&t.isES9Supported()?u.source=n.es9:u.source=n.es5,u.source)?(r.querySelector("script[src='".concat(u.source,"']"))||Array.from(o).reduce((function(e,r){return r.text===u.source||e}),!1)||u.test&&t.test(u.test)||e.push(u),e):(console.warn("Asset '".concat(u.name,"' is missing ES variant and could not be loaded.")),e)}),[]);return Promise.all(n.map((function(e){return s(e,r)})))}exports.loadAssets=function(e,r){return Promise.all([u(e,r),n(e,r)])},exports.loadScriptAssets=u,exports.loadStyleAssets=n,exports.testScript=t;
|
package/lib/index.es9.cjs
CHANGED
package/lib/index.es9.mjs
CHANGED
package/lib/index.js
CHANGED
|
@@ -54,7 +54,7 @@ function _loadScript(asset, root) {
|
|
|
54
54
|
if (asset.type === 'script') {
|
|
55
55
|
script.defer = true;
|
|
56
56
|
script.onload = resolve;
|
|
57
|
-
script.onerror = reject;
|
|
57
|
+
script.onerror = asset.optional ? resolve : reject;
|
|
58
58
|
script.src = asset.source;
|
|
59
59
|
|
|
60
60
|
const { attr } = asset;
|
package/lib/index.mjs
CHANGED
|
@@ -50,7 +50,7 @@ function _loadScript(asset, root) {
|
|
|
50
50
|
if (asset.type === 'script') {
|
|
51
51
|
script.defer = true;
|
|
52
52
|
script.onload = resolve;
|
|
53
|
-
script.onerror = reject;
|
|
53
|
+
script.onerror = asset.optional ? resolve : reject;
|
|
54
54
|
script.src = asset.source;
|
|
55
55
|
|
|
56
56
|
const { attr } = asset;
|
package/lib/index.umd.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
!function(e,t){if("function"==typeof define&&define.amd)define("@merkur/integration",["exports"],t);else if("undefined"!=typeof exports)t(exports);else{var r={exports:{}};t(r.exports),e.Merkur=e.Merkur||{},e.Merkur.Integration=r.exports}}("undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:this,(function(e){var t,r;Object.defineProperty(e,"__esModule",{value:!0}),e.loadAssets=function(e,t){return Promise.all([i(e,t),u(e,t)])},e.loadScriptAssets=i,e.loadStyleAssets=u,e.testScript=void 0;var n={isES9Supported:function(){return void 0===t&&(t=n.test("return (() => { const o = { t: 1 }; return { ...o }; })() && (async () => ({}))()")&&!!Object.values),t},isES11Supported:function(){return void 0===r&&(r=n.test("return (() => { const o = { t: { q: true } }; return o?.t?.q && (o?.a?.q ?? true); })()")&&n.test('return typeof Promise.allSettled === "function"')&&n.test('return typeof globalThis !== "undefined"')&&n.test('return typeof 9007199254740991n === "bigint"')),r},test:function(e){try{return!!new Function(e)()}catch(e){return!1}}};function o(e,t){return new Promise((function(r,n){var o=document.createElement("script");if("script"===e.type){o.defer=!0,o.onload=r,o.onerror=n,o.src=e.source;var s=e.attr;if(s&&Object.keys(s).length)for(var u in s){var i=s[u];"boolean"==typeof i?i?o.setAttribute(u,""):o.removeAttribute(u):o.setAttribute(u,i)}}else o.text=e.source,r();t.appendChild(o)}))}function s(e,t){return new Promise((function(r,n){if("stylesheet"===e.type){var o=document.createElement("link");o.onload=r,o.onerror=n,o.rel="stylesheet",o.href=e.source,t.appendChild(o)}else{var s=document.createElement("style");s.innerHTML=e.source,t.appendChild(s),r()}}))}function u(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:document.head,r=t.querySelectorAll("style"),n=e.filter((function(e){return e.source&&("stylesheet"===e.type&&!t.querySelector("link[href='".concat(e.source,"']"))||"inlineStyle"===e.type&&Array.from(r).reduce((function(t,r){return r.innerHTML!==e.source&&t}),!0))}));return Promise.all(n.map((function(e){return s(e,t)})))}function i(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:document.head,r=t.querySelectorAll("script"),s=e.reduce((function(e,o){var s=o.source,u=Object.assign({},o);return"script"!==u.type&&"inlineScript"!==u.type?e:s!==Object(s)||(s.es11&&n.isES11Supported()?u.source=s.es11:s.es9&&n.isES9Supported()?u.source=s.es9:u.source=s.es5,u.source)?(t.querySelector("script[src='".concat(u.source,"']"))||Array.from(r).reduce((function(e,t){return t.text===u.source||e}),!1)||u.test&&n.test(u.test)||e.push(u),e):(console.warn("Asset '".concat(u.name,"' is missing ES variant and could not be loaded.")),e)}),[]);return Promise.all(s.map((function(e){return o(e,t)})))}e.testScript=n}));
|
|
1
|
+
!function(e,t){if("function"==typeof define&&define.amd)define("@merkur/integration",["exports"],t);else if("undefined"!=typeof exports)t(exports);else{var r={exports:{}};t(r.exports),e.Merkur=e.Merkur||{},e.Merkur.Integration=r.exports}}("undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:this,(function(e){var t,r;Object.defineProperty(e,"__esModule",{value:!0}),e.loadAssets=function(e,t){return Promise.all([i(e,t),u(e,t)])},e.loadScriptAssets=i,e.loadStyleAssets=u,e.testScript=void 0;var n={isES9Supported:function(){return void 0===t&&(t=n.test("return (() => { const o = { t: 1 }; return { ...o }; })() && (async () => ({}))()")&&!!Object.values),t},isES11Supported:function(){return void 0===r&&(r=n.test("return (() => { const o = { t: { q: true } }; return o?.t?.q && (o?.a?.q ?? true); })()")&&n.test('return typeof Promise.allSettled === "function"')&&n.test('return typeof globalThis !== "undefined"')&&n.test('return typeof 9007199254740991n === "bigint"')),r},test:function(e){try{return!!new Function(e)()}catch(e){return!1}}};function o(e,t){return new Promise((function(r,n){var o=document.createElement("script");if("script"===e.type){o.defer=!0,o.onload=r,o.onerror=e.optional?r:n,o.src=e.source;var s=e.attr;if(s&&Object.keys(s).length)for(var u in s){var i=s[u];"boolean"==typeof i?i?o.setAttribute(u,""):o.removeAttribute(u):o.setAttribute(u,i)}}else o.text=e.source,r();t.appendChild(o)}))}function s(e,t){return new Promise((function(r,n){if("stylesheet"===e.type){var o=document.createElement("link");o.onload=r,o.onerror=n,o.rel="stylesheet",o.href=e.source,t.appendChild(o)}else{var s=document.createElement("style");s.innerHTML=e.source,t.appendChild(s),r()}}))}function u(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:document.head,r=t.querySelectorAll("style"),n=e.filter((function(e){return e.source&&("stylesheet"===e.type&&!t.querySelector("link[href='".concat(e.source,"']"))||"inlineStyle"===e.type&&Array.from(r).reduce((function(t,r){return r.innerHTML!==e.source&&t}),!0))}));return Promise.all(n.map((function(e){return s(e,t)})))}function i(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:document.head,r=t.querySelectorAll("script"),s=e.reduce((function(e,o){var s=o.source,u=Object.assign({},o);return"script"!==u.type&&"inlineScript"!==u.type?e:s!==Object(s)||(s.es11&&n.isES11Supported()?u.source=s.es11:s.es9&&n.isES9Supported()?u.source=s.es9:u.source=s.es5,u.source)?(t.querySelector("script[src='".concat(u.source,"']"))||Array.from(r).reduce((function(e,t){return t.text===u.source||e}),!1)||u.test&&n.test(u.test)||e.push(u),e):(console.warn("Asset '".concat(u.name,"' is missing ES variant and could not be loaded.")),e)}),[]);return Promise.all(s.map((function(e){return o(e,t)})))}e.testScript=n}));
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@merkur/integration",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.28.0",
|
|
4
4
|
"description": "Merkur module for easy integration with other apps.",
|
|
5
5
|
"main": "lib/index",
|
|
6
6
|
"module": "lib/index",
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
"scripts": {
|
|
27
27
|
"preversion": "npm test",
|
|
28
28
|
"test": "../../node_modules/.bin/jest --no-watchman -c ./jest.config.js",
|
|
29
|
-
"test:es:version": "../../node_modules/.bin/es-check es5 ./lib/index.es5.js && ../../node_modules/.bin/es-check
|
|
29
|
+
"test:es:version": "../../node_modules/.bin/es-check es5 ./lib/index.es5.js && ../../node_modules/.bin/es-check es11 ./lib/index.mjs --module && ../../node_modules/.bin/es-check es9 ./lib/index.es9.mjs --module && ../../node_modules/.bin/es-check es9 ./lib/index.es9.cjs --module",
|
|
30
30
|
"build": "node_modules/.bin/rollup -c",
|
|
31
31
|
"prepare": "npm run build"
|
|
32
32
|
},
|
|
@@ -49,11 +49,11 @@
|
|
|
49
49
|
},
|
|
50
50
|
"homepage": "https://merkur.js.org/",
|
|
51
51
|
"devDependencies": {
|
|
52
|
-
"@merkur/core": "^0.
|
|
53
|
-
"rollup": "^2.
|
|
52
|
+
"@merkur/core": "^0.28.0",
|
|
53
|
+
"rollup": "^2.70.2"
|
|
54
54
|
},
|
|
55
55
|
"peerDependencies": {
|
|
56
56
|
"@merkur/core": "*"
|
|
57
57
|
},
|
|
58
|
-
"gitHead": "
|
|
58
|
+
"gitHead": "8760a1cedbbfc37348055418bacbfc69199a3c06"
|
|
59
59
|
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
|
2
|
+
|
|
3
|
+
exports[`createAssets method should read manifests and add source to assets 1`] = `
|
|
4
|
+
Array [
|
|
5
|
+
Object {
|
|
6
|
+
"name": "widget.js",
|
|
7
|
+
"source": Object {
|
|
8
|
+
"es11": "https://seznam.cz/static/es11/widget.53fbc48b6fb616ecfd1b.js",
|
|
9
|
+
"es5": "https://seznam.cz/static/es5/widget.e5e3d41ecc1f5964c3e3.js",
|
|
10
|
+
"es9": "https://seznam.cz/static/es9/widget.fdf95165e917b666fc62.js",
|
|
11
|
+
},
|
|
12
|
+
"type": "script",
|
|
13
|
+
},
|
|
14
|
+
Object {
|
|
15
|
+
"name": "style.css",
|
|
16
|
+
"source": "https://seznam.cz/static/css/style.c3e64bd85803ef0e5583.css",
|
|
17
|
+
"type": "stylesheet",
|
|
18
|
+
},
|
|
19
|
+
]
|
|
20
|
+
`;
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
const { createAssets } = require('../index');
|
|
2
|
+
const fs = require('fs');
|
|
3
|
+
|
|
4
|
+
const staticFolder = 'build/static';
|
|
5
|
+
const staticBaseUrl = 'https://seznam.cz/static';
|
|
6
|
+
const folders = ['es11', 'es9', 'es5', 'css'];
|
|
7
|
+
|
|
8
|
+
const manifests = {
|
|
9
|
+
'build/static/css/manifest.json':
|
|
10
|
+
'{"style.css":"style.c3e64bd85803ef0e5583.css"}',
|
|
11
|
+
'build/static/es5/manifest.json':
|
|
12
|
+
'{"widget.css": "widget.96a1e61f8f77442b9837.css", "widget.js": "widget.e5e3d41ecc1f5964c3e3.js"}',
|
|
13
|
+
'build/static/es9/manifest.json':
|
|
14
|
+
'{"widget.css": "widget.96a1e61f8f77442b9837.css", "widget.js": "widget.fdf95165e917b666fc62.js"}',
|
|
15
|
+
'build/static/es11/manifest.json':
|
|
16
|
+
'{"widget.css": "widget.6f79bbbdbeda640aeda0.css", "widget.js": "widget.53fbc48b6fb616ecfd1b.js"}',
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
jest.mock('fs', () => ({
|
|
20
|
+
promises: {
|
|
21
|
+
readFile: jest.fn((path) => manifests[path]),
|
|
22
|
+
},
|
|
23
|
+
}));
|
|
24
|
+
|
|
25
|
+
global.console.warn = jest.fn();
|
|
26
|
+
|
|
27
|
+
describe('createAssets method', () => {
|
|
28
|
+
let assets = {};
|
|
29
|
+
|
|
30
|
+
beforeEach(() => {
|
|
31
|
+
assets = [
|
|
32
|
+
{
|
|
33
|
+
name: 'polyfill.js',
|
|
34
|
+
type: 'script',
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
name: 'widget.js',
|
|
38
|
+
type: 'script',
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
name: 'style.css',
|
|
42
|
+
type: 'stylesheet',
|
|
43
|
+
},
|
|
44
|
+
];
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
it('should read manifests and add source to assets', async () => {
|
|
48
|
+
const processed = await createAssets({
|
|
49
|
+
assets,
|
|
50
|
+
staticFolder,
|
|
51
|
+
staticBaseUrl,
|
|
52
|
+
folders,
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
expect(fs.promises.readFile).toHaveBeenCalled();
|
|
56
|
+
expect(processed).toMatchSnapshot();
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
it('should warn about excluded files', async () => {
|
|
60
|
+
await createAssets({
|
|
61
|
+
assets,
|
|
62
|
+
staticFolder,
|
|
63
|
+
staticBaseUrl,
|
|
64
|
+
folders,
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
expect(console.warn).toHaveBeenCalledWith(
|
|
68
|
+
expect.stringContaining('polyfill.js')
|
|
69
|
+
);
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
it('should not modifi original assets', async () => {
|
|
73
|
+
await createAssets({
|
|
74
|
+
assets,
|
|
75
|
+
staticFolder,
|
|
76
|
+
staticBaseUrl,
|
|
77
|
+
folders,
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
expect(assets).toMatchInlineSnapshot(`
|
|
81
|
+
Array [
|
|
82
|
+
Object {
|
|
83
|
+
"name": "polyfill.js",
|
|
84
|
+
"type": "script",
|
|
85
|
+
},
|
|
86
|
+
Object {
|
|
87
|
+
"name": "widget.js",
|
|
88
|
+
"type": "script",
|
|
89
|
+
},
|
|
90
|
+
Object {
|
|
91
|
+
"name": "style.css",
|
|
92
|
+
"type": "stylesheet",
|
|
93
|
+
},
|
|
94
|
+
]
|
|
95
|
+
`);
|
|
96
|
+
});
|
|
97
|
+
});
|
package/server/index.js
CHANGED
|
@@ -16,55 +16,79 @@ function memo(fn, options = { generateKey: () => {} }) {
|
|
|
16
16
|
};
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
+
async function processAssetInFolder({
|
|
20
|
+
asset,
|
|
21
|
+
folder,
|
|
22
|
+
fileName,
|
|
23
|
+
staticFolder,
|
|
24
|
+
staticBaseUrl,
|
|
25
|
+
}) {
|
|
26
|
+
if (!asset.name || !fileName || typeof asset.source === 'string') {
|
|
27
|
+
return asset;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
if (asset.type.includes('inline')) {
|
|
31
|
+
asset.source = await fsp.readFile(
|
|
32
|
+
path.join(staticFolder, folder, fileName),
|
|
33
|
+
{ encoding: 'utf-8' }
|
|
34
|
+
);
|
|
35
|
+
|
|
36
|
+
return asset;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
if (asset.type === 'stylesheet') {
|
|
40
|
+
asset.source = `${staticBaseUrl}/${folder}/${fileName}`;
|
|
41
|
+
|
|
42
|
+
return asset;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
asset.source = asset.source || {};
|
|
46
|
+
asset.source[folder] = `${staticBaseUrl}/${folder}/${fileName}`;
|
|
47
|
+
|
|
48
|
+
return asset;
|
|
49
|
+
}
|
|
50
|
+
|
|
19
51
|
async function createAssets({ assets, staticFolder, folders, staticBaseUrl }) {
|
|
20
52
|
if (staticBaseUrl.endsWith('/')) {
|
|
21
53
|
staticBaseUrl = staticBaseUrl.slice(0, -1);
|
|
22
54
|
}
|
|
23
55
|
|
|
24
|
-
|
|
25
|
-
assets
|
|
26
|
-
|
|
56
|
+
const processedAssets = await folders.reduce(
|
|
57
|
+
async (assets, folder) => {
|
|
58
|
+
assets = await assets;
|
|
59
|
+
const folderPath = path.join(staticFolder, folder);
|
|
27
60
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
asset.source = asset.source || {};
|
|
60
|
-
asset.source[folder] = `${staticBaseUrl}/${folder}/${
|
|
61
|
-
manifest[asset.name]
|
|
62
|
-
}`;
|
|
63
|
-
|
|
64
|
-
return asset;
|
|
65
|
-
})
|
|
66
|
-
);
|
|
67
|
-
}, assets);
|
|
61
|
+
const manifestFile = await fsp.readFile(
|
|
62
|
+
path.join(folderPath, 'manifest.json'),
|
|
63
|
+
{ encoding: 'utf-8' }
|
|
64
|
+
);
|
|
65
|
+
const manifest = JSON.parse(manifestFile);
|
|
66
|
+
|
|
67
|
+
return Promise.all(
|
|
68
|
+
assets.map(async (asset) =>
|
|
69
|
+
processAssetInFolder({
|
|
70
|
+
asset: { ...asset },
|
|
71
|
+
folder,
|
|
72
|
+
fileName: manifest[asset.name],
|
|
73
|
+
staticBaseUrl,
|
|
74
|
+
staticFolder,
|
|
75
|
+
})
|
|
76
|
+
)
|
|
77
|
+
);
|
|
78
|
+
},
|
|
79
|
+
[...assets]
|
|
80
|
+
);
|
|
81
|
+
|
|
82
|
+
return processedAssets.filter((asset) => {
|
|
83
|
+
if (!asset.source) {
|
|
84
|
+
console.warn(
|
|
85
|
+
`Asset '${asset.name}' has been excluded because it doesn't have valid source.`
|
|
86
|
+
);
|
|
87
|
+
return false;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
return true;
|
|
91
|
+
});
|
|
68
92
|
}
|
|
69
93
|
|
|
70
94
|
module.exports = {
|