@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
@@ -1,4 +1,11 @@
1
1
  import type { AssetsTranspilerOpts } from './types';
2
+ /**
3
+ * transpile the assets to support micro frontend
4
+ * @param node the original node
5
+ * @param baseURI the baseURI of the node
6
+ * @param opts
7
+ * @returns original node after transpiled
8
+ */
2
9
  export declare function transpileAssets<T extends Node>(node: T, baseURI: string, opts: AssetsTranspilerOpts): T;
3
10
  export type * from './types';
4
11
  export { isValidJavaScriptType } from './utils';
@@ -19,6 +19,13 @@ var _utils = require("./utils");
19
19
  * @since 2023-03-14
20
20
  */
21
21
 
22
+ /**
23
+ * transpile the assets to support micro frontend
24
+ * @param node the original node
25
+ * @param baseURI the baseURI of the node
26
+ * @param opts
27
+ * @returns original node after transpiled
28
+ */
22
29
  function transpileAssets(node, baseURI, opts) {
23
30
  var htmlElement = node;
24
31
  var tagName = htmlElement.tagName;
@@ -1 +1 @@
1
- {"version":3,"names":["_link","_interopRequireDefault","require","_script","_utils","transpileAssets","node","baseURI","opts","htmlElement","tagName","transpileScript","transpileLink"],"sources":["../../../src/assets-transpilers/index.ts"],"sourcesContent":["/**\n * @author Kuitos\n * @since 2023-03-14\n */\nimport transpileLink from './link';\nimport transpileScript from './script';\nimport type { AssetsTranspilerOpts } from './types';\n\nexport function transpileAssets<T extends Node>(node: T, baseURI: string, opts: AssetsTranspilerOpts): T {\n const htmlElement = node as unknown as HTMLElement;\n const { tagName } = htmlElement;\n\n switch (tagName) {\n case 'SCRIPT': {\n return transpileScript(htmlElement as HTMLScriptElement, baseURI, opts) as unknown as T;\n }\n\n case 'LINK': {\n return transpileLink(htmlElement as HTMLLinkElement, baseURI, opts) as unknown as T;\n }\n\n default:\n break;\n }\n\n // TODO need to deal with the text scenario of script\n // const { nodeType } = node;\n // switch (nodeType) {\n // case Node.TEXT_NODE: {\n // if (node.parentNode?.nodeName === 'script') {\n // break;\n // }\n // }\n //\n // }\n // }\n return node;\n}\n\nexport type * from './types';\n\nexport { isValidJavaScriptType } from './utils';\n"],"mappings":";;;;;;;;;;;;;AAIA,IAAAA,KAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,OAAA,GAAAF,sBAAA,CAAAC,OAAA;AAoCA,IAAAE,MAAA,GAAAF,OAAA;AAzCA;AACA;AACA;AACA;;AAKO,SAASG,eAAeA,CAAiBC,IAAO,EAAEC,OAAe,EAAEC,IAA0B,EAAK;EACvG,IAAMC,WAAW,GAAGH,IAA8B;EAClD,IAAQI,OAAO,GAAKD,WAAW,CAAvBC,OAAO;EAEf,QAAQA,OAAO;IACb,KAAK,QAAQ;MAAE;QACb,OAAO,IAAAC,eAAe,EAACF,WAAW,EAAuBF,OAAO,EAAEC,IAAI,CAAC;MACzE;IAEA,KAAK,MAAM;MAAE;QACX,OAAO,IAAAI,aAAa,EAACH,WAAW,EAAqBF,OAAO,EAAEC,IAAI,CAAC;MACrE;IAEA;MACE;EACJ;;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAOF,IAAI;AACb"}
1
+ {"version":3,"names":["_link","_interopRequireDefault","require","_script","_utils","transpileAssets","node","baseURI","opts","htmlElement","tagName","transpileScript","transpileLink"],"sources":["../../../src/assets-transpilers/index.ts"],"sourcesContent":["/**\n * @author Kuitos\n * @since 2023-03-14\n */\nimport transpileLink from './link';\nimport transpileScript from './script';\nimport type { AssetsTranspilerOpts } from './types';\n\n/**\n * transpile the assets to support micro frontend\n * @param node the original node\n * @param baseURI the baseURI of the node\n * @param opts\n * @returns original node after transpiled\n */\nexport function transpileAssets<T extends Node>(node: T, baseURI: string, opts: AssetsTranspilerOpts): T {\n const htmlElement = node as unknown as HTMLElement;\n const { tagName } = htmlElement;\n\n switch (tagName) {\n case 'SCRIPT': {\n return transpileScript(htmlElement as HTMLScriptElement, baseURI, opts) as unknown as T;\n }\n\n case 'LINK': {\n return transpileLink(htmlElement as HTMLLinkElement, baseURI, opts) as unknown as T;\n }\n\n default:\n break;\n }\n\n // TODO need to deal with the text scenario of script\n // const { nodeType } = node;\n // switch (nodeType) {\n // case Node.TEXT_NODE: {\n // if (node.parentNode?.nodeName === 'script') {\n // break;\n // }\n // }\n //\n // }\n // }\n return node;\n}\n\nexport type * from './types';\n\nexport { isValidJavaScriptType } from './utils';\n"],"mappings":";;;;;;;;;;;;;AAIA,IAAAA,KAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,OAAA,GAAAF,sBAAA,CAAAC,OAAA;AA2CA,IAAAE,MAAA,GAAAF,OAAA;AAhDA;AACA;AACA;AACA;;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASG,eAAeA,CAAiBC,IAAO,EAAEC,OAAe,EAAEC,IAA0B,EAAK;EACvG,IAAMC,WAAW,GAAGH,IAA8B;EAClD,IAAQI,OAAO,GAAKD,WAAW,CAAvBC,OAAO;EAEf,QAAQA,OAAO;IACb,KAAK,QAAQ;MAAE;QACb,OAAO,IAAAC,eAAe,EAACF,WAAW,EAAuBF,OAAO,EAAEC,IAAI,CAAC;MACzE;IAEA,KAAK,MAAM;MAAE;QACX,OAAO,IAAAI,aAAa,EAACH,WAAW,EAAqBF,OAAO,EAAEC,IAAI,CAAC;MACrE;IAEA;MACE;EACJ;;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAOF,IAAI;AACb"}
@@ -20,19 +20,18 @@ var preTranspileStyleSheetLink = function preTranspileStyleSheetLink(link, baseU
20
20
  moduleResolver = opts.moduleResolver;
21
21
  var href = link.href,
22
22
  rel = link.rel;
23
- if (sandbox) {
24
- // filter preload links
25
- if (href && rel === 'stylesheet') {
26
- var linkHref = (0, _utils.getEntireUrl)(href, baseURI);
27
- var matchedAssets = moduleResolver === null || moduleResolver === void 0 ? void 0 : moduleResolver(linkHref);
28
- if (matchedAssets) {
29
- return {
30
- mode: _types.Mode.REUSED_DEP_IN_SANDBOX,
31
- result: (0, _objectSpread2.default)({
32
- src: linkHref
33
- }, matchedAssets)
34
- };
35
- }
23
+
24
+ // filter preload links
25
+ if (href && rel === 'stylesheet') {
26
+ var linkHref = (0, _utils.getEntireUrl)(href, baseURI);
27
+ var matchedAssets = moduleResolver === null || moduleResolver === void 0 ? void 0 : moduleResolver(linkHref);
28
+ if (matchedAssets) {
29
+ return {
30
+ mode: sandbox ? _types.Mode.REUSED_DEP_IN_SANDBOX : _types.Mode.REUSED_DEP,
31
+ result: (0, _objectSpread2.default)({
32
+ src: linkHref
33
+ }, matchedAssets)
34
+ };
36
35
  }
37
36
  }
38
37
  return {
@@ -62,6 +61,7 @@ var postProcessPreloadLink = function postProcessPreloadLink(link, baseURI, opts
62
61
  break;
63
62
  }
64
63
  case _types.Mode.REUSED_DEP_IN_SANDBOX:
64
+ case _types.Mode.REUSED_DEP:
65
65
  {
66
66
  var url = result.url;
67
67
  link.href = (0, _utils2.createReusingObjectUrl)(href, url, 'text/javascript');
@@ -80,6 +80,7 @@ var postProcessPreloadLink = function postProcessPreloadLink(link, baseURI, opts
80
80
  _result = _preTranspileStyleShe.result;
81
81
  switch (_mode) {
82
82
  case _types.Mode.REUSED_DEP_IN_SANDBOX:
83
+ case _types.Mode.REUSED_DEP:
83
84
  {
84
85
  var _url = _result.url;
85
86
  link.href = (0, _utils2.createReusingObjectUrl)(href, _url, 'text/css');
@@ -102,6 +103,7 @@ function transpileLink(link, baseURI, opts) {
102
103
  result = _preTranspileStyleShe2.result;
103
104
  switch (mode) {
104
105
  case _types.Mode.REUSED_DEP_IN_SANDBOX:
106
+ case _types.Mode.REUSED_DEP:
105
107
  {
106
108
  var src = result.src,
107
109
  version = result.version,
@@ -1 +1 @@
1
- {"version":3,"names":["_utils","require","_script","_types","_utils2","preTranspileStyleSheetLink","link","baseURI","opts","sandbox","moduleResolver","href","rel","linkHref","getEntireUrl","matchedAssets","mode","Mode","REUSED_DEP_IN_SANDBOX","result","_objectSpread2","default","src","NONE","postProcessPreloadLink","as","_preTranspileScript","preTranspileScript","REMOTE_ASSETS_IN_SANDBOX","url","createReusingObjectUrl","_preTranspileStyleShe","transpileLink","hrefAttribute","getAttribute","_preTranspileStyleShe2","undefined","version","dataset"],"sources":["../../../src/assets-transpilers/link.ts"],"sourcesContent":["/**\n * @author Kuitos\n * @since 2023-04-26\n */\nimport type { MatchResult } from '../module-resolver';\nimport { getEntireUrl } from '../utils';\nimport { preTranspile as preTranspileScript } from './script';\nimport type { AssetsTranspilerOpts, BaseTranspilerOpts } from './types';\nimport { Mode } from './types';\nimport { createReusingObjectUrl } from './utils';\n\ntype PreTranspileResult =\n | { mode: Mode.REUSED_DEP_IN_SANDBOX; result: { src: string } & MatchResult }\n | { mode: Mode.NONE; result?: never };\nconst preTranspileStyleSheetLink = (\n link: Partial<Pick<HTMLLinkElement, 'href' | 'rel'>>,\n baseURI: string,\n opts: BaseTranspilerOpts,\n): PreTranspileResult => {\n const { sandbox, moduleResolver } = opts;\n const { href, rel } = link;\n\n if (sandbox) {\n // filter preload links\n if (href && rel === 'stylesheet') {\n const linkHref = getEntireUrl(href, baseURI);\n\n const matchedAssets = moduleResolver?.(linkHref);\n if (matchedAssets) {\n return {\n mode: Mode.REUSED_DEP_IN_SANDBOX,\n result: { src: linkHref, ...matchedAssets },\n };\n }\n }\n }\n\n return {\n mode: Mode.NONE,\n };\n};\n\nconst postProcessPreloadLink = (link: HTMLLinkElement, baseURI: string, opts: AssetsTranspilerOpts): void => {\n const { as, href } = link;\n switch (as) {\n case 'script': {\n const { mode, result } = preTranspileScript({ src: href }, baseURI, opts);\n\n switch (mode) {\n /**\n * While the assets are transpiling in sandbox, it means they will be evaluated with manual fetching,\n * thus we need to set the attribute `as` to fetch instead of script or style to avoid preload cache missing.\n * see https://stackoverflow.com/questions/52635660/can-link-rel-preload-be-made-to-work-with-fetch/63814972#63814972\n */\n case Mode.REMOTE_ASSETS_IN_SANDBOX: {\n link.as = 'fetch';\n break;\n }\n\n case Mode.REUSED_DEP_IN_SANDBOX: {\n const { url } = result;\n link.href = createReusingObjectUrl(href, url, 'text/javascript');\n\n break;\n }\n }\n\n break;\n }\n\n case 'style': {\n const { mode, result } = preTranspileStyleSheetLink({ href, rel: 'stylesheet' }, baseURI, opts);\n\n switch (mode) {\n case Mode.REUSED_DEP_IN_SANDBOX: {\n const { url } = result;\n link.href = createReusingObjectUrl(href, url, 'text/css');\n break;\n }\n }\n\n break;\n }\n\n default:\n break;\n }\n};\n\nexport default function transpileLink(\n link: HTMLLinkElement,\n baseURI: string,\n opts: AssetsTranspilerOpts,\n): HTMLLinkElement {\n const hrefAttribute = link.getAttribute('href');\n const { mode, result } = preTranspileStyleSheetLink(\n {\n href: hrefAttribute || undefined,\n rel: link.rel,\n },\n baseURI,\n opts,\n );\n\n switch (mode) {\n case Mode.REUSED_DEP_IN_SANDBOX: {\n const { src, version, url } = result;\n link.dataset.href = src;\n link.dataset.version = version;\n link.href = createReusingObjectUrl(src, url, 'text/css');\n\n return link;\n }\n\n case Mode.NONE:\n default: {\n if (hrefAttribute) {\n link.href = getEntireUrl(hrefAttribute, baseURI);\n\n if (link.rel === 'preload') {\n postProcessPreloadLink(link, baseURI, opts);\n }\n\n return link;\n }\n\n return link;\n }\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["_utils","require","_script","_types","_utils2","preTranspileStyleSheetLink","link","baseURI","opts","sandbox","moduleResolver","href","rel","linkHref","getEntireUrl","matchedAssets","mode","Mode","REUSED_DEP_IN_SANDBOX","REUSED_DEP","result","_objectSpread2","default","src","NONE","postProcessPreloadLink","as","_preTranspileScript","preTranspileScript","REMOTE_ASSETS_IN_SANDBOX","url","createReusingObjectUrl","_preTranspileStyleShe","transpileLink","hrefAttribute","getAttribute","_preTranspileStyleShe2","undefined","version","dataset"],"sources":["../../../src/assets-transpilers/link.ts"],"sourcesContent":["/**\n * @author Kuitos\n * @since 2023-04-26\n */\nimport type { MatchResult } from '../module-resolver';\nimport { getEntireUrl } from '../utils';\nimport { preTranspile as preTranspileScript } from './script';\nimport type { AssetsTranspilerOpts, BaseTranspilerOpts } from './types';\nimport { Mode } from './types';\nimport { createReusingObjectUrl } from './utils';\n\ntype PreTranspileResult =\n | { mode: Mode.REUSED_DEP_IN_SANDBOX | Mode.REUSED_DEP; result: { src: string } & MatchResult }\n | { mode: Mode.NONE; result?: never };\nconst preTranspileStyleSheetLink = (\n link: Partial<Pick<HTMLLinkElement, 'href' | 'rel'>>,\n baseURI: string,\n opts: BaseTranspilerOpts,\n): PreTranspileResult => {\n const { sandbox, moduleResolver } = opts;\n const { href, rel } = link;\n\n // filter preload links\n if (href && rel === 'stylesheet') {\n const linkHref = getEntireUrl(href, baseURI);\n\n const matchedAssets = moduleResolver?.(linkHref);\n if (matchedAssets) {\n return {\n mode: sandbox ? Mode.REUSED_DEP_IN_SANDBOX : Mode.REUSED_DEP,\n result: { src: linkHref, ...matchedAssets },\n };\n }\n }\n\n return {\n mode: Mode.NONE,\n };\n};\n\nconst postProcessPreloadLink = (link: HTMLLinkElement, baseURI: string, opts: AssetsTranspilerOpts): void => {\n const { as, href } = link;\n switch (as) {\n case 'script': {\n const { mode, result } = preTranspileScript({ src: href }, baseURI, opts);\n\n switch (mode) {\n /**\n * While the assets are transpiling in sandbox, it means they will be evaluated with manual fetching,\n * thus we need to set the attribute `as` to fetch instead of script or style to avoid preload cache missing.\n * see https://stackoverflow.com/questions/52635660/can-link-rel-preload-be-made-to-work-with-fetch/63814972#63814972\n */\n case Mode.REMOTE_ASSETS_IN_SANDBOX: {\n link.as = 'fetch';\n break;\n }\n\n case Mode.REUSED_DEP_IN_SANDBOX:\n case Mode.REUSED_DEP: {\n const { url } = result;\n link.href = createReusingObjectUrl(href, url, 'text/javascript');\n\n break;\n }\n }\n\n break;\n }\n\n case 'style': {\n const { mode, result } = preTranspileStyleSheetLink({ href, rel: 'stylesheet' }, baseURI, opts);\n\n switch (mode) {\n case Mode.REUSED_DEP_IN_SANDBOX:\n case Mode.REUSED_DEP: {\n const { url } = result;\n link.href = createReusingObjectUrl(href, url, 'text/css');\n break;\n }\n }\n\n break;\n }\n\n default:\n break;\n }\n};\n\nexport default function transpileLink(\n link: HTMLLinkElement,\n baseURI: string,\n opts: AssetsTranspilerOpts,\n): HTMLLinkElement {\n const hrefAttribute = link.getAttribute('href');\n const { mode, result } = preTranspileStyleSheetLink(\n {\n href: hrefAttribute || undefined,\n rel: link.rel,\n },\n baseURI,\n opts,\n );\n\n switch (mode) {\n case Mode.REUSED_DEP_IN_SANDBOX:\n case Mode.REUSED_DEP: {\n const { src, version, url } = result;\n link.dataset.href = src;\n link.dataset.version = version;\n link.href = createReusingObjectUrl(src, url, 'text/css');\n\n return link;\n }\n\n case Mode.NONE:\n default: {\n if (hrefAttribute) {\n link.href = getEntireUrl(hrefAttribute, baseURI);\n\n if (link.rel === 'preload') {\n postProcessPreloadLink(link, baseURI, opts);\n }\n\n return link;\n }\n\n return link;\n }\n }\n}\n"],"mappings":"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"}
@@ -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 {};
@@ -6,6 +6,8 @@ Object.defineProperty(exports, "__esModule", {
6
6
  });
7
7
  exports.default = transpileScript;
8
8
  exports.preTranspile = void 0;
9
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
10
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
9
11
  var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
10
12
  var _utils = require("../utils");
11
13
  var _types = require("./types");
@@ -25,134 +27,192 @@ var getCredentials = function getCredentials(crossOrigin) {
25
27
  return undefined;
26
28
  }
27
29
  };
28
- var preTranspile = function preTranspile(script, baseURI, opts) {
30
+ var preTranspile = exports.preTranspile = function preTranspile(script, baseURI, opts) {
29
31
  var sandbox = opts.sandbox,
30
32
  moduleResolver = opts.moduleResolver;
31
33
  var src = script.src,
32
34
  type = script.type;
33
- if (sandbox) {
34
- if (src) {
35
- var entireUrl = (0, _utils.getEntireUrl)(src, baseURI);
36
- var matchedScript = moduleResolver === null || moduleResolver === void 0 ? void 0 : moduleResolver(entireUrl);
37
- if (matchedScript) {
38
- return {
39
- mode: _types.Mode.REUSED_DEP_IN_SANDBOX,
40
- result: (0, _objectSpread2.default)({
41
- src: entireUrl
42
- }, matchedScript)
43
- };
44
- }
35
+ if (src) {
36
+ var entireUrl = (0, _utils.getEntireUrl)(src, baseURI);
37
+ var matchedScript = moduleResolver === null || moduleResolver === void 0 ? void 0 : moduleResolver(entireUrl);
38
+ if (matchedScript) {
45
39
  return {
46
- mode: _types.Mode.REMOTE_ASSETS_IN_SANDBOX,
47
- result: {
40
+ mode: sandbox ? _types.Mode.REUSED_DEP_IN_SANDBOX : _types.Mode.REUSED_DEP,
41
+ result: (0, _objectSpread2.default)({
48
42
  src: entireUrl
49
- }
43
+ }, matchedScript)
50
44
  };
51
45
  }
52
- if ((0, _utils2.isValidJavaScriptType)(type)) {
53
- var rawNode = opts.rawNode;
54
- var scriptNode = script.textContent ? script : rawNode.childNodes[0];
55
- var code = scriptNode.textContent;
56
- if (code) {
57
- return {
58
- mode: _types.Mode.INLINE_CODE_IN_SANDBOX,
59
- result: {
60
- code: code
61
- }
62
- };
46
+ return {
47
+ mode: sandbox ? _types.Mode.REMOTE_ASSETS_IN_SANDBOX : _types.Mode.REMOTE_ASSETS,
48
+ result: {
49
+ src: entireUrl
63
50
  }
51
+ };
52
+ }
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;
57
+ if (code) {
58
+ return {
59
+ mode: _types.Mode.INLINE_CODE_IN_SANDBOX,
60
+ result: {
61
+ code: code
62
+ }
63
+ };
64
64
  }
65
65
  }
66
66
  return {
67
67
  mode: _types.Mode.NONE
68
68
  };
69
69
  };
70
- exports.preTranspile = preTranspile;
71
70
  function transpileScript(script, baseURI, opts) {
72
71
  // Can't use script.src directly, because it will be resolved to absolute path by browser with Node.baseURI
73
72
  // Such as <script src="./foo.js"></script> will be resolved to http://localhost:8000/foo.js while read script.src
74
73
  var srcAttribute = script.getAttribute('src');
75
74
  var sandbox = opts.sandbox,
76
- fetch = opts.fetch;
75
+ scriptTranspiledDeferred = opts.scriptTranspiledDeferred;
77
76
 
78
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.
79
78
  // see https://github.com/webpack/webpack/blob/1f13ff9fe587e094df59d660b4611b1bd19aed4c/lib/runtime/LoadScriptRuntimeModule.js#L131-L136
80
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.
81
80
  script.removeAttribute('data-webpack');
82
- var _preTranspile = preTranspile({
83
- src: srcAttribute || undefined,
84
- type: script.type,
85
- textContent: script.textContent
86
- }, baseURI, opts),
87
- mode = _preTranspile.mode,
88
- result = _preTranspile.result;
89
- switch (mode) {
90
- case _types.Mode.REMOTE_ASSETS_IN_SANDBOX:
91
- {
92
- var src = result.src;
93
-
94
- // We must remove script src to avoid self execution as we need to fetch the script content and transpile it
95
- script.removeAttribute('src');
96
- script.dataset.src = src;
97
- var syncMode = !script.hasAttribute('async');
98
- var priority = syncMode ? 'high' : 'low';
99
- var credentials = getCredentials(script.crossOrigin);
100
- void fetch(src, {
101
- credentials: credentials,
102
- priority: priority
103
- }).then(function (res) {
104
- return res.text();
105
- }).then(function (code) {
106
- var codeFactory = sandbox.makeEvaluateFactory(code, src);
81
+ try {
82
+ var _preTranspile = preTranspile({
83
+ src: srcAttribute || undefined,
84
+ type: script.type,
85
+ textContent: script.textContent
86
+ }, baseURI, opts),
87
+ mode = _preTranspile.mode,
88
+ result = _preTranspile.result;
89
+ switch (mode) {
90
+ case _types.Mode.REMOTE_ASSETS_IN_SANDBOX:
91
+ {
92
+ var fetch = opts.fetch;
93
+ var src = result.src;
107
94
 
95
+ // We must remove script src to avoid self execution as we need to fetch the script content and transpile it
96
+ script.removeAttribute('src');
97
+ script.dataset.src = src;
98
+ var syncMode = !script.hasAttribute('async');
99
+ var priority = syncMode ? 'high' : 'low';
100
+ var credentials = getCredentials(script.crossOrigin);
101
+ void fetch(src, {
102
+ credentials: credentials,
103
+ priority: priority
104
+ }).then(function (res) {
105
+ return res.text();
106
+ }).then( /*#__PURE__*/function () {
107
+ var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(code) {
108
+ var prevScriptTranspiledDeferred, beforeScriptExecuteEvent, beforeExecutedListenerScript, codeFactory;
109
+ return _regenerator.default.wrap(function _callee$(_context) {
110
+ while (1) switch (_context.prev = _context.next) {
111
+ case 0:
112
+ prevScriptTranspiledDeferred = opts.prevScriptTranspiledDeferred; // add preprocess code to dispatch a CustomEvent before the script is executed
113
+ beforeScriptExecuteEvent = 'q:bse';
114
+ beforeExecutedListenerScript = ";(function(){var s=document.currentScript;var e=new CustomEvent('".concat(beforeScriptExecuteEvent, "',{detail:{s:s}});window.dispatchEvent(e);})();");
115
+ codeFactory = beforeExecutedListenerScript + sandbox.makeEvaluateFactory(code, src);
116
+ if (!syncMode) {
117
+ _context.next = 9;
118
+ break;
119
+ }
120
+ if (!(prevScriptTranspiledDeferred && !prevScriptTranspiledDeferred.isSettled())) {
121
+ _context.next = 8;
122
+ break;
123
+ }
124
+ _context.next = 8;
125
+ return (0, _utils.waitUntilSettled)(prevScriptTranspiledDeferred.promise);
126
+ case 8:
127
+ // HTMLScriptElement default fetchPriority is 'auto', we should set it to 'high' to make it execute earlier while it's not async script
128
+ script.fetchPriority = 'high';
129
+ case 9:
130
+ // change the script src to a blob url to make it execute in the sandbox
131
+ script.src = URL.createObjectURL(new Blob([codeFactory], {
132
+ type: 'text/javascript'
133
+ }));
134
+ window.addEventListener(beforeScriptExecuteEvent, function listener(evt) {
135
+ var _ref2 = evt.detail,
136
+ s = _ref2.s;
137
+ if (s === script) {
138
+ URL.revokeObjectURL(s.src);
139
+ // change the script src to the original src while the script is executing
140
+ // thus the script behavior can be more consistent with the native browser logic
141
+ s.src = src;
142
+ s.dataset.consumed = 'true';
143
+ delete s.dataset.src;
144
+ window.removeEventListener(beforeScriptExecuteEvent, listener);
145
+ }
146
+ });
147
+ scriptTranspiledDeferred === null || scriptTranspiledDeferred === void 0 || scriptTranspiledDeferred.resolve();
148
+ case 12:
149
+ case "end":
150
+ return _context.stop();
151
+ }
152
+ }, _callee);
153
+ }));
154
+ return function (_x) {
155
+ return _ref.apply(this, arguments);
156
+ };
157
+ }()).catch(function (e) {
158
+ scriptTranspiledDeferred === null || scriptTranspiledDeferred === void 0 || scriptTranspiledDeferred.reject();
159
+ throw e;
160
+ });
161
+ return script;
162
+ }
163
+ case _types.Mode.INLINE_CODE_IN_SANDBOX:
164
+ {
165
+ var rawNode = opts.rawNode;
166
+ var scriptNode = script.textContent ? script : rawNode.childNodes[0];
167
+ var code = result.code;
168
+ scriptNode.textContent = sandbox.makeEvaluateFactory(code, baseURI);
169
+ // mark the script have consumed
170
+ script.dataset.consumed = 'true';
171
+ scriptTranspiledDeferred === null || scriptTranspiledDeferred === void 0 || scriptTranspiledDeferred.resolve();
172
+ return script;
173
+ }
174
+ case _types.Mode.REUSED_DEP_IN_SANDBOX:
175
+ case _types.Mode.REUSED_DEP:
176
+ {
177
+ var url = result.url,
178
+ version = result.version,
179
+ _src = result.src;
180
+ script.dataset.src = _src;
181
+ script.dataset.version = version;
182
+ var _syncMode = !script.getAttribute('async');
108
183
  // HTMLScriptElement default fetchPriority is 'auto', we should set it to 'high' to make it execute earlier while it's not async script
109
- if (syncMode) {
184
+ if (_syncMode) {
110
185
  script.fetchPriority = 'high';
111
186
  }
112
- script.src = URL.createObjectURL(new Blob([codeFactory], {
113
- type: 'text/javascript'
114
- }));
115
- });
116
- return script;
117
- }
118
- case _types.Mode.INLINE_CODE_IN_SANDBOX:
119
- {
120
- var rawNode = opts.rawNode;
121
- var scriptNode = script.textContent ? script : rawNode.childNodes[0];
122
- var code = result.code;
123
- scriptNode.textContent = sandbox.makeEvaluateFactory(code, baseURI);
124
- // mark the script have consumed
125
- script.dataset.consumed = 'true';
126
- return script;
127
- }
128
- case _types.Mode.REUSED_DEP_IN_SANDBOX:
129
- {
130
- var url = result.url,
131
- version = result.version,
132
- _src = result.src;
133
- script.dataset.src = _src;
134
- script.dataset.version = version;
135
- var _syncMode = !script.getAttribute('async');
136
- // HTMLScriptElement default fetchPriority is 'auto', we should set it to 'high' to make it execute earlier while it's not async script
137
- if (_syncMode) {
138
- script.fetchPriority = 'high';
139
- }
140
187
 
141
- // When the script hits the dependency reuse logic, the current script is not executed, and an empty script is returned directly
142
- script.src = (0, _utils2.createReusingObjectUrl)(_src, url, 'text/javascript');
143
- return script;
144
- }
145
- case _types.Mode.NONE:
146
- default:
147
- {
148
- if (srcAttribute) {
149
- script.src = (0, _utils.getEntireUrl)(srcAttribute, baseURI);
188
+ // When the script hits the dependency reuse logic, the current script is not executed, and an empty script is returned directly
189
+ script.src = (0, _utils2.createReusingObjectUrl)(_src, url, 'text/javascript');
190
+ var onScriptComplete = function onScriptComplete(prevListener, event) {
191
+ script.onload = script.onerror = null;
192
+ script.src = _src;
193
+ script.dataset.consumed = 'true';
194
+ script.dataset.src = url;
195
+ prevListener === null || prevListener === void 0 || prevListener.call(script, event);
196
+ };
197
+ script.onload = onScriptComplete.bind(null, script.onload);
198
+ script.onerror = onScriptComplete.bind(null, script.onerror);
199
+ scriptTranspiledDeferred === null || scriptTranspiledDeferred === void 0 || scriptTranspiledDeferred.resolve();
150
200
  return script;
151
201
  }
152
- return script;
153
- }
202
+ case _types.Mode.REMOTE_ASSETS:
203
+ case _types.Mode.NONE:
204
+ default:
205
+ {
206
+ if (result !== null && result !== void 0 && result.src) {
207
+ script.src = result.src;
208
+ }
209
+ scriptTranspiledDeferred === null || scriptTranspiledDeferred === void 0 || scriptTranspiledDeferred.resolve();
210
+ return script;
211
+ }
212
+ }
213
+ } catch (e) {
214
+ scriptTranspiledDeferred === null || scriptTranspiledDeferred === void 0 || scriptTranspiledDeferred.reject(e);
215
+ throw e;
154
216
  }
155
-
156
- // TODO find entry exports
157
217
  }
158
218
  //# sourceMappingURL=script.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_utils","require","_types","_utils2","getCredentials","crossOrigin","undefined","preTranspile","script","baseURI","opts","sandbox","moduleResolver","src","type","entireUrl","getEntireUrl","matchedScript","mode","Mode","REUSED_DEP_IN_SANDBOX","result","_objectSpread2","default","REMOTE_ASSETS_IN_SANDBOX","isValidJavaScriptType","rawNode","scriptNode","textContent","childNodes","code","INLINE_CODE_IN_SANDBOX","NONE","exports","transpileScript","srcAttribute","getAttribute","fetch","removeAttribute","_preTranspile","dataset","syncMode","hasAttribute","priority","credentials","then","res","text","codeFactory","makeEvaluateFactory","fetchPriority","URL","createObjectURL","Blob","consumed","url","version","createReusingObjectUrl"],"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":"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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","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 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
  }
@@ -8,12 +8,13 @@ exports.Mode = void 0;
8
8
  * @author Kuitos
9
9
  * @since 2023-08-26
10
10
  */
11
- var Mode = /*#__PURE__*/function (Mode) {
11
+ var Mode = exports.Mode = /*#__PURE__*/function (Mode) {
12
12
  Mode["REMOTE_ASSETS_IN_SANDBOX"] = "RAIS";
13
+ Mode["REMOTE_ASSETS"] = "RA";
13
14
  Mode["REUSED_DEP_IN_SANDBOX"] = "RDIS";
15
+ Mode["REUSED_DEP"] = "RD";
14
16
  Mode["INLINE_CODE_IN_SANDBOX"] = "ICIS";
15
17
  Mode["NONE"] = "NONE";
16
18
  return Mode;
17
19
  }({});
18
- exports.Mode = Mode;
19
20
  //# sourceMappingURL=types.js.map
@@ -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';\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;AAHA,IAgBYA,IAAI,0BAAJA,IAAI;EAAJA,IAAI;EAAJA,IAAI;EAAJA,IAAI;EAAJA,IAAI;EAAA,OAAJA,IAAI;AAAA;AAAAC,OAAA,CAAAD,IAAA,GAAAA,IAAA"}
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 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,IAuBYA,IAAI,GAAAC,OAAA,CAAAD,IAAA,0BAAJA,IAAI;EAAJA,IAAI;EAAJA,IAAI;EAAJA,IAAI;EAAJA,IAAI;EAAJA,IAAI;EAAJA,IAAI;EAAA,OAAJA,IAAI;AAAA"}
@@ -11,17 +11,15 @@ var _memoize2 = _interopRequireDefault(require("lodash/memoize"));
11
11
  * @since 2023-10-09
12
12
  */
13
13
 
14
- var createReusingObjectUrl = (0, _memoize2.default)(function (src, url, type) {
14
+ var createReusingObjectUrl = exports.createReusingObjectUrl = (0, _memoize2.default)(function (src, url, type) {
15
15
  return URL.createObjectURL(new Blob(["/* ".concat(src, " is reusing the execution result of ").concat(url, " */")], {
16
16
  type: type
17
17
  }));
18
18
  }, function (src, url, type) {
19
19
  return "".concat(src, "#").concat(url, "#").concat(type);
20
20
  });
21
- exports.createReusingObjectUrl = createReusingObjectUrl;
22
- var isValidJavaScriptType = function isValidJavaScriptType(type) {
21
+ var isValidJavaScriptType = exports.isValidJavaScriptType = function isValidJavaScriptType(type) {
23
22
  var handleTypes = ['text/javascript', 'module', 'application/javascript', 'text/ecmascript', 'application/ecmascript'];
24
23
  return !type || handleTypes.indexOf(type) !== -1;
25
24
  };
26
- exports.isValidJavaScriptType = isValidJavaScriptType;
27
25
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["createReusingObjectUrl","_memoize2","default","src","url","type","URL","createObjectURL","Blob","concat","exports","isValidJavaScriptType","handleTypes","indexOf"],"sources":["../../../src/assets-transpilers/utils.ts"],"sourcesContent":["/**\n * @author Kuitos\n * @since 2023-10-09\n */\nimport { memoize } from 'lodash';\n\nexport const createReusingObjectUrl = memoize(\n (src: string, url: string, type: 'text/javascript' | 'text/css'): string => {\n return URL.createObjectURL(\n new Blob([`/* ${src} is reusing the execution result of ${url} */`], {\n type,\n }),\n );\n },\n (src, url, type) => `${src}#${url}#${type}`,\n);\n\nexport const isValidJavaScriptType = (type?: string): boolean => {\n const handleTypes = [\n 'text/javascript',\n 'module',\n 'application/javascript',\n 'text/ecmascript',\n 'application/ecmascript',\n ];\n return !type || handleTypes.indexOf(type) !== -1;\n};\n"],"mappings":";;;;;;;;AAAA;AACA;AACA;AACA;;AAGO,IAAMA,sBAAsB,GAAG,IAAAC,SAAA,CAAAC,OAAA,EACpC,UAACC,GAAW,EAAEC,GAAW,EAAEC,IAAoC,EAAa;EAC1E,OAAOC,GAAG,CAACC,eAAe,CACxB,IAAIC,IAAI,CAAC,OAAAC,MAAA,CAAON,GAAG,0CAAAM,MAAA,CAAuCL,GAAG,SAAM,EAAE;IACnEC,IAAI,EAAJA;EACF,CAAC,CACH,CAAC;AACH,CAAC,EACD,UAACF,GAAG,EAAEC,GAAG,EAAEC,IAAI;EAAA,UAAAI,MAAA,CAAQN,GAAG,OAAAM,MAAA,CAAIL,GAAG,OAAAK,MAAA,CAAIJ,IAAI;AAAA,CAC3C,CAAC;AAACK,OAAA,CAAAV,sBAAA,GAAAA,sBAAA;AAEK,IAAMW,qBAAqB,GAAG,SAAxBA,qBAAqBA,CAAIN,IAAa,EAAc;EAC/D,IAAMO,WAAW,GAAG,CAClB,iBAAiB,EACjB,QAAQ,EACR,wBAAwB,EACxB,iBAAiB,EACjB,wBAAwB,CACzB;EACD,OAAO,CAACP,IAAI,IAAIO,WAAW,CAACC,OAAO,CAACR,IAAI,CAAC,KAAK,CAAC,CAAC;AAClD,CAAC;AAACK,OAAA,CAAAC,qBAAA,GAAAA,qBAAA"}
1
+ {"version":3,"names":["createReusingObjectUrl","exports","_memoize2","default","src","url","type","URL","createObjectURL","Blob","concat","isValidJavaScriptType","handleTypes","indexOf"],"sources":["../../../src/assets-transpilers/utils.ts"],"sourcesContent":["/**\n * @author Kuitos\n * @since 2023-10-09\n */\nimport { memoize } from 'lodash';\n\nexport const createReusingObjectUrl = memoize(\n (src: string, url: string, type: 'text/javascript' | 'text/css'): string => {\n return URL.createObjectURL(\n new Blob([`/* ${src} is reusing the execution result of ${url} */`], {\n type,\n }),\n );\n },\n (src, url, type) => `${src}#${url}#${type}`,\n);\n\nexport const isValidJavaScriptType = (type?: string): boolean => {\n const handleTypes = [\n 'text/javascript',\n 'module',\n 'application/javascript',\n 'text/ecmascript',\n 'application/ecmascript',\n ];\n return !type || handleTypes.indexOf(type) !== -1;\n};\n"],"mappings":";;;;;;;;AAAA;AACA;AACA;AACA;;AAGO,IAAMA,sBAAsB,GAAAC,OAAA,CAAAD,sBAAA,GAAG,IAAAE,SAAA,CAAAC,OAAA,EACpC,UAACC,GAAW,EAAEC,GAAW,EAAEC,IAAoC,EAAa;EAC1E,OAAOC,GAAG,CAACC,eAAe,CACxB,IAAIC,IAAI,CAAC,OAAAC,MAAA,CAAON,GAAG,0CAAAM,MAAA,CAAuCL,GAAG,SAAM,EAAE;IACnEC,IAAI,EAAJA;EACF,CAAC,CACH,CAAC;AACH,CAAC,EACD,UAACF,GAAG,EAAEC,GAAG,EAAEC,IAAI;EAAA,UAAAI,MAAA,CAAQN,GAAG,OAAAM,MAAA,CAAIL,GAAG,OAAAK,MAAA,CAAIJ,IAAI;AAAA,CAC3C,CAAC;AAEM,IAAMK,qBAAqB,GAAAV,OAAA,CAAAU,qBAAA,GAAG,SAAxBA,qBAAqBA,CAAIL,IAAa,EAAc;EAC/D,IAAMM,WAAW,GAAG,CAClB,iBAAiB,EACjB,QAAQ,EACR,wBAAwB,EACxB,iBAAiB,EACjB,wBAAwB,CACzB;EACD,OAAO,CAACN,IAAI,IAAIM,WAAW,CAACC,OAAO,CAACP,IAAI,CAAC,KAAK,CAAC,CAAC;AAClD,CAAC"}
@@ -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
+ }