@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 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
@@ -47,7 +47,7 @@ function _loadScript(asset, root) {
47
47
  if (asset.type === 'script') {
48
48
  script.defer = true;
49
49
  script.onload = resolve;
50
- script.onerror = reject;
50
+ script.onerror = asset.optional ? resolve : reject;
51
51
  script.src = asset.source;
52
52
  const {
53
53
  attr
package/lib/index.es9.mjs CHANGED
@@ -41,7 +41,7 @@ function _loadScript(asset, root) {
41
41
  if (asset.type === 'script') {
42
42
  script.defer = true;
43
43
  script.onload = resolve;
44
- script.onerror = reject;
44
+ script.onerror = asset.optional ? resolve : reject;
45
45
  script.src = asset.source;
46
46
  const {
47
47
  attr
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.27.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 --module es11 ./lib/index.mjs && ../../node_modules/.bin/es-check --module es9 ./lib/index.es9.mjs && ../../node_modules/.bin/es-check --module es9 ./lib/index.es9.cjs",
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.27.0",
53
- "rollup": "^2.56.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": "355cec8cff98356d1ecda30e54957aef076ba7fb"
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
- return folders.reduce(async (assets, folder) => {
25
- assets = await assets;
26
- const folderPath = path.join(staticFolder, folder);
56
+ const processedAssets = await folders.reduce(
57
+ async (assets, folder) => {
58
+ assets = await assets;
59
+ const folderPath = path.join(staticFolder, folder);
27
60
 
28
- const manifestFile = await fsp.readFile(
29
- path.join(folderPath, 'manifest.json'),
30
- { encoding: 'utf-8' }
31
- );
32
- const manifest = JSON.parse(manifestFile);
33
-
34
- return Promise.all(
35
- assets.map(async (asset) => {
36
- if (
37
- !asset.name ||
38
- !manifest[asset.name] ||
39
- typeof asset.source === 'string'
40
- ) {
41
- return asset;
42
- }
43
-
44
- if (asset.type.includes('inline')) {
45
- asset.source = await fsp.readFile(
46
- path.join(folderPath, manifest[asset.name]),
47
- { encoding: 'utf-8' }
48
- );
49
-
50
- return asset;
51
- }
52
-
53
- if (asset.type === 'stylesheet') {
54
- asset.source = `${staticBaseUrl}/${folder}/${manifest[asset.name]}`;
55
-
56
- return asset;
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 = {