@qiankunjs/shared 0.0.1-rc.10 → 0.0.1-rc.12

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.
Files changed (53) hide show
  1. package/dist/cjs/assets-transpilers/index.js +1 -1
  2. package/dist/cjs/assets-transpilers/link.js +1 -1
  3. package/dist/cjs/assets-transpilers/script.js +7 -16
  4. package/dist/cjs/assets-transpilers/script.js.map +1 -1
  5. package/dist/cjs/assets-transpilers/types.d.ts +1 -3
  6. package/dist/cjs/assets-transpilers/types.js.map +1 -1
  7. package/dist/cjs/assets-transpilers/utils.js +1 -1
  8. package/dist/cjs/fetch-utils/makeFetchCacheable.d.ts +2 -0
  9. package/dist/cjs/fetch-utils/{wrapFetchWithCache.js → makeFetchCacheable.js} +10 -11
  10. package/dist/cjs/fetch-utils/makeFetchCacheable.js.map +1 -0
  11. package/dist/cjs/fetch-utils/makeFetchRetryable.d.ts +6 -0
  12. package/dist/cjs/fetch-utils/makeFetchRetryable.js +57 -0
  13. package/dist/cjs/fetch-utils/makeFetchRetryable.js.map +1 -0
  14. package/dist/cjs/fetch-utils/makeFetchThrowable.d.ts +7 -0
  15. package/dist/cjs/fetch-utils/makeFetchThrowable.js +46 -0
  16. package/dist/cjs/fetch-utils/makeFetchThrowable.js.map +1 -0
  17. package/dist/cjs/fetch-utils/miniLruCache.js +1 -1
  18. package/dist/cjs/fetch-utils/utils.d.ts +2 -0
  19. package/dist/cjs/fetch-utils/utils.js +10 -0
  20. package/dist/cjs/fetch-utils/utils.js.map +1 -0
  21. package/dist/cjs/index.d.ts +3 -1
  22. package/dist/cjs/index.js +26 -4
  23. package/dist/cjs/index.js.map +1 -1
  24. package/dist/cjs/module-resolver/index.js +1 -1
  25. package/dist/cjs/reporter/QiankunError.js +1 -1
  26. package/dist/cjs/utils.js +6 -7
  27. package/dist/cjs/utils.js.map +1 -1
  28. package/dist/esm/assets-transpilers/script.js +6 -15
  29. package/dist/esm/assets-transpilers/script.js.map +1 -1
  30. package/dist/esm/assets-transpilers/types.d.ts +1 -3
  31. package/dist/esm/assets-transpilers/types.js.map +1 -1
  32. package/dist/esm/fetch-utils/makeFetchCacheable.d.ts +2 -0
  33. package/dist/esm/fetch-utils/{wrapFetchWithCache.js → makeFetchCacheable.js} +8 -9
  34. package/dist/esm/fetch-utils/makeFetchCacheable.js.map +1 -0
  35. package/dist/esm/fetch-utils/makeFetchRetryable.d.ts +6 -0
  36. package/dist/esm/fetch-utils/makeFetchRetryable.js +50 -0
  37. package/dist/esm/fetch-utils/makeFetchRetryable.js.map +1 -0
  38. package/dist/esm/fetch-utils/makeFetchThrowable.d.ts +7 -0
  39. package/dist/esm/fetch-utils/makeFetchThrowable.js +39 -0
  40. package/dist/esm/fetch-utils/makeFetchThrowable.js.map +1 -0
  41. package/dist/esm/fetch-utils/utils.d.ts +2 -0
  42. package/dist/esm/fetch-utils/utils.js +4 -0
  43. package/dist/esm/fetch-utils/utils.js.map +1 -0
  44. package/dist/esm/index.d.ts +3 -1
  45. package/dist/esm/index.js +3 -1
  46. package/dist/esm/index.js.map +1 -1
  47. package/dist/esm/utils.js +4 -5
  48. package/dist/esm/utils.js.map +1 -1
  49. package/package.json +6 -2
  50. package/dist/cjs/fetch-utils/wrapFetchWithCache.d.ts +0 -3
  51. package/dist/cjs/fetch-utils/wrapFetchWithCache.js.map +0 -1
  52. package/dist/esm/fetch-utils/wrapFetchWithCache.d.ts +0 -3
  53. package/dist/esm/fetch-utils/wrapFetchWithCache.js.map +0 -1
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
@@ -1,12 +1,12 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.default = transpileScript;
8
8
  exports.preTranspile = void 0;
9
- var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
9
+ var _regeneratorRuntime2 = _interopRequireDefault(require("@babel/runtime/helpers/regeneratorRuntime"));
10
10
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
11
11
  var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
12
12
  var _utils = require("../utils");
@@ -51,9 +51,7 @@ var preTranspile = exports.preTranspile = function preTranspile(script, baseURI,
51
51
  };
52
52
  }
53
53
  if ((0, _utils2.isValidJavaScriptType)(type) && sandbox) {
54
- var rawNode = opts.rawNode;
55
- var scriptNode = script.textContent ? script : rawNode.childNodes[0];
56
- var code = scriptNode.textContent;
54
+ var code = script.textContent;
57
55
  if (code) {
58
56
  return {
59
57
  mode: _types.Mode.INLINE_CODE_IN_SANDBOX,
@@ -73,11 +71,6 @@ function transpileScript(script, baseURI, opts) {
73
71
  var srcAttribute = script.getAttribute('src');
74
72
  var sandbox = opts.sandbox,
75
73
  scriptTranspiledDeferred = opts.scriptTranspiledDeferred;
76
-
77
- // To prevent webpack from skipping reload logic and causing the js not to re-execute when a micro app is loaded multiple times, the data-webpack attribute of the script must be removed.
78
- // see https://github.com/webpack/webpack/blob/1f13ff9fe587e094df59d660b4611b1bd19aed4c/lib/runtime/LoadScriptRuntimeModule.js#L131-L136
79
- // FIXME We should determine whether the current micro application is being loaded for the second time. If not, this removal should not be performed.
80
- script.removeAttribute('data-webpack');
81
74
  try {
82
75
  var _preTranspile = preTranspile({
83
76
  src: srcAttribute || undefined,
@@ -104,9 +97,9 @@ function transpileScript(script, baseURI, opts) {
104
97
  }).then(function (res) {
105
98
  return res.text();
106
99
  }).then( /*#__PURE__*/function () {
107
- var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(code) {
100
+ var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee(code) {
108
101
  var prevScriptTranspiledDeferred, beforeScriptExecuteEvent, beforeExecutedListenerScript, codeFactory;
109
- return _regenerator.default.wrap(function _callee$(_context) {
102
+ return (0, _regeneratorRuntime2.default)().wrap(function _callee$(_context) {
110
103
  while (1) switch (_context.prev = _context.next) {
111
104
  case 0:
112
105
  prevScriptTranspiledDeferred = opts.prevScriptTranspiledDeferred; // add preprocess code to dispatch a CustomEvent before the script is executed
@@ -127,7 +120,7 @@ function transpileScript(script, baseURI, opts) {
127
120
  // HTMLScriptElement default fetchPriority is 'auto', we should set it to 'high' to make it execute earlier while it's not async script
128
121
  script.fetchPriority = 'high';
129
122
  case 9:
130
- // change the script src to the blob url to make it execute in the sandbox
123
+ // change the script src to the blob url to make it executed in the sandbox
131
124
  script.src = URL.createObjectURL(new Blob([codeFactory], {
132
125
  type: 'text/javascript'
133
126
  }));
@@ -162,10 +155,8 @@ function transpileScript(script, baseURI, opts) {
162
155
  }
163
156
  case _types.Mode.INLINE_CODE_IN_SANDBOX:
164
157
  {
165
- var rawNode = opts.rawNode;
166
- var scriptNode = script.textContent ? script : rawNode.childNodes[0];
167
158
  var code = result.code;
168
- scriptNode.textContent = sandbox.makeEvaluateFactory(code);
159
+ script.textContent = sandbox.makeEvaluateFactory(code);
169
160
  // mark the script have consumed
170
161
  script.dataset.consumed = 'true';
171
162
  scriptTranspiledDeferred === null || scriptTranspiledDeferred === void 0 || scriptTranspiledDeferred.resolve();
@@ -1 +1 @@
1
- {"version":3,"names":["_utils","require","_types","_utils2","getCredentials","crossOrigin","undefined","preTranspile","exports","script","baseURI","opts","sandbox","moduleResolver","src","type","entireUrl","getEntireUrl","matchedScript","mode","Mode","REUSED_DEP_IN_SANDBOX","REUSED_DEP","result","_objectSpread2","default","REMOTE_ASSETS_IN_SANDBOX","REMOTE_ASSETS","isValidJavaScriptType","rawNode","scriptNode","textContent","childNodes","code","INLINE_CODE_IN_SANDBOX","NONE","transpileScript","srcAttribute","getAttribute","scriptTranspiledDeferred","removeAttribute","_preTranspile","fetch","dataset","syncMode","hasAttribute","priority","credentials","then","res","text","_ref","_asyncToGenerator2","_regenerator","mark","_callee","prevScriptTranspiledDeferred","beforeScriptExecuteEvent","beforeExecutedListenerScript","codeFactory","wrap","_callee$","_context","prev","next","concat","makeEvaluateFactory","isSettled","waitUntilSettled","promise","fetchPriority","URL","createObjectURL","Blob","window","addEventListener","listener","evt","_ref2","detail","s","revokeObjectURL","consumed","removeEventListener","resolve","stop","_x","apply","arguments","catch","e","reject","url","version","createReusingObjectUrl","onScriptComplete","prevListener","event","onload","onerror","call","bind"],"sources":["../../../src/assets-transpilers/script.ts"],"sourcesContent":["/**\n * @author Kuitos\n * @since 2023-03-16\n */\n\nimport type { MatchResult } from '../module-resolver';\nimport { getEntireUrl, waitUntilSettled } from '../utils';\nimport type { AssetsTranspilerOpts, ScriptTranspilerOpts } from './types';\nimport { Mode } from './types';\nimport { createReusingObjectUrl, isValidJavaScriptType } from './utils';\n\nconst getCredentials = (crossOrigin: string | null): RequestInit['credentials'] | undefined => {\n switch (crossOrigin) {\n case 'anonymous':\n return 'same-origin';\n case 'use-credentials':\n return 'include';\n default:\n return undefined;\n }\n};\n\ntype PreTranspileResult =\n | { mode: Mode.REMOTE_ASSETS_IN_SANDBOX | Mode.REMOTE_ASSETS; result: { src: string } }\n | { mode: Mode.REUSED_DEP_IN_SANDBOX | Mode.REUSED_DEP; result: { src: string } & MatchResult }\n | { mode: Mode.INLINE_CODE_IN_SANDBOX; result: { code: string } }\n | { mode: Mode.NONE; result?: never };\n\nexport const preTranspile = (\n script: Partial<Pick<HTMLScriptElement, 'src' | 'type' | 'textContent'>>,\n baseURI: string,\n opts: AssetsTranspilerOpts,\n): PreTranspileResult => {\n const { sandbox, moduleResolver } = opts;\n\n const { src, type } = script;\n\n if (src) {\n const entireUrl = getEntireUrl(src, baseURI);\n const matchedScript = moduleResolver?.(entireUrl);\n if (matchedScript) {\n return {\n mode: sandbox ? Mode.REUSED_DEP_IN_SANDBOX : Mode.REUSED_DEP,\n result: { src: entireUrl, ...matchedScript },\n };\n }\n\n return {\n mode: sandbox ? Mode.REMOTE_ASSETS_IN_SANDBOX : Mode.REMOTE_ASSETS,\n result: { src: entireUrl },\n };\n }\n\n if (isValidJavaScriptType(type) && sandbox) {\n const rawNode = opts.rawNode as HTMLScriptElement;\n const scriptNode = script.textContent ? script : rawNode.childNodes[0];\n\n const code = scriptNode.textContent;\n if (code) {\n return {\n mode: Mode.INLINE_CODE_IN_SANDBOX,\n result: {\n code,\n },\n };\n }\n }\n\n return { mode: Mode.NONE };\n};\n\nexport default function transpileScript(\n script: HTMLScriptElement,\n baseURI: string,\n opts: ScriptTranspilerOpts,\n): HTMLScriptElement {\n // Can't use script.src directly, because it will be resolved to absolute path by browser with Node.baseURI\n // Such as <script src=\"./foo.js\"></script> will be resolved to http://localhost:8000/foo.js while read script.src\n const srcAttribute = script.getAttribute('src');\n const { sandbox, scriptTranspiledDeferred } = opts;\n\n // To prevent webpack from skipping reload logic and causing the js not to re-execute when a micro app is loaded multiple times, the data-webpack attribute of the script must be removed.\n // see https://github.com/webpack/webpack/blob/1f13ff9fe587e094df59d660b4611b1bd19aed4c/lib/runtime/LoadScriptRuntimeModule.js#L131-L136\n // FIXME We should determine whether the current micro application is being loaded for the second time. If not, this removal should not be performed.\n script.removeAttribute('data-webpack');\n\n try {\n const { mode, result } = preTranspile(\n {\n src: srcAttribute || undefined,\n type: script.type,\n textContent: script.textContent,\n },\n baseURI,\n opts,\n );\n\n switch (mode) {\n case Mode.REMOTE_ASSETS_IN_SANDBOX: {\n const { fetch } = opts;\n const { src } = result;\n\n // We must remove script src to avoid self execution as we need to fetch the script content and transpile it\n script.removeAttribute('src');\n script.dataset.src = src;\n\n const syncMode = !script.hasAttribute('async');\n const priority: Priority = syncMode ? 'high' : 'low';\n const credentials = getCredentials(script.crossOrigin);\n\n void fetch(src, { credentials, priority })\n .then((res) => res.text())\n .then(async (code) => {\n const { prevScriptTranspiledDeferred } = opts;\n\n // add preprocess code to dispatch a CustomEvent before the script is executed\n const beforeScriptExecuteEvent = 'q:bse';\n const beforeExecutedListenerScript = `;(function(){var s=document.currentScript;var e=new CustomEvent('${beforeScriptExecuteEvent}',{detail:{s:s}});window.dispatchEvent(e);})();`;\n\n const codeFactory = beforeExecutedListenerScript + sandbox!.makeEvaluateFactory(code, src);\n\n if (syncMode) {\n // if it's a sync script and there is a previous sync script, we should wait it until loaded to consistent with the browser behavior\n if (prevScriptTranspiledDeferred && !prevScriptTranspiledDeferred.isSettled()) {\n await waitUntilSettled(prevScriptTranspiledDeferred.promise);\n }\n\n // HTMLScriptElement default fetchPriority is 'auto', we should set it to 'high' to make it execute earlier while it's not async script\n script.fetchPriority = 'high';\n }\n\n // change the script src to the blob url to make it execute in the sandbox\n script.src = URL.createObjectURL(new Blob([codeFactory], { type: 'text/javascript' }));\n\n window.addEventListener(beforeScriptExecuteEvent, function listener(evt: CustomEventInit) {\n const { s } = evt.detail as { s: HTMLScriptElement };\n if (s === script) {\n URL.revokeObjectURL(s.src);\n // change the script src to the original src while the script is executing\n // thus the script behavior can be more consistent with the native browser logic\n s.src = src;\n s.dataset.consumed = 'true';\n delete s.dataset.src;\n\n window.removeEventListener(beforeScriptExecuteEvent, listener);\n }\n });\n\n scriptTranspiledDeferred?.resolve();\n })\n .catch((e) => {\n scriptTranspiledDeferred?.reject();\n throw e;\n });\n\n return script;\n }\n\n case Mode.INLINE_CODE_IN_SANDBOX: {\n const rawNode = opts.rawNode as HTMLScriptElement;\n const scriptNode = script.textContent ? script : rawNode.childNodes[0];\n const { code } = result;\n\n scriptNode.textContent = sandbox!.makeEvaluateFactory(code);\n // mark the script have consumed\n script.dataset.consumed = 'true';\n\n scriptTranspiledDeferred?.resolve();\n\n return script;\n }\n\n case Mode.REUSED_DEP_IN_SANDBOX:\n case Mode.REUSED_DEP: {\n const { url, version, src } = result;\n\n script.dataset.src = src;\n script.dataset.version = version;\n\n const syncMode = !script.getAttribute('async');\n // HTMLScriptElement default fetchPriority is 'auto', we should set it to 'high' to make it execute earlier while it's not async script\n if (syncMode) {\n script.fetchPriority = 'high';\n }\n\n // When the script hits the dependency reuse logic, the current script is not executed, and an empty script is returned directly\n script.src = createReusingObjectUrl(src, url, 'text/javascript');\n\n const onScriptComplete = (\n prevListener: typeof HTMLScriptElement.prototype.onload | typeof HTMLScriptElement.prototype.onerror,\n event: Event,\n ) => {\n script.onload = script.onerror = null;\n\n script.src = src;\n script.dataset.consumed = 'true';\n script.dataset.src = url;\n\n prevListener?.call(script, event);\n };\n script.onload = onScriptComplete.bind(null, script.onload);\n script.onerror = onScriptComplete.bind(null, script.onerror) as typeof HTMLScriptElement.prototype.onerror;\n\n scriptTranspiledDeferred?.resolve();\n\n return script;\n }\n\n case Mode.REMOTE_ASSETS:\n case Mode.NONE:\n default: {\n if (result?.src) {\n script.src = result.src;\n }\n\n scriptTranspiledDeferred?.resolve();\n\n return script;\n }\n }\n } catch (e) {\n scriptTranspiledDeferred?.reject(e);\n throw e;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["_utils","require","_types","_utils2","getCredentials","crossOrigin","undefined","preTranspile","exports","script","baseURI","opts","sandbox","moduleResolver","src","type","entireUrl","getEntireUrl","matchedScript","mode","Mode","REUSED_DEP_IN_SANDBOX","REUSED_DEP","result","_objectSpread2","default","REMOTE_ASSETS_IN_SANDBOX","REMOTE_ASSETS","isValidJavaScriptType","code","textContent","INLINE_CODE_IN_SANDBOX","NONE","transpileScript","srcAttribute","getAttribute","scriptTranspiledDeferred","_preTranspile","fetch","removeAttribute","dataset","syncMode","hasAttribute","priority","credentials","then","res","text","_ref","_asyncToGenerator2","_regeneratorRuntime2","mark","_callee","prevScriptTranspiledDeferred","beforeScriptExecuteEvent","beforeExecutedListenerScript","codeFactory","wrap","_callee$","_context","prev","next","concat","makeEvaluateFactory","isSettled","waitUntilSettled","promise","fetchPriority","URL","createObjectURL","Blob","window","addEventListener","listener","evt","_ref2","detail","s","revokeObjectURL","consumed","removeEventListener","resolve","stop","_x","apply","arguments","catch","e","reject","url","version","createReusingObjectUrl","onScriptComplete","prevListener","event","onload","onerror","call","bind"],"sources":["../../../src/assets-transpilers/script.ts"],"sourcesContent":["/**\n * @author Kuitos\n * @since 2023-03-16\n */\n\nimport type { MatchResult } from '../module-resolver';\nimport { getEntireUrl, waitUntilSettled } from '../utils';\nimport type { AssetsTranspilerOpts, ScriptTranspilerOpts } from './types';\nimport { Mode } from './types';\nimport { createReusingObjectUrl, isValidJavaScriptType } from './utils';\n\nconst getCredentials = (crossOrigin: string | null): RequestInit['credentials'] | undefined => {\n switch (crossOrigin) {\n case 'anonymous':\n return 'same-origin';\n case 'use-credentials':\n return 'include';\n default:\n return undefined;\n }\n};\n\ntype PreTranspileResult =\n | { mode: Mode.REMOTE_ASSETS_IN_SANDBOX | Mode.REMOTE_ASSETS; result: { src: string } }\n | { mode: Mode.REUSED_DEP_IN_SANDBOX | Mode.REUSED_DEP; result: { src: string } & MatchResult }\n | { mode: Mode.INLINE_CODE_IN_SANDBOX; result: { code: string } }\n | { mode: Mode.NONE; result?: never };\n\nexport const preTranspile = (\n script: Partial<Pick<HTMLScriptElement, 'src' | 'type' | 'textContent'>>,\n baseURI: string,\n opts: AssetsTranspilerOpts,\n): PreTranspileResult => {\n const { sandbox, moduleResolver } = opts;\n\n const { src, type } = script;\n\n if (src) {\n const entireUrl = getEntireUrl(src, baseURI);\n const matchedScript = moduleResolver?.(entireUrl);\n if (matchedScript) {\n return {\n mode: sandbox ? Mode.REUSED_DEP_IN_SANDBOX : Mode.REUSED_DEP,\n result: { src: entireUrl, ...matchedScript },\n };\n }\n\n return {\n mode: sandbox ? Mode.REMOTE_ASSETS_IN_SANDBOX : Mode.REMOTE_ASSETS,\n result: { src: entireUrl },\n };\n }\n\n if (isValidJavaScriptType(type) && sandbox) {\n const code = script.textContent;\n if (code) {\n return {\n mode: Mode.INLINE_CODE_IN_SANDBOX,\n result: {\n code,\n },\n };\n }\n }\n\n return { mode: Mode.NONE };\n};\n\nexport default function transpileScript(\n script: HTMLScriptElement,\n baseURI: string,\n opts: ScriptTranspilerOpts,\n): HTMLScriptElement {\n // Can't use script.src directly, because it will be resolved to absolute path by browser with Node.baseURI\n // Such as <script src=\"./foo.js\"></script> will be resolved to http://localhost:8000/foo.js while read script.src\n const srcAttribute = script.getAttribute('src');\n const { sandbox, scriptTranspiledDeferred } = opts;\n\n try {\n const { mode, result } = preTranspile(\n {\n src: srcAttribute || undefined,\n type: script.type,\n textContent: script.textContent,\n },\n baseURI,\n opts,\n );\n\n switch (mode) {\n case Mode.REMOTE_ASSETS_IN_SANDBOX: {\n const { fetch } = opts;\n const { src } = result;\n\n // We must remove script src to avoid self execution as we need to fetch the script content and transpile it\n script.removeAttribute('src');\n script.dataset.src = src;\n\n const syncMode = !script.hasAttribute('async');\n const priority: Priority = syncMode ? 'high' : 'low';\n const credentials = getCredentials(script.crossOrigin);\n\n void fetch(src, { credentials, priority })\n .then((res) => res.text())\n .then(async (code) => {\n const { prevScriptTranspiledDeferred } = opts;\n\n // add preprocess code to dispatch a CustomEvent before the script is executed\n const beforeScriptExecuteEvent = 'q:bse';\n const beforeExecutedListenerScript = `;(function(){var s=document.currentScript;var e=new CustomEvent('${beforeScriptExecuteEvent}',{detail:{s:s}});window.dispatchEvent(e);})();`;\n\n const codeFactory = beforeExecutedListenerScript + sandbox!.makeEvaluateFactory(code, src);\n\n if (syncMode) {\n // if it's a sync script and there is a previous sync script(mainly there are multiple defer scripts), we should wait it until loaded to consistent with the browser behavior\n if (prevScriptTranspiledDeferred && !prevScriptTranspiledDeferred.isSettled()) {\n await waitUntilSettled(prevScriptTranspiledDeferred.promise);\n }\n\n // HTMLScriptElement default fetchPriority is 'auto', we should set it to 'high' to make it execute earlier while it's not async script\n script.fetchPriority = 'high';\n }\n\n // change the script src to the blob url to make it executed in the sandbox\n script.src = URL.createObjectURL(new Blob([codeFactory], { type: 'text/javascript' }));\n\n window.addEventListener(beforeScriptExecuteEvent, function listener(evt: CustomEventInit) {\n const { s } = evt.detail as { s: HTMLScriptElement };\n if (s === script) {\n URL.revokeObjectURL(s.src);\n // change the script src to the original src while the script is executing\n // thus the script behavior can be more consistent with the native browser logic\n s.src = src;\n s.dataset.consumed = 'true';\n delete s.dataset.src;\n\n window.removeEventListener(beforeScriptExecuteEvent, listener);\n }\n });\n\n scriptTranspiledDeferred?.resolve();\n })\n .catch((e) => {\n scriptTranspiledDeferred?.reject();\n throw e;\n });\n\n return script;\n }\n\n case Mode.INLINE_CODE_IN_SANDBOX: {\n const { code } = result;\n script.textContent = sandbox!.makeEvaluateFactory(code);\n // mark the script have consumed\n script.dataset.consumed = 'true';\n\n scriptTranspiledDeferred?.resolve();\n\n return script;\n }\n\n case Mode.REUSED_DEP_IN_SANDBOX:\n case Mode.REUSED_DEP: {\n const { url, version, src } = result;\n\n script.dataset.src = src;\n script.dataset.version = version;\n\n const syncMode = !script.getAttribute('async');\n // HTMLScriptElement default fetchPriority is 'auto', we should set it to 'high' to make it execute earlier while it's not async script\n if (syncMode) {\n script.fetchPriority = 'high';\n }\n\n // When the script hits the dependency reuse logic, the current script is not executed, and an empty script is returned directly\n script.src = createReusingObjectUrl(src, url, 'text/javascript');\n\n const onScriptComplete = (\n prevListener: typeof HTMLScriptElement.prototype.onload | typeof HTMLScriptElement.prototype.onerror,\n event: Event,\n ) => {\n script.onload = script.onerror = null;\n\n script.src = src;\n script.dataset.consumed = 'true';\n script.dataset.src = url;\n\n prevListener?.call(script, event);\n };\n script.onload = onScriptComplete.bind(null, script.onload);\n script.onerror = onScriptComplete.bind(null, script.onerror) as typeof HTMLScriptElement.prototype.onerror;\n\n scriptTranspiledDeferred?.resolve();\n\n return script;\n }\n\n case Mode.REMOTE_ASSETS:\n case Mode.NONE:\n default: {\n if (result?.src) {\n script.src = result.src;\n }\n\n scriptTranspiledDeferred?.resolve();\n\n return script;\n }\n }\n } catch (e) {\n scriptTranspiledDeferred?.reject(e);\n throw e;\n }\n}\n"],"mappings":"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"}
@@ -11,9 +11,7 @@ export type BaseTranspilerOpts = BaseLoaderOpts & {
11
11
  makeEvaluateFactory(source: string, sourceURL?: string): string;
12
12
  };
13
13
  };
14
- export type AssetsTranspilerOpts = BaseTranspilerOpts & {
15
- rawNode: Node;
16
- };
14
+ export type AssetsTranspilerOpts = BaseTranspilerOpts;
17
15
  export type NodeTransformer = <T extends Node>(node: T, opts: Omit<AssetsTranspilerOpts, 'moduleResolver'>) => T;
18
16
  export type ScriptTranspilerOpts = AssetsTranspilerOpts & ({
19
17
  prevScriptTranspiledDeferred: Deferred<void>;
@@ -1 +1 @@
1
- {"version":3,"names":["Mode","exports"],"sources":["../../../src/assets-transpilers/types.ts"],"sourcesContent":["/**\n * @author Kuitos\n * @since 2023-08-26\n */\nimport type { BaseLoaderOpts } from '../common';\nimport type { MatchResult } from '../module-resolver';\nimport type { Deferred } from '../utils';\n\nexport type BaseTranspilerOpts = BaseLoaderOpts & {\n moduleResolver?: (url: string) => MatchResult | undefined;\n sandbox?: {\n makeEvaluateFactory(source: string, sourceURL?: string): string;\n };\n};\n\nexport type AssetsTranspilerOpts = BaseTranspilerOpts & { rawNode: Node };\n\nexport type NodeTransformer = <T extends Node>(node: T, opts: Omit<AssetsTranspilerOpts, 'moduleResolver'>) => T;\n\nexport type ScriptTranspilerOpts = AssetsTranspilerOpts &\n (\n | { prevScriptTranspiledDeferred: Deferred<void>; scriptTranspiledDeferred: Deferred<void> }\n | { prevScriptTranspiledDeferred?: undefined; scriptTranspiledDeferred?: undefined }\n );\n\nexport enum Mode {\n REMOTE_ASSETS_IN_SANDBOX = 'RAIS',\n REMOTE_ASSETS = 'RA',\n REUSED_DEP_IN_SANDBOX = 'RDIS',\n REUSED_DEP = 'RD',\n INLINE_CODE_IN_SANDBOX = 'ICIS',\n NONE = 'NONE',\n}\n"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;AAHA,IAyBYA,IAAI,GAAAC,OAAA,CAAAD,IAAA,0BAAJA,IAAI;EAAJA,IAAI;EAAJA,IAAI;EAAJA,IAAI;EAAJA,IAAI;EAAJA,IAAI;EAAJA,IAAI;EAAA,OAAJA,IAAI;AAAA"}
1
+ {"version":3,"names":["Mode","exports"],"sources":["../../../src/assets-transpilers/types.ts"],"sourcesContent":["/**\n * @author Kuitos\n * @since 2023-08-26\n */\nimport type { BaseLoaderOpts } from '../common';\nimport type { MatchResult } from '../module-resolver';\nimport type { Deferred } from '../utils';\n\nexport type BaseTranspilerOpts = BaseLoaderOpts & {\n moduleResolver?: (url: string) => MatchResult | undefined;\n sandbox?: {\n makeEvaluateFactory(source: string, sourceURL?: string): string;\n };\n};\n\nexport type AssetsTranspilerOpts = BaseTranspilerOpts;\n\nexport type NodeTransformer = <T extends Node>(node: T, opts: Omit<AssetsTranspilerOpts, 'moduleResolver'>) => T;\n\nexport type ScriptTranspilerOpts = AssetsTranspilerOpts &\n (\n | { prevScriptTranspiledDeferred: Deferred<void>; scriptTranspiledDeferred: Deferred<void> }\n | { prevScriptTranspiledDeferred?: undefined; scriptTranspiledDeferred?: undefined }\n );\n\nexport enum Mode {\n REMOTE_ASSETS_IN_SANDBOX = 'RAIS',\n REMOTE_ASSETS = 'RA',\n REUSED_DEP_IN_SANDBOX = 'RDIS',\n REUSED_DEP = 'RD',\n INLINE_CODE_IN_SANDBOX = 'ICIS',\n NONE = 'NONE',\n}\n"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;AAHA,IAyBYA,IAAI,GAAAC,OAAA,CAAAD,IAAA,0BAAJA,IAAI;EAAJA,IAAI;EAAJA,IAAI;EAAJA,IAAI;EAAJA,IAAI;EAAJA,IAAI;EAAJA,IAAI;EAAA,OAAJA,IAAI;AAAA"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
@@ -0,0 +1,2 @@
1
+ import { type Fetch } from './utils';
2
+ export declare const makeFetchCacheable: (fetch: Fetch) => Fetch;
@@ -1,17 +1,19 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.wrapFetchWithCache = void 0;
8
- var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
7
+ exports.makeFetchCacheable = void 0;
8
+ var _regeneratorRuntime2 = _interopRequireDefault(require("@babel/runtime/helpers/regeneratorRuntime"));
9
9
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
10
10
  var _once2 = _interopRequireDefault(require("lodash/once"));
11
11
  var _miniLruCache = require("./miniLruCache");
12
+ var _utils = require("./utils");
12
13
  /**
13
14
  * @author Kuitos
14
15
  * @since 2023-11-06
16
+ * wrap fetch with lru cache
15
17
  */
16
18
 
17
19
  var getCacheKey = function getCacheKey(input) {
@@ -20,18 +22,15 @@ var getCacheKey = function getCacheKey(input) {
20
22
  var getGlobalCache = (0, _once2.default)(function () {
21
23
  return new _miniLruCache.LRUCache(50);
22
24
  });
23
- var isValidaResponse = function isValidaResponse(status) {
24
- return status >= 200 && status < 400;
25
- };
26
- var wrapFetchWithCache = exports.wrapFetchWithCache = function wrapFetchWithCache(fetch) {
25
+ var makeFetchCacheable = exports.makeFetchCacheable = function makeFetchCacheable(fetch) {
27
26
  var lruCache = getGlobalCache();
28
27
  var cachedFetch = function cachedFetch(input, init) {
29
28
  var fetchInput = input;
30
29
  var cacheKey = getCacheKey(fetchInput);
31
30
  var wrapFetchPromise = /*#__PURE__*/function () {
32
- var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(promise) {
31
+ var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee(promise) {
33
32
  var res, status;
34
- return _regenerator.default.wrap(function _callee$(_context) {
33
+ return (0, _regeneratorRuntime2.default)().wrap(function _callee$(_context) {
35
34
  while (1) switch (_context.prev = _context.next) {
36
35
  case 0:
37
36
  _context.prev = 0;
@@ -40,7 +39,7 @@ var wrapFetchWithCache = exports.wrapFetchWithCache = function wrapFetchWithCach
40
39
  case 3:
41
40
  res = _context.sent;
42
41
  status = res.status;
43
- if (!isValidaResponse(status)) {
42
+ if (!(0, _utils.isValidResponse)(status)) {
44
43
  lruCache.delete(cacheKey);
45
44
  }
46
45
 
@@ -71,4 +70,4 @@ var wrapFetchWithCache = exports.wrapFetchWithCache = function wrapFetchWithCach
71
70
  };
72
71
  return cachedFetch;
73
72
  };
74
- //# sourceMappingURL=wrapFetchWithCache.js.map
73
+ //# sourceMappingURL=makeFetchCacheable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_miniLruCache","require","_utils","getCacheKey","input","url","href","getGlobalCache","_once2","default","LRUCache","makeFetchCacheable","exports","fetch","lruCache","cachedFetch","init","fetchInput","cacheKey","wrapFetchPromise","_ref","_asyncToGenerator2","_regeneratorRuntime2","mark","_callee","promise","res","status","wrap","_callee$","_context","prev","next","sent","isValidResponse","delete","abrupt","clone","t0","stop","_x","apply","arguments","cachedFetchPromise","get","fetchPromise","set"],"sources":["../../../src/fetch-utils/makeFetchCacheable.ts"],"sourcesContent":["/**\n * @author Kuitos\n * @since 2023-11-06\n * wrap fetch with lru cache\n */\nimport { once } from 'lodash';\nimport { LRUCache } from './miniLruCache';\nimport { type Fetch, isValidResponse } from './utils';\n\nconst getCacheKey = (input: Parameters<Fetch>[0]): string => {\n return typeof input === 'string' ? input : 'url' in input ? input.url : input.href;\n};\n\nconst getGlobalCache = once(() => {\n return new LRUCache<string, Promise<Response>>(50);\n});\n\nexport const makeFetchCacheable: (fetch: Fetch) => Fetch = (fetch) => {\n const lruCache = getGlobalCache();\n\n const cachedFetch: Fetch = (input, init) => {\n const fetchInput = input;\n const cacheKey = getCacheKey(fetchInput);\n const wrapFetchPromise = async (promise: Promise<Response>): Promise<Response> => {\n try {\n const res = await promise;\n\n const { status } = res;\n if (!isValidResponse(status)) {\n lruCache.delete(cacheKey);\n }\n\n // must clone the response as one response body can only be read once as a stream\n return res.clone();\n } catch (e) {\n lruCache.delete(cacheKey);\n throw e;\n }\n };\n\n const cachedFetchPromise = lruCache.get(cacheKey);\n if (cachedFetchPromise) {\n return wrapFetchPromise(cachedFetchPromise);\n }\n\n const fetchPromise = fetch(fetchInput, init);\n lruCache.set(cacheKey, fetchPromise);\n\n return wrapFetchPromise(fetchPromise);\n };\n\n return cachedFetch;\n};\n"],"mappings":";;;;;;;;;;AAMA,IAAAA,aAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AAPA;AACA;AACA;AACA;AACA;;AAKA,IAAME,WAAW,GAAG,SAAdA,WAAWA,CAAIC,KAA2B,EAAa;EAC3D,OAAO,OAAOA,KAAK,KAAK,QAAQ,GAAGA,KAAK,GAAG,KAAK,IAAIA,KAAK,GAAGA,KAAK,CAACC,GAAG,GAAGD,KAAK,CAACE,IAAI;AACpF,CAAC;AAED,IAAMC,cAAc,GAAG,IAAAC,MAAA,CAAAC,OAAA,EAAK,YAAM;EAChC,OAAO,IAAIC,sBAAQ,CAA4B,EAAE,CAAC;AACpD,CAAC,CAAC;AAEK,IAAMC,kBAA2C,GAAAC,OAAA,CAAAD,kBAAA,GAAG,SAA9CA,kBAA2CA,CAAIE,KAAK,EAAK;EACpE,IAAMC,QAAQ,GAAGP,cAAc,CAAC,CAAC;EAEjC,IAAMQ,WAAkB,GAAG,SAArBA,WAAkBA,CAAIX,KAAK,EAAEY,IAAI,EAAK;IAC1C,IAAMC,UAAU,GAAGb,KAAK;IACxB,IAAMc,QAAQ,GAAGf,WAAW,CAACc,UAAU,CAAC;IACxC,IAAME,gBAAgB;MAAA,IAAAC,IAAA,OAAAC,kBAAA,CAAAZ,OAAA,oBAAAa,oBAAA,CAAAb,OAAA,IAAAc,IAAA,CAAG,SAAAC,QAAOC,OAA0B;QAAA,IAAAC,GAAA,EAAAC,MAAA;QAAA,WAAAL,oBAAA,CAAAb,OAAA,IAAAmB,IAAA,UAAAC,SAAAC,QAAA;UAAA,kBAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAAE,IAAA;YAAA;cAAAF,QAAA,CAAAC,IAAA;cAAAD,QAAA,CAAAE,IAAA;cAAA,OAEpCP,OAAO;YAAA;cAAnBC,GAAG,GAAAI,QAAA,CAAAG,IAAA;cAEDN,MAAM,GAAKD,GAAG,CAAdC,MAAM;cACd,IAAI,CAAC,IAAAO,sBAAe,EAACP,MAAM,CAAC,EAAE;gBAC5Bb,QAAQ,CAACqB,MAAM,CAACjB,QAAQ,CAAC;cAC3B;;cAEA;cAAA,OAAAY,QAAA,CAAAM,MAAA,WACOV,GAAG,CAACW,KAAK,CAAC,CAAC;YAAA;cAAAP,QAAA,CAAAC,IAAA;cAAAD,QAAA,CAAAQ,EAAA,GAAAR,QAAA;cAElBhB,QAAQ,CAACqB,MAAM,CAACjB,QAAQ,CAAC;cAAC,MAAAY,QAAA,CAAAQ,EAAA;YAAA;YAAA;cAAA,OAAAR,QAAA,CAAAS,IAAA;UAAA;QAAA,GAAAf,OAAA;MAAA,CAG7B;MAAA,gBAfKL,gBAAgBA,CAAAqB,EAAA;QAAA,OAAApB,IAAA,CAAAqB,KAAA,OAAAC,SAAA;MAAA;IAAA,GAerB;IAED,IAAMC,kBAAkB,GAAG7B,QAAQ,CAAC8B,GAAG,CAAC1B,QAAQ,CAAC;IACjD,IAAIyB,kBAAkB,EAAE;MACtB,OAAOxB,gBAAgB,CAACwB,kBAAkB,CAAC;IAC7C;IAEA,IAAME,YAAY,GAAGhC,KAAK,CAACI,UAAU,EAAED,IAAI,CAAC;IAC5CF,QAAQ,CAACgC,GAAG,CAAC5B,QAAQ,EAAE2B,YAAY,CAAC;IAEpC,OAAO1B,gBAAgB,CAAC0B,YAAY,CAAC;EACvC,CAAC;EAED,OAAO9B,WAAW;AACpB,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @author Kuitos
3
+ * @since 2024-03-05
4
+ */
5
+ import { type Fetch } from './utils';
6
+ export declare const makeFetchRetryable: (fetch: Fetch, retryTimes?: number) => Fetch;
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.makeFetchRetryable = void 0;
8
+ var _regeneratorRuntime2 = _interopRequireDefault(require("@babel/runtime/helpers/regeneratorRuntime"));
9
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
10
+ /**
11
+ * @author Kuitos
12
+ * @since 2024-03-05
13
+ */
14
+
15
+ var makeFetchRetryable = exports.makeFetchRetryable = function makeFetchRetryable(fetch) {
16
+ var retryTimes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
17
+ var retryCount = 0;
18
+ var fetchWithRetryable = /*#__PURE__*/function () {
19
+ var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee(input, init) {
20
+ return (0, _regeneratorRuntime2.default)().wrap(function _callee$(_context) {
21
+ while (1) switch (_context.prev = _context.next) {
22
+ case 0:
23
+ _context.prev = 0;
24
+ _context.next = 3;
25
+ return fetch(input, init);
26
+ case 3:
27
+ return _context.abrupt("return", _context.sent);
28
+ case 6:
29
+ _context.prev = 6;
30
+ _context.t0 = _context["catch"](0);
31
+ if (!(retryCount < retryTimes)) {
32
+ _context.next = 14;
33
+ break;
34
+ }
35
+ retryCount++;
36
+ if (process.env.NODE_ENV === 'development') {
37
+ console.debug("[qiankun] fetch retrying --> url: ".concat(typeof input === 'string' ? input : 'url' in input ? input.url : input.href, " , time: ").concat(retryCount));
38
+ }
39
+ _context.next = 13;
40
+ return fetchWithRetryable(input, init);
41
+ case 13:
42
+ return _context.abrupt("return", _context.sent);
43
+ case 14:
44
+ throw _context.t0;
45
+ case 15:
46
+ case "end":
47
+ return _context.stop();
48
+ }
49
+ }, _callee, null, [[0, 6]]);
50
+ }));
51
+ return function fetchWithRetryable(_x, _x2) {
52
+ return _ref.apply(this, arguments);
53
+ };
54
+ }();
55
+ return fetchWithRetryable;
56
+ };
57
+ //# sourceMappingURL=makeFetchRetryable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["makeFetchRetryable","exports","fetch","retryTimes","arguments","length","undefined","retryCount","fetchWithRetryable","_ref","_asyncToGenerator2","default","_regeneratorRuntime2","mark","_callee","input","init","wrap","_callee$","_context","prev","next","abrupt","sent","t0","process","env","NODE_ENV","console","debug","concat","url","href","stop","_x","_x2","apply"],"sources":["../../../src/fetch-utils/makeFetchRetryable.ts"],"sourcesContent":["/**\n * @author Kuitos\n * @since 2024-03-05\n */\n\nimport { type Fetch } from './utils';\n\nexport const makeFetchRetryable: (fetch: Fetch, retryTimes?: number) => Fetch = (fetch, retryTimes = 1) => {\n let retryCount = 0;\n\n const fetchWithRetryable: Fetch = async (input, init) => {\n try {\n return await fetch(input, init);\n } catch (e) {\n if (retryCount < retryTimes) {\n retryCount++;\n\n if (process.env.NODE_ENV === 'development') {\n console.debug(\n `[qiankun] fetch retrying --> url: ${\n typeof input === 'string' ? input : 'url' in input ? input.url : input.href\n } , time: ${retryCount}`,\n );\n }\n\n return await fetchWithRetryable(input, init);\n }\n\n throw e;\n }\n };\n\n return fetchWithRetryable;\n};\n"],"mappings":";;;;;;;;;AAAA;AACA;AACA;AACA;;AAIO,IAAMA,kBAAgE,GAAAC,OAAA,CAAAD,kBAAA,GAAG,SAAnEA,kBAAgEA,CAAIE,KAAK,EAAqB;EAAA,IAAnBC,UAAU,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC;EACpG,IAAIG,UAAU,GAAG,CAAC;EAElB,IAAMC,kBAAyB;IAAA,IAAAC,IAAA,OAAAC,kBAAA,CAAAC,OAAA,oBAAAC,oBAAA,CAAAD,OAAA,IAAAE,IAAA,CAAG,SAAAC,QAAOC,KAAK,EAAEC,IAAI;MAAA,WAAAJ,oBAAA,CAAAD,OAAA,IAAAM,IAAA,UAAAC,SAAAC,QAAA;QAAA,kBAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAAE,IAAA;UAAA;YAAAF,QAAA,CAAAC,IAAA;YAAAD,QAAA,CAAAE,IAAA;YAAA,OAEnCnB,KAAK,CAACa,KAAK,EAAEC,IAAI,CAAC;UAAA;YAAA,OAAAG,QAAA,CAAAG,MAAA,WAAAH,QAAA,CAAAI,IAAA;UAAA;YAAAJ,QAAA,CAAAC,IAAA;YAAAD,QAAA,CAAAK,EAAA,GAAAL,QAAA;YAAA,MAE3BZ,UAAU,GAAGJ,UAAU;cAAAgB,QAAA,CAAAE,IAAA;cAAA;YAAA;YACzBd,UAAU,EAAE;YAEZ,IAAIkB,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,aAAa,EAAE;cAC1CC,OAAO,CAACC,KAAK,sCAAAC,MAAA,CAET,OAAOf,KAAK,KAAK,QAAQ,GAAGA,KAAK,GAAG,KAAK,IAAIA,KAAK,GAAGA,KAAK,CAACgB,GAAG,GAAGhB,KAAK,CAACiB,IAAI,eAAAF,MAAA,CACjEvB,UAAU,CACxB,CAAC;YACH;YAACY,QAAA,CAAAE,IAAA;YAAA,OAEYb,kBAAkB,CAACO,KAAK,EAAEC,IAAI,CAAC;UAAA;YAAA,OAAAG,QAAA,CAAAG,MAAA,WAAAH,QAAA,CAAAI,IAAA;UAAA;YAAA,MAAAJ,QAAA,CAAAK,EAAA;UAAA;UAAA;YAAA,OAAAL,QAAA,CAAAc,IAAA;QAAA;MAAA,GAAAnB,OAAA;IAAA,CAKjD;IAAA,gBApBKN,kBAAyBA,CAAA0B,EAAA,EAAAC,GAAA;MAAA,OAAA1B,IAAA,CAAA2B,KAAA,OAAAhC,SAAA;IAAA;EAAA,GAoB9B;EAED,OAAOI,kBAAkB;AAC3B,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @author Kuitos
3
+ * @since 2024-03-05
4
+ * wrap fetch to throw error when response status is not 200~400
5
+ */
6
+ import { type Fetch } from './utils';
7
+ export declare const makeFetchThrowable: (fetch: Fetch) => Fetch;
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.makeFetchThrowable = void 0;
8
+ var _regeneratorRuntime2 = _interopRequireDefault(require("@babel/runtime/helpers/regeneratorRuntime"));
9
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
10
+ var _utils = require("./utils");
11
+ /**
12
+ * @author Kuitos
13
+ * @since 2024-03-05
14
+ * wrap fetch to throw error when response status is not 200~400
15
+ */
16
+
17
+ var makeFetchThrowable = exports.makeFetchThrowable = function makeFetchThrowable(fetch) {
18
+ return /*#__PURE__*/function () {
19
+ var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee(url, init) {
20
+ var res;
21
+ return (0, _regeneratorRuntime2.default)().wrap(function _callee$(_context) {
22
+ while (1) switch (_context.prev = _context.next) {
23
+ case 0:
24
+ _context.next = 2;
25
+ return fetch(url, init);
26
+ case 2:
27
+ res = _context.sent;
28
+ if ((0, _utils.isValidResponse)(res.status)) {
29
+ _context.next = 5;
30
+ break;
31
+ }
32
+ throw new Error("[RESPONSE_ERROR_AS_STATUS_INVALID] ".concat(res.status, " ").concat(res.statusText, " ").concat(typeof url === 'string' ? url : 'url' in url ? url.url : url.href, " ").concat(JSON.stringify(init)));
33
+ case 5:
34
+ return _context.abrupt("return", res);
35
+ case 6:
36
+ case "end":
37
+ return _context.stop();
38
+ }
39
+ }, _callee);
40
+ }));
41
+ return function (_x, _x2) {
42
+ return _ref.apply(this, arguments);
43
+ };
44
+ }();
45
+ };
46
+ //# sourceMappingURL=makeFetchThrowable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_utils","require","makeFetchThrowable","exports","fetch","_ref","_asyncToGenerator2","default","_regeneratorRuntime2","mark","_callee","url","init","res","wrap","_callee$","_context","prev","next","sent","isValidResponse","status","Error","concat","statusText","href","JSON","stringify","abrupt","stop","_x","_x2","apply","arguments"],"sources":["../../../src/fetch-utils/makeFetchThrowable.ts"],"sourcesContent":["/**\n * @author Kuitos\n * @since 2024-03-05\n * wrap fetch to throw error when response status is not 200~400\n */\n\nimport { type Fetch, isValidResponse } from './utils';\n\nexport const makeFetchThrowable: (fetch: Fetch) => Fetch = (fetch) => {\n return async (url, init) => {\n const res = await fetch(url, init);\n if (!isValidResponse(res.status)) {\n throw new Error(\n `[RESPONSE_ERROR_AS_STATUS_INVALID] ${res.status} ${res.statusText} ${\n typeof url === 'string' ? url : 'url' in url ? url.url : url.href\n } ${JSON.stringify(init)}`,\n );\n }\n\n return res;\n };\n};\n"],"mappings":";;;;;;;;;AAMA,IAAAA,MAAA,GAAAC,OAAA;AANA;AACA;AACA;AACA;AACA;;AAIO,IAAMC,kBAA2C,GAAAC,OAAA,CAAAD,kBAAA,GAAG,SAA9CA,kBAA2CA,CAAIE,KAAK,EAAK;EACpE;IAAA,IAAAC,IAAA,OAAAC,kBAAA,CAAAC,OAAA,oBAAAC,oBAAA,CAAAD,OAAA,IAAAE,IAAA,CAAO,SAAAC,QAAOC,GAAG,EAAEC,IAAI;MAAA,IAAAC,GAAA;MAAA,WAAAL,oBAAA,CAAAD,OAAA,IAAAO,IAAA,UAAAC,SAAAC,QAAA;QAAA,kBAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAAE,IAAA;UAAA;YAAAF,QAAA,CAAAE,IAAA;YAAA,OACHd,KAAK,CAACO,GAAG,EAAEC,IAAI,CAAC;UAAA;YAA5BC,GAAG,GAAAG,QAAA,CAAAG,IAAA;YAAA,IACJ,IAAAC,sBAAe,EAACP,GAAG,CAACQ,MAAM,CAAC;cAAAL,QAAA,CAAAE,IAAA;cAAA;YAAA;YAAA,MACxB,IAAII,KAAK,uCAAAC,MAAA,CACyBV,GAAG,CAACQ,MAAM,OAAAE,MAAA,CAAIV,GAAG,CAACW,UAAU,OAAAD,MAAA,CAChE,OAAOZ,GAAG,KAAK,QAAQ,GAAGA,GAAG,GAAG,KAAK,IAAIA,GAAG,GAAGA,GAAG,CAACA,GAAG,GAAGA,GAAG,CAACc,IAAI,OAAAF,MAAA,CAC/DG,IAAI,CAACC,SAAS,CAACf,IAAI,CAAC,CAC1B,CAAC;UAAA;YAAA,OAAAI,QAAA,CAAAY,MAAA,WAGIf,GAAG;UAAA;UAAA;YAAA,OAAAG,QAAA,CAAAa,IAAA;QAAA;MAAA,GAAAnB,OAAA;IAAA,CACX;IAAA,iBAAAoB,EAAA,EAAAC,GAAA;MAAA,OAAA1B,IAAA,CAAA2B,KAAA,OAAAC,SAAA;IAAA;EAAA;AACH,CAAC"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
@@ -0,0 +1,2 @@
1
+ export type Fetch = typeof window.fetch;
2
+ export declare const isValidResponse: (status: number) => boolean;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.isValidResponse = void 0;
7
+ var isValidResponse = exports.isValidResponse = function isValidResponse(status) {
8
+ return status >= 200 && status < 400;
9
+ };
10
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["isValidResponse","exports","status"],"sources":["../../../src/fetch-utils/utils.ts"],"sourcesContent":["export type Fetch = typeof window.fetch;\n\nexport const isValidResponse = (status: number): boolean => {\n return status >= 200 && status < 400;\n};\n"],"mappings":";;;;;;AAEO,IAAMA,eAAe,GAAAC,OAAA,CAAAD,eAAA,GAAG,SAAlBA,eAAeA,CAAIE,MAAc,EAAc;EAC1D,OAAOA,MAAM,IAAI,GAAG,IAAIA,MAAM,GAAG,GAAG;AACtC,CAAC"}
@@ -7,5 +7,7 @@ export * from './utils';
7
7
  export * from './module-resolver';
8
8
  export * from './common';
9
9
  export * from './reporter';
10
- export * from './fetch-utils/wrapFetchWithCache';
10
+ export * from './fetch-utils/makeFetchCacheable';
11
+ export * from './fetch-utils/makeFetchRetryable';
12
+ export * from './fetch-utils/makeFetchThrowable';
11
13
  export * from './deferred-queue';
package/dist/cjs/index.js CHANGED
@@ -58,14 +58,36 @@ Object.keys(_reporter).forEach(function (key) {
58
58
  }
59
59
  });
60
60
  });
61
- var _wrapFetchWithCache = require("./fetch-utils/wrapFetchWithCache");
62
- Object.keys(_wrapFetchWithCache).forEach(function (key) {
61
+ var _makeFetchCacheable = require("./fetch-utils/makeFetchCacheable");
62
+ Object.keys(_makeFetchCacheable).forEach(function (key) {
63
63
  if (key === "default" || key === "__esModule") return;
64
- if (key in exports && exports[key] === _wrapFetchWithCache[key]) return;
64
+ if (key in exports && exports[key] === _makeFetchCacheable[key]) return;
65
65
  Object.defineProperty(exports, key, {
66
66
  enumerable: true,
67
67
  get: function get() {
68
- return _wrapFetchWithCache[key];
68
+ return _makeFetchCacheable[key];
69
+ }
70
+ });
71
+ });
72
+ var _makeFetchRetryable = require("./fetch-utils/makeFetchRetryable");
73
+ Object.keys(_makeFetchRetryable).forEach(function (key) {
74
+ if (key === "default" || key === "__esModule") return;
75
+ if (key in exports && exports[key] === _makeFetchRetryable[key]) return;
76
+ Object.defineProperty(exports, key, {
77
+ enumerable: true,
78
+ get: function get() {
79
+ return _makeFetchRetryable[key];
80
+ }
81
+ });
82
+ });
83
+ var _makeFetchThrowable = require("./fetch-utils/makeFetchThrowable");
84
+ Object.keys(_makeFetchThrowable).forEach(function (key) {
85
+ if (key === "default" || key === "__esModule") return;
86
+ if (key in exports && exports[key] === _makeFetchThrowable[key]) return;
87
+ Object.defineProperty(exports, key, {
88
+ enumerable: true,
89
+ get: function get() {
90
+ return _makeFetchThrowable[key];
69
91
  }
70
92
  });
71
93
  });
@@ -1 +1 @@
1
- {"version":3,"names":["_assetsTranspilers","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get","_utils","_moduleResolver","_common","_reporter","_wrapFetchWithCache","_deferredQueue"],"sources":["../../src/index.ts"],"sourcesContent":["/**\n * @author Kuitos\n * @since 2023-05-06\n */\nexport * from './assets-transpilers';\nexport * from './utils';\nexport * from './module-resolver';\nexport * from './common';\nexport * from './reporter';\nexport * from './fetch-utils/wrapFetchWithCache';\nexport * from './deferred-queue';\n"],"mappings":"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"}
1
+ {"version":3,"names":["_assetsTranspilers","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get","_utils","_moduleResolver","_common","_reporter","_makeFetchCacheable","_makeFetchRetryable","_makeFetchThrowable","_deferredQueue"],"sources":["../../src/index.ts"],"sourcesContent":["/**\n * @author Kuitos\n * @since 2023-05-06\n */\nexport * from './assets-transpilers';\nexport * from './utils';\nexport * from './module-resolver';\nexport * from './common';\nexport * from './reporter';\nexport * from './fetch-utils/makeFetchCacheable';\nexport * from './fetch-utils/makeFetchRetryable';\nexport * from './fetch-utils/makeFetchThrowable';\nexport * from './deferred-queue';\n"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
package/dist/cjs/utils.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
@@ -10,15 +10,14 @@ exports.hasOwnProperty = exports.getOwnPropertyNames = exports.getOwnPropertyDes
10
10
  exports.isRuntimeCompatible = isRuntimeCompatible;
11
11
  exports.keys = void 0;
12
12
  exports.waitUntilSettled = waitUntilSettled;
13
- var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
13
+ var _regeneratorRuntime2 = _interopRequireDefault(require("@babel/runtime/helpers/regeneratorRuntime"));
14
14
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
15
15
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
16
16
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
17
+ var _classPrivateFieldInitSpec2 = _interopRequireDefault(require("@babel/runtime/helpers/classPrivateFieldInitSpec"));
17
18
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
18
19
  var _classPrivateFieldGet2 = _interopRequireDefault(require("@babel/runtime/helpers/classPrivateFieldGet"));
19
20
  var _classPrivateFieldSet2 = _interopRequireDefault(require("@babel/runtime/helpers/classPrivateFieldSet"));
20
- function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
21
- function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
22
21
  /**
23
22
  * @author Kuitos
24
23
  * @since 2023-04-26
@@ -40,7 +39,7 @@ var Deferred = exports.Deferred = /*#__PURE__*/function () {
40
39
  var _this = this;
41
40
  (0, _classCallCheck2.default)(this, Deferred);
42
41
  (0, _defineProperty2.default)(this, "promise", void 0);
43
- _classPrivateFieldInitSpec(this, _status, {
42
+ (0, _classPrivateFieldInitSpec2.default)(this, _status, {
44
43
  writable: true,
45
44
  value: 'pending'
46
45
  });
@@ -69,8 +68,8 @@ function waitUntilSettled(_x) {
69
68
  return _waitUntilSettled.apply(this, arguments);
70
69
  }
71
70
  function _waitUntilSettled() {
72
- _waitUntilSettled = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(promise) {
73
- return _regenerator.default.wrap(function _callee$(_context) {
71
+ _waitUntilSettled = (0, _asyncToGenerator2.default)( /*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee(promise) {
72
+ return (0, _regeneratorRuntime2.default)().wrap(function _callee$(_context) {
74
73
  while (1) switch (_context.prev = _context.next) {
75
74
  case 0:
76
75
  _context.prev = 0;
@@ -1 +1 @@
1
- {"version":3,"names":["create","exports","Object","defineProperty","getOwnPropertyDescriptor","getOwnPropertyNames","freeze","keys","hasOwnProperty","caller","p","prototype","call","_status","WeakMap","Deferred","_this","_classCallCheck2","default","_defineProperty2","_classPrivateFieldInitSpec","writable","value","promise","Promise","resolve","reject","_classPrivateFieldSet2","reason","_createClass2","key","isSettled","_classPrivateFieldGet2","waitUntilSettled","_x","_waitUntilSettled","apply","arguments","_asyncToGenerator2","_regenerator","mark","_callee","wrap","_callee$","_context","prev","next","t0","process","env","NODE_ENV","console","warn","stop","getEntireUrl","uri","baseURI","publicPath","URL","window","location","href","entireUrl","toString","isRuntimeCompatible","_URL","Proxy","TransformStream","createObjectURL"],"sources":["../../src/utils.ts"],"sourcesContent":["/**\n * @author Kuitos\n * @since 2023-04-26\n */\n\n// eslint-disable-next-line @typescript-eslint/unbound-method\nexport const { create, defineProperty, getOwnPropertyDescriptor, getOwnPropertyNames, freeze, keys } = Object;\nexport const hasOwnProperty = (caller: unknown, p: PropertyKey) => Object.prototype.hasOwnProperty.call(caller, p);\n\nexport class Deferred<T> {\n promise: Promise<T>;\n\n #status: 'pending' | 'fulfilled' | 'rejected' = 'pending';\n\n resolve!: (value: T | PromiseLike<T>) => void;\n\n reject!: (reason?: unknown) => void;\n\n constructor() {\n this.promise = new Promise<T>((resolve, reject) => {\n this.resolve = (value) => {\n this.#status = 'fulfilled';\n resolve(value);\n };\n this.reject = (reason) => {\n this.#status = 'rejected';\n reject(reason);\n };\n });\n }\n\n isSettled(): boolean {\n return this.#status !== 'pending';\n }\n}\n\nexport async function waitUntilSettled(promise: Promise<void>): Promise<void> {\n try {\n await promise;\n } catch (e) {\n if (process.env.NODE_ENV === 'development') {\n console.warn('waitUntilSettled error', e);\n }\n }\n}\n\nexport function getEntireUrl(uri: string, baseURI: string): string {\n const publicPath = new URL(baseURI, window.location.href);\n const entireUrl = new URL(uri, publicPath.toString());\n return entireUrl.toString();\n}\n\n/**\n * Check if the running environment support qiankun 3.0\n *\n */\nexport function isRuntimeCompatible(): boolean {\n return (\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n typeof Proxy === 'function' && typeof TransformStream === 'function' && typeof URL?.createObjectURL === 'function'\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["create","exports","Object","defineProperty","getOwnPropertyDescriptor","getOwnPropertyNames","freeze","keys","hasOwnProperty","caller","p","prototype","call","_status","WeakMap","Deferred","_this","_classCallCheck2","default","_defineProperty2","_classPrivateFieldInitSpec2","writable","value","promise","Promise","resolve","reject","_classPrivateFieldSet2","reason","_createClass2","key","isSettled","_classPrivateFieldGet2","waitUntilSettled","_x","_waitUntilSettled","apply","arguments","_asyncToGenerator2","_regeneratorRuntime2","mark","_callee","wrap","_callee$","_context","prev","next","t0","process","env","NODE_ENV","console","warn","stop","getEntireUrl","uri","baseURI","publicPath","URL","window","location","href","entireUrl","toString","isRuntimeCompatible","_URL","Proxy","TransformStream","createObjectURL"],"sources":["../../src/utils.ts"],"sourcesContent":["/**\n * @author Kuitos\n * @since 2023-04-26\n */\n\n// eslint-disable-next-line @typescript-eslint/unbound-method\nexport const { create, defineProperty, getOwnPropertyDescriptor, getOwnPropertyNames, freeze, keys } = Object;\nexport const hasOwnProperty = (caller: unknown, p: PropertyKey) => Object.prototype.hasOwnProperty.call(caller, p);\n\nexport class Deferred<T> {\n promise: Promise<T>;\n\n #status: 'pending' | 'fulfilled' | 'rejected' = 'pending';\n\n resolve!: (value: T | PromiseLike<T>) => void;\n\n reject!: (reason?: unknown) => void;\n\n constructor() {\n this.promise = new Promise<T>((resolve, reject) => {\n this.resolve = (value) => {\n this.#status = 'fulfilled';\n resolve(value);\n };\n this.reject = (reason) => {\n this.#status = 'rejected';\n reject(reason);\n };\n });\n }\n\n isSettled(): boolean {\n return this.#status !== 'pending';\n }\n}\n\nexport async function waitUntilSettled(promise: Promise<void>): Promise<void> {\n try {\n await promise;\n } catch (e) {\n if (process.env.NODE_ENV === 'development') {\n console.warn('waitUntilSettled error', e);\n }\n }\n}\n\nexport function getEntireUrl(uri: string, baseURI: string): string {\n const publicPath = new URL(baseURI, window.location.href);\n const entireUrl = new URL(uri, publicPath.toString());\n return entireUrl.toString();\n}\n\n/**\n * Check if the running environment support qiankun 3.0\n *\n */\nexport function isRuntimeCompatible(): boolean {\n return (\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n typeof Proxy === 'function' && typeof TransformStream === 'function' && typeof URL?.createObjectURL === 'function'\n );\n}\n"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
+ import _regeneratorRuntime from "@babel/runtime/helpers/esm/regeneratorRuntime";
1
2
  import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
2
3
  import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
3
- import _regeneratorRuntime from "@babel/runtime/regenerator";
4
4
  /**
5
5
  * @author Kuitos
6
6
  * @since 2023-03-16
@@ -43,9 +43,7 @@ export var preTranspile = function preTranspile(script, baseURI, opts) {
43
43
  };
44
44
  }
45
45
  if (isValidJavaScriptType(type) && sandbox) {
46
- var rawNode = opts.rawNode;
47
- var scriptNode = script.textContent ? script : rawNode.childNodes[0];
48
- var code = scriptNode.textContent;
46
+ var code = script.textContent;
49
47
  if (code) {
50
48
  return {
51
49
  mode: Mode.INLINE_CODE_IN_SANDBOX,
@@ -65,11 +63,6 @@ export default function transpileScript(script, baseURI, opts) {
65
63
  var srcAttribute = script.getAttribute('src');
66
64
  var sandbox = opts.sandbox,
67
65
  scriptTranspiledDeferred = opts.scriptTranspiledDeferred;
68
-
69
- // To prevent webpack from skipping reload logic and causing the js not to re-execute when a micro app is loaded multiple times, the data-webpack attribute of the script must be removed.
70
- // see https://github.com/webpack/webpack/blob/1f13ff9fe587e094df59d660b4611b1bd19aed4c/lib/runtime/LoadScriptRuntimeModule.js#L131-L136
71
- // FIXME We should determine whether the current micro application is being loaded for the second time. If not, this removal should not be performed.
72
- script.removeAttribute('data-webpack');
73
66
  try {
74
67
  var _preTranspile = preTranspile({
75
68
  src: srcAttribute || undefined,
@@ -96,9 +89,9 @@ export default function transpileScript(script, baseURI, opts) {
96
89
  }).then(function (res) {
97
90
  return res.text();
98
91
  }).then( /*#__PURE__*/function () {
99
- var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(code) {
92
+ var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(code) {
100
93
  var prevScriptTranspiledDeferred, beforeScriptExecuteEvent, beforeExecutedListenerScript, codeFactory;
101
- return _regeneratorRuntime.wrap(function _callee$(_context) {
94
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
102
95
  while (1) switch (_context.prev = _context.next) {
103
96
  case 0:
104
97
  prevScriptTranspiledDeferred = opts.prevScriptTranspiledDeferred; // add preprocess code to dispatch a CustomEvent before the script is executed
@@ -119,7 +112,7 @@ export default function transpileScript(script, baseURI, opts) {
119
112
  // HTMLScriptElement default fetchPriority is 'auto', we should set it to 'high' to make it execute earlier while it's not async script
120
113
  script.fetchPriority = 'high';
121
114
  case 9:
122
- // change the script src to the blob url to make it execute in the sandbox
115
+ // change the script src to the blob url to make it executed in the sandbox
123
116
  script.src = URL.createObjectURL(new Blob([codeFactory], {
124
117
  type: 'text/javascript'
125
118
  }));
@@ -154,10 +147,8 @@ export default function transpileScript(script, baseURI, opts) {
154
147
  }
155
148
  case Mode.INLINE_CODE_IN_SANDBOX:
156
149
  {
157
- var rawNode = opts.rawNode;
158
- var scriptNode = script.textContent ? script : rawNode.childNodes[0];
159
150
  var code = result.code;
160
- scriptNode.textContent = sandbox.makeEvaluateFactory(code);
151
+ script.textContent = sandbox.makeEvaluateFactory(code);
161
152
  // mark the script have consumed
162
153
  script.dataset.consumed = 'true';
163
154
  scriptTranspiledDeferred === null || scriptTranspiledDeferred === void 0 || scriptTranspiledDeferred.resolve();
@@ -1 +1 @@
1
- {"version":3,"names":["getEntireUrl","waitUntilSettled","Mode","createReusingObjectUrl","isValidJavaScriptType","getCredentials","crossOrigin","undefined","preTranspile","script","baseURI","opts","sandbox","moduleResolver","src","type","entireUrl","matchedScript","mode","REUSED_DEP_IN_SANDBOX","REUSED_DEP","result","_objectSpread","REMOTE_ASSETS_IN_SANDBOX","REMOTE_ASSETS","rawNode","scriptNode","textContent","childNodes","code","INLINE_CODE_IN_SANDBOX","NONE","transpileScript","srcAttribute","getAttribute","scriptTranspiledDeferred","removeAttribute","_preTranspile","fetch","dataset","syncMode","hasAttribute","priority","credentials","then","res","text","_ref","_asyncToGenerator","_regeneratorRuntime","mark","_callee","prevScriptTranspiledDeferred","beforeScriptExecuteEvent","beforeExecutedListenerScript","codeFactory","wrap","_callee$","_context","prev","next","concat","makeEvaluateFactory","isSettled","promise","fetchPriority","URL","createObjectURL","Blob","window","addEventListener","listener","evt","_ref2","detail","s","revokeObjectURL","consumed","removeEventListener","resolve","stop","_x","apply","arguments","catch","e","reject","url","version","onScriptComplete","prevListener","event","onload","onerror","call","bind"],"sources":["../../../src/assets-transpilers/script.ts"],"sourcesContent":["/**\n * @author Kuitos\n * @since 2023-03-16\n */\n\nimport type { MatchResult } from '../module-resolver';\nimport { getEntireUrl, waitUntilSettled } from '../utils';\nimport type { AssetsTranspilerOpts, ScriptTranspilerOpts } from './types';\nimport { Mode } from './types';\nimport { createReusingObjectUrl, isValidJavaScriptType } from './utils';\n\nconst getCredentials = (crossOrigin: string | null): RequestInit['credentials'] | undefined => {\n switch (crossOrigin) {\n case 'anonymous':\n return 'same-origin';\n case 'use-credentials':\n return 'include';\n default:\n return undefined;\n }\n};\n\ntype PreTranspileResult =\n | { mode: Mode.REMOTE_ASSETS_IN_SANDBOX | Mode.REMOTE_ASSETS; result: { src: string } }\n | { mode: Mode.REUSED_DEP_IN_SANDBOX | Mode.REUSED_DEP; result: { src: string } & MatchResult }\n | { mode: Mode.INLINE_CODE_IN_SANDBOX; result: { code: string } }\n | { mode: Mode.NONE; result?: never };\n\nexport const preTranspile = (\n script: Partial<Pick<HTMLScriptElement, 'src' | 'type' | 'textContent'>>,\n baseURI: string,\n opts: AssetsTranspilerOpts,\n): PreTranspileResult => {\n const { sandbox, moduleResolver } = opts;\n\n const { src, type } = script;\n\n if (src) {\n const entireUrl = getEntireUrl(src, baseURI);\n const matchedScript = moduleResolver?.(entireUrl);\n if (matchedScript) {\n return {\n mode: sandbox ? Mode.REUSED_DEP_IN_SANDBOX : Mode.REUSED_DEP,\n result: { src: entireUrl, ...matchedScript },\n };\n }\n\n return {\n mode: sandbox ? Mode.REMOTE_ASSETS_IN_SANDBOX : Mode.REMOTE_ASSETS,\n result: { src: entireUrl },\n };\n }\n\n if (isValidJavaScriptType(type) && sandbox) {\n const rawNode = opts.rawNode as HTMLScriptElement;\n const scriptNode = script.textContent ? script : rawNode.childNodes[0];\n\n const code = scriptNode.textContent;\n if (code) {\n return {\n mode: Mode.INLINE_CODE_IN_SANDBOX,\n result: {\n code,\n },\n };\n }\n }\n\n return { mode: Mode.NONE };\n};\n\nexport default function transpileScript(\n script: HTMLScriptElement,\n baseURI: string,\n opts: ScriptTranspilerOpts,\n): HTMLScriptElement {\n // Can't use script.src directly, because it will be resolved to absolute path by browser with Node.baseURI\n // Such as <script src=\"./foo.js\"></script> will be resolved to http://localhost:8000/foo.js while read script.src\n const srcAttribute = script.getAttribute('src');\n const { sandbox, scriptTranspiledDeferred } = opts;\n\n // To prevent webpack from skipping reload logic and causing the js not to re-execute when a micro app is loaded multiple times, the data-webpack attribute of the script must be removed.\n // see https://github.com/webpack/webpack/blob/1f13ff9fe587e094df59d660b4611b1bd19aed4c/lib/runtime/LoadScriptRuntimeModule.js#L131-L136\n // FIXME We should determine whether the current micro application is being loaded for the second time. If not, this removal should not be performed.\n script.removeAttribute('data-webpack');\n\n try {\n const { mode, result } = preTranspile(\n {\n src: srcAttribute || undefined,\n type: script.type,\n textContent: script.textContent,\n },\n baseURI,\n opts,\n );\n\n switch (mode) {\n case Mode.REMOTE_ASSETS_IN_SANDBOX: {\n const { fetch } = opts;\n const { src } = result;\n\n // We must remove script src to avoid self execution as we need to fetch the script content and transpile it\n script.removeAttribute('src');\n script.dataset.src = src;\n\n const syncMode = !script.hasAttribute('async');\n const priority: Priority = syncMode ? 'high' : 'low';\n const credentials = getCredentials(script.crossOrigin);\n\n void fetch(src, { credentials, priority })\n .then((res) => res.text())\n .then(async (code) => {\n const { prevScriptTranspiledDeferred } = opts;\n\n // add preprocess code to dispatch a CustomEvent before the script is executed\n const beforeScriptExecuteEvent = 'q:bse';\n const beforeExecutedListenerScript = `;(function(){var s=document.currentScript;var e=new CustomEvent('${beforeScriptExecuteEvent}',{detail:{s:s}});window.dispatchEvent(e);})();`;\n\n const codeFactory = beforeExecutedListenerScript + sandbox!.makeEvaluateFactory(code, src);\n\n if (syncMode) {\n // if it's a sync script and there is a previous sync script, we should wait it until loaded to consistent with the browser behavior\n if (prevScriptTranspiledDeferred && !prevScriptTranspiledDeferred.isSettled()) {\n await waitUntilSettled(prevScriptTranspiledDeferred.promise);\n }\n\n // HTMLScriptElement default fetchPriority is 'auto', we should set it to 'high' to make it execute earlier while it's not async script\n script.fetchPriority = 'high';\n }\n\n // change the script src to the blob url to make it execute in the sandbox\n script.src = URL.createObjectURL(new Blob([codeFactory], { type: 'text/javascript' }));\n\n window.addEventListener(beforeScriptExecuteEvent, function listener(evt: CustomEventInit) {\n const { s } = evt.detail as { s: HTMLScriptElement };\n if (s === script) {\n URL.revokeObjectURL(s.src);\n // change the script src to the original src while the script is executing\n // thus the script behavior can be more consistent with the native browser logic\n s.src = src;\n s.dataset.consumed = 'true';\n delete s.dataset.src;\n\n window.removeEventListener(beforeScriptExecuteEvent, listener);\n }\n });\n\n scriptTranspiledDeferred?.resolve();\n })\n .catch((e) => {\n scriptTranspiledDeferred?.reject();\n throw e;\n });\n\n return script;\n }\n\n case Mode.INLINE_CODE_IN_SANDBOX: {\n const rawNode = opts.rawNode as HTMLScriptElement;\n const scriptNode = script.textContent ? script : rawNode.childNodes[0];\n const { code } = result;\n\n scriptNode.textContent = sandbox!.makeEvaluateFactory(code);\n // mark the script have consumed\n script.dataset.consumed = 'true';\n\n scriptTranspiledDeferred?.resolve();\n\n return script;\n }\n\n case Mode.REUSED_DEP_IN_SANDBOX:\n case Mode.REUSED_DEP: {\n const { url, version, src } = result;\n\n script.dataset.src = src;\n script.dataset.version = version;\n\n const syncMode = !script.getAttribute('async');\n // HTMLScriptElement default fetchPriority is 'auto', we should set it to 'high' to make it execute earlier while it's not async script\n if (syncMode) {\n script.fetchPriority = 'high';\n }\n\n // When the script hits the dependency reuse logic, the current script is not executed, and an empty script is returned directly\n script.src = createReusingObjectUrl(src, url, 'text/javascript');\n\n const onScriptComplete = (\n prevListener: typeof HTMLScriptElement.prototype.onload | typeof HTMLScriptElement.prototype.onerror,\n event: Event,\n ) => {\n script.onload = script.onerror = null;\n\n script.src = src;\n script.dataset.consumed = 'true';\n script.dataset.src = url;\n\n prevListener?.call(script, event);\n };\n script.onload = onScriptComplete.bind(null, script.onload);\n script.onerror = onScriptComplete.bind(null, script.onerror) as typeof HTMLScriptElement.prototype.onerror;\n\n scriptTranspiledDeferred?.resolve();\n\n return script;\n }\n\n case Mode.REMOTE_ASSETS:\n case Mode.NONE:\n default: {\n if (result?.src) {\n script.src = result.src;\n }\n\n scriptTranspiledDeferred?.resolve();\n\n return script;\n }\n }\n } catch (e) {\n scriptTranspiledDeferred?.reject(e);\n throw e;\n }\n}\n"],"mappings":";;;AAAA;AACA;AACA;AACA;;AAGA,SAASA,YAAY,EAAEC,gBAAgB;AAEvC,SAASC,IAAI;AACb,SAASC,sBAAsB,EAAEC,qBAAqB;AAEtD,IAAMC,cAAc,GAAG,SAAjBA,cAAcA,CAAIC,WAA0B,EAA6C;EAC7F,QAAQA,WAAW;IACjB,KAAK,WAAW;MACd,OAAO,aAAa;IACtB,KAAK,iBAAiB;MACpB,OAAO,SAAS;IAClB;MACE,OAAOC,SAAS;EACpB;AACF,CAAC;AAQD,OAAO,IAAMC,YAAY,GAAG,SAAfA,YAAYA,CACvBC,MAAwE,EACxEC,OAAe,EACfC,IAA0B,EACH;EACvB,IAAQC,OAAO,GAAqBD,IAAI,CAAhCC,OAAO;IAAEC,cAAc,GAAKF,IAAI,CAAvBE,cAAc;EAE/B,IAAQC,GAAG,GAAWL,MAAM,CAApBK,GAAG;IAAEC,IAAI,GAAKN,MAAM,CAAfM,IAAI;EAEjB,IAAID,GAAG,EAAE;IACP,IAAME,SAAS,GAAGhB,YAAY,CAACc,GAAG,EAAEJ,OAAO,CAAC;IAC5C,IAAMO,aAAa,GAAGJ,cAAc,aAAdA,cAAc,uBAAdA,cAAc,CAAGG,SAAS,CAAC;IACjD,IAAIC,aAAa,EAAE;MACjB,OAAO;QACLC,IAAI,EAAEN,OAAO,GAAGV,IAAI,CAACiB,qBAAqB,GAAGjB,IAAI,CAACkB,UAAU;QAC5DC,MAAM,EAAAC,aAAA;UAAIR,GAAG,EAAEE;QAAS,GAAKC,aAAa;MAC5C,CAAC;IACH;IAEA,OAAO;MACLC,IAAI,EAAEN,OAAO,GAAGV,IAAI,CAACqB,wBAAwB,GAAGrB,IAAI,CAACsB,aAAa;MAClEH,MAAM,EAAE;QAAEP,GAAG,EAAEE;MAAU;IAC3B,CAAC;EACH;EAEA,IAAIZ,qBAAqB,CAACW,IAAI,CAAC,IAAIH,OAAO,EAAE;IAC1C,IAAMa,OAAO,GAAGd,IAAI,CAACc,OAA4B;IACjD,IAAMC,UAAU,GAAGjB,MAAM,CAACkB,WAAW,GAAGlB,MAAM,GAAGgB,OAAO,CAACG,UAAU,CAAC,CAAC,CAAC;IAEtE,IAAMC,IAAI,GAAGH,UAAU,CAACC,WAAW;IACnC,IAAIE,IAAI,EAAE;MACR,OAAO;QACLX,IAAI,EAAEhB,IAAI,CAAC4B,sBAAsB;QACjCT,MAAM,EAAE;UACNQ,IAAI,EAAJA;QACF;MACF,CAAC;IACH;EACF;EAEA,OAAO;IAAEX,IAAI,EAAEhB,IAAI,CAAC6B;EAAK,CAAC;AAC5B,CAAC;AAED,eAAe,SAASC,eAAeA,CACrCvB,MAAyB,EACzBC,OAAe,EACfC,IAA0B,EACP;EACnB;EACA;EACA,IAAMsB,YAAY,GAAGxB,MAAM,CAACyB,YAAY,CAAC,KAAK,CAAC;EAC/C,IAAQtB,OAAO,GAA+BD,IAAI,CAA1CC,OAAO;IAAEuB,wBAAwB,GAAKxB,IAAI,CAAjCwB,wBAAwB;;EAEzC;EACA;EACA;EACA1B,MAAM,CAAC2B,eAAe,CAAC,cAAc,CAAC;EAEtC,IAAI;IACF,IAAAC,aAAA,GAAyB7B,YAAY,CACnC;QACEM,GAAG,EAAEmB,YAAY,IAAI1B,SAAS;QAC9BQ,IAAI,EAAEN,MAAM,CAACM,IAAI;QACjBY,WAAW,EAAElB,MAAM,CAACkB;MACtB,CAAC,EACDjB,OAAO,EACPC,IACF,CAAC;MAROO,IAAI,GAAAmB,aAAA,CAAJnB,IAAI;MAAEG,MAAM,GAAAgB,aAAA,CAANhB,MAAM;IAUpB,QAAQH,IAAI;MACV,KAAKhB,IAAI,CAACqB,wBAAwB;QAAE;UAClC,IAAQe,KAAK,GAAK3B,IAAI,CAAd2B,KAAK;UACb,IAAQxB,GAAG,GAAKO,MAAM,CAAdP,GAAG;;UAEX;UACAL,MAAM,CAAC2B,eAAe,CAAC,KAAK,CAAC;UAC7B3B,MAAM,CAAC8B,OAAO,CAACzB,GAAG,GAAGA,GAAG;UAExB,IAAM0B,QAAQ,GAAG,CAAC/B,MAAM,CAACgC,YAAY,CAAC,OAAO,CAAC;UAC9C,IAAMC,QAAkB,GAAGF,QAAQ,GAAG,MAAM,GAAG,KAAK;UACpD,IAAMG,WAAW,GAAGtC,cAAc,CAACI,MAAM,CAACH,WAAW,CAAC;UAEtD,KAAKgC,KAAK,CAACxB,GAAG,EAAE;YAAE6B,WAAW,EAAXA,WAAW;YAAED,QAAQ,EAARA;UAAS,CAAC,CAAC,CACvCE,IAAI,CAAC,UAACC,GAAG;YAAA,OAAKA,GAAG,CAACC,IAAI,CAAC,CAAC;UAAA,EAAC,CACzBF,IAAI;YAAA,IAAAG,IAAA,GAAAC,iBAAA,eAAAC,mBAAA,CAAAC,IAAA,CAAC,SAAAC,QAAOtB,IAAI;cAAA,IAAAuB,4BAAA,EAAAC,wBAAA,EAAAC,4BAAA,EAAAC,WAAA;cAAA,OAAAN,mBAAA,CAAAO,IAAA,UAAAC,SAAAC,QAAA;gBAAA,kBAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAAE,IAAA;kBAAA;oBACPR,4BAA4B,GAAKzC,IAAI,CAArCyC,4BAA4B,EAEpC;oBACMC,wBAAwB,GAAG,OAAO;oBAClCC,4BAA4B,uEAAAO,MAAA,CAAuER,wBAAwB;oBAE3HE,WAAW,GAAGD,4BAA4B,GAAG1C,OAAO,CAAEkD,mBAAmB,CAACjC,IAAI,EAAEf,GAAG,CAAC;oBAAA,KAEtF0B,QAAQ;sBAAAkB,QAAA,CAAAE,IAAA;sBAAA;oBAAA;oBAAA,MAENR,4BAA4B,IAAI,CAACA,4BAA4B,CAACW,SAAS,CAAC,CAAC;sBAAAL,QAAA,CAAAE,IAAA;sBAAA;oBAAA;oBAAAF,QAAA,CAAAE,IAAA;oBAAA,OACrE3D,gBAAgB,CAACmD,4BAA4B,CAACY,OAAO,CAAC;kBAAA;oBAG9D;oBACAvD,MAAM,CAACwD,aAAa,GAAG,MAAM;kBAAC;oBAGhC;oBACAxD,MAAM,CAACK,GAAG,GAAGoD,GAAG,CAACC,eAAe,CAAC,IAAIC,IAAI,CAAC,CAACb,WAAW,CAAC,EAAE;sBAAExC,IAAI,EAAE;oBAAkB,CAAC,CAAC,CAAC;oBAEtFsD,MAAM,CAACC,gBAAgB,CAACjB,wBAAwB,EAAE,SAASkB,QAAQA,CAACC,GAAoB,EAAE;sBACxF,IAAAC,KAAA,GAAcD,GAAG,CAACE,MAAM;wBAAhBC,CAAC,GAAAF,KAAA,CAADE,CAAC;sBACT,IAAIA,CAAC,KAAKlE,MAAM,EAAE;wBAChByD,GAAG,CAACU,eAAe,CAACD,CAAC,CAAC7D,GAAG,CAAC;wBAC1B;wBACA;wBACA6D,CAAC,CAAC7D,GAAG,GAAGA,GAAG;wBACX6D,CAAC,CAACpC,OAAO,CAACsC,QAAQ,GAAG,MAAM;wBAC3B,OAAOF,CAAC,CAACpC,OAAO,CAACzB,GAAG;wBAEpBuD,MAAM,CAACS,mBAAmB,CAACzB,wBAAwB,EAAEkB,QAAQ,CAAC;sBAChE;oBACF,CAAC,CAAC;oBAEFpC,wBAAwB,aAAxBA,wBAAwB,eAAxBA,wBAAwB,CAAE4C,OAAO,CAAC,CAAC;kBAAC;kBAAA;oBAAA,OAAArB,QAAA,CAAAsB,IAAA;gBAAA;cAAA,GAAA7B,OAAA;YAAA,CACrC;YAAA,iBAAA8B,EAAA;cAAA,OAAAlC,IAAA,CAAAmC,KAAA,OAAAC,SAAA;YAAA;UAAA,IAAC,CACDC,KAAK,CAAC,UAACC,CAAC,EAAK;YACZlD,wBAAwB,aAAxBA,wBAAwB,eAAxBA,wBAAwB,CAAEmD,MAAM,CAAC,CAAC;YAClC,MAAMD,CAAC;UACT,CAAC,CAAC;UAEJ,OAAO5E,MAAM;QACf;MAEA,KAAKP,IAAI,CAAC4B,sBAAsB;QAAE;UAChC,IAAML,OAAO,GAAGd,IAAI,CAACc,OAA4B;UACjD,IAAMC,UAAU,GAAGjB,MAAM,CAACkB,WAAW,GAAGlB,MAAM,GAAGgB,OAAO,CAACG,UAAU,CAAC,CAAC,CAAC;UACtE,IAAQC,IAAI,GAAKR,MAAM,CAAfQ,IAAI;UAEZH,UAAU,CAACC,WAAW,GAAGf,OAAO,CAAEkD,mBAAmB,CAACjC,IAAI,CAAC;UAC3D;UACApB,MAAM,CAAC8B,OAAO,CAACsC,QAAQ,GAAG,MAAM;UAEhC1C,wBAAwB,aAAxBA,wBAAwB,eAAxBA,wBAAwB,CAAE4C,OAAO,CAAC,CAAC;UAEnC,OAAOtE,MAAM;QACf;MAEA,KAAKP,IAAI,CAACiB,qBAAqB;MAC/B,KAAKjB,IAAI,CAACkB,UAAU;QAAE;UACpB,IAAQmE,GAAG,GAAmBlE,MAAM,CAA5BkE,GAAG;YAAEC,OAAO,GAAUnE,MAAM,CAAvBmE,OAAO;YAAE1E,IAAG,GAAKO,MAAM,CAAdP,GAAG;UAEzBL,MAAM,CAAC8B,OAAO,CAACzB,GAAG,GAAGA,IAAG;UACxBL,MAAM,CAAC8B,OAAO,CAACiD,OAAO,GAAGA,OAAO;UAEhC,IAAMhD,SAAQ,GAAG,CAAC/B,MAAM,CAACyB,YAAY,CAAC,OAAO,CAAC;UAC9C;UACA,IAAIM,SAAQ,EAAE;YACZ/B,MAAM,CAACwD,aAAa,GAAG,MAAM;UAC/B;;UAEA;UACAxD,MAAM,CAACK,GAAG,GAAGX,sBAAsB,CAACW,IAAG,EAAEyE,GAAG,EAAE,iBAAiB,CAAC;UAEhE,IAAME,gBAAgB,GAAG,SAAnBA,gBAAgBA,CACpBC,YAAoG,EACpGC,KAAY,EACT;YACHlF,MAAM,CAACmF,MAAM,GAAGnF,MAAM,CAACoF,OAAO,GAAG,IAAI;YAErCpF,MAAM,CAACK,GAAG,GAAGA,IAAG;YAChBL,MAAM,CAAC8B,OAAO,CAACsC,QAAQ,GAAG,MAAM;YAChCpE,MAAM,CAAC8B,OAAO,CAACzB,GAAG,GAAGyE,GAAG;YAExBG,YAAY,aAAZA,YAAY,eAAZA,YAAY,CAAEI,IAAI,CAACrF,MAAM,EAAEkF,KAAK,CAAC;UACnC,CAAC;UACDlF,MAAM,CAACmF,MAAM,GAAGH,gBAAgB,CAACM,IAAI,CAAC,IAAI,EAAEtF,MAAM,CAACmF,MAAM,CAAC;UAC1DnF,MAAM,CAACoF,OAAO,GAAGJ,gBAAgB,CAACM,IAAI,CAAC,IAAI,EAAEtF,MAAM,CAACoF,OAAO,CAA+C;UAE1G1D,wBAAwB,aAAxBA,wBAAwB,eAAxBA,wBAAwB,CAAE4C,OAAO,CAAC,CAAC;UAEnC,OAAOtE,MAAM;QACf;MAEA,KAAKP,IAAI,CAACsB,aAAa;MACvB,KAAKtB,IAAI,CAAC6B,IAAI;MACd;QAAS;UACP,IAAIV,MAAM,aAANA,MAAM,eAANA,MAAM,CAAEP,GAAG,EAAE;YACfL,MAAM,CAACK,GAAG,GAAGO,MAAM,CAACP,GAAG;UACzB;UAEAqB,wBAAwB,aAAxBA,wBAAwB,eAAxBA,wBAAwB,CAAE4C,OAAO,CAAC,CAAC;UAEnC,OAAOtE,MAAM;QACf;IACF;EACF,CAAC,CAAC,OAAO4E,CAAC,EAAE;IACVlD,wBAAwB,aAAxBA,wBAAwB,eAAxBA,wBAAwB,CAAEmD,MAAM,CAACD,CAAC,CAAC;IACnC,MAAMA,CAAC;EACT;AACF"}
1
+ {"version":3,"names":["getEntireUrl","waitUntilSettled","Mode","createReusingObjectUrl","isValidJavaScriptType","getCredentials","crossOrigin","undefined","preTranspile","script","baseURI","opts","sandbox","moduleResolver","src","type","entireUrl","matchedScript","mode","REUSED_DEP_IN_SANDBOX","REUSED_DEP","result","_objectSpread","REMOTE_ASSETS_IN_SANDBOX","REMOTE_ASSETS","code","textContent","INLINE_CODE_IN_SANDBOX","NONE","transpileScript","srcAttribute","getAttribute","scriptTranspiledDeferred","_preTranspile","fetch","removeAttribute","dataset","syncMode","hasAttribute","priority","credentials","then","res","text","_ref","_asyncToGenerator","_regeneratorRuntime","mark","_callee","prevScriptTranspiledDeferred","beforeScriptExecuteEvent","beforeExecutedListenerScript","codeFactory","wrap","_callee$","_context","prev","next","concat","makeEvaluateFactory","isSettled","promise","fetchPriority","URL","createObjectURL","Blob","window","addEventListener","listener","evt","_ref2","detail","s","revokeObjectURL","consumed","removeEventListener","resolve","stop","_x","apply","arguments","catch","e","reject","url","version","onScriptComplete","prevListener","event","onload","onerror","call","bind"],"sources":["../../../src/assets-transpilers/script.ts"],"sourcesContent":["/**\n * @author Kuitos\n * @since 2023-03-16\n */\n\nimport type { MatchResult } from '../module-resolver';\nimport { getEntireUrl, waitUntilSettled } from '../utils';\nimport type { AssetsTranspilerOpts, ScriptTranspilerOpts } from './types';\nimport { Mode } from './types';\nimport { createReusingObjectUrl, isValidJavaScriptType } from './utils';\n\nconst getCredentials = (crossOrigin: string | null): RequestInit['credentials'] | undefined => {\n switch (crossOrigin) {\n case 'anonymous':\n return 'same-origin';\n case 'use-credentials':\n return 'include';\n default:\n return undefined;\n }\n};\n\ntype PreTranspileResult =\n | { mode: Mode.REMOTE_ASSETS_IN_SANDBOX | Mode.REMOTE_ASSETS; result: { src: string } }\n | { mode: Mode.REUSED_DEP_IN_SANDBOX | Mode.REUSED_DEP; result: { src: string } & MatchResult }\n | { mode: Mode.INLINE_CODE_IN_SANDBOX; result: { code: string } }\n | { mode: Mode.NONE; result?: never };\n\nexport const preTranspile = (\n script: Partial<Pick<HTMLScriptElement, 'src' | 'type' | 'textContent'>>,\n baseURI: string,\n opts: AssetsTranspilerOpts,\n): PreTranspileResult => {\n const { sandbox, moduleResolver } = opts;\n\n const { src, type } = script;\n\n if (src) {\n const entireUrl = getEntireUrl(src, baseURI);\n const matchedScript = moduleResolver?.(entireUrl);\n if (matchedScript) {\n return {\n mode: sandbox ? Mode.REUSED_DEP_IN_SANDBOX : Mode.REUSED_DEP,\n result: { src: entireUrl, ...matchedScript },\n };\n }\n\n return {\n mode: sandbox ? Mode.REMOTE_ASSETS_IN_SANDBOX : Mode.REMOTE_ASSETS,\n result: { src: entireUrl },\n };\n }\n\n if (isValidJavaScriptType(type) && sandbox) {\n const code = script.textContent;\n if (code) {\n return {\n mode: Mode.INLINE_CODE_IN_SANDBOX,\n result: {\n code,\n },\n };\n }\n }\n\n return { mode: Mode.NONE };\n};\n\nexport default function transpileScript(\n script: HTMLScriptElement,\n baseURI: string,\n opts: ScriptTranspilerOpts,\n): HTMLScriptElement {\n // Can't use script.src directly, because it will be resolved to absolute path by browser with Node.baseURI\n // Such as <script src=\"./foo.js\"></script> will be resolved to http://localhost:8000/foo.js while read script.src\n const srcAttribute = script.getAttribute('src');\n const { sandbox, scriptTranspiledDeferred } = opts;\n\n try {\n const { mode, result } = preTranspile(\n {\n src: srcAttribute || undefined,\n type: script.type,\n textContent: script.textContent,\n },\n baseURI,\n opts,\n );\n\n switch (mode) {\n case Mode.REMOTE_ASSETS_IN_SANDBOX: {\n const { fetch } = opts;\n const { src } = result;\n\n // We must remove script src to avoid self execution as we need to fetch the script content and transpile it\n script.removeAttribute('src');\n script.dataset.src = src;\n\n const syncMode = !script.hasAttribute('async');\n const priority: Priority = syncMode ? 'high' : 'low';\n const credentials = getCredentials(script.crossOrigin);\n\n void fetch(src, { credentials, priority })\n .then((res) => res.text())\n .then(async (code) => {\n const { prevScriptTranspiledDeferred } = opts;\n\n // add preprocess code to dispatch a CustomEvent before the script is executed\n const beforeScriptExecuteEvent = 'q:bse';\n const beforeExecutedListenerScript = `;(function(){var s=document.currentScript;var e=new CustomEvent('${beforeScriptExecuteEvent}',{detail:{s:s}});window.dispatchEvent(e);})();`;\n\n const codeFactory = beforeExecutedListenerScript + sandbox!.makeEvaluateFactory(code, src);\n\n if (syncMode) {\n // if it's a sync script and there is a previous sync script(mainly there are multiple defer scripts), we should wait it until loaded to consistent with the browser behavior\n if (prevScriptTranspiledDeferred && !prevScriptTranspiledDeferred.isSettled()) {\n await waitUntilSettled(prevScriptTranspiledDeferred.promise);\n }\n\n // HTMLScriptElement default fetchPriority is 'auto', we should set it to 'high' to make it execute earlier while it's not async script\n script.fetchPriority = 'high';\n }\n\n // change the script src to the blob url to make it executed in the sandbox\n script.src = URL.createObjectURL(new Blob([codeFactory], { type: 'text/javascript' }));\n\n window.addEventListener(beforeScriptExecuteEvent, function listener(evt: CustomEventInit) {\n const { s } = evt.detail as { s: HTMLScriptElement };\n if (s === script) {\n URL.revokeObjectURL(s.src);\n // change the script src to the original src while the script is executing\n // thus the script behavior can be more consistent with the native browser logic\n s.src = src;\n s.dataset.consumed = 'true';\n delete s.dataset.src;\n\n window.removeEventListener(beforeScriptExecuteEvent, listener);\n }\n });\n\n scriptTranspiledDeferred?.resolve();\n })\n .catch((e) => {\n scriptTranspiledDeferred?.reject();\n throw e;\n });\n\n return script;\n }\n\n case Mode.INLINE_CODE_IN_SANDBOX: {\n const { code } = result;\n script.textContent = sandbox!.makeEvaluateFactory(code);\n // mark the script have consumed\n script.dataset.consumed = 'true';\n\n scriptTranspiledDeferred?.resolve();\n\n return script;\n }\n\n case Mode.REUSED_DEP_IN_SANDBOX:\n case Mode.REUSED_DEP: {\n const { url, version, src } = result;\n\n script.dataset.src = src;\n script.dataset.version = version;\n\n const syncMode = !script.getAttribute('async');\n // HTMLScriptElement default fetchPriority is 'auto', we should set it to 'high' to make it execute earlier while it's not async script\n if (syncMode) {\n script.fetchPriority = 'high';\n }\n\n // When the script hits the dependency reuse logic, the current script is not executed, and an empty script is returned directly\n script.src = createReusingObjectUrl(src, url, 'text/javascript');\n\n const onScriptComplete = (\n prevListener: typeof HTMLScriptElement.prototype.onload | typeof HTMLScriptElement.prototype.onerror,\n event: Event,\n ) => {\n script.onload = script.onerror = null;\n\n script.src = src;\n script.dataset.consumed = 'true';\n script.dataset.src = url;\n\n prevListener?.call(script, event);\n };\n script.onload = onScriptComplete.bind(null, script.onload);\n script.onerror = onScriptComplete.bind(null, script.onerror) as typeof HTMLScriptElement.prototype.onerror;\n\n scriptTranspiledDeferred?.resolve();\n\n return script;\n }\n\n case Mode.REMOTE_ASSETS:\n case Mode.NONE:\n default: {\n if (result?.src) {\n script.src = result.src;\n }\n\n scriptTranspiledDeferred?.resolve();\n\n return script;\n }\n }\n } catch (e) {\n scriptTranspiledDeferred?.reject(e);\n throw e;\n }\n}\n"],"mappings":"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"}
@@ -11,9 +11,7 @@ export type BaseTranspilerOpts = BaseLoaderOpts & {
11
11
  makeEvaluateFactory(source: string, sourceURL?: string): string;
12
12
  };
13
13
  };
14
- export type AssetsTranspilerOpts = BaseTranspilerOpts & {
15
- rawNode: Node;
16
- };
14
+ export type AssetsTranspilerOpts = BaseTranspilerOpts;
17
15
  export type NodeTransformer = <T extends Node>(node: T, opts: Omit<AssetsTranspilerOpts, 'moduleResolver'>) => T;
18
16
  export type ScriptTranspilerOpts = AssetsTranspilerOpts & ({
19
17
  prevScriptTranspiledDeferred: Deferred<void>;
@@ -1 +1 @@
1
- {"version":3,"names":["Mode"],"sources":["../../../src/assets-transpilers/types.ts"],"sourcesContent":["/**\n * @author Kuitos\n * @since 2023-08-26\n */\nimport type { BaseLoaderOpts } from '../common';\nimport type { MatchResult } from '../module-resolver';\nimport type { Deferred } from '../utils';\n\nexport type BaseTranspilerOpts = BaseLoaderOpts & {\n moduleResolver?: (url: string) => MatchResult | undefined;\n sandbox?: {\n makeEvaluateFactory(source: string, sourceURL?: string): string;\n };\n};\n\nexport type AssetsTranspilerOpts = BaseTranspilerOpts & { rawNode: Node };\n\nexport type NodeTransformer = <T extends Node>(node: T, opts: Omit<AssetsTranspilerOpts, 'moduleResolver'>) => T;\n\nexport type ScriptTranspilerOpts = AssetsTranspilerOpts &\n (\n | { prevScriptTranspiledDeferred: Deferred<void>; scriptTranspiledDeferred: Deferred<void> }\n | { prevScriptTranspiledDeferred?: undefined; scriptTranspiledDeferred?: undefined }\n );\n\nexport enum Mode {\n REMOTE_ASSETS_IN_SANDBOX = 'RAIS',\n REMOTE_ASSETS = 'RA',\n REUSED_DEP_IN_SANDBOX = 'RDIS',\n REUSED_DEP = 'RD',\n INLINE_CODE_IN_SANDBOX = 'ICIS',\n NONE = 'NONE',\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;;AAsBA,WAAYA,IAAI,0BAAJA,IAAI;EAAJA,IAAI;EAAJA,IAAI;EAAJA,IAAI;EAAJA,IAAI;EAAJA,IAAI;EAAJA,IAAI;EAAA,OAAJA,IAAI;AAAA"}
1
+ {"version":3,"names":["Mode"],"sources":["../../../src/assets-transpilers/types.ts"],"sourcesContent":["/**\n * @author Kuitos\n * @since 2023-08-26\n */\nimport type { BaseLoaderOpts } from '../common';\nimport type { MatchResult } from '../module-resolver';\nimport type { Deferred } from '../utils';\n\nexport type BaseTranspilerOpts = BaseLoaderOpts & {\n moduleResolver?: (url: string) => MatchResult | undefined;\n sandbox?: {\n makeEvaluateFactory(source: string, sourceURL?: string): string;\n };\n};\n\nexport type AssetsTranspilerOpts = BaseTranspilerOpts;\n\nexport type NodeTransformer = <T extends Node>(node: T, opts: Omit<AssetsTranspilerOpts, 'moduleResolver'>) => T;\n\nexport type ScriptTranspilerOpts = AssetsTranspilerOpts &\n (\n | { prevScriptTranspiledDeferred: Deferred<void>; scriptTranspiledDeferred: Deferred<void> }\n | { prevScriptTranspiledDeferred?: undefined; scriptTranspiledDeferred?: undefined }\n );\n\nexport enum Mode {\n REMOTE_ASSETS_IN_SANDBOX = 'RAIS',\n REMOTE_ASSETS = 'RA',\n REUSED_DEP_IN_SANDBOX = 'RDIS',\n REUSED_DEP = 'RD',\n INLINE_CODE_IN_SANDBOX = 'ICIS',\n NONE = 'NONE',\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;;AAsBA,WAAYA,IAAI,0BAAJA,IAAI;EAAJA,IAAI;EAAJA,IAAI;EAAJA,IAAI;EAAJA,IAAI;EAAJA,IAAI;EAAJA,IAAI;EAAA,OAAJA,IAAI;AAAA"}
@@ -0,0 +1,2 @@
1
+ import { type Fetch } from './utils';
2
+ export declare const makeFetchCacheable: (fetch: Fetch) => Fetch;
@@ -1,29 +1,28 @@
1
+ import _regeneratorRuntime from "@babel/runtime/helpers/esm/regeneratorRuntime";
1
2
  import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
2
3
  import _once from "lodash/once";
3
4
  /**
4
5
  * @author Kuitos
5
6
  * @since 2023-11-06
7
+ * wrap fetch with lru cache
6
8
  */
7
- import _regeneratorRuntime from "@babel/runtime/regenerator";
8
9
  import { LRUCache } from "./miniLruCache";
10
+ import { isValidResponse } from "./utils";
9
11
  var getCacheKey = function getCacheKey(input) {
10
12
  return typeof input === 'string' ? input : 'url' in input ? input.url : input.href;
11
13
  };
12
14
  var getGlobalCache = _once(function () {
13
15
  return new LRUCache(50);
14
16
  });
15
- var isValidaResponse = function isValidaResponse(status) {
16
- return status >= 200 && status < 400;
17
- };
18
- export var wrapFetchWithCache = function wrapFetchWithCache(fetch) {
17
+ export var makeFetchCacheable = function makeFetchCacheable(fetch) {
19
18
  var lruCache = getGlobalCache();
20
19
  var cachedFetch = function cachedFetch(input, init) {
21
20
  var fetchInput = input;
22
21
  var cacheKey = getCacheKey(fetchInput);
23
22
  var wrapFetchPromise = /*#__PURE__*/function () {
24
- var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(promise) {
23
+ var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(promise) {
25
24
  var res, status;
26
- return _regeneratorRuntime.wrap(function _callee$(_context) {
25
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
27
26
  while (1) switch (_context.prev = _context.next) {
28
27
  case 0:
29
28
  _context.prev = 0;
@@ -32,7 +31,7 @@ export var wrapFetchWithCache = function wrapFetchWithCache(fetch) {
32
31
  case 3:
33
32
  res = _context.sent;
34
33
  status = res.status;
35
- if (!isValidaResponse(status)) {
34
+ if (!isValidResponse(status)) {
36
35
  lruCache.delete(cacheKey);
37
36
  }
38
37
 
@@ -63,4 +62,4 @@ export var wrapFetchWithCache = function wrapFetchWithCache(fetch) {
63
62
  };
64
63
  return cachedFetch;
65
64
  };
66
- //# sourceMappingURL=wrapFetchWithCache.js.map
65
+ //# sourceMappingURL=makeFetchCacheable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["LRUCache","isValidResponse","getCacheKey","input","url","href","getGlobalCache","_once","makeFetchCacheable","fetch","lruCache","cachedFetch","init","fetchInput","cacheKey","wrapFetchPromise","_ref","_asyncToGenerator","_regeneratorRuntime","mark","_callee","promise","res","status","wrap","_callee$","_context","prev","next","sent","delete","abrupt","clone","t0","stop","_x","apply","arguments","cachedFetchPromise","get","fetchPromise","set"],"sources":["../../../src/fetch-utils/makeFetchCacheable.ts"],"sourcesContent":["/**\n * @author Kuitos\n * @since 2023-11-06\n * wrap fetch with lru cache\n */\nimport { once } from 'lodash';\nimport { LRUCache } from './miniLruCache';\nimport { type Fetch, isValidResponse } from './utils';\n\nconst getCacheKey = (input: Parameters<Fetch>[0]): string => {\n return typeof input === 'string' ? input : 'url' in input ? input.url : input.href;\n};\n\nconst getGlobalCache = once(() => {\n return new LRUCache<string, Promise<Response>>(50);\n});\n\nexport const makeFetchCacheable: (fetch: Fetch) => Fetch = (fetch) => {\n const lruCache = getGlobalCache();\n\n const cachedFetch: Fetch = (input, init) => {\n const fetchInput = input;\n const cacheKey = getCacheKey(fetchInput);\n const wrapFetchPromise = async (promise: Promise<Response>): Promise<Response> => {\n try {\n const res = await promise;\n\n const { status } = res;\n if (!isValidResponse(status)) {\n lruCache.delete(cacheKey);\n }\n\n // must clone the response as one response body can only be read once as a stream\n return res.clone();\n } catch (e) {\n lruCache.delete(cacheKey);\n throw e;\n }\n };\n\n const cachedFetchPromise = lruCache.get(cacheKey);\n if (cachedFetchPromise) {\n return wrapFetchPromise(cachedFetchPromise);\n }\n\n const fetchPromise = fetch(fetchInput, init);\n lruCache.set(cacheKey, fetchPromise);\n\n return wrapFetchPromise(fetchPromise);\n };\n\n return cachedFetch;\n};\n"],"mappings":";;;AAAA;AACA;AACA;AACA;AACA;AAEA,SAASA,QAAQ;AACjB,SAAqBC,eAAe;AAEpC,IAAMC,WAAW,GAAG,SAAdA,WAAWA,CAAIC,KAA2B,EAAa;EAC3D,OAAO,OAAOA,KAAK,KAAK,QAAQ,GAAGA,KAAK,GAAG,KAAK,IAAIA,KAAK,GAAGA,KAAK,CAACC,GAAG,GAAGD,KAAK,CAACE,IAAI;AACpF,CAAC;AAED,IAAMC,cAAc,GAAGC,KAAA,CAAK,YAAM;EAChC,OAAO,IAAIP,QAAQ,CAA4B,EAAE,CAAC;AACpD,CAAC,CAAC;AAEF,OAAO,IAAMQ,kBAA2C,GAAG,SAA9CA,kBAA2CA,CAAIC,KAAK,EAAK;EACpE,IAAMC,QAAQ,GAAGJ,cAAc,CAAC,CAAC;EAEjC,IAAMK,WAAkB,GAAG,SAArBA,WAAkBA,CAAIR,KAAK,EAAES,IAAI,EAAK;IAC1C,IAAMC,UAAU,GAAGV,KAAK;IACxB,IAAMW,QAAQ,GAAGZ,WAAW,CAACW,UAAU,CAAC;IACxC,IAAME,gBAAgB;MAAA,IAAAC,IAAA,GAAAC,iBAAA,eAAAC,mBAAA,GAAAC,IAAA,CAAG,SAAAC,QAAOC,OAA0B;QAAA,IAAAC,GAAA,EAAAC,MAAA;QAAA,OAAAL,mBAAA,GAAAM,IAAA,UAAAC,SAAAC,QAAA;UAAA,kBAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAAE,IAAA;YAAA;cAAAF,QAAA,CAAAC,IAAA;cAAAD,QAAA,CAAAE,IAAA;cAAA,OAEpCP,OAAO;YAAA;cAAnBC,GAAG,GAAAI,QAAA,CAAAG,IAAA;cAEDN,MAAM,GAAKD,GAAG,CAAdC,MAAM;cACd,IAAI,CAACtB,eAAe,CAACsB,MAAM,CAAC,EAAE;gBAC5Bb,QAAQ,CAACoB,MAAM,CAAChB,QAAQ,CAAC;cAC3B;;cAEA;cAAA,OAAAY,QAAA,CAAAK,MAAA,WACOT,GAAG,CAACU,KAAK,CAAC,CAAC;YAAA;cAAAN,QAAA,CAAAC,IAAA;cAAAD,QAAA,CAAAO,EAAA,GAAAP,QAAA;cAElBhB,QAAQ,CAACoB,MAAM,CAAChB,QAAQ,CAAC;cAAC,MAAAY,QAAA,CAAAO,EAAA;YAAA;YAAA;cAAA,OAAAP,QAAA,CAAAQ,IAAA;UAAA;QAAA,GAAAd,OAAA;MAAA,CAG7B;MAAA,gBAfKL,gBAAgBA,CAAAoB,EAAA;QAAA,OAAAnB,IAAA,CAAAoB,KAAA,OAAAC,SAAA;MAAA;IAAA,GAerB;IAED,IAAMC,kBAAkB,GAAG5B,QAAQ,CAAC6B,GAAG,CAACzB,QAAQ,CAAC;IACjD,IAAIwB,kBAAkB,EAAE;MACtB,OAAOvB,gBAAgB,CAACuB,kBAAkB,CAAC;IAC7C;IAEA,IAAME,YAAY,GAAG/B,KAAK,CAACI,UAAU,EAAED,IAAI,CAAC;IAC5CF,QAAQ,CAAC+B,GAAG,CAAC3B,QAAQ,EAAE0B,YAAY,CAAC;IAEpC,OAAOzB,gBAAgB,CAACyB,YAAY,CAAC;EACvC,CAAC;EAED,OAAO7B,WAAW;AACpB,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @author Kuitos
3
+ * @since 2024-03-05
4
+ */
5
+ import { type Fetch } from './utils';
6
+ export declare const makeFetchRetryable: (fetch: Fetch, retryTimes?: number) => Fetch;
@@ -0,0 +1,50 @@
1
+ import _regeneratorRuntime from "@babel/runtime/helpers/esm/regeneratorRuntime";
2
+ import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
3
+ /**
4
+ * @author Kuitos
5
+ * @since 2024-03-05
6
+ */
7
+
8
+ export var makeFetchRetryable = function makeFetchRetryable(fetch) {
9
+ var retryTimes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
10
+ var retryCount = 0;
11
+ var fetchWithRetryable = /*#__PURE__*/function () {
12
+ var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(input, init) {
13
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
14
+ while (1) switch (_context.prev = _context.next) {
15
+ case 0:
16
+ _context.prev = 0;
17
+ _context.next = 3;
18
+ return fetch(input, init);
19
+ case 3:
20
+ return _context.abrupt("return", _context.sent);
21
+ case 6:
22
+ _context.prev = 6;
23
+ _context.t0 = _context["catch"](0);
24
+ if (!(retryCount < retryTimes)) {
25
+ _context.next = 14;
26
+ break;
27
+ }
28
+ retryCount++;
29
+ if (process.env.NODE_ENV === 'development') {
30
+ console.debug("[qiankun] fetch retrying --> url: ".concat(typeof input === 'string' ? input : 'url' in input ? input.url : input.href, " , time: ").concat(retryCount));
31
+ }
32
+ _context.next = 13;
33
+ return fetchWithRetryable(input, init);
34
+ case 13:
35
+ return _context.abrupt("return", _context.sent);
36
+ case 14:
37
+ throw _context.t0;
38
+ case 15:
39
+ case "end":
40
+ return _context.stop();
41
+ }
42
+ }, _callee, null, [[0, 6]]);
43
+ }));
44
+ return function fetchWithRetryable(_x, _x2) {
45
+ return _ref.apply(this, arguments);
46
+ };
47
+ }();
48
+ return fetchWithRetryable;
49
+ };
50
+ //# sourceMappingURL=makeFetchRetryable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["makeFetchRetryable","fetch","retryTimes","arguments","length","undefined","retryCount","fetchWithRetryable","_ref","_asyncToGenerator","_regeneratorRuntime","mark","_callee","input","init","wrap","_callee$","_context","prev","next","abrupt","sent","t0","process","env","NODE_ENV","console","debug","concat","url","href","stop","_x","_x2","apply"],"sources":["../../../src/fetch-utils/makeFetchRetryable.ts"],"sourcesContent":["/**\n * @author Kuitos\n * @since 2024-03-05\n */\n\nimport { type Fetch } from './utils';\n\nexport const makeFetchRetryable: (fetch: Fetch, retryTimes?: number) => Fetch = (fetch, retryTimes = 1) => {\n let retryCount = 0;\n\n const fetchWithRetryable: Fetch = async (input, init) => {\n try {\n return await fetch(input, init);\n } catch (e) {\n if (retryCount < retryTimes) {\n retryCount++;\n\n if (process.env.NODE_ENV === 'development') {\n console.debug(\n `[qiankun] fetch retrying --> url: ${\n typeof input === 'string' ? input : 'url' in input ? input.url : input.href\n } , time: ${retryCount}`,\n );\n }\n\n return await fetchWithRetryable(input, init);\n }\n\n throw e;\n }\n };\n\n return fetchWithRetryable;\n};\n"],"mappings":";;AAAA;AACA;AACA;AACA;;AAIA,OAAO,IAAMA,kBAAgE,GAAG,SAAnEA,kBAAgEA,CAAIC,KAAK,EAAqB;EAAA,IAAnBC,UAAU,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC;EACpG,IAAIG,UAAU,GAAG,CAAC;EAElB,IAAMC,kBAAyB;IAAA,IAAAC,IAAA,GAAAC,iBAAA,eAAAC,mBAAA,GAAAC,IAAA,CAAG,SAAAC,QAAOC,KAAK,EAAEC,IAAI;MAAA,OAAAJ,mBAAA,GAAAK,IAAA,UAAAC,SAAAC,QAAA;QAAA,kBAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAAE,IAAA;UAAA;YAAAF,QAAA,CAAAC,IAAA;YAAAD,QAAA,CAAAE,IAAA;YAAA,OAEnClB,KAAK,CAACY,KAAK,EAAEC,IAAI,CAAC;UAAA;YAAA,OAAAG,QAAA,CAAAG,MAAA,WAAAH,QAAA,CAAAI,IAAA;UAAA;YAAAJ,QAAA,CAAAC,IAAA;YAAAD,QAAA,CAAAK,EAAA,GAAAL,QAAA;YAAA,MAE3BX,UAAU,GAAGJ,UAAU;cAAAe,QAAA,CAAAE,IAAA;cAAA;YAAA;YACzBb,UAAU,EAAE;YAEZ,IAAIiB,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,aAAa,EAAE;cAC1CC,OAAO,CAACC,KAAK,sCAAAC,MAAA,CAET,OAAOf,KAAK,KAAK,QAAQ,GAAGA,KAAK,GAAG,KAAK,IAAIA,KAAK,GAAGA,KAAK,CAACgB,GAAG,GAAGhB,KAAK,CAACiB,IAAI,eAAAF,MAAA,CACjEtB,UAAU,CACxB,CAAC;YACH;YAACW,QAAA,CAAAE,IAAA;YAAA,OAEYZ,kBAAkB,CAACM,KAAK,EAAEC,IAAI,CAAC;UAAA;YAAA,OAAAG,QAAA,CAAAG,MAAA,WAAAH,QAAA,CAAAI,IAAA;UAAA;YAAA,MAAAJ,QAAA,CAAAK,EAAA;UAAA;UAAA;YAAA,OAAAL,QAAA,CAAAc,IAAA;QAAA;MAAA,GAAAnB,OAAA;IAAA,CAKjD;IAAA,gBApBKL,kBAAyBA,CAAAyB,EAAA,EAAAC,GAAA;MAAA,OAAAzB,IAAA,CAAA0B,KAAA,OAAA/B,SAAA;IAAA;EAAA,GAoB9B;EAED,OAAOI,kBAAkB;AAC3B,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @author Kuitos
3
+ * @since 2024-03-05
4
+ * wrap fetch to throw error when response status is not 200~400
5
+ */
6
+ import { type Fetch } from './utils';
7
+ export declare const makeFetchThrowable: (fetch: Fetch) => Fetch;
@@ -0,0 +1,39 @@
1
+ import _regeneratorRuntime from "@babel/runtime/helpers/esm/regeneratorRuntime";
2
+ import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
3
+ /**
4
+ * @author Kuitos
5
+ * @since 2024-03-05
6
+ * wrap fetch to throw error when response status is not 200~400
7
+ */
8
+
9
+ import { isValidResponse } from "./utils";
10
+ export var makeFetchThrowable = function makeFetchThrowable(fetch) {
11
+ return /*#__PURE__*/function () {
12
+ var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(url, init) {
13
+ var res;
14
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
15
+ while (1) switch (_context.prev = _context.next) {
16
+ case 0:
17
+ _context.next = 2;
18
+ return fetch(url, init);
19
+ case 2:
20
+ res = _context.sent;
21
+ if (isValidResponse(res.status)) {
22
+ _context.next = 5;
23
+ break;
24
+ }
25
+ throw new Error("[RESPONSE_ERROR_AS_STATUS_INVALID] ".concat(res.status, " ").concat(res.statusText, " ").concat(typeof url === 'string' ? url : 'url' in url ? url.url : url.href, " ").concat(JSON.stringify(init)));
26
+ case 5:
27
+ return _context.abrupt("return", res);
28
+ case 6:
29
+ case "end":
30
+ return _context.stop();
31
+ }
32
+ }, _callee);
33
+ }));
34
+ return function (_x, _x2) {
35
+ return _ref.apply(this, arguments);
36
+ };
37
+ }();
38
+ };
39
+ //# sourceMappingURL=makeFetchThrowable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["isValidResponse","makeFetchThrowable","fetch","_ref","_asyncToGenerator","_regeneratorRuntime","mark","_callee","url","init","res","wrap","_callee$","_context","prev","next","sent","status","Error","concat","statusText","href","JSON","stringify","abrupt","stop","_x","_x2","apply","arguments"],"sources":["../../../src/fetch-utils/makeFetchThrowable.ts"],"sourcesContent":["/**\n * @author Kuitos\n * @since 2024-03-05\n * wrap fetch to throw error when response status is not 200~400\n */\n\nimport { type Fetch, isValidResponse } from './utils';\n\nexport const makeFetchThrowable: (fetch: Fetch) => Fetch = (fetch) => {\n return async (url, init) => {\n const res = await fetch(url, init);\n if (!isValidResponse(res.status)) {\n throw new Error(\n `[RESPONSE_ERROR_AS_STATUS_INVALID] ${res.status} ${res.statusText} ${\n typeof url === 'string' ? url : 'url' in url ? url.url : url.href\n } ${JSON.stringify(init)}`,\n );\n }\n\n return res;\n };\n};\n"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;;AAEA,SAAqBA,eAAe;AAEpC,OAAO,IAAMC,kBAA2C,GAAG,SAA9CA,kBAA2CA,CAAIC,KAAK,EAAK;EACpE;IAAA,IAAAC,IAAA,GAAAC,iBAAA,eAAAC,mBAAA,GAAAC,IAAA,CAAO,SAAAC,QAAOC,GAAG,EAAEC,IAAI;MAAA,IAAAC,GAAA;MAAA,OAAAL,mBAAA,GAAAM,IAAA,UAAAC,SAAAC,QAAA;QAAA,kBAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAAE,IAAA;UAAA;YAAAF,QAAA,CAAAE,IAAA;YAAA,OACHb,KAAK,CAACM,GAAG,EAAEC,IAAI,CAAC;UAAA;YAA5BC,GAAG,GAAAG,QAAA,CAAAG,IAAA;YAAA,IACJhB,eAAe,CAACU,GAAG,CAACO,MAAM,CAAC;cAAAJ,QAAA,CAAAE,IAAA;cAAA;YAAA;YAAA,MACxB,IAAIG,KAAK,uCAAAC,MAAA,CACyBT,GAAG,CAACO,MAAM,OAAAE,MAAA,CAAIT,GAAG,CAACU,UAAU,OAAAD,MAAA,CAChE,OAAOX,GAAG,KAAK,QAAQ,GAAGA,GAAG,GAAG,KAAK,IAAIA,GAAG,GAAGA,GAAG,CAACA,GAAG,GAAGA,GAAG,CAACa,IAAI,OAAAF,MAAA,CAC/DG,IAAI,CAACC,SAAS,CAACd,IAAI,CAAC,CAC1B,CAAC;UAAA;YAAA,OAAAI,QAAA,CAAAW,MAAA,WAGId,GAAG;UAAA;UAAA;YAAA,OAAAG,QAAA,CAAAY,IAAA;QAAA;MAAA,GAAAlB,OAAA;IAAA,CACX;IAAA,iBAAAmB,EAAA,EAAAC,GAAA;MAAA,OAAAxB,IAAA,CAAAyB,KAAA,OAAAC,SAAA;IAAA;EAAA;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export type Fetch = typeof window.fetch;
2
+ export declare const isValidResponse: (status: number) => boolean;
@@ -0,0 +1,4 @@
1
+ export var isValidResponse = function isValidResponse(status) {
2
+ return status >= 200 && status < 400;
3
+ };
4
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["isValidResponse","status"],"sources":["../../../src/fetch-utils/utils.ts"],"sourcesContent":["export type Fetch = typeof window.fetch;\n\nexport const isValidResponse = (status: number): boolean => {\n return status >= 200 && status < 400;\n};\n"],"mappings":"AAEA,OAAO,IAAMA,eAAe,GAAG,SAAlBA,eAAeA,CAAIC,MAAc,EAAc;EAC1D,OAAOA,MAAM,IAAI,GAAG,IAAIA,MAAM,GAAG,GAAG;AACtC,CAAC"}
@@ -7,5 +7,7 @@ export * from './utils';
7
7
  export * from './module-resolver';
8
8
  export * from './common';
9
9
  export * from './reporter';
10
- export * from './fetch-utils/wrapFetchWithCache';
10
+ export * from './fetch-utils/makeFetchCacheable';
11
+ export * from './fetch-utils/makeFetchRetryable';
12
+ export * from './fetch-utils/makeFetchThrowable';
11
13
  export * from './deferred-queue';
package/dist/esm/index.js CHANGED
@@ -7,6 +7,8 @@ export * from "./utils";
7
7
  export * from "./module-resolver";
8
8
  export * from "./common";
9
9
  export * from "./reporter";
10
- export * from "./fetch-utils/wrapFetchWithCache";
10
+ export * from "./fetch-utils/makeFetchCacheable";
11
+ export * from "./fetch-utils/makeFetchRetryable";
12
+ export * from "./fetch-utils/makeFetchThrowable";
11
13
  export * from "./deferred-queue";
12
14
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["../../src/index.ts"],"sourcesContent":["/**\n * @author Kuitos\n * @since 2023-05-06\n */\nexport * from './assets-transpilers';\nexport * from './utils';\nexport * from './module-resolver';\nexport * from './common';\nexport * from './reporter';\nexport * from './fetch-utils/wrapFetchWithCache';\nexport * from './deferred-queue';\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA"}
1
+ {"version":3,"names":[],"sources":["../../src/index.ts"],"sourcesContent":["/**\n * @author Kuitos\n * @since 2023-05-06\n */\nexport * from './assets-transpilers';\nexport * from './utils';\nexport * from './module-resolver';\nexport * from './common';\nexport * from './reporter';\nexport * from './fetch-utils/makeFetchCacheable';\nexport * from './fetch-utils/makeFetchRetryable';\nexport * from './fetch-utils/makeFetchThrowable';\nexport * from './deferred-queue';\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA"}
package/dist/esm/utils.js CHANGED
@@ -1,12 +1,11 @@
1
+ import _regeneratorRuntime from "@babel/runtime/helpers/esm/regeneratorRuntime";
1
2
  import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
2
3
  import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
3
4
  import _createClass from "@babel/runtime/helpers/esm/createClass";
5
+ import _classPrivateFieldInitSpec from "@babel/runtime/helpers/esm/classPrivateFieldInitSpec";
4
6
  import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
5
7
  import _classPrivateFieldGet from "@babel/runtime/helpers/esm/classPrivateFieldGet";
6
8
  import _classPrivateFieldSet from "@babel/runtime/helpers/esm/classPrivateFieldSet";
7
- import _regeneratorRuntime from "@babel/runtime/regenerator";
8
- function _classPrivateFieldInitSpec(obj, privateMap, value) { _checkPrivateRedeclaration(obj, privateMap); privateMap.set(obj, value); }
9
- function _checkPrivateRedeclaration(obj, privateCollection) { if (privateCollection.has(obj)) { throw new TypeError("Cannot initialize the same private elements twice on an object"); } }
10
9
  /**
11
10
  * @author Kuitos
12
11
  * @since 2023-04-26
@@ -58,8 +57,8 @@ export function waitUntilSettled(_x) {
58
57
  return _waitUntilSettled.apply(this, arguments);
59
58
  }
60
59
  function _waitUntilSettled() {
61
- _waitUntilSettled = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(promise) {
62
- return _regeneratorRuntime.wrap(function _callee$(_context) {
60
+ _waitUntilSettled = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(promise) {
61
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
63
62
  while (1) switch (_context.prev = _context.next) {
64
63
  case 0:
65
64
  _context.prev = 0;
@@ -1 +1 @@
1
- {"version":3,"names":["create","Object","defineProperty","getOwnPropertyDescriptor","getOwnPropertyNames","freeze","keys","hasOwnProperty","caller","p","prototype","call","_status","WeakMap","Deferred","_this","_classCallCheck","_defineProperty","_classPrivateFieldInitSpec","writable","value","promise","Promise","resolve","reject","_classPrivateFieldSet","reason","_createClass","key","isSettled","_classPrivateFieldGet","waitUntilSettled","_x","_waitUntilSettled","apply","arguments","_asyncToGenerator","_regeneratorRuntime","mark","_callee","wrap","_callee$","_context","prev","next","t0","process","env","NODE_ENV","console","warn","stop","getEntireUrl","uri","baseURI","publicPath","URL","window","location","href","entireUrl","toString","isRuntimeCompatible","_URL","Proxy","TransformStream","createObjectURL"],"sources":["../../src/utils.ts"],"sourcesContent":["/**\n * @author Kuitos\n * @since 2023-04-26\n */\n\n// eslint-disable-next-line @typescript-eslint/unbound-method\nexport const { create, defineProperty, getOwnPropertyDescriptor, getOwnPropertyNames, freeze, keys } = Object;\nexport const hasOwnProperty = (caller: unknown, p: PropertyKey) => Object.prototype.hasOwnProperty.call(caller, p);\n\nexport class Deferred<T> {\n promise: Promise<T>;\n\n #status: 'pending' | 'fulfilled' | 'rejected' = 'pending';\n\n resolve!: (value: T | PromiseLike<T>) => void;\n\n reject!: (reason?: unknown) => void;\n\n constructor() {\n this.promise = new Promise<T>((resolve, reject) => {\n this.resolve = (value) => {\n this.#status = 'fulfilled';\n resolve(value);\n };\n this.reject = (reason) => {\n this.#status = 'rejected';\n reject(reason);\n };\n });\n }\n\n isSettled(): boolean {\n return this.#status !== 'pending';\n }\n}\n\nexport async function waitUntilSettled(promise: Promise<void>): Promise<void> {\n try {\n await promise;\n } catch (e) {\n if (process.env.NODE_ENV === 'development') {\n console.warn('waitUntilSettled error', e);\n }\n }\n}\n\nexport function getEntireUrl(uri: string, baseURI: string): string {\n const publicPath = new URL(baseURI, window.location.href);\n const entireUrl = new URL(uri, publicPath.toString());\n return entireUrl.toString();\n}\n\n/**\n * Check if the running environment support qiankun 3.0\n *\n */\nexport function isRuntimeCompatible(): boolean {\n return (\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n typeof Proxy === 'function' && typeof TransformStream === 'function' && typeof URL?.createObjectURL === 'function'\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["create","Object","defineProperty","getOwnPropertyDescriptor","getOwnPropertyNames","freeze","keys","hasOwnProperty","caller","p","prototype","call","_status","WeakMap","Deferred","_this","_classCallCheck","_defineProperty","_classPrivateFieldInitSpec","writable","value","promise","Promise","resolve","reject","_classPrivateFieldSet","reason","_createClass","key","isSettled","_classPrivateFieldGet","waitUntilSettled","_x","_waitUntilSettled","apply","arguments","_asyncToGenerator","_regeneratorRuntime","mark","_callee","wrap","_callee$","_context","prev","next","t0","process","env","NODE_ENV","console","warn","stop","getEntireUrl","uri","baseURI","publicPath","URL","window","location","href","entireUrl","toString","isRuntimeCompatible","_URL","Proxy","TransformStream","createObjectURL"],"sources":["../../src/utils.ts"],"sourcesContent":["/**\n * @author Kuitos\n * @since 2023-04-26\n */\n\n// eslint-disable-next-line @typescript-eslint/unbound-method\nexport const { create, defineProperty, getOwnPropertyDescriptor, getOwnPropertyNames, freeze, keys } = Object;\nexport const hasOwnProperty = (caller: unknown, p: PropertyKey) => Object.prototype.hasOwnProperty.call(caller, p);\n\nexport class Deferred<T> {\n promise: Promise<T>;\n\n #status: 'pending' | 'fulfilled' | 'rejected' = 'pending';\n\n resolve!: (value: T | PromiseLike<T>) => void;\n\n reject!: (reason?: unknown) => void;\n\n constructor() {\n this.promise = new Promise<T>((resolve, reject) => {\n this.resolve = (value) => {\n this.#status = 'fulfilled';\n resolve(value);\n };\n this.reject = (reason) => {\n this.#status = 'rejected';\n reject(reason);\n };\n });\n }\n\n isSettled(): boolean {\n return this.#status !== 'pending';\n }\n}\n\nexport async function waitUntilSettled(promise: Promise<void>): Promise<void> {\n try {\n await promise;\n } catch (e) {\n if (process.env.NODE_ENV === 'development') {\n console.warn('waitUntilSettled error', e);\n }\n }\n}\n\nexport function getEntireUrl(uri: string, baseURI: string): string {\n const publicPath = new URL(baseURI, window.location.href);\n const entireUrl = new URL(uri, publicPath.toString());\n return entireUrl.toString();\n}\n\n/**\n * Check if the running environment support qiankun 3.0\n *\n */\nexport function isRuntimeCompatible(): boolean {\n return (\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n typeof Proxy === 'function' && typeof TransformStream === 'function' && typeof URL?.createObjectURL === 'function'\n );\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,11 @@
1
1
  {
2
2
  "name": "@qiankunjs/shared",
3
- "version": "0.0.1-rc.10",
3
+ "version": "0.0.1-rc.12",
4
4
  "description": "internal shared package for qiankun",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "git+https://github.com/umijs/qiankun.git"
8
+ },
5
9
  "main": "./dist/cjs/index.js",
6
10
  "module": "./dist/esm/index.js",
7
11
  "types": "./dist/esm/index.d.ts",
@@ -9,7 +13,7 @@
9
13
  "author": "Kuitos",
10
14
  "license": "MIT",
11
15
  "dependencies": {
12
- "@babel/runtime": "^7.10.5",
16
+ "@babel/runtime": "^7.26.10",
13
17
  "lodash": "^4.17.11",
14
18
  "semver": "^7.5.3"
15
19
  },
@@ -1,3 +0,0 @@
1
- type Fetch = typeof window.fetch;
2
- export declare const wrapFetchWithCache: (fetch: Fetch) => Fetch;
3
- export {};
@@ -1 +0,0 @@
1
- {"version":3,"names":["_miniLruCache","require","getCacheKey","input","url","href","getGlobalCache","_once2","default","LRUCache","isValidaResponse","status","wrapFetchWithCache","exports","fetch","lruCache","cachedFetch","init","fetchInput","cacheKey","wrapFetchPromise","_ref","_asyncToGenerator2","_regenerator","mark","_callee","promise","res","wrap","_callee$","_context","prev","next","sent","delete","abrupt","clone","t0","stop","_x","apply","arguments","cachedFetchPromise","get","fetchPromise","set"],"sources":["../../../src/fetch-utils/wrapFetchWithCache.ts"],"sourcesContent":["/**\n * @author Kuitos\n * @since 2023-11-06\n */\nimport { once } from 'lodash';\nimport { LRUCache } from './miniLruCache';\n\ntype Fetch = typeof window.fetch;\n\nconst getCacheKey = (input: Parameters<Fetch>[0]): string => {\n return typeof input === 'string' ? input : 'url' in input ? input.url : input.href;\n};\n\nconst getGlobalCache = once(() => {\n return new LRUCache<string, Promise<Response>>(50);\n});\n\nconst isValidaResponse = (status: number): boolean => {\n return status >= 200 && status < 400;\n};\n\nexport const wrapFetchWithCache: (fetch: Fetch) => Fetch = (fetch) => {\n const lruCache = getGlobalCache();\n\n const cachedFetch: Fetch = (input, init) => {\n const fetchInput = input as Parameters<Fetch>[0];\n const cacheKey = getCacheKey(fetchInput);\n const wrapFetchPromise = async (promise: Promise<Response>): Promise<Response> => {\n try {\n const res = await promise;\n\n const { status } = res;\n if (!isValidaResponse(status)) {\n lruCache.delete(cacheKey);\n }\n\n // must clone the response as one response body can only be read once as a stream\n return res.clone();\n } catch (e) {\n lruCache.delete(cacheKey);\n throw e;\n }\n };\n\n const cachedFetchPromise = lruCache.get(cacheKey);\n if (cachedFetchPromise) {\n return wrapFetchPromise(cachedFetchPromise);\n }\n\n const fetchPromise = fetch(fetchInput, init);\n lruCache.set(cacheKey, fetchPromise);\n\n return wrapFetchPromise(fetchPromise);\n };\n\n return cachedFetch;\n};\n"],"mappings":";;;;;;;;;;AAKA,IAAAA,aAAA,GAAAC,OAAA;AALA;AACA;AACA;AACA;;AAMA,IAAMC,WAAW,GAAG,SAAdA,WAAWA,CAAIC,KAA2B,EAAa;EAC3D,OAAO,OAAOA,KAAK,KAAK,QAAQ,GAAGA,KAAK,GAAG,KAAK,IAAIA,KAAK,GAAGA,KAAK,CAACC,GAAG,GAAGD,KAAK,CAACE,IAAI;AACpF,CAAC;AAED,IAAMC,cAAc,GAAG,IAAAC,MAAA,CAAAC,OAAA,EAAK,YAAM;EAChC,OAAO,IAAIC,sBAAQ,CAA4B,EAAE,CAAC;AACpD,CAAC,CAAC;AAEF,IAAMC,gBAAgB,GAAG,SAAnBA,gBAAgBA,CAAIC,MAAc,EAAc;EACpD,OAAOA,MAAM,IAAI,GAAG,IAAIA,MAAM,GAAG,GAAG;AACtC,CAAC;AAEM,IAAMC,kBAA2C,GAAAC,OAAA,CAAAD,kBAAA,GAAG,SAA9CA,kBAA2CA,CAAIE,KAAK,EAAK;EACpE,IAAMC,QAAQ,GAAGT,cAAc,CAAC,CAAC;EAEjC,IAAMU,WAAkB,GAAG,SAArBA,WAAkBA,CAAIb,KAAK,EAAEc,IAAI,EAAK;IAC1C,IAAMC,UAAU,GAAGf,KAA6B;IAChD,IAAMgB,QAAQ,GAAGjB,WAAW,CAACgB,UAAU,CAAC;IACxC,IAAME,gBAAgB;MAAA,IAAAC,IAAA,OAAAC,kBAAA,CAAAd,OAAA,gBAAAe,YAAA,CAAAf,OAAA,CAAAgB,IAAA,CAAG,SAAAC,QAAOC,OAA0B;QAAA,IAAAC,GAAA,EAAAhB,MAAA;QAAA,OAAAY,YAAA,CAAAf,OAAA,CAAAoB,IAAA,UAAAC,SAAAC,QAAA;UAAA,kBAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAAE,IAAA;YAAA;cAAAF,QAAA,CAAAC,IAAA;cAAAD,QAAA,CAAAE,IAAA;cAAA,OAEpCN,OAAO;YAAA;cAAnBC,GAAG,GAAAG,QAAA,CAAAG,IAAA;cAEDtB,MAAM,GAAKgB,GAAG,CAAdhB,MAAM;cACd,IAAI,CAACD,gBAAgB,CAACC,MAAM,CAAC,EAAE;gBAC7BI,QAAQ,CAACmB,MAAM,CAACf,QAAQ,CAAC;cAC3B;;cAEA;cAAA,OAAAW,QAAA,CAAAK,MAAA,WACOR,GAAG,CAACS,KAAK,CAAC,CAAC;YAAA;cAAAN,QAAA,CAAAC,IAAA;cAAAD,QAAA,CAAAO,EAAA,GAAAP,QAAA;cAElBf,QAAQ,CAACmB,MAAM,CAACf,QAAQ,CAAC;cAAC,MAAAW,QAAA,CAAAO,EAAA;YAAA;YAAA;cAAA,OAAAP,QAAA,CAAAQ,IAAA;UAAA;QAAA,GAAAb,OAAA;MAAA,CAG7B;MAAA,gBAfKL,gBAAgBA,CAAAmB,EAAA;QAAA,OAAAlB,IAAA,CAAAmB,KAAA,OAAAC,SAAA;MAAA;IAAA,GAerB;IAED,IAAMC,kBAAkB,GAAG3B,QAAQ,CAAC4B,GAAG,CAACxB,QAAQ,CAAC;IACjD,IAAIuB,kBAAkB,EAAE;MACtB,OAAOtB,gBAAgB,CAACsB,kBAAkB,CAAC;IAC7C;IAEA,IAAME,YAAY,GAAG9B,KAAK,CAACI,UAAU,EAAED,IAAI,CAAC;IAC5CF,QAAQ,CAAC8B,GAAG,CAAC1B,QAAQ,EAAEyB,YAAY,CAAC;IAEpC,OAAOxB,gBAAgB,CAACwB,YAAY,CAAC;EACvC,CAAC;EAED,OAAO5B,WAAW;AACpB,CAAC"}
@@ -1,3 +0,0 @@
1
- type Fetch = typeof window.fetch;
2
- export declare const wrapFetchWithCache: (fetch: Fetch) => Fetch;
3
- export {};
@@ -1 +0,0 @@
1
- {"version":3,"names":["_regeneratorRuntime","LRUCache","getCacheKey","input","url","href","getGlobalCache","_once","isValidaResponse","status","wrapFetchWithCache","fetch","lruCache","cachedFetch","init","fetchInput","cacheKey","wrapFetchPromise","_ref","_asyncToGenerator","mark","_callee","promise","res","wrap","_callee$","_context","prev","next","sent","delete","abrupt","clone","t0","stop","_x","apply","arguments","cachedFetchPromise","get","fetchPromise","set"],"sources":["../../../src/fetch-utils/wrapFetchWithCache.ts"],"sourcesContent":["/**\n * @author Kuitos\n * @since 2023-11-06\n */\nimport { once } from 'lodash';\nimport { LRUCache } from './miniLruCache';\n\ntype Fetch = typeof window.fetch;\n\nconst getCacheKey = (input: Parameters<Fetch>[0]): string => {\n return typeof input === 'string' ? input : 'url' in input ? input.url : input.href;\n};\n\nconst getGlobalCache = once(() => {\n return new LRUCache<string, Promise<Response>>(50);\n});\n\nconst isValidaResponse = (status: number): boolean => {\n return status >= 200 && status < 400;\n};\n\nexport const wrapFetchWithCache: (fetch: Fetch) => Fetch = (fetch) => {\n const lruCache = getGlobalCache();\n\n const cachedFetch: Fetch = (input, init) => {\n const fetchInput = input as Parameters<Fetch>[0];\n const cacheKey = getCacheKey(fetchInput);\n const wrapFetchPromise = async (promise: Promise<Response>): Promise<Response> => {\n try {\n const res = await promise;\n\n const { status } = res;\n if (!isValidaResponse(status)) {\n lruCache.delete(cacheKey);\n }\n\n // must clone the response as one response body can only be read once as a stream\n return res.clone();\n } catch (e) {\n lruCache.delete(cacheKey);\n throw e;\n }\n };\n\n const cachedFetchPromise = lruCache.get(cacheKey);\n if (cachedFetchPromise) {\n return wrapFetchPromise(cachedFetchPromise);\n }\n\n const fetchPromise = fetch(fetchInput, init);\n lruCache.set(cacheKey, fetchPromise);\n\n return wrapFetchPromise(fetchPromise);\n };\n\n return cachedFetch;\n};\n"],"mappings":";;AAAA;AACA;AACA;AACA;AAHA,OAAAA,mBAAA;AAKA,SAASC,QAAQ;AAIjB,IAAMC,WAAW,GAAG,SAAdA,WAAWA,CAAIC,KAA2B,EAAa;EAC3D,OAAO,OAAOA,KAAK,KAAK,QAAQ,GAAGA,KAAK,GAAG,KAAK,IAAIA,KAAK,GAAGA,KAAK,CAACC,GAAG,GAAGD,KAAK,CAACE,IAAI;AACpF,CAAC;AAED,IAAMC,cAAc,GAAGC,KAAA,CAAK,YAAM;EAChC,OAAO,IAAIN,QAAQ,CAA4B,EAAE,CAAC;AACpD,CAAC,CAAC;AAEF,IAAMO,gBAAgB,GAAG,SAAnBA,gBAAgBA,CAAIC,MAAc,EAAc;EACpD,OAAOA,MAAM,IAAI,GAAG,IAAIA,MAAM,GAAG,GAAG;AACtC,CAAC;AAED,OAAO,IAAMC,kBAA2C,GAAG,SAA9CA,kBAA2CA,CAAIC,KAAK,EAAK;EACpE,IAAMC,QAAQ,GAAGN,cAAc,CAAC,CAAC;EAEjC,IAAMO,WAAkB,GAAG,SAArBA,WAAkBA,CAAIV,KAAK,EAAEW,IAAI,EAAK;IAC1C,IAAMC,UAAU,GAAGZ,KAA6B;IAChD,IAAMa,QAAQ,GAAGd,WAAW,CAACa,UAAU,CAAC;IACxC,IAAME,gBAAgB;MAAA,IAAAC,IAAA,GAAAC,iBAAA,eAAAnB,mBAAA,CAAAoB,IAAA,CAAG,SAAAC,QAAOC,OAA0B;QAAA,IAAAC,GAAA,EAAAd,MAAA;QAAA,OAAAT,mBAAA,CAAAwB,IAAA,UAAAC,SAAAC,QAAA;UAAA,kBAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAAE,IAAA;YAAA;cAAAF,QAAA,CAAAC,IAAA;cAAAD,QAAA,CAAAE,IAAA;cAAA,OAEpCN,OAAO;YAAA;cAAnBC,GAAG,GAAAG,QAAA,CAAAG,IAAA;cAEDpB,MAAM,GAAKc,GAAG,CAAdd,MAAM;cACd,IAAI,CAACD,gBAAgB,CAACC,MAAM,CAAC,EAAE;gBAC7BG,QAAQ,CAACkB,MAAM,CAACd,QAAQ,CAAC;cAC3B;;cAEA;cAAA,OAAAU,QAAA,CAAAK,MAAA,WACOR,GAAG,CAACS,KAAK,CAAC,CAAC;YAAA;cAAAN,QAAA,CAAAC,IAAA;cAAAD,QAAA,CAAAO,EAAA,GAAAP,QAAA;cAElBd,QAAQ,CAACkB,MAAM,CAACd,QAAQ,CAAC;cAAC,MAAAU,QAAA,CAAAO,EAAA;YAAA;YAAA;cAAA,OAAAP,QAAA,CAAAQ,IAAA;UAAA;QAAA,GAAAb,OAAA;MAAA,CAG7B;MAAA,gBAfKJ,gBAAgBA,CAAAkB,EAAA;QAAA,OAAAjB,IAAA,CAAAkB,KAAA,OAAAC,SAAA;MAAA;IAAA,GAerB;IAED,IAAMC,kBAAkB,GAAG1B,QAAQ,CAAC2B,GAAG,CAACvB,QAAQ,CAAC;IACjD,IAAIsB,kBAAkB,EAAE;MACtB,OAAOrB,gBAAgB,CAACqB,kBAAkB,CAAC;IAC7C;IAEA,IAAME,YAAY,GAAG7B,KAAK,CAACI,UAAU,EAAED,IAAI,CAAC;IAC5CF,QAAQ,CAAC6B,GAAG,CAACzB,QAAQ,EAAEwB,YAAY,CAAC;IAEpC,OAAOvB,gBAAgB,CAACuB,YAAY,CAAC;EACvC,CAAC;EAED,OAAO3B,WAAW;AACpB,CAAC"}