@qiankunjs/shared 0.0.1-rc.4 → 0.0.1-rc.6

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 (87) hide show
  1. package/dist/cjs/assets-transpilers/index.d.ts +7 -0
  2. package/dist/cjs/assets-transpilers/index.js +7 -0
  3. package/dist/cjs/assets-transpilers/index.js.map +1 -1
  4. package/dist/cjs/assets-transpilers/link.js +15 -13
  5. package/dist/cjs/assets-transpilers/link.js.map +1 -1
  6. package/dist/cjs/assets-transpilers/script.d.ts +4 -4
  7. package/dist/cjs/assets-transpilers/script.js +156 -96
  8. package/dist/cjs/assets-transpilers/script.js.map +1 -1
  9. package/dist/cjs/assets-transpilers/types.d.ts +10 -0
  10. package/dist/cjs/assets-transpilers/types.js +3 -2
  11. package/dist/cjs/assets-transpilers/types.js.map +1 -1
  12. package/dist/cjs/assets-transpilers/utils.js +2 -4
  13. package/dist/cjs/assets-transpilers/utils.js.map +1 -1
  14. package/dist/cjs/fetch-utils/miniLruCache.d.ts +8 -0
  15. package/dist/cjs/fetch-utils/miniLruCache.js +49 -0
  16. package/dist/cjs/fetch-utils/miniLruCache.js.map +1 -0
  17. package/dist/cjs/fetch-utils/wrapFetchWithCache.d.ts +3 -0
  18. package/dist/cjs/fetch-utils/wrapFetchWithCache.js +74 -0
  19. package/dist/cjs/fetch-utils/wrapFetchWithCache.js.map +1 -0
  20. package/dist/cjs/index.d.ts +2 -1
  21. package/dist/cjs/index.js +15 -4
  22. package/dist/cjs/index.js.map +1 -1
  23. package/dist/cjs/{error → reporter}/QiankunError.js +1 -2
  24. package/dist/cjs/reporter/QiankunError.js.map +1 -0
  25. package/dist/{esm/error → cjs/reporter}/index.d.ts +1 -0
  26. package/dist/cjs/reporter/index.js +28 -0
  27. package/dist/cjs/reporter/index.js.map +1 -0
  28. package/dist/cjs/reporter/logger.d.ts +1 -0
  29. package/dist/cjs/reporter/logger.js +14 -0
  30. package/dist/cjs/reporter/logger.js.map +1 -0
  31. package/dist/cjs/utils.d.ts +8 -1
  32. package/dist/cjs/utils.js +89 -35
  33. package/dist/cjs/utils.js.map +1 -1
  34. package/dist/esm/assets-transpilers/index.d.ts +7 -0
  35. package/dist/esm/assets-transpilers/index.js +7 -0
  36. package/dist/esm/assets-transpilers/index.js.map +1 -1
  37. package/dist/esm/assets-transpilers/link.js +15 -13
  38. package/dist/esm/assets-transpilers/link.js.map +1 -1
  39. package/dist/esm/assets-transpilers/script.d.ts +4 -4
  40. package/dist/esm/assets-transpilers/script.js +156 -95
  41. package/dist/esm/assets-transpilers/script.js.map +1 -1
  42. package/dist/esm/assets-transpilers/types.d.ts +10 -0
  43. package/dist/esm/assets-transpilers/types.js +2 -0
  44. package/dist/esm/assets-transpilers/types.js.map +1 -1
  45. package/dist/esm/fetch-utils/miniLruCache.d.ts +8 -0
  46. package/dist/esm/fetch-utils/miniLruCache.js +42 -0
  47. package/dist/esm/fetch-utils/miniLruCache.js.map +1 -0
  48. package/dist/esm/fetch-utils/wrapFetchWithCache.d.ts +3 -0
  49. package/dist/esm/fetch-utils/wrapFetchWithCache.js +66 -0
  50. package/dist/esm/fetch-utils/wrapFetchWithCache.js.map +1 -0
  51. package/dist/esm/index.d.ts +2 -1
  52. package/dist/esm/index.js +2 -1
  53. package/dist/esm/index.js.map +1 -1
  54. package/dist/esm/reporter/QiankunError.js.map +1 -0
  55. package/dist/{cjs/error → esm/reporter}/index.d.ts +1 -0
  56. package/dist/esm/reporter/index.js +3 -0
  57. package/dist/esm/reporter/index.js.map +1 -0
  58. package/dist/esm/reporter/logger.d.ts +1 -0
  59. package/dist/esm/reporter/logger.js +8 -0
  60. package/dist/esm/reporter/logger.js.map +1 -0
  61. package/dist/esm/utils.d.ts +8 -1
  62. package/dist/esm/utils.js +78 -19
  63. package/dist/esm/utils.js.map +1 -1
  64. package/package.json +5 -6
  65. package/dist/cjs/error/QiankunError.js.map +0 -1
  66. package/dist/cjs/error/index.js +0 -13
  67. package/dist/cjs/error/index.js.map +0 -1
  68. package/dist/esm/error/QiankunError.js.map +0 -1
  69. package/dist/esm/error/index.js +0 -2
  70. package/dist/esm/error/index.js.map +0 -1
  71. package/src/assets-transpilers/index.ts +0 -42
  72. package/src/assets-transpilers/link.ts +0 -130
  73. package/src/assets-transpilers/script.ts +0 -169
  74. package/src/assets-transpilers/types.ts +0 -22
  75. package/src/assets-transpilers/utils.ts +0 -27
  76. package/src/common.ts +0 -3
  77. package/src/error/QiankunError.ts +0 -5
  78. package/src/error/index.ts +0 -1
  79. package/src/index.ts +0 -9
  80. package/src/module-resolver/__tests__/index.ts +0 -75
  81. package/src/module-resolver/index.ts +0 -92
  82. package/src/module-resolver/types.ts +0 -9
  83. package/src/typings.d.ts +0 -13
  84. package/src/utils.ts +0 -37
  85. /package/dist/cjs/{error → reporter}/QiankunError.d.ts +0 -0
  86. /package/dist/esm/{error → reporter}/QiankunError.d.ts +0 -0
  87. /package/dist/esm/{error → reporter}/QiankunError.js +0 -0
@@ -3,15 +3,15 @@
3
3
  * @since 2023-03-16
4
4
  */
5
5
  import type { MatchResult } from '../module-resolver';
6
- import type { AssetsTranspilerOpts } from './types';
6
+ import type { AssetsTranspilerOpts, ScriptTranspilerOpts } from './types';
7
7
  import { Mode } from './types';
8
8
  type PreTranspileResult = {
9
- mode: Mode.REMOTE_ASSETS_IN_SANDBOX;
9
+ mode: Mode.REMOTE_ASSETS_IN_SANDBOX | Mode.REMOTE_ASSETS;
10
10
  result: {
11
11
  src: string;
12
12
  };
13
13
  } | {
14
- mode: Mode.REUSED_DEP_IN_SANDBOX;
14
+ mode: Mode.REUSED_DEP_IN_SANDBOX | Mode.REUSED_DEP;
15
15
  result: {
16
16
  src: string;
17
17
  } & MatchResult;
@@ -25,5 +25,5 @@ type PreTranspileResult = {
25
25
  result?: never;
26
26
  };
27
27
  export declare const preTranspile: (script: Partial<Pick<HTMLScriptElement, 'src' | 'type' | 'textContent'>>, baseURI: string, opts: AssetsTranspilerOpts) => PreTranspileResult;
28
- export default function transpileScript(script: HTMLScriptElement, baseURI: string, opts: AssetsTranspilerOpts): HTMLScriptElement;
28
+ export default function transpileScript(script: HTMLScriptElement, baseURI: string, opts: ScriptTranspilerOpts): HTMLScriptElement;
29
29
  export {};
@@ -1,10 +1,12 @@
1
+ import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
1
2
  import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
3
+ import _regeneratorRuntime from "@babel/runtime/regenerator";
2
4
  /**
3
5
  * @author Kuitos
4
6
  * @since 2023-03-16
5
7
  */
6
8
 
7
- import { getEntireUrl } from "../utils";
9
+ import { getEntireUrl, waitUntilSettled } from "../utils";
8
10
  import { Mode } from "./types";
9
11
  import { createReusingObjectUrl, isValidJavaScriptType } from "./utils";
10
12
  var getCredentials = function getCredentials(crossOrigin) {
@@ -22,37 +24,35 @@ export var preTranspile = function preTranspile(script, baseURI, opts) {
22
24
  moduleResolver = opts.moduleResolver;
23
25
  var src = script.src,
24
26
  type = script.type;
25
- if (sandbox) {
26
- if (src) {
27
- var entireUrl = getEntireUrl(src, baseURI);
28
- var matchedScript = moduleResolver === null || moduleResolver === void 0 ? void 0 : moduleResolver(entireUrl);
29
- if (matchedScript) {
30
- return {
31
- mode: Mode.REUSED_DEP_IN_SANDBOX,
32
- result: _objectSpread({
33
- src: entireUrl
34
- }, matchedScript)
35
- };
36
- }
27
+ if (src) {
28
+ var entireUrl = getEntireUrl(src, baseURI);
29
+ var matchedScript = moduleResolver === null || moduleResolver === void 0 ? void 0 : moduleResolver(entireUrl);
30
+ if (matchedScript) {
37
31
  return {
38
- mode: Mode.REMOTE_ASSETS_IN_SANDBOX,
39
- result: {
32
+ mode: sandbox ? Mode.REUSED_DEP_IN_SANDBOX : Mode.REUSED_DEP,
33
+ result: _objectSpread({
40
34
  src: entireUrl
41
- }
35
+ }, matchedScript)
42
36
  };
43
37
  }
44
- if (isValidJavaScriptType(type)) {
45
- var rawNode = opts.rawNode;
46
- var scriptNode = script.textContent ? script : rawNode.childNodes[0];
47
- var code = scriptNode.textContent;
48
- if (code) {
49
- return {
50
- mode: Mode.INLINE_CODE_IN_SANDBOX,
51
- result: {
52
- code: code
53
- }
54
- };
38
+ return {
39
+ mode: sandbox ? Mode.REMOTE_ASSETS_IN_SANDBOX : Mode.REMOTE_ASSETS,
40
+ result: {
41
+ src: entireUrl
55
42
  }
43
+ };
44
+ }
45
+ if (isValidJavaScriptType(type) && sandbox) {
46
+ var rawNode = opts.rawNode;
47
+ var scriptNode = script.textContent ? script : rawNode.childNodes[0];
48
+ var code = scriptNode.textContent;
49
+ if (code) {
50
+ return {
51
+ mode: Mode.INLINE_CODE_IN_SANDBOX,
52
+ result: {
53
+ code: code
54
+ }
55
+ };
56
56
  }
57
57
  }
58
58
  return {
@@ -64,86 +64,147 @@ export default function transpileScript(script, baseURI, opts) {
64
64
  // Such as <script src="./foo.js"></script> will be resolved to http://localhost:8000/foo.js while read script.src
65
65
  var srcAttribute = script.getAttribute('src');
66
66
  var sandbox = opts.sandbox,
67
- fetch = opts.fetch;
67
+ scriptTranspiledDeferred = opts.scriptTranspiledDeferred;
68
68
 
69
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
70
  // see https://github.com/webpack/webpack/blob/1f13ff9fe587e094df59d660b4611b1bd19aed4c/lib/runtime/LoadScriptRuntimeModule.js#L131-L136
71
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
72
  script.removeAttribute('data-webpack');
73
- var _preTranspile = preTranspile({
74
- src: srcAttribute || undefined,
75
- type: script.type,
76
- textContent: script.textContent
77
- }, baseURI, opts),
78
- mode = _preTranspile.mode,
79
- result = _preTranspile.result;
80
- switch (mode) {
81
- case Mode.REMOTE_ASSETS_IN_SANDBOX:
82
- {
83
- var src = result.src;
84
-
85
- // We must remove script src to avoid self execution as we need to fetch the script content and transpile it
86
- script.removeAttribute('src');
87
- script.dataset.src = src;
88
- var syncMode = !script.hasAttribute('async');
89
- var priority = syncMode ? 'high' : 'low';
90
- var credentials = getCredentials(script.crossOrigin);
91
- void fetch(src, {
92
- credentials: credentials,
93
- priority: priority
94
- }).then(function (res) {
95
- return res.text();
96
- }).then(function (code) {
97
- var codeFactory = sandbox.makeEvaluateFactory(code, src);
73
+ try {
74
+ var _preTranspile = preTranspile({
75
+ src: srcAttribute || undefined,
76
+ type: script.type,
77
+ textContent: script.textContent
78
+ }, baseURI, opts),
79
+ mode = _preTranspile.mode,
80
+ result = _preTranspile.result;
81
+ switch (mode) {
82
+ case Mode.REMOTE_ASSETS_IN_SANDBOX:
83
+ {
84
+ var fetch = opts.fetch;
85
+ var src = result.src;
98
86
 
87
+ // We must remove script src to avoid self execution as we need to fetch the script content and transpile it
88
+ script.removeAttribute('src');
89
+ script.dataset.src = src;
90
+ var syncMode = !script.hasAttribute('async');
91
+ var priority = syncMode ? 'high' : 'low';
92
+ var credentials = getCredentials(script.crossOrigin);
93
+ void fetch(src, {
94
+ credentials: credentials,
95
+ priority: priority
96
+ }).then(function (res) {
97
+ return res.text();
98
+ }).then( /*#__PURE__*/function () {
99
+ var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(code) {
100
+ var prevScriptTranspiledDeferred, beforeScriptExecuteEvent, beforeExecutedListenerScript, codeFactory;
101
+ return _regeneratorRuntime.wrap(function _callee$(_context) {
102
+ while (1) switch (_context.prev = _context.next) {
103
+ case 0:
104
+ prevScriptTranspiledDeferred = opts.prevScriptTranspiledDeferred; // add preprocess code to dispatch a CustomEvent before the script is executed
105
+ beforeScriptExecuteEvent = 'q:bse';
106
+ beforeExecutedListenerScript = ";(function(){var s=document.currentScript;var e=new CustomEvent('".concat(beforeScriptExecuteEvent, "',{detail:{s:s}});window.dispatchEvent(e);})();");
107
+ codeFactory = beforeExecutedListenerScript + sandbox.makeEvaluateFactory(code, src);
108
+ if (!syncMode) {
109
+ _context.next = 9;
110
+ break;
111
+ }
112
+ if (!(prevScriptTranspiledDeferred && !prevScriptTranspiledDeferred.isSettled())) {
113
+ _context.next = 8;
114
+ break;
115
+ }
116
+ _context.next = 8;
117
+ return waitUntilSettled(prevScriptTranspiledDeferred.promise);
118
+ case 8:
119
+ // HTMLScriptElement default fetchPriority is 'auto', we should set it to 'high' to make it execute earlier while it's not async script
120
+ script.fetchPriority = 'high';
121
+ case 9:
122
+ // change the script src to a blob url to make it execute in the sandbox
123
+ script.src = URL.createObjectURL(new Blob([codeFactory], {
124
+ type: 'text/javascript'
125
+ }));
126
+ window.addEventListener(beforeScriptExecuteEvent, function listener(evt) {
127
+ var _ref2 = evt.detail,
128
+ s = _ref2.s;
129
+ if (s === script) {
130
+ URL.revokeObjectURL(s.src);
131
+ // change the script src to the original src while the script is executing
132
+ // thus the script behavior can be more consistent with the native browser logic
133
+ s.src = src;
134
+ s.dataset.consumed = 'true';
135
+ delete s.dataset.src;
136
+ window.removeEventListener(beforeScriptExecuteEvent, listener);
137
+ }
138
+ });
139
+ scriptTranspiledDeferred === null || scriptTranspiledDeferred === void 0 || scriptTranspiledDeferred.resolve();
140
+ case 12:
141
+ case "end":
142
+ return _context.stop();
143
+ }
144
+ }, _callee);
145
+ }));
146
+ return function (_x) {
147
+ return _ref.apply(this, arguments);
148
+ };
149
+ }()).catch(function (e) {
150
+ scriptTranspiledDeferred === null || scriptTranspiledDeferred === void 0 || scriptTranspiledDeferred.reject();
151
+ throw e;
152
+ });
153
+ return script;
154
+ }
155
+ case Mode.INLINE_CODE_IN_SANDBOX:
156
+ {
157
+ var rawNode = opts.rawNode;
158
+ var scriptNode = script.textContent ? script : rawNode.childNodes[0];
159
+ var code = result.code;
160
+ scriptNode.textContent = sandbox.makeEvaluateFactory(code, baseURI);
161
+ // mark the script have consumed
162
+ script.dataset.consumed = 'true';
163
+ scriptTranspiledDeferred === null || scriptTranspiledDeferred === void 0 || scriptTranspiledDeferred.resolve();
164
+ return script;
165
+ }
166
+ case Mode.REUSED_DEP_IN_SANDBOX:
167
+ case Mode.REUSED_DEP:
168
+ {
169
+ var url = result.url,
170
+ version = result.version,
171
+ _src = result.src;
172
+ script.dataset.src = _src;
173
+ script.dataset.version = version;
174
+ var _syncMode = !script.getAttribute('async');
99
175
  // HTMLScriptElement default fetchPriority is 'auto', we should set it to 'high' to make it execute earlier while it's not async script
100
- if (syncMode) {
176
+ if (_syncMode) {
101
177
  script.fetchPriority = 'high';
102
178
  }
103
- script.src = URL.createObjectURL(new Blob([codeFactory], {
104
- type: 'text/javascript'
105
- }));
106
- });
107
- return script;
108
- }
109
- case Mode.INLINE_CODE_IN_SANDBOX:
110
- {
111
- var rawNode = opts.rawNode;
112
- var scriptNode = script.textContent ? script : rawNode.childNodes[0];
113
- var code = result.code;
114
- scriptNode.textContent = sandbox.makeEvaluateFactory(code, baseURI);
115
- // mark the script have consumed
116
- script.dataset.consumed = 'true';
117
- return script;
118
- }
119
- case Mode.REUSED_DEP_IN_SANDBOX:
120
- {
121
- var url = result.url,
122
- version = result.version,
123
- _src = result.src;
124
- script.dataset.src = _src;
125
- script.dataset.version = version;
126
- var _syncMode = !script.getAttribute('async');
127
- // HTMLScriptElement default fetchPriority is 'auto', we should set it to 'high' to make it execute earlier while it's not async script
128
- if (_syncMode) {
129
- script.fetchPriority = 'high';
130
- }
131
179
 
132
- // When the script hits the dependency reuse logic, the current script is not executed, and an empty script is returned directly
133
- script.src = createReusingObjectUrl(_src, url, 'text/javascript');
134
- return script;
135
- }
136
- case Mode.NONE:
137
- default:
138
- {
139
- if (srcAttribute) {
140
- script.src = getEntireUrl(srcAttribute, baseURI);
180
+ // When the script hits the dependency reuse logic, the current script is not executed, and an empty script is returned directly
181
+ script.src = createReusingObjectUrl(_src, url, 'text/javascript');
182
+ var onScriptComplete = function onScriptComplete(prevListener, event) {
183
+ script.onload = script.onerror = null;
184
+ script.src = _src;
185
+ script.dataset.consumed = 'true';
186
+ script.dataset.src = url;
187
+ prevListener === null || prevListener === void 0 || prevListener.call(script, event);
188
+ };
189
+ script.onload = onScriptComplete.bind(null, script.onload);
190
+ script.onerror = onScriptComplete.bind(null, script.onerror);
191
+ scriptTranspiledDeferred === null || scriptTranspiledDeferred === void 0 || scriptTranspiledDeferred.resolve();
141
192
  return script;
142
193
  }
143
- return script;
144
- }
194
+ case Mode.REMOTE_ASSETS:
195
+ case Mode.NONE:
196
+ default:
197
+ {
198
+ if (result !== null && result !== void 0 && result.src) {
199
+ script.src = result.src;
200
+ }
201
+ scriptTranspiledDeferred === null || scriptTranspiledDeferred === void 0 || scriptTranspiledDeferred.resolve();
202
+ return script;
203
+ }
204
+ }
205
+ } catch (e) {
206
+ scriptTranspiledDeferred === null || scriptTranspiledDeferred === void 0 || scriptTranspiledDeferred.reject(e);
207
+ throw e;
145
208
  }
146
-
147
- // TODO find entry exports
148
209
  }
149
210
  //# sourceMappingURL=script.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["getEntireUrl","Mode","createReusingObjectUrl","isValidJavaScriptType","getCredentials","crossOrigin","undefined","preTranspile","script","baseURI","opts","sandbox","moduleResolver","src","type","entireUrl","matchedScript","mode","REUSED_DEP_IN_SANDBOX","result","_objectSpread","REMOTE_ASSETS_IN_SANDBOX","rawNode","scriptNode","textContent","childNodes","code","INLINE_CODE_IN_SANDBOX","NONE","transpileScript","srcAttribute","getAttribute","fetch","removeAttribute","_preTranspile","dataset","syncMode","hasAttribute","priority","credentials","then","res","text","codeFactory","makeEvaluateFactory","fetchPriority","URL","createObjectURL","Blob","consumed","url","version"],"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 } from '../utils';\nimport type { AssetsTranspilerOpts } 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; result: { src: string } }\n | { mode: Mode.REUSED_DEP_IN_SANDBOX; 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 (sandbox) {\n if (src) {\n const entireUrl = getEntireUrl(src, baseURI);\n const matchedScript = moduleResolver?.(entireUrl);\n if (matchedScript) {\n return {\n mode: Mode.REUSED_DEP_IN_SANDBOX,\n result: { src: entireUrl, ...matchedScript },\n };\n }\n\n return {\n mode: Mode.REMOTE_ASSETS_IN_SANDBOX,\n result: { src: entireUrl },\n };\n }\n\n if (isValidJavaScriptType(type)) {\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\n return { mode: Mode.NONE };\n};\n\nexport default function transpileScript(\n script: HTMLScriptElement,\n baseURI: string,\n opts: AssetsTranspilerOpts,\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, fetch } = 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 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 { 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((code) => {\n const codeFactory = sandbox!.makeEvaluateFactory(code, src);\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 if (syncMode) {\n script.fetchPriority = 'high';\n }\n\n script.src = URL.createObjectURL(new Blob([codeFactory], { type: 'text/javascript' }));\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, baseURI);\n // mark the script have consumed\n script.dataset.consumed = 'true';\n\n return script;\n }\n\n case Mode.REUSED_DEP_IN_SANDBOX: {\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 return script;\n }\n\n case Mode.NONE:\n default: {\n if (srcAttribute) {\n script.src = getEntireUrl(srcAttribute, baseURI);\n return script;\n }\n\n return script;\n }\n }\n\n // TODO find entry exports\n}\n"],"mappings":";AAAA;AACA;AACA;AACA;;AAGA,SAASA,YAAY;AAErB,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,IAAIH,OAAO,EAAE;IACX,IAAIE,GAAG,EAAE;MACP,IAAME,SAAS,GAAGf,YAAY,CAACa,GAAG,EAAEJ,OAAO,CAAC;MAC5C,IAAMO,aAAa,GAAGJ,cAAc,aAAdA,cAAc,uBAAdA,cAAc,CAAGG,SAAS,CAAC;MACjD,IAAIC,aAAa,EAAE;QACjB,OAAO;UACLC,IAAI,EAAEhB,IAAI,CAACiB,qBAAqB;UAChCC,MAAM,EAAAC,aAAA;YAAIP,GAAG,EAAEE;UAAS,GAAKC,aAAa;QAC5C,CAAC;MACH;MAEA,OAAO;QACLC,IAAI,EAAEhB,IAAI,CAACoB,wBAAwB;QACnCF,MAAM,EAAE;UAAEN,GAAG,EAAEE;QAAU;MAC3B,CAAC;IACH;IAEA,IAAIZ,qBAAqB,CAACW,IAAI,CAAC,EAAE;MAC/B,IAAMQ,OAAO,GAAGZ,IAAI,CAACY,OAA4B;MACjD,IAAMC,UAAU,GAAGf,MAAM,CAACgB,WAAW,GAAGhB,MAAM,GAAGc,OAAO,CAACG,UAAU,CAAC,CAAC,CAAC;MAEtE,IAAMC,IAAI,GAAGH,UAAU,CAACC,WAAW;MACnC,IAAIE,IAAI,EAAE;QACR,OAAO;UACLT,IAAI,EAAEhB,IAAI,CAAC0B,sBAAsB;UACjCR,MAAM,EAAE;YACNO,IAAI,EAAJA;UACF;QACF,CAAC;MACH;IACF;EACF;EAEA,OAAO;IAAET,IAAI,EAAEhB,IAAI,CAAC2B;EAAK,CAAC;AAC5B,CAAC;AAED,eAAe,SAASC,eAAeA,CACrCrB,MAAyB,EACzBC,OAAe,EACfC,IAA0B,EACP;EACnB;EACA;EACA,IAAMoB,YAAY,GAAGtB,MAAM,CAACuB,YAAY,CAAC,KAAK,CAAC;EAC/C,IAAQpB,OAAO,GAAYD,IAAI,CAAvBC,OAAO;IAAEqB,KAAK,GAAKtB,IAAI,CAAdsB,KAAK;;EAEtB;EACA;EACA;EACAxB,MAAM,CAACyB,eAAe,CAAC,cAAc,CAAC;EAEtC,IAAAC,aAAA,GAAyB3B,YAAY,CACnC;MACEM,GAAG,EAAEiB,YAAY,IAAIxB,SAAS;MAC9BQ,IAAI,EAAEN,MAAM,CAACM,IAAI;MACjBU,WAAW,EAAEhB,MAAM,CAACgB;IACtB,CAAC,EACDf,OAAO,EACPC,IACF,CAAC;IAROO,IAAI,GAAAiB,aAAA,CAAJjB,IAAI;IAAEE,MAAM,GAAAe,aAAA,CAANf,MAAM;EAUpB,QAAQF,IAAI;IACV,KAAKhB,IAAI,CAACoB,wBAAwB;MAAE;QAClC,IAAQR,GAAG,GAAKM,MAAM,CAAdN,GAAG;;QAEX;QACAL,MAAM,CAACyB,eAAe,CAAC,KAAK,CAAC;QAC7BzB,MAAM,CAAC2B,OAAO,CAACtB,GAAG,GAAGA,GAAG;QAExB,IAAMuB,QAAQ,GAAG,CAAC5B,MAAM,CAAC6B,YAAY,CAAC,OAAO,CAAC;QAC9C,IAAMC,QAAkB,GAAGF,QAAQ,GAAG,MAAM,GAAG,KAAK;QACpD,IAAMG,WAAW,GAAGnC,cAAc,CAACI,MAAM,CAACH,WAAW,CAAC;QAEtD,KAAK2B,KAAK,CAACnB,GAAG,EAAE;UAAE0B,WAAW,EAAXA,WAAW;UAAED,QAAQ,EAARA;QAAS,CAAC,CAAC,CACvCE,IAAI,CAAC,UAACC,GAAG;UAAA,OAAKA,GAAG,CAACC,IAAI,CAAC,CAAC;QAAA,EAAC,CACzBF,IAAI,CAAC,UAACd,IAAI,EAAK;UACd,IAAMiB,WAAW,GAAGhC,OAAO,CAAEiC,mBAAmB,CAAClB,IAAI,EAAEb,GAAG,CAAC;;UAE3D;UACA,IAAIuB,QAAQ,EAAE;YACZ5B,MAAM,CAACqC,aAAa,GAAG,MAAM;UAC/B;UAEArC,MAAM,CAACK,GAAG,GAAGiC,GAAG,CAACC,eAAe,CAAC,IAAIC,IAAI,CAAC,CAACL,WAAW,CAAC,EAAE;YAAE7B,IAAI,EAAE;UAAkB,CAAC,CAAC,CAAC;QACxF,CAAC,CAAC;QAEJ,OAAON,MAAM;MACf;IAEA,KAAKP,IAAI,CAAC0B,sBAAsB;MAAE;QAChC,IAAML,OAAO,GAAGZ,IAAI,CAACY,OAA4B;QACjD,IAAMC,UAAU,GAAGf,MAAM,CAACgB,WAAW,GAAGhB,MAAM,GAAGc,OAAO,CAACG,UAAU,CAAC,CAAC,CAAC;QACtE,IAAQC,IAAI,GAAKP,MAAM,CAAfO,IAAI;QAEZH,UAAU,CAACC,WAAW,GAAGb,OAAO,CAAEiC,mBAAmB,CAAClB,IAAI,EAAEjB,OAAO,CAAC;QACpE;QACAD,MAAM,CAAC2B,OAAO,CAACc,QAAQ,GAAG,MAAM;QAEhC,OAAOzC,MAAM;MACf;IAEA,KAAKP,IAAI,CAACiB,qBAAqB;MAAE;QAC/B,IAAQgC,GAAG,GAAmB/B,MAAM,CAA5B+B,GAAG;UAAEC,OAAO,GAAUhC,MAAM,CAAvBgC,OAAO;UAAEtC,IAAG,GAAKM,MAAM,CAAdN,GAAG;QAEzBL,MAAM,CAAC2B,OAAO,CAACtB,GAAG,GAAGA,IAAG;QACxBL,MAAM,CAAC2B,OAAO,CAACgB,OAAO,GAAGA,OAAO;QAEhC,IAAMf,SAAQ,GAAG,CAAC5B,MAAM,CAACuB,YAAY,CAAC,OAAO,CAAC;QAC9C;QACA,IAAIK,SAAQ,EAAE;UACZ5B,MAAM,CAACqC,aAAa,GAAG,MAAM;QAC/B;;QAEA;QACArC,MAAM,CAACK,GAAG,GAAGX,sBAAsB,CAACW,IAAG,EAAEqC,GAAG,EAAE,iBAAiB,CAAC;QAEhE,OAAO1C,MAAM;MACf;IAEA,KAAKP,IAAI,CAAC2B,IAAI;IACd;MAAS;QACP,IAAIE,YAAY,EAAE;UAChBtB,MAAM,CAACK,GAAG,GAAGb,YAAY,CAAC8B,YAAY,EAAErB,OAAO,CAAC;UAChD,OAAOD,MAAM;QACf;QAEA,OAAOA,MAAM;MACf;EACF;;EAEA;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","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 to finish fetching\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 a 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, baseURI);\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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"}
@@ -4,6 +4,7 @@
4
4
  */
5
5
  import type { BaseLoaderOpts } from '../common';
6
6
  import type { MatchResult } from '../module-resolver';
7
+ import type { Deferred } from '../utils';
7
8
  export type BaseTranspilerOpts = BaseLoaderOpts & {
8
9
  moduleResolver?: (url: string) => MatchResult | undefined;
9
10
  sandbox?: {
@@ -13,9 +14,18 @@ export type BaseTranspilerOpts = BaseLoaderOpts & {
13
14
  export type AssetsTranspilerOpts = BaseTranspilerOpts & {
14
15
  rawNode: Node;
15
16
  };
17
+ export type ScriptTranspilerOpts = AssetsTranspilerOpts & ({
18
+ prevScriptTranspiledDeferred: Deferred<void>;
19
+ scriptTranspiledDeferred: Deferred<void>;
20
+ } | {
21
+ prevScriptTranspiledDeferred?: undefined;
22
+ scriptTranspiledDeferred?: undefined;
23
+ });
16
24
  export declare enum Mode {
17
25
  REMOTE_ASSETS_IN_SANDBOX = "RAIS",
26
+ REMOTE_ASSETS = "RA",
18
27
  REUSED_DEP_IN_SANDBOX = "RDIS",
28
+ REUSED_DEP = "RD",
19
29
  INLINE_CODE_IN_SANDBOX = "ICIS",
20
30
  NONE = "NONE"
21
31
  }
@@ -5,7 +5,9 @@
5
5
 
6
6
  export var Mode = /*#__PURE__*/function (Mode) {
7
7
  Mode["REMOTE_ASSETS_IN_SANDBOX"] = "RAIS";
8
+ Mode["REMOTE_ASSETS"] = "RA";
8
9
  Mode["REUSED_DEP_IN_SANDBOX"] = "RDIS";
10
+ Mode["REUSED_DEP"] = "RD";
9
11
  Mode["INLINE_CODE_IN_SANDBOX"] = "ICIS";
10
12
  Mode["NONE"] = "NONE";
11
13
  return Mode;
@@ -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';\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 enum Mode {\n REMOTE_ASSETS_IN_SANDBOX = 'RAIS',\n REUSED_DEP_IN_SANDBOX = 'RDIS',\n INLINE_CODE_IN_SANDBOX = 'ICIS',\n NONE = 'NONE',\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;;AAaA,WAAYA,IAAI,0BAAJA,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 & { rawNode: Node };\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;;AAoBA,WAAYA,IAAI,0BAAJA,IAAI;EAAJA,IAAI;EAAJA,IAAI;EAAJA,IAAI;EAAJA,IAAI;EAAJA,IAAI;EAAJA,IAAI;EAAA,OAAJA,IAAI;AAAA"}
@@ -0,0 +1,8 @@
1
+ export declare class LRUCache<K, V> {
2
+ private readonly capacity;
3
+ private cache;
4
+ constructor(capacity: number);
5
+ get(key: K): V | undefined;
6
+ set(key: K, value: V): void;
7
+ delete(key: K): void;
8
+ }
@@ -0,0 +1,42 @@
1
+ import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
2
+ import _createClass from "@babel/runtime/helpers/esm/createClass";
3
+ import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
4
+ export var LRUCache = /*#__PURE__*/function () {
5
+ function LRUCache(capacity) {
6
+ _classCallCheck(this, LRUCache);
7
+ _defineProperty(this, "capacity", void 0);
8
+ _defineProperty(this, "cache", void 0);
9
+ this.capacity = capacity;
10
+ this.cache = new Map();
11
+ }
12
+ _createClass(LRUCache, [{
13
+ key: "get",
14
+ value: function get(key) {
15
+ var value = this.cache.get(key);
16
+ if (value !== undefined) {
17
+ this.cache.delete(key);
18
+ this.cache.set(key, value);
19
+ }
20
+ return value;
21
+ }
22
+ }, {
23
+ key: "set",
24
+ value: function set(key, value) {
25
+ if (this.cache.has(key)) {
26
+ this.cache.delete(key);
27
+ }
28
+ this.cache.set(key, value);
29
+ if (this.cache.size > this.capacity) {
30
+ var firstKey = this.cache.keys().next().value;
31
+ this.cache.delete(firstKey);
32
+ }
33
+ }
34
+ }, {
35
+ key: "delete",
36
+ value: function _delete(key) {
37
+ this.cache.delete(key);
38
+ }
39
+ }]);
40
+ return LRUCache;
41
+ }();
42
+ //# sourceMappingURL=miniLruCache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["LRUCache","capacity","_classCallCheck","_defineProperty","cache","Map","_createClass","key","value","get","undefined","delete","set","has","size","firstKey","keys","next","_delete"],"sources":["../../../src/fetch-utils/miniLruCache.ts"],"sourcesContent":["export class LRUCache<K, V> {\n private readonly capacity: number;\n private cache: Map<K, V>;\n\n constructor(capacity: number) {\n this.capacity = capacity;\n this.cache = new Map();\n }\n\n get(key: K): V | undefined {\n const value = this.cache.get(key);\n if (value !== undefined) {\n this.cache.delete(key);\n this.cache.set(key, value);\n }\n return value;\n }\n\n set(key: K, value: V): void {\n if (this.cache.has(key)) {\n this.cache.delete(key);\n }\n this.cache.set(key, value);\n if (this.cache.size > this.capacity) {\n const firstKey = this.cache.keys().next().value as K;\n this.cache.delete(firstKey);\n }\n }\n\n delete(key: K): void {\n this.cache.delete(key);\n }\n}\n"],"mappings":";;;AAAA,WAAaA,QAAQ;EAInB,SAAAA,SAAYC,QAAgB,EAAE;IAAAC,eAAA,OAAAF,QAAA;IAAAG,eAAA;IAAAA,eAAA;IAC5B,IAAI,CAACF,QAAQ,GAAGA,QAAQ;IACxB,IAAI,CAACG,KAAK,GAAG,IAAIC,GAAG,CAAC,CAAC;EACxB;EAACC,YAAA,CAAAN,QAAA;IAAAO,GAAA;IAAAC,KAAA,EAED,SAAAC,IAAIF,GAAM,EAAiB;MACzB,IAAMC,KAAK,GAAG,IAAI,CAACJ,KAAK,CAACK,GAAG,CAACF,GAAG,CAAC;MACjC,IAAIC,KAAK,KAAKE,SAAS,EAAE;QACvB,IAAI,CAACN,KAAK,CAACO,MAAM,CAACJ,GAAG,CAAC;QACtB,IAAI,CAACH,KAAK,CAACQ,GAAG,CAACL,GAAG,EAAEC,KAAK,CAAC;MAC5B;MACA,OAAOA,KAAK;IACd;EAAC;IAAAD,GAAA;IAAAC,KAAA,EAED,SAAAI,IAAIL,GAAM,EAAEC,KAAQ,EAAQ;MAC1B,IAAI,IAAI,CAACJ,KAAK,CAACS,GAAG,CAACN,GAAG,CAAC,EAAE;QACvB,IAAI,CAACH,KAAK,CAACO,MAAM,CAACJ,GAAG,CAAC;MACxB;MACA,IAAI,CAACH,KAAK,CAACQ,GAAG,CAACL,GAAG,EAAEC,KAAK,CAAC;MAC1B,IAAI,IAAI,CAACJ,KAAK,CAACU,IAAI,GAAG,IAAI,CAACb,QAAQ,EAAE;QACnC,IAAMc,QAAQ,GAAG,IAAI,CAACX,KAAK,CAACY,IAAI,CAAC,CAAC,CAACC,IAAI,CAAC,CAAC,CAACT,KAAU;QACpD,IAAI,CAACJ,KAAK,CAACO,MAAM,CAACI,QAAQ,CAAC;MAC7B;IACF;EAAC;IAAAR,GAAA;IAAAC,KAAA,EAED,SAAAU,QAAOX,GAAM,EAAQ;MACnB,IAAI,CAACH,KAAK,CAACO,MAAM,CAACJ,GAAG,CAAC;IACxB;EAAC;EAAA,OAAAP,QAAA;AAAA"}
@@ -0,0 +1,3 @@
1
+ type Fetch = typeof window.fetch;
2
+ export declare const wrapFetchWithCache: (fetch: Fetch) => Fetch;
3
+ export {};
@@ -0,0 +1,66 @@
1
+ import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
2
+ import _once from "lodash/once";
3
+ /**
4
+ * @author Kuitos
5
+ * @since 2023-11-06
6
+ */
7
+ import _regeneratorRuntime from "@babel/runtime/regenerator";
8
+ import { LRUCache } from "./miniLruCache";
9
+ var getCacheKey = function getCacheKey(input) {
10
+ return typeof input === 'string' ? input : 'url' in input ? input.url : input.href;
11
+ };
12
+ var getGlobalCache = _once(function () {
13
+ return new LRUCache(50);
14
+ });
15
+ var isValidaResponse = function isValidaResponse(status) {
16
+ return status >= 200 && status < 400;
17
+ };
18
+ export var wrapFetchWithCache = function wrapFetchWithCache(fetch) {
19
+ var lruCache = getGlobalCache();
20
+ var cachedFetch = function cachedFetch(input, init) {
21
+ var fetchInput = input;
22
+ var cacheKey = getCacheKey(fetchInput);
23
+ var wrapFetchPromise = /*#__PURE__*/function () {
24
+ var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(promise) {
25
+ var res, status;
26
+ return _regeneratorRuntime.wrap(function _callee$(_context) {
27
+ while (1) switch (_context.prev = _context.next) {
28
+ case 0:
29
+ _context.prev = 0;
30
+ _context.next = 3;
31
+ return promise;
32
+ case 3:
33
+ res = _context.sent;
34
+ status = res.status;
35
+ if (!isValidaResponse(status)) {
36
+ lruCache.delete(cacheKey);
37
+ }
38
+
39
+ // must clone the response as one response body can only be read once as a stream
40
+ return _context.abrupt("return", res.clone());
41
+ case 9:
42
+ _context.prev = 9;
43
+ _context.t0 = _context["catch"](0);
44
+ lruCache.delete(cacheKey);
45
+ throw _context.t0;
46
+ case 13:
47
+ case "end":
48
+ return _context.stop();
49
+ }
50
+ }, _callee, null, [[0, 9]]);
51
+ }));
52
+ return function wrapFetchPromise(_x) {
53
+ return _ref.apply(this, arguments);
54
+ };
55
+ }();
56
+ var cachedFetchPromise = lruCache.get(cacheKey);
57
+ if (cachedFetchPromise) {
58
+ return wrapFetchPromise(cachedFetchPromise);
59
+ }
60
+ var fetchPromise = fetch(fetchInput, init);
61
+ lruCache.set(cacheKey, fetchPromise);
62
+ return wrapFetchPromise(fetchPromise);
63
+ };
64
+ return cachedFetch;
65
+ };
66
+ //# sourceMappingURL=wrapFetchWithCache.js.map
@@ -0,0 +1 @@
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"}
@@ -6,4 +6,5 @@ export * from './assets-transpilers';
6
6
  export * from './utils';
7
7
  export * from './module-resolver';
8
8
  export * from './common';
9
- export * from './error';
9
+ export * from './reporter';
10
+ export * from './fetch-utils/wrapFetchWithCache';
package/dist/esm/index.js CHANGED
@@ -6,5 +6,6 @@ export * from "./assets-transpilers";
6
6
  export * from "./utils";
7
7
  export * from "./module-resolver";
8
8
  export * from "./common";
9
- export * from "./error";
9
+ export * from "./reporter";
10
+ export * from "./fetch-utils/wrapFetchWithCache";
10
11
  //# 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 './error';\n"],"mappings":"AAAA;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/wrapFetchWithCache';\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA"}
@@ -0,0 +1 @@
1
+ {"version":3,"names":["QiankunError","_Error","_inherits","_super","_createSuper","message","_classCallCheck","call","concat","_createClass","_wrapNativeSuper","Error"],"sources":["../../../src/reporter/QiankunError.ts"],"sourcesContent":["export class QiankunError extends Error {\n constructor(message: string) {\n super(`[qiankun]: ${message}`);\n }\n}\n"],"mappings":";;;;;AAAA,WAAaA,YAAY,0BAAAC,MAAA;EAAAC,SAAA,CAAAF,YAAA,EAAAC,MAAA;EAAA,IAAAE,MAAA,GAAAC,YAAA,CAAAJ,YAAA;EACvB,SAAAA,aAAYK,OAAe,EAAE;IAAAC,eAAA,OAAAN,YAAA;IAAA,OAAAG,MAAA,CAAAI,IAAA,qBAAAC,MAAA,CACPH,OAAO;EAC7B;EAAC,OAAAI,YAAA,CAAAT,YAAA;AAAA,gBAAAU,gBAAA,CAH+BC,KAAK"}
@@ -1 +1,2 @@
1
1
  export { QiankunError } from './QiankunError';
2
+ export * from './logger';
@@ -0,0 +1,3 @@
1
+ export { QiankunError } from "./QiankunError";
2
+ export * from "./logger";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["QiankunError"],"sources":["../../../src/reporter/index.ts"],"sourcesContent":["export { QiankunError } from './QiankunError';\nexport * from './logger';\n"],"mappings":"AAAA,SAASA,YAAY;AACrB"}
@@ -0,0 +1 @@
1
+ export declare function warn(msg: string, ...args: unknown[]): void;
@@ -0,0 +1,8 @@
1
+ export function warn(msg) {
2
+ var _console;
3
+ for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
4
+ args[_key - 1] = arguments[_key];
5
+ }
6
+ (_console = console).warn.apply(_console, ["[qiankun]: ".concat(msg)].concat(args));
7
+ }
8
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["warn","msg","_console","_len","arguments","length","args","Array","_key","console","apply","concat"],"sources":["../../../src/reporter/logger.ts"],"sourcesContent":["export function warn(msg: string, ...args: unknown[]) {\n console.warn(`[qiankun]: ${msg}`, ...args);\n}\n"],"mappings":"AAAA,OAAO,SAASA,IAAIA,CAACC,GAAW,EAAsB;EAAA,IAAAC,QAAA;EAAA,SAAAC,IAAA,GAAAC,SAAA,CAAAC,MAAA,EAAjBC,IAAI,OAAAC,KAAA,CAAAJ,IAAA,OAAAA,IAAA,WAAAK,IAAA,MAAAA,IAAA,GAAAL,IAAA,EAAAK,IAAA;IAAJF,IAAI,CAAAE,IAAA,QAAAJ,SAAA,CAAAI,IAAA;EAAA;EACvC,CAAAN,QAAA,GAAAO,OAAO,EAACT,IAAI,CAAAU,KAAA,CAAAR,QAAA,iBAAAS,MAAA,CAAeV,GAAG,GAAAU,MAAA,CAAOL,IAAI,EAAC;AAC5C"}