@merkur/integration 0.29.2 → 0.30.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
@@ -52,22 +52,15 @@ function _loadScript(asset, root) {
52
52
  const scriptElement = root.querySelector(`script[src='${asset.source}']`);
53
53
 
54
54
  if (scriptElement) {
55
- if (
56
- (performance &&
57
- performance.getEntriesByName &&
58
- performance
59
- .getEntriesByName(scriptElement.src)
60
- .find(
61
- (entry) => entry.entryType === 'resource' && entry.responseEnd
62
- )) ||
63
- !performance ||
64
- !performance.getEntriesByName
65
- ) {
66
- setTimeout(resolve, 0);
67
- return;
55
+ if (!asset.test) {
56
+ resolve();
68
57
  }
69
58
 
70
59
  scriptElement.addEventListener('load', resolve);
60
+ scriptElement.addEventListener(
61
+ 'error',
62
+ asset.optional ? resolve : reject
63
+ );
71
64
  return;
72
65
  }
73
66
 
@@ -144,7 +137,7 @@ function loadStyleAssets(assets, root = document.head) {
144
137
  return Promise.all(stylesToRender.map((asset) => _loadStyle(asset, root)));
145
138
  }
146
139
 
147
- function loadScriptAssets(assets, root = document.head) {
140
+ async function loadScriptAssets(assets, root = document.head) {
148
141
  const scriptElements = root.querySelectorAll('script');
149
142
  const scriptsToRender = assets.reduce((scripts, asset) => {
150
143
  const { source } = asset;
@@ -164,9 +157,16 @@ function loadScriptAssets(assets, root = document.head) {
164
157
  }
165
158
 
166
159
  if (!_asset.source) {
167
- console.warn(
168
- `Asset '${_asset.name}' is missing ES variant and could not be loaded.`
169
- );
160
+ const message = `Asset '${_asset.name}' is missing ES variant and could not be loaded.`;
161
+
162
+ if (!_asset.optional) {
163
+ const error = new Error(message);
164
+ error.asset = _asset;
165
+
166
+ throw error;
167
+ }
168
+
169
+ console.warn(message);
170
170
  return scripts;
171
171
  }
172
172
  }
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.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.array.find.js"),require("core-js/modules/web.timers.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=r.querySelector("script[src='".concat(e.source,"']"));if(o)return performance&&performance.getEntriesByName&&performance.getEntriesByName(o.src).find((function(e){return"resource"===e.entryType&&e.responseEnd}))||!performance||!performance.getEntriesByName?void setTimeout(t,0):void o.addEventListener("load",t);var n=document.createElement("script");if("script"===e.type){n.defer=!0,n.onload=t,n.onerror=e.optional?t:s,n.src=e.source;var u=e.attr;if(u&&Object.keys(u).length)for(var c in u){var i=u[c];"boolean"==typeof i?i?n.setAttribute(c,""):n.removeAttribute(c):n.setAttribute(c,i)}}else n.text=e.source,t();r.appendChild(n)}))}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,r){var s=r.source,n=Object.assign({},r);return"script"!==n.type&&"inlineScript"!==n.type?e:s!==Object(s)||(s.es11&&t.isES11Supported()?n.source=s.es11:s.es9&&t.isES9Supported()?n.source=s.es9:n.source=s.es5,n.source)?(Array.from(o).reduce((function(e,r){return r.text===n.source||e}),!1)||n.test&&t.test(n.test)||e.push(n),e):(console.warn("Asset '".concat(n.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";function e(t){return e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},e(t)}function t(){/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */t=function(){return r};var r={},o=Object.prototype,n=o.hasOwnProperty,i=Object.defineProperty||function(e,t,r){e[t]=r.value},s="function"==typeof Symbol?Symbol:{},u=s.iterator||"@@iterator",c=s.asyncIterator||"@@asyncIterator",a=s.toStringTag||"@@toStringTag";function l(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{l({},"")}catch(e){l=function(e,t,r){return e[t]=r}}function f(e,t,r,o){var n=t&&t.prototype instanceof d?t:d,s=Object.create(n.prototype),u=new O(o||[]);return i(s,"_invoke",{value:q(e,r,u)}),s}function h(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}r.wrap=f;var p={};function d(){}function y(){}function m(){}var v={};l(v,u,(function(){return this}));var j=Object.getPrototypeOf,g=j&&j(j(_([])));g&&g!==o&&n.call(g,u)&&(v=g);var b=m.prototype=d.prototype=Object.create(v);function w(e){["next","throw","return"].forEach((function(t){l(e,t,(function(e){return this._invoke(t,e)}))}))}function x(t,r){function o(i,s,u,c){var a=h(t[i],t,s);if("throw"!==a.type){var l=a.arg,f=l.value;return f&&"object"==e(f)&&n.call(f,"__await")?r.resolve(f.__await).then((function(e){o("next",e,u,c)}),(function(e){o("throw",e,u,c)})):r.resolve(f).then((function(e){l.value=e,u(l)}),(function(e){return o("throw",e,u,c)}))}c(a.arg)}var s;i(this,"_invoke",{value:function(e,t){function n(){return new r((function(r,n){o(e,t,r,n)}))}return s=s?s.then(n,n):n()}})}function q(e,t,r){var o="suspendedStart";return function(n,i){if("executing"===o)throw new Error("Generator is already running");if("completed"===o){if("throw"===n)throw i;return P()}for(r.method=n,r.arg=i;;){var s=r.delegate;if(s){var u=E(s,r);if(u){if(u===p)continue;return u}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if("suspendedStart"===o)throw o="completed",r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);o="executing";var c=h(e,t,r);if("normal"===c.type){if(o=r.done?"completed":"suspendedYield",c.arg===p)continue;return{value:c.arg,done:r.done}}"throw"===c.type&&(o="completed",r.method="throw",r.arg=c.arg)}}}function E(e,t){var r=e.iterator[t.method];if(void 0===r){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=void 0,E(e,t),"throw"===t.method))return p;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return p}var o=h(r,e.iterator,t.arg);if("throw"===o.type)return t.method="throw",t.arg=o.arg,t.delegate=null,p;var n=o.arg;return n?n.done?(t[e.resultName]=n.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=void 0),t.delegate=null,p):n:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,p)}function L(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function S(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function O(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(L,this),this.reset(!0)}function _(e){if(e){var t=e[u];if(t)return t.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var r=-1,o=function t(){for(;++r<e.length;)if(n.call(e,r))return t.value=e[r],t.done=!1,t;return t.value=void 0,t.done=!0,t};return o.next=o}}return{next:P}}function P(){return{value:void 0,done:!0}}return y.prototype=m,i(b,"constructor",{value:m,configurable:!0}),i(m,"constructor",{value:y,configurable:!0}),y.displayName=l(m,a,"GeneratorFunction"),r.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===y||"GeneratorFunction"===(t.displayName||t.name))},r.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,m):(e.__proto__=m,l(e,a,"GeneratorFunction")),e.prototype=Object.create(b),e},r.awrap=function(e){return{__await:e}},w(x.prototype),l(x.prototype,c,(function(){return this})),r.AsyncIterator=x,r.async=function(e,t,o,n,i){void 0===i&&(i=Promise);var s=new x(f(e,t,o,n),i);return r.isGeneratorFunction(t)?s:s.next().then((function(e){return e.done?e.value:s.next()}))},w(b),l(b,a,"Generator"),l(b,u,(function(){return this})),l(b,"toString",(function(){return"[object Generator]"})),r.keys=function(e){var t=Object(e),r=[];for(var o in t)r.push(o);return r.reverse(),function e(){for(;r.length;){var o=r.pop();if(o in t)return e.value=o,e.done=!1,e}return e.done=!0,e}},r.values=_,O.prototype={constructor:O,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=void 0,this.done=!1,this.delegate=null,this.method="next",this.arg=void 0,this.tryEntries.forEach(S),!e)for(var t in this)"t"===t.charAt(0)&&n.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=void 0)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var t=this;function r(r,o){return s.type="throw",s.arg=e,t.next=r,o&&(t.method="next",t.arg=void 0),!!o}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],s=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var u=n.call(i,"catchLoc"),c=n.call(i,"finallyLoc");if(u&&c){if(this.prev<i.catchLoc)return r(i.catchLoc,!0);if(this.prev<i.finallyLoc)return r(i.finallyLoc)}else if(u){if(this.prev<i.catchLoc)return r(i.catchLoc,!0)}else{if(!c)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return r(i.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev<o.finallyLoc){var i=o;break}}i&&("break"===e||"continue"===e)&&i.tryLoc<=t&&t<=i.finallyLoc&&(i=null);var s=i?i.completion:{};return s.type=e,s.arg=t,i?(this.method="next",this.next=i.finallyLoc,p):this.complete(s)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),p},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),S(r),p}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var o=r.completion;if("throw"===o.type){var n=o.arg;S(r)}return n}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:_(e),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=void 0),p}},r}function r(e,t,r,o,n,i,s){try{var u=e[i](s),c=u.value}catch(e){return void r(e)}u.done?t(c):Promise.resolve(c).then(o,n)}function o(e){return function(){var t=this,o=arguments;return new Promise((function(n,i){var s=e.apply(t,o);function u(e){r(s,n,i,u,c,"next",e)}function c(e){r(s,n,i,u,c,"throw",e)}u(void 0)}))}}var n,i;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"),require("core-js/modules/es.symbol.js"),require("core-js/modules/es.symbol.description.js"),require("core-js/modules/es.symbol.iterator.js"),require("core-js/modules/es.symbol.async-iterator.js"),require("core-js/modules/es.symbol.to-string-tag.js"),require("core-js/modules/es.json.to-string-tag.js"),require("core-js/modules/es.math.to-string-tag.js"),require("core-js/modules/es.object.create.js"),require("core-js/modules/es.object.get-prototype-of.js"),require("core-js/modules/es.array.for-each.js"),require("core-js/modules/web.dom-collections.for-each.js"),require("core-js/modules/es.object.set-prototype-of.js"),require("core-js/modules/es.array.reverse.js"),require("core-js/modules/es.array.slice.js"),Object.defineProperty(exports,"__esModule",{value:!0});var s={isES9Supported:function(){return void 0===n&&(n=s.test("return (() => { const o = { t: 1 }; return { ...o }; })() && (async () => ({}))()")&&!!Object.values),n},isES11Supported:function(){return void 0===i&&(i=s.test("return (() => { const o = { t: { q: true } }; return o?.t?.q && (o?.a?.q ?? true); })()")&&s.test('return typeof Promise.allSettled === "function"')&&s.test('return typeof globalThis !== "undefined"')&&s.test('return typeof 9007199254740991n === "bigint"')),i},test:function(e){try{return!!new Function(e)()}catch(e){return!1}}};function u(e,t){return new Promise((function(r,o){var n=t.querySelector("script[src='".concat(e.source,"']"));if(n)return e.test||r(),n.addEventListener("load",r),void n.addEventListener("error",e.optional?r:o);var i=document.createElement("script");if("script"===e.type){i.defer=!0,i.onload=r,i.onerror=e.optional?r:o,i.src=e.source;var s=e.attr;if(s&&Object.keys(s).length)for(var u in s){var c=s[u];"boolean"==typeof c?c?i.setAttribute(u,""):i.removeAttribute(u):i.setAttribute(u,c)}}else i.text=e.source,r();t.appendChild(i)}))}function c(e,t){return new Promise((function(r,o){if("stylesheet"===e.type){var n=document.createElement("link");n.onload=r,n.onerror=o,n.rel="stylesheet",n.href=e.source,t.appendChild(n)}else{var i=document.createElement("style");i.innerHTML=e.source,t.appendChild(i),r()}}))}function a(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:document.head,r=t.querySelectorAll("style"),o=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(o.map((function(e){return c(e,t)})))}function l(e){return f.apply(this,arguments)}function f(){return f=o(t().mark((function e(r){var o,n,i,c=arguments;return t().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return o=c.length>1&&void 0!==c[1]?c[1]:document.head,n=o.querySelectorAll("script"),i=r.reduce((function(e,t){var r=t.source,o=Object.assign({},t);if("script"!==o.type&&"inlineScript"!==o.type)return e;if(r===Object(r)&&(r.es11&&s.isES11Supported()?o.source=r.es11:r.es9&&s.isES9Supported()?o.source=r.es9:o.source=r.es5,!o.source)){var i="Asset '".concat(o.name,"' is missing ES variant and could not be loaded.");if(!o.optional){var u=new Error(i);throw u.asset=o,u}return console.warn(i),e}return Array.from(n).reduce((function(e,t){return t.text===o.source||e}),!1)||o.test&&s.test(o.test)||e.push(o),e}),[]),e.abrupt("return",Promise.all(i.map((function(e){return u(e,o)}))));case 4:case"end":return e.stop()}}),e)}))),f.apply(this,arguments)}exports.loadAssets=function(e,t){return Promise.all([l(e,t),a(e,t)])},exports.loadScriptAssets=l,exports.loadStyleAssets=a,exports.testScript=s;
package/lib/index.es9.cjs CHANGED
@@ -3,27 +3,20 @@
3
3
  Object.defineProperty(exports, '__esModule', {
4
4
  value: true
5
5
  });
6
-
7
6
  let _isES9Supported;
8
-
9
7
  let _isES11Supported;
10
-
11
8
  function isES9Supported() {
12
9
  if (_isES9Supported === undefined) {
13
10
  _isES9Supported = exported.test('return (() => { const o = { t: 1 }; return { ...o }; })() && (async () => ({}))()') && !!Object.values;
14
11
  }
15
-
16
12
  return _isES9Supported;
17
13
  }
18
-
19
14
  function isES11Supported() {
20
15
  if (_isES11Supported === undefined) {
21
16
  _isES11Supported = exported.test('return (() => { const o = { t: { q: true } }; return o?.t?.q && (o?.a?.q ?? true); })()') && exported.test('return typeof Promise.allSettled === "function"') && exported.test('return typeof globalThis !== "undefined"') && exported.test('return typeof 9007199254740991n === "bigint"');
22
17
  }
23
-
24
18
  return _isES11Supported;
25
19
  }
26
-
27
20
  function test(snippet) {
28
21
  try {
29
22
  const fn = new Function(snippet);
@@ -33,29 +26,23 @@ function test(snippet) {
33
26
  return false;
34
27
  }
35
28
  }
36
-
37
29
  const exported = {
38
30
  isES9Supported,
39
31
  isES11Supported,
40
32
  test
41
33
  };
42
-
43
34
  function _loadScript(asset, root) {
44
35
  return new Promise((resolve, reject) => {
45
36
  const scriptElement = root.querySelector(`script[src='${asset.source}']`);
46
-
47
37
  if (scriptElement) {
48
- if (performance && performance.getEntriesByName && performance.getEntriesByName(scriptElement.src).find(entry => entry.entryType === 'resource' && entry.responseEnd) || !performance || !performance.getEntriesByName) {
49
- setTimeout(resolve, 0);
50
- return;
38
+ if (!asset.test) {
39
+ resolve();
51
40
  }
52
-
53
41
  scriptElement.addEventListener('load', resolve);
42
+ scriptElement.addEventListener('error', asset.optional ? resolve : reject);
54
43
  return;
55
44
  }
56
-
57
45
  const script = document.createElement('script');
58
-
59
46
  if (asset.type === 'script') {
60
47
  script.defer = true;
61
48
  script.onload = resolve;
@@ -64,11 +51,9 @@ function _loadScript(asset, root) {
64
51
  const {
65
52
  attr
66
53
  } = asset;
67
-
68
54
  if (attr && Object.keys(attr).length) {
69
55
  for (const name in attr) {
70
56
  const value = attr[name];
71
-
72
57
  if (typeof value === 'boolean') {
73
58
  if (value) {
74
59
  script.setAttribute(name, '');
@@ -84,11 +69,9 @@ function _loadScript(asset, root) {
84
69
  script.text = asset.source;
85
70
  resolve();
86
71
  }
87
-
88
72
  root.appendChild(script);
89
73
  });
90
74
  }
91
-
92
75
  function _loadStyle(asset, root) {
93
76
  return new Promise((resolve, reject) => {
94
77
  if (asset.type === 'stylesheet') {
@@ -106,32 +89,26 @@ function _loadStyle(asset, root) {
106
89
  }
107
90
  });
108
91
  }
109
-
110
92
  function loadStyleAssets(assets, root = document.head) {
111
93
  const styleElements = root.querySelectorAll('style');
112
94
  const stylesToRender = assets.filter(asset => asset.source && (asset.type === 'stylesheet' && !root.querySelector(`link[href='${asset.source}']`) || asset.type === 'inlineStyle' && Array.from(styleElements).reduce((acc, cur) => {
113
95
  if (cur.innerHTML === asset.source) {
114
96
  return false;
115
97
  }
116
-
117
98
  return acc;
118
99
  }, true)));
119
100
  return Promise.all(stylesToRender.map(asset => _loadStyle(asset, root)));
120
101
  }
121
-
122
- function loadScriptAssets(assets, root = document.head) {
102
+ async function loadScriptAssets(assets, root = document.head) {
123
103
  const scriptElements = root.querySelectorAll('script');
124
104
  const scriptsToRender = assets.reduce((scripts, asset) => {
125
105
  const {
126
106
  source
127
107
  } = asset;
128
-
129
108
  const _asset = Object.assign({}, asset);
130
-
131
109
  if (_asset.type !== 'script' && _asset.type !== 'inlineScript') {
132
110
  return scripts;
133
111
  }
134
-
135
112
  if (source === Object(source)) {
136
113
  if (source.es11 && exported.isES11Supported()) {
137
114
  _asset.source = source.es11;
@@ -140,33 +117,33 @@ function loadScriptAssets(assets, root = document.head) {
140
117
  } else {
141
118
  _asset.source = source.es5;
142
119
  }
143
-
144
120
  if (!_asset.source) {
145
- console.warn(`Asset '${_asset.name}' is missing ES variant and could not be loaded.`);
121
+ const message = `Asset '${_asset.name}' is missing ES variant and could not be loaded.`;
122
+ if (!_asset.optional) {
123
+ const error = new Error(message);
124
+ error.asset = _asset;
125
+ throw error;
126
+ }
127
+ console.warn(message);
146
128
  return scripts;
147
129
  }
148
130
  }
149
-
150
131
  if (Array.from(scriptElements).reduce((acc, cur) => {
151
132
  if (cur.text === _asset.source) {
152
133
  return true;
153
134
  }
154
-
155
135
  return acc;
156
136
  }, false) || (_asset.test ? exported.test(_asset.test) : false)) {
157
137
  return scripts;
158
138
  }
159
-
160
139
  scripts.push(_asset);
161
140
  return scripts;
162
141
  }, []);
163
142
  return Promise.all(scriptsToRender.map(asset => _loadScript(asset, root)));
164
143
  }
165
-
166
144
  function loadAssets(assets, root) {
167
145
  return Promise.all([loadScriptAssets(assets, root), loadStyleAssets(assets, root)]);
168
146
  }
169
-
170
147
  exports.loadAssets = loadAssets;
171
148
  exports.loadScriptAssets = loadScriptAssets;
172
149
  exports.loadStyleAssets = loadStyleAssets;
package/lib/index.es9.mjs CHANGED
@@ -1,23 +1,17 @@
1
1
  let _isES9Supported;
2
-
3
2
  let _isES11Supported;
4
-
5
3
  function isES9Supported() {
6
4
  if (_isES9Supported === undefined) {
7
5
  _isES9Supported = exported.test('return (() => { const o = { t: 1 }; return { ...o }; })() && (async () => ({}))()') && !!Object.values;
8
6
  }
9
-
10
7
  return _isES9Supported;
11
8
  }
12
-
13
9
  function isES11Supported() {
14
10
  if (_isES11Supported === undefined) {
15
11
  _isES11Supported = exported.test('return (() => { const o = { t: { q: true } }; return o?.t?.q && (o?.a?.q ?? true); })()') && exported.test('return typeof Promise.allSettled === "function"') && exported.test('return typeof globalThis !== "undefined"') && exported.test('return typeof 9007199254740991n === "bigint"');
16
12
  }
17
-
18
13
  return _isES11Supported;
19
14
  }
20
-
21
15
  function test(snippet) {
22
16
  try {
23
17
  const fn = new Function(snippet);
@@ -27,29 +21,23 @@ function test(snippet) {
27
21
  return false;
28
22
  }
29
23
  }
30
-
31
24
  const exported = {
32
25
  isES9Supported,
33
26
  isES11Supported,
34
27
  test
35
28
  };
36
-
37
29
  function _loadScript(asset, root) {
38
30
  return new Promise((resolve, reject) => {
39
31
  const scriptElement = root.querySelector(`script[src='${asset.source}']`);
40
-
41
32
  if (scriptElement) {
42
- if (performance && performance.getEntriesByName && performance.getEntriesByName(scriptElement.src).find(entry => entry.entryType === 'resource' && entry.responseEnd) || !performance || !performance.getEntriesByName) {
43
- setTimeout(resolve, 0);
44
- return;
33
+ if (!asset.test) {
34
+ resolve();
45
35
  }
46
-
47
36
  scriptElement.addEventListener('load', resolve);
37
+ scriptElement.addEventListener('error', asset.optional ? resolve : reject);
48
38
  return;
49
39
  }
50
-
51
40
  const script = document.createElement('script');
52
-
53
41
  if (asset.type === 'script') {
54
42
  script.defer = true;
55
43
  script.onload = resolve;
@@ -58,11 +46,9 @@ function _loadScript(asset, root) {
58
46
  const {
59
47
  attr
60
48
  } = asset;
61
-
62
49
  if (attr && Object.keys(attr).length) {
63
50
  for (const name in attr) {
64
51
  const value = attr[name];
65
-
66
52
  if (typeof value === 'boolean') {
67
53
  if (value) {
68
54
  script.setAttribute(name, '');
@@ -78,11 +64,9 @@ function _loadScript(asset, root) {
78
64
  script.text = asset.source;
79
65
  resolve();
80
66
  }
81
-
82
67
  root.appendChild(script);
83
68
  });
84
69
  }
85
-
86
70
  function _loadStyle(asset, root) {
87
71
  return new Promise((resolve, reject) => {
88
72
  if (asset.type === 'stylesheet') {
@@ -100,32 +84,26 @@ function _loadStyle(asset, root) {
100
84
  }
101
85
  });
102
86
  }
103
-
104
87
  function loadStyleAssets(assets, root = document.head) {
105
88
  const styleElements = root.querySelectorAll('style');
106
89
  const stylesToRender = assets.filter(asset => asset.source && (asset.type === 'stylesheet' && !root.querySelector(`link[href='${asset.source}']`) || asset.type === 'inlineStyle' && Array.from(styleElements).reduce((acc, cur) => {
107
90
  if (cur.innerHTML === asset.source) {
108
91
  return false;
109
92
  }
110
-
111
93
  return acc;
112
94
  }, true)));
113
95
  return Promise.all(stylesToRender.map(asset => _loadStyle(asset, root)));
114
96
  }
115
-
116
- function loadScriptAssets(assets, root = document.head) {
97
+ async function loadScriptAssets(assets, root = document.head) {
117
98
  const scriptElements = root.querySelectorAll('script');
118
99
  const scriptsToRender = assets.reduce((scripts, asset) => {
119
100
  const {
120
101
  source
121
102
  } = asset;
122
-
123
103
  const _asset = Object.assign({}, asset);
124
-
125
104
  if (_asset.type !== 'script' && _asset.type !== 'inlineScript') {
126
105
  return scripts;
127
106
  }
128
-
129
107
  if (source === Object(source)) {
130
108
  if (source.es11 && exported.isES11Supported()) {
131
109
  _asset.source = source.es11;
@@ -134,31 +112,31 @@ function loadScriptAssets(assets, root = document.head) {
134
112
  } else {
135
113
  _asset.source = source.es5;
136
114
  }
137
-
138
115
  if (!_asset.source) {
139
- console.warn(`Asset '${_asset.name}' is missing ES variant and could not be loaded.`);
116
+ const message = `Asset '${_asset.name}' is missing ES variant and could not be loaded.`;
117
+ if (!_asset.optional) {
118
+ const error = new Error(message);
119
+ error.asset = _asset;
120
+ throw error;
121
+ }
122
+ console.warn(message);
140
123
  return scripts;
141
124
  }
142
125
  }
143
-
144
126
  if (Array.from(scriptElements).reduce((acc, cur) => {
145
127
  if (cur.text === _asset.source) {
146
128
  return true;
147
129
  }
148
-
149
130
  return acc;
150
131
  }, false) || (_asset.test ? exported.test(_asset.test) : false)) {
151
132
  return scripts;
152
133
  }
153
-
154
134
  scripts.push(_asset);
155
135
  return scripts;
156
136
  }, []);
157
137
  return Promise.all(scriptsToRender.map(asset => _loadScript(asset, root)));
158
138
  }
159
-
160
139
  function loadAssets(assets, root) {
161
140
  return Promise.all([loadScriptAssets(assets, root), loadStyleAssets(assets, root)]);
162
141
  }
163
-
164
142
  export { loadAssets, loadScriptAssets, loadStyleAssets, exported as testScript };
package/lib/index.js CHANGED
@@ -52,22 +52,15 @@ function _loadScript(asset, root) {
52
52
  const scriptElement = root.querySelector(`script[src='${asset.source}']`);
53
53
 
54
54
  if (scriptElement) {
55
- if (
56
- (performance &&
57
- performance.getEntriesByName &&
58
- performance
59
- .getEntriesByName(scriptElement.src)
60
- .find(
61
- (entry) => entry.entryType === 'resource' && entry.responseEnd
62
- )) ||
63
- !performance ||
64
- !performance.getEntriesByName
65
- ) {
66
- setTimeout(resolve, 0);
67
- return;
55
+ if (!asset.test) {
56
+ resolve();
68
57
  }
69
58
 
70
59
  scriptElement.addEventListener('load', resolve);
60
+ scriptElement.addEventListener(
61
+ 'error',
62
+ asset.optional ? resolve : reject
63
+ );
71
64
  return;
72
65
  }
73
66
 
@@ -144,7 +137,7 @@ function loadStyleAssets(assets, root = document.head) {
144
137
  return Promise.all(stylesToRender.map((asset) => _loadStyle(asset, root)));
145
138
  }
146
139
 
147
- function loadScriptAssets(assets, root = document.head) {
140
+ async function loadScriptAssets(assets, root = document.head) {
148
141
  const scriptElements = root.querySelectorAll('script');
149
142
  const scriptsToRender = assets.reduce((scripts, asset) => {
150
143
  const { source } = asset;
@@ -164,9 +157,16 @@ function loadScriptAssets(assets, root = document.head) {
164
157
  }
165
158
 
166
159
  if (!_asset.source) {
167
- console.warn(
168
- `Asset '${_asset.name}' is missing ES variant and could not be loaded.`
169
- );
160
+ const message = `Asset '${_asset.name}' is missing ES variant and could not be loaded.`;
161
+
162
+ if (!_asset.optional) {
163
+ const error = new Error(message);
164
+ error.asset = _asset;
165
+
166
+ throw error;
167
+ }
168
+
169
+ console.warn(message);
170
170
  return scripts;
171
171
  }
172
172
  }
package/lib/index.mjs CHANGED
@@ -48,22 +48,15 @@ function _loadScript(asset, root) {
48
48
  const scriptElement = root.querySelector(`script[src='${asset.source}']`);
49
49
 
50
50
  if (scriptElement) {
51
- if (
52
- (performance &&
53
- performance.getEntriesByName &&
54
- performance
55
- .getEntriesByName(scriptElement.src)
56
- .find(
57
- (entry) => entry.entryType === 'resource' && entry.responseEnd
58
- )) ||
59
- !performance ||
60
- !performance.getEntriesByName
61
- ) {
62
- setTimeout(resolve, 0);
63
- return;
51
+ if (!asset.test) {
52
+ resolve();
64
53
  }
65
54
 
66
55
  scriptElement.addEventListener('load', resolve);
56
+ scriptElement.addEventListener(
57
+ 'error',
58
+ asset.optional ? resolve : reject
59
+ );
67
60
  return;
68
61
  }
69
62
 
@@ -140,7 +133,7 @@ function loadStyleAssets(assets, root = document.head) {
140
133
  return Promise.all(stylesToRender.map((asset) => _loadStyle(asset, root)));
141
134
  }
142
135
 
143
- function loadScriptAssets(assets, root = document.head) {
136
+ async function loadScriptAssets(assets, root = document.head) {
144
137
  const scriptElements = root.querySelectorAll('script');
145
138
  const scriptsToRender = assets.reduce((scripts, asset) => {
146
139
  const { source } = asset;
@@ -160,9 +153,16 @@ function loadScriptAssets(assets, root = document.head) {
160
153
  }
161
154
 
162
155
  if (!_asset.source) {
163
- console.warn(
164
- `Asset '${_asset.name}' is missing ES variant and could not be loaded.`
165
- );
156
+ const message = `Asset '${_asset.name}' is missing ES variant and could not be loaded.`;
157
+
158
+ if (!_asset.optional) {
159
+ const error = new Error(message);
160
+ error.asset = _asset;
161
+
162
+ throw error;
163
+ }
164
+
165
+ console.warn(message);
166
166
  return scripts;
167
167
  }
168
168
  }
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([u(e,t),i(e,t)])},e.loadScriptAssets=u,e.loadStyleAssets=i,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=t.querySelector("script[src='".concat(e.source,"']"));if(o)return performance&&performance.getEntriesByName&&performance.getEntriesByName(o.src).find((function(e){return"resource"===e.entryType&&e.responseEnd}))||!performance||!performance.getEntriesByName?void setTimeout(r,0):void o.addEventListener("load",r);var s=document.createElement("script");if("script"===e.type){s.defer=!0,s.onload=r,s.onerror=e.optional?r:n,s.src=e.source;var i=e.attr;if(i&&Object.keys(i).length)for(var u in i){var c=i[u];"boolean"==typeof c?c?s.setAttribute(u,""):s.removeAttribute(u):s.setAttribute(u,c)}}else s.text=e.source,r();t.appendChild(s)}))}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 i(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 u(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:document.head,r=t.querySelectorAll("script"),s=e.reduce((function(e,t){var o=t.source,s=Object.assign({},t);return"script"!==s.type&&"inlineScript"!==s.type?e:o!==Object(o)||(o.es11&&n.isES11Supported()?s.source=o.es11:o.es9&&n.isES9Supported()?s.source=o.es9:s.source=o.es5,s.source)?(Array.from(r).reduce((function(e,t){return t.text===s.source||e}),!1)||s.test&&n.test(s.test)||e.push(s),e):(console.warn("Asset '".concat(s.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){function t(e,t,r,n,o,i,s){try{var u=e[i](s),c=u.value}catch(e){return void r(e)}u.done?t(c):Promise.resolve(c).then(n,o)}function r(e){return function(){var r=this,n=arguments;return new Promise((function(o,i){var s=e.apply(r,n);function u(e){t(s,o,i,u,c,"next",e)}function c(e){t(s,o,i,u,c,"throw",e)}u(void 0)}))}}var n,o;Object.defineProperty(e,"__esModule",{value:!0}),e.loadAssets=function(e,t){return Promise.all([a(e,t),c(e,t)])},e.loadScriptAssets=a,e.loadStyleAssets=c,e.testScript=void 0;var i={isES9Supported:function(){return void 0===n&&(n=i.test("return (() => { const o = { t: 1 }; return { ...o }; })() && (async () => ({}))()")&&!!Object.values),n},isES11Supported:function(){return void 0===o&&(o=i.test("return (() => { const o = { t: { q: true } }; return o?.t?.q && (o?.a?.q ?? true); })()")&&i.test('return typeof Promise.allSettled === "function"')&&i.test('return typeof globalThis !== "undefined"')&&i.test('return typeof 9007199254740991n === "bigint"')),o},test:function(e){try{return!!new Function(e)()}catch(e){return!1}}};function s(e,t){return new Promise((function(r,n){var o=t.querySelector("script[src='".concat(e.source,"']"));if(o)return e.test||r(),o.addEventListener("load",r),void o.addEventListener("error",e.optional?r:n);var i=document.createElement("script");if("script"===e.type){i.defer=!0,i.onload=r,i.onerror=e.optional?r:n,i.src=e.source;var s=e.attr;if(s&&Object.keys(s).length)for(var u in s){var c=s[u];"boolean"==typeof c?c?i.setAttribute(u,""):i.removeAttribute(u):i.setAttribute(u,c)}}else i.text=e.source,r();t.appendChild(i)}))}function u(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 i=document.createElement("style");i.innerHTML=e.source,t.appendChild(i),r()}}))}function c(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 u(e,t)})))}function a(e){return l.apply(this,arguments)}function l(){return l=r((function*(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:document.head,r=t.querySelectorAll("script"),n=e.reduce((function(e,t){var n=t.source,o=Object.assign({},t);if("script"!==o.type&&"inlineScript"!==o.type)return e;if(n===Object(n)&&(n.es11&&i.isES11Supported()?o.source=n.es11:n.es9&&i.isES9Supported()?o.source=n.es9:o.source=n.es5,!o.source)){var s="Asset '".concat(o.name,"' is missing ES variant and could not be loaded.");if(!o.optional){var u=new Error(s);throw u.asset=o,u}return console.warn(s),e}return Array.from(r).reduce((function(e,t){return t.text===o.source||e}),!1)||o.test&&i.test(o.test)||e.push(o),e}),[]);return Promise.all(n.map((function(e){return s(e,t)})))})),l.apply(this,arguments)}e.testScript=i}));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@merkur/integration",
3
- "version": "0.29.2",
3
+ "version": "0.30.0",
4
4
  "description": "Merkur module for easy integration with other apps.",
5
5
  "main": "lib/index",
6
6
  "module": "lib/index",
@@ -49,11 +49,11 @@
49
49
  },
50
50
  "homepage": "https://merkur.js.org/",
51
51
  "devDependencies": {
52
- "@merkur/core": "^0.29.1",
52
+ "@merkur/core": "^0.30.0",
53
53
  "rollup": "^2.70.2"
54
54
  },
55
55
  "peerDependencies": {
56
56
  "@merkur/core": "*"
57
57
  },
58
- "gitHead": "47cd30885b91c8159239d313a6ef4b7f78a09a41"
58
+ "gitHead": "13a0ac12f77f381b1d829cffe9b21d453c26ca7a"
59
59
  }