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

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.
@@ -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,
@@ -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","_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 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, 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 { 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 +1 @@
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
+ {"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;\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,KAAK;IACxB,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"}
@@ -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,
@@ -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":"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"}
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, 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 { 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"}
@@ -1 +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"}
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;\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,KAAK;IACxB,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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qiankunjs/shared",
3
- "version": "0.0.1-rc.10",
3
+ "version": "0.0.1-rc.11",
4
4
  "description": "internal shared package for qiankun",
5
5
  "main": "./dist/cjs/index.js",
6
6
  "module": "./dist/esm/index.js",