@qiankunjs/shared 0.0.1-alpha.3 → 0.0.1-alpha.4

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 (47) hide show
  1. package/dist/cjs/assets-transpilers/index.d.ts +3 -3
  2. package/dist/cjs/assets-transpilers/index.js.map +1 -1
  3. package/dist/cjs/assets-transpilers/link.d.ts +2 -2
  4. package/dist/cjs/assets-transpilers/link.js +117 -17
  5. package/dist/cjs/assets-transpilers/link.js.map +1 -1
  6. package/dist/cjs/assets-transpilers/script.d.ts +23 -8
  7. package/dist/cjs/assets-transpilers/script.js +115 -37
  8. package/dist/cjs/assets-transpilers/script.js.map +1 -1
  9. package/dist/cjs/assets-transpilers/types.d.ts +12 -0
  10. package/dist/cjs/assets-transpilers/types.js +6 -0
  11. package/dist/cjs/assets-transpilers/types.js.map +1 -0
  12. package/dist/cjs/common.d.ts +4 -3
  13. package/dist/cjs/common.js.map +1 -1
  14. package/dist/cjs/module-resolver/index.d.ts +2 -1
  15. package/dist/cjs/module-resolver/index.js.map +1 -1
  16. package/dist/cjs/module-resolver/types.d.ts +8 -0
  17. package/dist/cjs/module-resolver/types.js +6 -0
  18. package/dist/cjs/module-resolver/types.js.map +1 -0
  19. package/dist/cjs/typings.d.ts +10 -0
  20. package/dist/esm/assets-transpilers/index.d.ts +3 -3
  21. package/dist/esm/assets-transpilers/index.js.map +1 -1
  22. package/dist/esm/assets-transpilers/link.d.ts +2 -2
  23. package/dist/esm/assets-transpilers/link.js +117 -17
  24. package/dist/esm/assets-transpilers/link.js.map +1 -1
  25. package/dist/esm/assets-transpilers/script.d.ts +23 -8
  26. package/dist/esm/assets-transpilers/script.js +112 -37
  27. package/dist/esm/assets-transpilers/script.js.map +1 -1
  28. package/dist/esm/assets-transpilers/types.d.ts +12 -0
  29. package/dist/esm/assets-transpilers/types.js +2 -0
  30. package/dist/esm/assets-transpilers/types.js.map +1 -0
  31. package/dist/esm/common.d.ts +4 -3
  32. package/dist/esm/common.js.map +1 -1
  33. package/dist/esm/module-resolver/index.d.ts +2 -1
  34. package/dist/esm/module-resolver/index.js.map +1 -1
  35. package/dist/esm/module-resolver/types.d.ts +8 -0
  36. package/dist/esm/module-resolver/types.js +2 -0
  37. package/dist/esm/module-resolver/types.js.map +1 -0
  38. package/dist/esm/typings.d.ts +10 -0
  39. package/package.json +2 -2
  40. package/src/assets-transpilers/index.ts +3 -3
  41. package/src/assets-transpilers/link.ts +121 -15
  42. package/src/assets-transpilers/script.ts +125 -48
  43. package/src/assets-transpilers/types.ts +11 -0
  44. package/src/common.ts +5 -3
  45. package/src/module-resolver/index.ts +2 -1
  46. package/src/module-resolver/types.ts +8 -0
  47. package/src/typings.d.ts +10 -0
@@ -1,3 +1,3 @@
1
- import type { TransformerOpts } from './script';
2
- export declare function transpileAssets<T extends Node>(node: T, baseURI: string, opts: TransformerOpts): T;
3
- export type { TransformerOpts };
1
+ import type { AssetsTranspilerOpts } from './types';
2
+ export declare function transpileAssets<T extends Node>(node: T, baseURI: string, opts: AssetsTranspilerOpts): T;
3
+ export type * from './types';
@@ -1 +1 @@
1
- {"version":3,"names":["_link","_interopRequireDefault","require","_script","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 type { TransformerOpts } from './script';\nimport transpileScript from './script';\n\nexport function transpileAssets<T extends Node>(node: T, baseURI: string, opts: TransformerOpts): 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 { TransformerOpts };\n"],"mappings":";;;;;;;AAIA,IAAAA,KAAA,GAAAC,sBAAA,CAAAC,OAAA;AAEA,IAAAC,OAAA,GAAAF,sBAAA,CAAAC,OAAA;AANA;AACA;AACA;AACA;;AAKO,SAASE,eAAeA,CAAiBC,IAAO,EAAEC,OAAe,EAAEC,IAAqB,EAAK;EAClG,IAAMC,WAAW,GAAIH,IAA+B;EACpD,IAAQI,OAAO,GAAKD,WAAW,CAAvBC,OAAO;EAEf,QAAQA,OAAO;IACb,KAAK,QAAQ;MAAE;QACb,OAAQ,IAAAC,eAAe,EAACF,WAAW,EAAuBF,OAAO,EAAEC,IAAI,CAAC;MAC1E;IAEA,KAAK,MAAM;MAAE;QACX,OAAQ,IAAAI,aAAa,EAACH,WAAW,EAAqBF,OAAO,EAAEC,IAAI,CAAC;MACtE;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","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"],"mappings":";;;;;;;AAIA,IAAAA,KAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,OAAA,GAAAF,sBAAA,CAAAC,OAAA;AALA;AACA;AACA;AACA;;AAKO,SAASE,eAAeA,CAAiBC,IAAO,EAAEC,OAAe,EAAEC,IAA0B,EAAK;EACvG,IAAMC,WAAW,GAAIH,IAA+B;EACpD,IAAQI,OAAO,GAAKD,WAAW,CAAvBC,OAAO;EAEf,QAAQA,OAAO;IACb,KAAK,QAAQ;MAAE;QACb,OAAQ,IAAAC,eAAe,EAACF,WAAW,EAAuBF,OAAO,EAAEC,IAAI,CAAC;MAC1E;IAEA,KAAK,MAAM;MAAE;QACX,OAAQ,IAAAI,aAAa,EAACH,WAAW,EAAqBF,OAAO,EAAEC,IAAI,CAAC;MACtE;IAEA;MACE;EACJ;;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAOF,IAAI;AACb"}
@@ -1,2 +1,2 @@
1
- import type { TransformerOpts } from './script';
2
- export default function transpileLink(link: HTMLLinkElement, baseURI: string, opts: TransformerOpts): HTMLLinkElement;
1
+ import type { AssetsTranspilerOpts } from './types';
2
+ export default function transpileLink(link: HTMLLinkElement, baseURI: string, opts: AssetsTranspilerOpts): HTMLLinkElement;
@@ -1,34 +1,134 @@
1
1
  "use strict";
2
2
 
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
3
4
  Object.defineProperty(exports, "__esModule", {
4
5
  value: true
5
6
  });
6
7
  exports.default = transpileLink;
8
+ var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
7
9
  var _utils = require("../utils");
10
+ var _script = require("./script");
8
11
  /**
9
12
  * @author Kuitos
10
13
  * @since 2023-04-26
11
14
  */
12
15
 
16
+ var preTranspile = function preTranspile(link, baseURI, opts) {
17
+ var sandbox = opts.sandbox,
18
+ moduleResolver = opts.moduleResolver;
19
+ var href = link.href;
20
+ if (sandbox) {
21
+ if (href) {
22
+ var linkHref = (0, _utils.getEntireUrl)(href, baseURI);
23
+ var matchedAssets = moduleResolver === null || moduleResolver === void 0 ? void 0 : moduleResolver(linkHref);
24
+ if (matchedAssets) {
25
+ return {
26
+ mode: 'cache',
27
+ result: (0, _objectSpread2.default)({
28
+ src: linkHref
29
+ }, matchedAssets)
30
+ };
31
+ }
32
+ }
33
+ }
34
+ return {
35
+ mode: 'none'
36
+ };
37
+ };
38
+
39
+ /**
40
+ * While the assets are transpiling in sandbox, it means they will be evaluated with manual fetching,
41
+ * thus we need to set the attribute `as` to fetch instead of script or style to avoid preload cache missing.
42
+ * see https://stackoverflow.com/questions/52635660/can-link-rel-preload-be-made-to-work-with-fetch/63814972#63814972
43
+ */
44
+ var postProcessPreloadLink = function postProcessPreloadLink(link, baseURI, opts) {
45
+ var as = link.as,
46
+ href = link.href;
47
+ var revokeAfterLoaded = function revokeAfterLoaded(objectURL, link) {
48
+ var revoke = function revoke() {
49
+ return URL.revokeObjectURL(objectURL);
50
+ };
51
+ link.addEventListener('load', revoke, {
52
+ once: true
53
+ });
54
+ link.addEventListener('error', revoke, {
55
+ once: true
56
+ });
57
+ };
58
+ switch (as) {
59
+ case 'script':
60
+ {
61
+ var _preTranspileScript = (0, _script.preTranspile)({
62
+ src: href
63
+ }, baseURI, opts),
64
+ mode = _preTranspileScript.mode,
65
+ result = _preTranspileScript.result;
66
+ if (mode === 'remote') {
67
+ link.as = 'fetch';
68
+ }
69
+ if (mode === 'cache') {
70
+ var url = result.url;
71
+ var objectURL = URL.createObjectURL(new Blob(["// ".concat(href, " is reusing the execution result of ").concat(url)], {
72
+ type: 'text/javascript'
73
+ }));
74
+ link.href = objectURL;
75
+ revokeAfterLoaded(objectURL, link);
76
+ }
77
+ break;
78
+ }
79
+ case 'style':
80
+ {
81
+ var _preTranspile = preTranspile({
82
+ href: href
83
+ }, baseURI, opts),
84
+ _mode = _preTranspile.mode,
85
+ _result = _preTranspile.result;
86
+ if (_mode === 'cache') {
87
+ var _url = _result.url;
88
+ var _objectURL = URL.createObjectURL(new Blob(["// ".concat(href, " is reusing the execution result of ").concat(_url)], {
89
+ type: 'text/css'
90
+ }));
91
+ link.href = _objectURL;
92
+ revokeAfterLoaded(_objectURL, link);
93
+ }
94
+ break;
95
+ }
96
+ default:
97
+ break;
98
+ }
99
+ };
13
100
  function transpileLink(link, baseURI, opts) {
14
- var moduleResolver = opts.moduleResolver;
15
101
  var hrefAttribute = link.getAttribute('href');
16
- if (hrefAttribute) {
17
- var linkHref = (0, _utils.getEntireUrl)(hrefAttribute, baseURI);
18
- var matchedAssets = moduleResolver === null || moduleResolver === void 0 ? void 0 : moduleResolver(hrefAttribute);
19
- if (matchedAssets) {
20
- var url = matchedAssets.url,
21
- version = matchedAssets.version;
22
- link.dataset.href = linkHref;
23
- link.dataset.version = version;
24
- link.href = URL.createObjectURL(new Blob(["// ".concat(linkHref, " has reused the execution result of ").concat(url)], {
25
- type: 'application/javascript'
26
- }));
27
- return link;
28
- }
29
- link.href = (0, _utils.getEntireUrl)(hrefAttribute, baseURI);
30
- return link;
102
+ var _preTranspile2 = preTranspile({
103
+ href: hrefAttribute || undefined
104
+ }, baseURI, opts),
105
+ mode = _preTranspile2.mode,
106
+ result = _preTranspile2.result;
107
+ switch (mode) {
108
+ case 'cache':
109
+ {
110
+ var src = result.src,
111
+ version = result.version,
112
+ url = result.url;
113
+ link.dataset.href = src;
114
+ link.dataset.version = version;
115
+ link.href = URL.createObjectURL(new Blob(["// ".concat(src, " is reusing the execution result of ").concat(url)], {
116
+ type: 'text/css'
117
+ }));
118
+ return link;
119
+ }
120
+ case 'none':
121
+ default:
122
+ {
123
+ if (hrefAttribute) {
124
+ link.href = (0, _utils.getEntireUrl)(hrefAttribute, baseURI);
125
+ if (link.rel === 'preload') {
126
+ postProcessPreloadLink(link, baseURI, opts);
127
+ }
128
+ return link;
129
+ }
130
+ return link;
131
+ }
31
132
  }
32
- return link;
33
133
  }
34
134
  //# sourceMappingURL=link.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_utils","require","transpileLink","link","baseURI","opts","moduleResolver","hrefAttribute","getAttribute","linkHref","getEntireUrl","matchedAssets","url","version","dataset","href","URL","createObjectURL","Blob","concat","type"],"sources":["../../../src/assets-transpilers/link.ts"],"sourcesContent":["/**\n * @author Kuitos\n * @since 2023-04-26\n */\nimport { getEntireUrl } from '../utils';\nimport type { TransformerOpts } from './script';\n\nexport default function transpileLink(link: HTMLLinkElement, baseURI: string, opts: TransformerOpts): HTMLLinkElement {\n const { moduleResolver } = opts;\n\n const hrefAttribute = link.getAttribute('href');\n if (hrefAttribute) {\n const linkHref = getEntireUrl(hrefAttribute, baseURI);\n\n const matchedAssets = moduleResolver?.(hrefAttribute);\n if (matchedAssets) {\n const { url, version } = matchedAssets;\n link.dataset.href = linkHref;\n link.dataset.version = version;\n link.href = URL.createObjectURL(\n new Blob([`// ${linkHref} has reused the execution result of ${url}`], {\n type: 'application/javascript',\n }),\n );\n return link;\n }\n\n link.href = getEntireUrl(hrefAttribute, baseURI);\n return link;\n }\n\n return link;\n}\n"],"mappings":";;;;;;AAIA,IAAAA,MAAA,GAAAC,OAAA;AAJA;AACA;AACA;AACA;;AAIe,SAASC,aAAaA,CAACC,IAAqB,EAAEC,OAAe,EAAEC,IAAqB,EAAmB;EACpH,IAAQC,cAAc,GAAKD,IAAI,CAAvBC,cAAc;EAEtB,IAAMC,aAAa,GAAGJ,IAAI,CAACK,YAAY,CAAC,MAAM,CAAC;EAC/C,IAAID,aAAa,EAAE;IACjB,IAAME,QAAQ,GAAG,IAAAC,mBAAY,EAACH,aAAa,EAAEH,OAAO,CAAC;IAErD,IAAMO,aAAa,GAAGL,cAAc,aAAdA,cAAc,uBAAdA,cAAc,CAAGC,aAAa,CAAC;IACrD,IAAII,aAAa,EAAE;MACjB,IAAQC,GAAG,GAAcD,aAAa,CAA9BC,GAAG;QAAEC,OAAO,GAAKF,aAAa,CAAzBE,OAAO;MACpBV,IAAI,CAACW,OAAO,CAACC,IAAI,GAAGN,QAAQ;MAC5BN,IAAI,CAACW,OAAO,CAACD,OAAO,GAAGA,OAAO;MAC9BV,IAAI,CAACY,IAAI,GAAGC,GAAG,CAACC,eAAe,CAC7B,IAAIC,IAAI,CAAC,OAAAC,MAAA,CAAOV,QAAQ,0CAAAU,MAAA,CAAuCP,GAAG,EAAG,EAAE;QACrEQ,IAAI,EAAE;MACR,CAAC,CACH,CAAC;MACD,OAAOjB,IAAI;IACb;IAEAA,IAAI,CAACY,IAAI,GAAG,IAAAL,mBAAY,EAACH,aAAa,EAAEH,OAAO,CAAC;IAChD,OAAOD,IAAI;EACb;EAEA,OAAOA,IAAI;AACb"}
1
+ {"version":3,"names":["_utils","require","_script","preTranspile","link","baseURI","opts","sandbox","moduleResolver","href","linkHref","getEntireUrl","matchedAssets","mode","result","_objectSpread2","default","src","postProcessPreloadLink","as","revokeAfterLoaded","objectURL","revoke","URL","revokeObjectURL","addEventListener","once","_preTranspileScript","preTranspileScript","url","createObjectURL","Blob","concat","type","_preTranspile","transpileLink","hrefAttribute","getAttribute","_preTranspile2","undefined","version","dataset","rel"],"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';\n\ntype PreTranspileResult = { mode: 'cache'; result: { src: string } & MatchResult } | { mode: 'none'; result?: never };\nconst preTranspile = (\n link: Partial<Pick<HTMLLinkElement, 'href'>>,\n baseURI: string,\n opts: BaseTranspilerOpts,\n): PreTranspileResult => {\n const { sandbox, moduleResolver } = opts;\n const { href } = link;\n\n if (sandbox) {\n if (href) {\n const linkHref = getEntireUrl(href, baseURI);\n\n const matchedAssets = moduleResolver?.(linkHref);\n if (matchedAssets) {\n return {\n mode: 'cache',\n result: { src: linkHref, ...matchedAssets },\n };\n }\n }\n }\n\n return {\n mode: 'none',\n };\n};\n\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 */\nconst postProcessPreloadLink = (link: HTMLLinkElement, baseURI: string, opts: AssetsTranspilerOpts): void => {\n const { as, href } = link;\n\n const revokeAfterLoaded = (objectURL: string, link: HTMLLinkElement) => {\n const revoke = () => URL.revokeObjectURL(objectURL);\n link.addEventListener('load', revoke, { once: true });\n link.addEventListener('error', revoke, { once: true });\n };\n\n switch (as) {\n case 'script': {\n const { mode, result } = preTranspileScript({ src: href }, baseURI, opts);\n\n if (mode === 'remote') {\n link.as = 'fetch';\n }\n\n if (mode === 'cache') {\n const { url } = result;\n const objectURL = URL.createObjectURL(\n new Blob([`// ${href} is reusing the execution result of ${url}`], {\n type: 'text/javascript',\n }),\n );\n link.href = objectURL;\n revokeAfterLoaded(objectURL, link);\n }\n\n break;\n }\n\n case 'style': {\n const { mode, result } = preTranspile({ href }, baseURI, opts);\n\n if (mode === 'cache') {\n const { url } = result;\n const objectURL = URL.createObjectURL(\n new Blob([`// ${href} is reusing the execution result of ${url}`], {\n type: 'text/css',\n }),\n );\n link.href = objectURL;\n revokeAfterLoaded(objectURL, link);\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 } = preTranspile(\n {\n href: hrefAttribute || undefined,\n },\n baseURI,\n opts,\n );\n\n switch (mode) {\n case 'cache': {\n const { src, version, url } = result;\n link.dataset.href = src;\n link.dataset.version = version;\n link.href = URL.createObjectURL(\n new Blob([`// ${src} is reusing the execution result of ${url}`], {\n type: 'text/css',\n }),\n );\n\n return link;\n }\n\n case '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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"}
@@ -2,12 +2,27 @@
2
2
  * @author Kuitos
3
3
  * @since 2023-03-16
4
4
  */
5
- import type { Sandbox } from '@qiankunjs/sandbox';
6
- import type { MatchResult } from '../common';
7
- export type TransformerOpts = {
8
- fetch: typeof window.fetch;
9
- sandbox?: Sandbox;
10
- moduleResolver?: (url: string) => MatchResult | undefined;
11
- rawNode: Node;
5
+ import type { MatchResult } from '../module-resolver';
6
+ import type { AssetsTranspilerOpts } from './types';
7
+ type PreTranspileResult = {
8
+ mode: 'remote';
9
+ result: {
10
+ src: string;
11
+ };
12
+ } | {
13
+ mode: 'cache';
14
+ result: {
15
+ src: string;
16
+ } & MatchResult;
17
+ } | {
18
+ mode: 'inline';
19
+ result: {
20
+ code: string;
21
+ };
22
+ } | {
23
+ mode: 'none';
24
+ result?: never;
12
25
  };
13
- export default function transpileScript(script: HTMLScriptElement, baseURI: string, opts: TransformerOpts): HTMLScriptElement;
26
+ export declare const preTranspile: (script: Partial<Pick<HTMLScriptElement, 'src' | 'type' | 'textContent'>>, baseURI: string, opts: AssetsTranspilerOpts) => PreTranspileResult;
27
+ export default function transpileScript(script: HTMLScriptElement, baseURI: string, opts: AssetsTranspilerOpts): HTMLScriptElement;
28
+ export {};
@@ -1,9 +1,12 @@
1
1
  "use strict";
2
2
 
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
3
4
  Object.defineProperty(exports, "__esModule", {
4
5
  value: true
5
6
  });
6
7
  exports.default = transpileScript;
8
+ exports.preTranspile = void 0;
9
+ var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
7
10
  var _utils = require("../utils");
8
11
  /**
9
12
  * @author Kuitos
@@ -14,59 +17,134 @@ var isValidJavaScriptType = function isValidJavaScriptType(type) {
14
17
  var handleTypes = ['text/javascript', 'module', 'application/javascript', 'text/ecmascript', 'application/ecmascript'];
15
18
  return !type || handleTypes.indexOf(type) !== -1;
16
19
  };
17
- function transpileScript(script, baseURI, opts) {
18
- // Can't use script.src directly, because it will be resolved to absolute path by browser with Node.baseURI
19
- // Such as <script src="./foo.js"></script> will be resolved to http://localhost:8000/foo.js while read script.src
20
- var srcAttribute = script.getAttribute('src');
20
+ var getCredentials = function getCredentials(crossOrigin) {
21
+ switch (crossOrigin) {
22
+ case 'anonymous':
23
+ return 'same-origin';
24
+ case 'use-credentials':
25
+ return 'include';
26
+ default:
27
+ return undefined;
28
+ }
29
+ };
30
+ var preTranspile = function preTranspile(script, baseURI, opts) {
21
31
  var sandbox = opts.sandbox,
22
32
  moduleResolver = opts.moduleResolver;
33
+ var src = script.src,
34
+ type = script.type;
23
35
  if (sandbox) {
24
- if (srcAttribute) {
25
- script.removeAttribute('src');
26
- var scriptSrc = (0, _utils.getEntireUrl)(srcAttribute, baseURI);
27
-
28
- // try to resolve the script from module resolver
29
- var matchedScript = moduleResolver === null || moduleResolver === void 0 ? void 0 : moduleResolver(srcAttribute);
36
+ if (src) {
37
+ var entireUrl = (0, _utils.getEntireUrl)(src, baseURI);
38
+ var matchedScript = moduleResolver === null || moduleResolver === void 0 ? void 0 : moduleResolver(entireUrl);
30
39
  if (matchedScript) {
31
- var _url = matchedScript.url,
32
- version = matchedScript.version;
33
- script.dataset.src = scriptSrc;
34
- script.dataset.version = version;
35
- // When the script hits the dependency reuse logic, the current script is not executed, and an empty script is returned directly
36
- script.src = URL.createObjectURL(new Blob(["// ".concat(srcAttribute, " has reused the execution result of ").concat(_url)], {
37
- type: 'application/javascript'
38
- }));
39
- return script;
40
+ return {
41
+ mode: 'cache',
42
+ result: (0, _objectSpread2.default)({
43
+ src: entireUrl
44
+ }, matchedScript)
45
+ };
40
46
  }
41
- script.dataset.src = scriptSrc;
42
- var _fetch = opts.fetch;
43
- void _fetch(scriptSrc).then(function (res) {
44
- return res.text();
45
- }).then(function (code) {
46
- var codeFactory = sandbox.makeEvaluateFactory(code, scriptSrc);
47
- script.src = URL.createObjectURL(new Blob([codeFactory], {
48
- type: 'application/javascript'
49
- }));
50
- });
51
- return script;
47
+ return {
48
+ mode: 'remote',
49
+ result: {
50
+ src: entireUrl
51
+ }
52
+ };
52
53
  }
53
- if (isValidJavaScriptType(script.type)) {
54
+ if (isValidJavaScriptType(type)) {
54
55
  var rawNode = opts.rawNode;
55
56
  var scriptNode = script.textContent ? script : rawNode.childNodes[0];
56
57
  var code = scriptNode.textContent;
57
58
  if (code) {
59
+ return {
60
+ mode: 'inline',
61
+ result: {
62
+ code: code
63
+ }
64
+ };
65
+ }
66
+ }
67
+ }
68
+ return {
69
+ mode: 'none'
70
+ };
71
+ };
72
+ exports.preTranspile = preTranspile;
73
+ function transpileScript(script, baseURI, opts) {
74
+ // Can't use script.src directly, because it will be resolved to absolute path by browser with Node.baseURI
75
+ // Such as <script src="./foo.js"></script> will be resolved to http://localhost:8000/foo.js while read script.src
76
+ var srcAttribute = script.getAttribute('src');
77
+ var sandbox = opts.sandbox,
78
+ fetch = opts.fetch;
79
+ var _preTranspile = preTranspile({
80
+ src: srcAttribute || undefined,
81
+ type: script.type,
82
+ textContent: script.textContent
83
+ }, baseURI, opts),
84
+ mode = _preTranspile.mode,
85
+ result = _preTranspile.result;
86
+ switch (mode) {
87
+ case 'remote':
88
+ {
89
+ var src = result.src;
90
+
91
+ // We must remove script src to avoid self execution as we need to fetch the script content and transpile it
92
+ script.removeAttribute('src');
93
+ script.dataset.src = src;
94
+ var credentials = getCredentials(script.crossOrigin);
95
+ void fetch(src, {
96
+ credentials: credentials
97
+ }).then(function (res) {
98
+ return res.text();
99
+ }).then(function (code) {
100
+ var codeFactory = sandbox.makeEvaluateFactory(code, src);
101
+ // HTMLScriptElement default fetchPriority is 'auto', we should set it to 'high' to make it execute earlier while it's not async script
102
+ if (!script.getAttribute('async')) {
103
+ script.fetchPriority = 'high';
104
+ }
105
+ script.src = URL.createObjectURL(new Blob([codeFactory], {
106
+ type: 'text/javascript'
107
+ }));
108
+ });
109
+ return script;
110
+ }
111
+ case 'inline':
112
+ {
113
+ var rawNode = opts.rawNode;
114
+ var scriptNode = script.textContent ? script : rawNode.childNodes[0];
115
+ var code = result.code;
58
116
  scriptNode.textContent = sandbox.makeEvaluateFactory(code, baseURI);
59
117
  // mark the script have consumed
60
118
  script.dataset.consumed = 'true';
61
119
  return script;
62
120
  }
63
- }
64
- }
65
- if (srcAttribute) {
66
- script.src = (0, _utils.getEntireUrl)(srcAttribute, baseURI);
67
- return script;
121
+ case 'cache':
122
+ {
123
+ var url = result.url,
124
+ version = result.version,
125
+ _src = result.src;
126
+ script.dataset.src = _src;
127
+ script.dataset.version = version;
128
+ // HTMLScriptElement default fetchPriority is 'auto', we should set it to 'high' to make it execute earlier while it's not async script
129
+ if (!script.getAttribute('async')) {
130
+ script.fetchPriority = 'high';
131
+ }
132
+ // When the script hits the dependency reuse logic, the current script is not executed, and an empty script is returned directly
133
+ script.src = URL.createObjectURL(new Blob(["// ".concat(_src, " is reusing the execution result of ").concat(url)], {
134
+ type: 'text/javascript'
135
+ }));
136
+ return script;
137
+ }
138
+ case 'none':
139
+ default:
140
+ {
141
+ if (srcAttribute) {
142
+ script.src = (0, _utils.getEntireUrl)(srcAttribute, baseURI);
143
+ return script;
144
+ }
145
+ return script;
146
+ }
68
147
  }
69
- return script;
70
148
 
71
149
  // TODO find entry exports
72
150
  }
@@ -1 +1 @@
1
- {"version":3,"names":["_utils","require","isValidJavaScriptType","type","handleTypes","indexOf","transpileScript","script","baseURI","opts","srcAttribute","getAttribute","sandbox","moduleResolver","removeAttribute","scriptSrc","getEntireUrl","matchedScript","url","version","dataset","src","URL","createObjectURL","Blob","concat","fetch","then","res","text","code","codeFactory","makeEvaluateFactory","rawNode","scriptNode","textContent","childNodes","consumed"],"sources":["../../../src/assets-transpilers/script.ts"],"sourcesContent":["/**\n * @author Kuitos\n * @since 2023-03-16\n */\n\nimport type { Sandbox } from '@qiankunjs/sandbox';\nimport type { MatchResult } from '../common';\nimport { getEntireUrl } from '../utils';\n\nexport type TransformerOpts = {\n fetch: typeof window.fetch;\n sandbox?: Sandbox;\n moduleResolver?: (url: string) => MatchResult | undefined;\n rawNode: Node;\n};\n\nconst 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\nexport default function transpileScript(\n script: HTMLScriptElement,\n baseURI: string,\n opts: TransformerOpts,\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, moduleResolver } = opts;\n\n if (sandbox) {\n if (srcAttribute) {\n script.removeAttribute('src');\n\n const scriptSrc = getEntireUrl(srcAttribute, baseURI);\n\n // try to resolve the script from module resolver\n const matchedScript = moduleResolver?.(srcAttribute);\n if (matchedScript) {\n const { url, version } = matchedScript;\n script.dataset.src = scriptSrc;\n script.dataset.version = version;\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 = URL.createObjectURL(\n new Blob([`// ${srcAttribute} has reused the execution result of ${url}`], {\n type: 'application/javascript',\n }),\n );\n return script;\n }\n\n script.dataset.src = scriptSrc;\n\n const { fetch } = opts;\n void fetch(scriptSrc)\n .then((res) => res.text())\n .then((code) => {\n const codeFactory = sandbox.makeEvaluateFactory(code, scriptSrc);\n script.src = URL.createObjectURL(new Blob([codeFactory], { type: 'application/javascript' }));\n });\n return script;\n }\n\n if (isValidJavaScriptType(script.type)) {\n const rawNode = opts.rawNode as HTMLScriptElement;\n const scriptNode = script.textContent ? script : rawNode.childNodes[0];\n const code = scriptNode.textContent;\n if (code) {\n scriptNode.textContent = sandbox.makeEvaluateFactory(code, baseURI);\n // mark the script have consumed\n script.dataset.consumed = 'true';\n return script;\n }\n }\n }\n\n if (srcAttribute) {\n script.src = getEntireUrl(srcAttribute, baseURI);\n return script;\n }\n\n return script;\n\n // TODO find entry exports\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["_utils","require","isValidJavaScriptType","type","handleTypes","indexOf","getCredentials","crossOrigin","undefined","preTranspile","script","baseURI","opts","sandbox","moduleResolver","src","entireUrl","getEntireUrl","matchedScript","mode","result","_objectSpread2","default","rawNode","scriptNode","textContent","childNodes","code","exports","transpileScript","srcAttribute","getAttribute","fetch","_preTranspile","removeAttribute","dataset","credentials","then","res","text","codeFactory","makeEvaluateFactory","fetchPriority","URL","createObjectURL","Blob","consumed","url","version","concat"],"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';\n\nconst 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\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: 'remote'; result: { src: string } }\n | { mode: 'cache'; result: { src: string } & MatchResult }\n | { mode: 'inline'; result: { code: string } }\n | { 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: 'cache',\n result: { src: entireUrl, ...matchedScript },\n };\n }\n\n return {\n mode: 'remote',\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: 'inline',\n result: {\n code,\n },\n };\n }\n }\n }\n\n return { 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 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 'remote': {\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 credentials = getCredentials(script.crossOrigin);\n void fetch(src, { credentials })\n .then((res) => res.text())\n .then((code) => {\n const codeFactory = sandbox!.makeEvaluateFactory(code, src);\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 (!script.getAttribute('async')) {\n script.fetchPriority = 'high';\n }\n script.src = URL.createObjectURL(new Blob([codeFactory], { type: 'text/javascript' }));\n });\n\n return script;\n }\n\n case 'inline': {\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 'cache': {\n const { url, version, src } = result;\n\n script.dataset.src = src;\n script.dataset.version = version;\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 (!script.getAttribute('async')) {\n script.fetchPriority = 'high';\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 = URL.createObjectURL(\n new Blob([`// ${src} is reusing the execution result of ${url}`], {\n type: 'text/javascript',\n }),\n );\n\n return script;\n }\n\n case '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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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * @author Kuitos
3
+ * @since 2023-08-26
4
+ */
5
+ import type { BaseLoaderOpts } from '../common';
6
+ import type { MatchResult } from '../module-resolver';
7
+ export type BaseTranspilerOpts = BaseLoaderOpts & {
8
+ moduleResolver?: (url: string) => MatchResult | undefined;
9
+ };
10
+ export type AssetsTranspilerOpts = BaseTranspilerOpts & {
11
+ rawNode: Node;
12
+ };
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["../../../src/assets-transpilers/types.ts"],"sourcesContent":["/**\n * @author Kuitos\n * @since 2023-08-26\n */\nimport type { BaseLoaderOpts } from '../common';\n\nimport type { MatchResult } from '../module-resolver';\n\nexport type BaseTranspilerOpts = BaseLoaderOpts & { moduleResolver?: (url: string) => MatchResult | undefined };\n\nexport type AssetsTranspilerOpts = BaseTranspilerOpts & { rawNode: Node };\n"],"mappings":""}
@@ -1,4 +1,5 @@
1
- export type MatchResult = {
2
- version: string;
3
- url: string;
1
+ import type { Sandbox } from '@qiankunjs/sandbox';
2
+ export type BaseLoaderOpts = {
3
+ fetch: typeof window.fetch;
4
+ sandbox?: Sandbox;
4
5
  };
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["../../src/common.ts"],"sourcesContent":["export type MatchResult = {\n version: string;\n url: string;\n};\n"],"mappings":""}
1
+ {"version":3,"names":[],"sources":["../../src/common.ts"],"sourcesContent":["import type { Sandbox } from '@qiankunjs/sandbox';\n\nexport type BaseLoaderOpts = {\n fetch: typeof window.fetch;\n sandbox?: Sandbox;\n};\n"],"mappings":""}
@@ -1,2 +1,3 @@
1
- import type { MatchResult } from '../common';
1
+ import type { MatchResult } from './types';
2
2
  export declare function moduleResolver(url: string, microAppContainer: HTMLElement, mainAppContainer: HTMLElement): MatchResult | undefined;
3
+ export type { MatchResult } from './types';
@@ -1 +1 @@
1
- {"version":3,"names":["_satisfies","_interopRequireDefault","require","moduleResolver","url","microAppContainer","mainAppContainer","_microAppContainer$qu","dependencyMapSelector","microAppDependenciesString","querySelector","innerHTML","_ref","JSON","parse","dependencies","normalizedDependencies","normalizeDependencies","microAppDependency","find","v","_mainAppContainer$que","mainDependencyMapString","mainDependencyMap","findDependency","undefined","dependency","cachedDependencies","matched","cachedDependency","name","satisfies","version","range","Object","keys","map","_objectSpread2","default"],"sources":["../../../src/module-resolver/index.ts"],"sourcesContent":["import type { MatchResult } from '../common';\nimport satisfies from 'semver/functions/satisfies';\n\ntype Dependency = {\n url: string;\n version: string;\n range: string;\n};\n\ntype NormalizedDependency = {\n name: string;\n} & Dependency;\n\ntype DependencyMap = {\n dependencies: Record<string, Dependency>;\n};\n\nexport function moduleResolver(\n url: string,\n microAppContainer: HTMLElement,\n mainAppContainer: HTMLElement,\n): MatchResult | undefined {\n const dependencyMapSelector = 'script[type=dependencymap]';\n\n const microAppDependenciesString = microAppContainer.querySelector(dependencyMapSelector)?.innerHTML;\n if (microAppDependenciesString) {\n const { dependencies } = JSON.parse(microAppDependenciesString) as DependencyMap;\n const normalizedDependencies = normalizeDependencies(dependencies);\n const microAppDependency = normalizedDependencies.find((v) => v.url === url);\n\n if (microAppDependency) {\n const mainDependencyMapString = mainAppContainer.querySelector(dependencyMapSelector)?.innerHTML;\n\n if (mainDependencyMapString) {\n const mainDependencyMap = JSON.parse(mainDependencyMapString) as DependencyMap;\n return findDependency(microAppDependency, normalizeDependencies(mainDependencyMap.dependencies));\n }\n }\n }\n\n return undefined;\n}\n\nfunction findDependency(\n dependency: NormalizedDependency,\n cachedDependencies: NormalizedDependency[],\n): MatchResult | undefined {\n const matched = cachedDependencies.find(\n (cachedDependency) =>\n cachedDependency.name === dependency.name && satisfies(cachedDependency.version, dependency.range),\n );\n if (matched) {\n return {\n version: matched.version,\n url: matched.url,\n };\n }\n\n return undefined;\n}\n\nfunction normalizeDependencies(dependencies: DependencyMap['dependencies']): NormalizedDependency[] {\n return Object.keys(dependencies).map((name) => ({\n name,\n ...dependencies[name],\n }));\n}\n"],"mappings":";;;;;;;;AACA,IAAAA,UAAA,GAAAC,sBAAA,CAAAC,OAAA;AAgBO,SAASC,cAAcA,CAC5BC,GAAW,EACXC,iBAA8B,EAC9BC,gBAA6B,EACJ;EAAA,IAAAC,qBAAA;EACzB,IAAMC,qBAAqB,GAAG,4BAA4B;EAE1D,IAAMC,0BAA0B,IAAAF,qBAAA,GAAGF,iBAAiB,CAACK,aAAa,CAACF,qBAAqB,CAAC,cAAAD,qBAAA,uBAAtDA,qBAAA,CAAwDI,SAAS;EACpG,IAAIF,0BAA0B,EAAE;IAC9B,IAAAG,IAAA,GAAyBC,IAAI,CAACC,KAAK,CAACL,0BAA0B,CAAC;MAAvDM,YAAY,GAAAH,IAAA,CAAZG,YAAY;IACpB,IAAMC,sBAAsB,GAAGC,qBAAqB,CAACF,YAAY,CAAC;IAClE,IAAMG,kBAAkB,GAAGF,sBAAsB,CAACG,IAAI,CAAC,UAACC,CAAC;MAAA,OAAKA,CAAC,CAAChB,GAAG,KAAKA,GAAG;IAAA,EAAC;IAE5E,IAAIc,kBAAkB,EAAE;MAAA,IAAAG,qBAAA;MACtB,IAAMC,uBAAuB,IAAAD,qBAAA,GAAGf,gBAAgB,CAACI,aAAa,CAACF,qBAAqB,CAAC,cAAAa,qBAAA,uBAArDA,qBAAA,CAAuDV,SAAS;MAEhG,IAAIW,uBAAuB,EAAE;QAC3B,IAAMC,iBAAiB,GAAGV,IAAI,CAACC,KAAK,CAACQ,uBAAuB,CAAkB;QAC9E,OAAOE,cAAc,CAACN,kBAAkB,EAAED,qBAAqB,CAACM,iBAAiB,CAACR,YAAY,CAAC,CAAC;MAClG;IACF;EACF;EAEA,OAAOU,SAAS;AAClB;AAEA,SAASD,cAAcA,CACrBE,UAAgC,EAChCC,kBAA0C,EACjB;EACzB,IAAMC,OAAO,GAAGD,kBAAkB,CAACR,IAAI,CACrC,UAACU,gBAAgB;IAAA,OACfA,gBAAgB,CAACC,IAAI,KAAKJ,UAAU,CAACI,IAAI,IAAI,IAAAC,kBAAS,EAACF,gBAAgB,CAACG,OAAO,EAAEN,UAAU,CAACO,KAAK,CAAC;EAAA,CACtG,CAAC;EACD,IAAIL,OAAO,EAAE;IACX,OAAO;MACLI,OAAO,EAAEJ,OAAO,CAACI,OAAO;MACxB5B,GAAG,EAAEwB,OAAO,CAACxB;IACf,CAAC;EACH;EAEA,OAAOqB,SAAS;AAClB;AAEA,SAASR,qBAAqBA,CAACF,YAA2C,EAA0B;EAClG,OAAOmB,MAAM,CAACC,IAAI,CAACpB,YAAY,CAAC,CAACqB,GAAG,CAAC,UAACN,IAAI;IAAA,WAAAO,cAAA,CAAAC,OAAA;MACxCR,IAAI,EAAJA;IAAI,GACDf,YAAY,CAACe,IAAI,CAAC;EAAA,CACrB,CAAC;AACL"}
1
+ {"version":3,"names":["_satisfies","_interopRequireDefault","require","moduleResolver","url","microAppContainer","mainAppContainer","_microAppContainer$qu","dependencyMapSelector","microAppDependenciesString","querySelector","innerHTML","_ref","JSON","parse","dependencies","normalizedDependencies","normalizeDependencies","microAppDependency","find","v","_mainAppContainer$que","mainDependencyMapString","mainDependencyMap","findDependency","undefined","dependency","cachedDependencies","matched","cachedDependency","name","satisfies","version","range","Object","keys","map","_objectSpread2","default"],"sources":["../../../src/module-resolver/index.ts"],"sourcesContent":["import satisfies from 'semver/functions/satisfies';\nimport type { MatchResult } from './types';\n\ntype Dependency = {\n url: string;\n version: string;\n range: string;\n};\n\ntype NormalizedDependency = {\n name: string;\n} & Dependency;\n\ntype DependencyMap = {\n dependencies: Record<string, Dependency>;\n};\n\nexport function moduleResolver(\n url: string,\n microAppContainer: HTMLElement,\n mainAppContainer: HTMLElement,\n): MatchResult | undefined {\n const dependencyMapSelector = 'script[type=dependencymap]';\n\n const microAppDependenciesString = microAppContainer.querySelector(dependencyMapSelector)?.innerHTML;\n if (microAppDependenciesString) {\n const { dependencies } = JSON.parse(microAppDependenciesString) as DependencyMap;\n const normalizedDependencies = normalizeDependencies(dependencies);\n const microAppDependency = normalizedDependencies.find((v) => v.url === url);\n\n if (microAppDependency) {\n const mainDependencyMapString = mainAppContainer.querySelector(dependencyMapSelector)?.innerHTML;\n\n if (mainDependencyMapString) {\n const mainDependencyMap = JSON.parse(mainDependencyMapString) as DependencyMap;\n return findDependency(microAppDependency, normalizeDependencies(mainDependencyMap.dependencies));\n }\n }\n }\n\n return undefined;\n}\n\nfunction findDependency(\n dependency: NormalizedDependency,\n cachedDependencies: NormalizedDependency[],\n): MatchResult | undefined {\n const matched = cachedDependencies.find(\n (cachedDependency) =>\n cachedDependency.name === dependency.name && satisfies(cachedDependency.version, dependency.range),\n );\n if (matched) {\n return {\n version: matched.version,\n url: matched.url,\n };\n }\n\n return undefined;\n}\n\nfunction normalizeDependencies(dependencies: DependencyMap['dependencies']): NormalizedDependency[] {\n return Object.keys(dependencies).map((name) => ({\n name,\n ...dependencies[name],\n }));\n}\nexport type { MatchResult } from './types';\n"],"mappings":";;;;;;;;AAAA,IAAAA,UAAA,GAAAC,sBAAA,CAAAC,OAAA;AAiBO,SAASC,cAAcA,CAC5BC,GAAW,EACXC,iBAA8B,EAC9BC,gBAA6B,EACJ;EAAA,IAAAC,qBAAA;EACzB,IAAMC,qBAAqB,GAAG,4BAA4B;EAE1D,IAAMC,0BAA0B,IAAAF,qBAAA,GAAGF,iBAAiB,CAACK,aAAa,CAACF,qBAAqB,CAAC,cAAAD,qBAAA,uBAAtDA,qBAAA,CAAwDI,SAAS;EACpG,IAAIF,0BAA0B,EAAE;IAC9B,IAAAG,IAAA,GAAyBC,IAAI,CAACC,KAAK,CAACL,0BAA0B,CAAC;MAAvDM,YAAY,GAAAH,IAAA,CAAZG,YAAY;IACpB,IAAMC,sBAAsB,GAAGC,qBAAqB,CAACF,YAAY,CAAC;IAClE,IAAMG,kBAAkB,GAAGF,sBAAsB,CAACG,IAAI,CAAC,UAACC,CAAC;MAAA,OAAKA,CAAC,CAAChB,GAAG,KAAKA,GAAG;IAAA,EAAC;IAE5E,IAAIc,kBAAkB,EAAE;MAAA,IAAAG,qBAAA;MACtB,IAAMC,uBAAuB,IAAAD,qBAAA,GAAGf,gBAAgB,CAACI,aAAa,CAACF,qBAAqB,CAAC,cAAAa,qBAAA,uBAArDA,qBAAA,CAAuDV,SAAS;MAEhG,IAAIW,uBAAuB,EAAE;QAC3B,IAAMC,iBAAiB,GAAGV,IAAI,CAACC,KAAK,CAACQ,uBAAuB,CAAkB;QAC9E,OAAOE,cAAc,CAACN,kBAAkB,EAAED,qBAAqB,CAACM,iBAAiB,CAACR,YAAY,CAAC,CAAC;MAClG;IACF;EACF;EAEA,OAAOU,SAAS;AAClB;AAEA,SAASD,cAAcA,CACrBE,UAAgC,EAChCC,kBAA0C,EACjB;EACzB,IAAMC,OAAO,GAAGD,kBAAkB,CAACR,IAAI,CACrC,UAACU,gBAAgB;IAAA,OACfA,gBAAgB,CAACC,IAAI,KAAKJ,UAAU,CAACI,IAAI,IAAI,IAAAC,kBAAS,EAACF,gBAAgB,CAACG,OAAO,EAAEN,UAAU,CAACO,KAAK,CAAC;EAAA,CACtG,CAAC;EACD,IAAIL,OAAO,EAAE;IACX,OAAO;MACLI,OAAO,EAAEJ,OAAO,CAACI,OAAO;MACxB5B,GAAG,EAAEwB,OAAO,CAACxB;IACf,CAAC;EACH;EAEA,OAAOqB,SAAS;AAClB;AAEA,SAASR,qBAAqBA,CAACF,YAA2C,EAA0B;EAClG,OAAOmB,MAAM,CAACC,IAAI,CAACpB,YAAY,CAAC,CAACqB,GAAG,CAAC,UAACN,IAAI;IAAA,WAAAO,cAAA,CAAAC,OAAA;MACxCR,IAAI,EAAJA;IAAI,GACDf,YAAY,CAACe,IAAI,CAAC;EAAA,CACrB,CAAC;AACL"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @author Kuitos
3
+ * @since 2023-08-26
4
+ */
5
+ export type MatchResult = {
6
+ version: string;
7
+ url: string;
8
+ };
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["../../../src/module-resolver/types.ts"],"sourcesContent":["/**\n * @author Kuitos\n * @since 2023-08-26\n */\nexport type MatchResult = {\n version: string;\n url: string;\n};\n"],"mappings":""}
@@ -1,3 +1,13 @@
1
1
  declare module 'semver/functions/satisfies' {
2
2
  export default function satisfies(version: string, range: string): boolean;
3
3
  }
4
+
5
+ type Priority = 'high' | 'low' | 'auto';
6
+
7
+ interface HTMLScriptElement {
8
+ fetchPriority?: Priority;
9
+ }
10
+
11
+ interface RequestInit {
12
+ priority?: Priority;
13
+ }
@@ -1,3 +1,3 @@
1
- import type { TransformerOpts } from './script';
2
- export declare function transpileAssets<T extends Node>(node: T, baseURI: string, opts: TransformerOpts): T;
3
- export type { TransformerOpts };
1
+ import type { AssetsTranspilerOpts } from './types';
2
+ export declare function transpileAssets<T extends Node>(node: T, baseURI: string, opts: AssetsTranspilerOpts): T;
3
+ export type * from './types';
@@ -1 +1 @@
1
- {"version":3,"names":["transpileLink","transpileScript","transpileAssets","node","baseURI","opts","htmlElement","tagName"],"sources":["../../../src/assets-transpilers/index.ts"],"sourcesContent":["/**\n * @author Kuitos\n * @since 2023-03-14\n */\nimport transpileLink from './link';\nimport type { TransformerOpts } from './script';\nimport transpileScript from './script';\n\nexport function transpileAssets<T extends Node>(node: T, baseURI: string, opts: TransformerOpts): 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 { TransformerOpts };\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA,OAAOA,aAAa;AAEpB,OAAOC,eAAe;AAEtB,OAAO,SAASC,eAAeA,CAAiBC,IAAO,EAAEC,OAAe,EAAEC,IAAqB,EAAK;EAClG,IAAMC,WAAW,GAAIH,IAA+B;EACpD,IAAQI,OAAO,GAAKD,WAAW,CAAvBC,OAAO;EAEf,QAAQA,OAAO;IACb,KAAK,QAAQ;MAAE;QACb,OAAQN,eAAe,CAACK,WAAW,EAAuBF,OAAO,EAAEC,IAAI,CAAC;MAC1E;IAEA,KAAK,MAAM;MAAE;QACX,OAAQL,aAAa,CAACM,WAAW,EAAqBF,OAAO,EAAEC,IAAI,CAAC;MACtE;IAEA;MACE;EACJ;;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAOF,IAAI;AACb"}
1
+ {"version":3,"names":["transpileLink","transpileScript","transpileAssets","node","baseURI","opts","htmlElement","tagName"],"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"],"mappings":"AAAA;AACA;AACA;AACA;AACA,OAAOA,aAAa;AACpB,OAAOC,eAAe;AAGtB,OAAO,SAASC,eAAeA,CAAiBC,IAAO,EAAEC,OAAe,EAAEC,IAA0B,EAAK;EACvG,IAAMC,WAAW,GAAIH,IAA+B;EACpD,IAAQI,OAAO,GAAKD,WAAW,CAAvBC,OAAO;EAEf,QAAQA,OAAO;IACb,KAAK,QAAQ;MAAE;QACb,OAAQN,eAAe,CAACK,WAAW,EAAuBF,OAAO,EAAEC,IAAI,CAAC;MAC1E;IAEA,KAAK,MAAM;MAAE;QACX,OAAQL,aAAa,CAACM,WAAW,EAAqBF,OAAO,EAAEC,IAAI,CAAC;MACtE;IAEA;MACE;EACJ;;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAOF,IAAI;AACb"}
@@ -1,2 +1,2 @@
1
- import type { TransformerOpts } from './script';
2
- export default function transpileLink(link: HTMLLinkElement, baseURI: string, opts: TransformerOpts): HTMLLinkElement;
1
+ import type { AssetsTranspilerOpts } from './types';
2
+ export default function transpileLink(link: HTMLLinkElement, baseURI: string, opts: AssetsTranspilerOpts): HTMLLinkElement;