@qiankunjs/shared 0.0.1-rc.0 → 0.0.1-rc.2

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 (37) hide show
  1. package/dist/cjs/assets-transpilers/index.js.map +1 -1
  2. package/dist/cjs/assets-transpilers/link.js +29 -46
  3. package/dist/cjs/assets-transpilers/link.js.map +1 -1
  4. package/dist/cjs/assets-transpilers/script.d.ts +3 -3
  5. package/dist/cjs/assets-transpilers/script.js +8 -9
  6. package/dist/cjs/assets-transpilers/script.js.map +1 -1
  7. package/dist/cjs/assets-transpilers/types.d.ts +3 -3
  8. package/dist/cjs/assets-transpilers/types.js +3 -3
  9. package/dist/cjs/assets-transpilers/types.js.map +1 -1
  10. package/dist/cjs/assets-transpilers/utils.d.ts +1 -0
  11. package/dist/cjs/assets-transpilers/utils.js +22 -0
  12. package/dist/cjs/assets-transpilers/utils.js.map +1 -0
  13. package/dist/cjs/module-resolver/index.d.ts +1 -1
  14. package/dist/cjs/module-resolver/index.js +10 -10
  15. package/dist/cjs/module-resolver/index.js.map +1 -1
  16. package/dist/esm/assets-transpilers/index.js.map +1 -1
  17. package/dist/esm/assets-transpilers/link.js +29 -46
  18. package/dist/esm/assets-transpilers/link.js.map +1 -1
  19. package/dist/esm/assets-transpilers/script.d.ts +3 -3
  20. package/dist/esm/assets-transpilers/script.js +8 -9
  21. package/dist/esm/assets-transpilers/script.js.map +1 -1
  22. package/dist/esm/assets-transpilers/types.d.ts +3 -3
  23. package/dist/esm/assets-transpilers/types.js +3 -3
  24. package/dist/esm/assets-transpilers/types.js.map +1 -1
  25. package/dist/esm/assets-transpilers/utils.d.ts +1 -0
  26. package/dist/esm/assets-transpilers/utils.js +13 -0
  27. package/dist/esm/assets-transpilers/utils.js.map +1 -0
  28. package/dist/esm/module-resolver/index.d.ts +1 -1
  29. package/dist/esm/module-resolver/index.js +10 -10
  30. package/dist/esm/module-resolver/index.js.map +1 -1
  31. package/package.json +2 -2
  32. package/src/assets-transpilers/index.ts +3 -3
  33. package/src/assets-transpilers/link.ts +23 -43
  34. package/src/assets-transpilers/script.ts +11 -14
  35. package/src/assets-transpilers/types.ts +3 -3
  36. package/src/assets-transpilers/utils.ts +16 -0
  37. package/src/module-resolver/index.ts +9 -9
@@ -7,17 +7,20 @@ import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
7
7
  import { getEntireUrl } from "../utils";
8
8
  import { preTranspile as preTranspileScript } from "./script";
9
9
  import { Mode } from "./types";
10
- var preTranspile = function preTranspile(link, baseURI, opts) {
10
+ import { createReusingObjectUrl } from "./utils";
11
+ var preTranspileStyleSheetLink = function preTranspileStyleSheetLink(link, baseURI, opts) {
11
12
  var sandbox = opts.sandbox,
12
13
  moduleResolver = opts.moduleResolver;
13
- var href = link.href;
14
+ var href = link.href,
15
+ rel = link.rel;
14
16
  if (sandbox) {
15
- if (href) {
17
+ // filter preload links
18
+ if (href && rel === 'stylesheet') {
16
19
  var linkHref = getEntireUrl(href, baseURI);
17
20
  var matchedAssets = moduleResolver === null || moduleResolver === void 0 ? void 0 : moduleResolver(linkHref);
18
21
  if (matchedAssets) {
19
22
  return {
20
- mode: Mode.CACHE_FROM_SANDBOX,
23
+ mode: Mode.REUSED_DEP_IN_SANDBOX,
21
24
  result: _objectSpread({
22
25
  src: linkHref
23
26
  }, matchedAssets)
@@ -29,26 +32,9 @@ var preTranspile = function preTranspile(link, baseURI, opts) {
29
32
  mode: Mode.NONE
30
33
  };
31
34
  };
32
-
33
- /**
34
- * While the assets are transpiling in sandbox, it means they will be evaluated with manual fetching,
35
- * thus we need to set the attribute `as` to fetch instead of script or style to avoid preload cache missing.
36
- * see https://stackoverflow.com/questions/52635660/can-link-rel-preload-be-made-to-work-with-fetch/63814972#63814972
37
- */
38
35
  var postProcessPreloadLink = function postProcessPreloadLink(link, baseURI, opts) {
39
36
  var as = link.as,
40
37
  href = link.href;
41
- var revokeAfterLoaded = function revokeAfterLoaded(objectURL, link) {
42
- var revoke = function revoke() {
43
- return URL.revokeObjectURL(objectURL);
44
- };
45
- link.addEventListener('load', revoke, {
46
- once: true
47
- });
48
- link.addEventListener('error', revoke, {
49
- once: true
50
- });
51
- };
52
38
  switch (as) {
53
39
  case 'script':
54
40
  {
@@ -58,19 +44,20 @@ var postProcessPreloadLink = function postProcessPreloadLink(link, baseURI, opts
58
44
  mode = _preTranspileScript.mode,
59
45
  result = _preTranspileScript.result;
60
46
  switch (mode) {
61
- case Mode.REMOTE_FROM_SANDBOX:
47
+ /**
48
+ * While the assets are transpiling in sandbox, it means they will be evaluated with manual fetching,
49
+ * thus we need to set the attribute `as` to fetch instead of script or style to avoid preload cache missing.
50
+ * see https://stackoverflow.com/questions/52635660/can-link-rel-preload-be-made-to-work-with-fetch/63814972#63814972
51
+ */
52
+ case Mode.REMOTE_ASSETS_IN_SANDBOX:
62
53
  {
63
54
  link.as = 'fetch';
64
55
  break;
65
56
  }
66
- case Mode.CACHE_FROM_SANDBOX:
57
+ case Mode.REUSED_DEP_IN_SANDBOX:
67
58
  {
68
59
  var url = result.url;
69
- var objectURL = URL.createObjectURL(new Blob(["// ".concat(href, " is reusing the execution result of ").concat(url)], {
70
- type: 'text/javascript'
71
- }));
72
- link.href = objectURL;
73
- revokeAfterLoaded(objectURL, link);
60
+ link.href = createReusingObjectUrl(href, url, 'text/javascript');
74
61
  break;
75
62
  }
76
63
  }
@@ -78,20 +65,17 @@ var postProcessPreloadLink = function postProcessPreloadLink(link, baseURI, opts
78
65
  }
79
66
  case 'style':
80
67
  {
81
- var _preTranspile = preTranspile({
82
- href: href
68
+ var _preTranspileStyleShe = preTranspileStyleSheetLink({
69
+ href: href,
70
+ rel: 'stylesheet'
83
71
  }, baseURI, opts),
84
- _mode = _preTranspile.mode,
85
- _result = _preTranspile.result;
72
+ _mode = _preTranspileStyleShe.mode,
73
+ _result = _preTranspileStyleShe.result;
86
74
  switch (_mode) {
87
- case Mode.CACHE_FROM_SANDBOX:
75
+ case Mode.REUSED_DEP_IN_SANDBOX:
88
76
  {
89
77
  var _url = _result.url;
90
- var _objectURL = URL.createObjectURL(new Blob(["// ".concat(href, " is reusing the execution result of ").concat(_url)], {
91
- type: 'text/css'
92
- }));
93
- link.href = _objectURL;
94
- revokeAfterLoaded(_objectURL, link);
78
+ link.href = createReusingObjectUrl(href, _url, 'text/css');
95
79
  break;
96
80
  }
97
81
  }
@@ -103,22 +87,21 @@ var postProcessPreloadLink = function postProcessPreloadLink(link, baseURI, opts
103
87
  };
104
88
  export default function transpileLink(link, baseURI, opts) {
105
89
  var hrefAttribute = link.getAttribute('href');
106
- var _preTranspile2 = preTranspile({
107
- href: hrefAttribute || undefined
90
+ var _preTranspileStyleShe2 = preTranspileStyleSheetLink({
91
+ href: hrefAttribute || undefined,
92
+ rel: link.rel
108
93
  }, baseURI, opts),
109
- mode = _preTranspile2.mode,
110
- result = _preTranspile2.result;
94
+ mode = _preTranspileStyleShe2.mode,
95
+ result = _preTranspileStyleShe2.result;
111
96
  switch (mode) {
112
- case Mode.CACHE_FROM_SANDBOX:
97
+ case Mode.REUSED_DEP_IN_SANDBOX:
113
98
  {
114
99
  var src = result.src,
115
100
  version = result.version,
116
101
  url = result.url;
117
102
  link.dataset.href = src;
118
103
  link.dataset.version = version;
119
- link.href = URL.createObjectURL(new Blob(["// ".concat(src, " is reusing the execution result of ").concat(url)], {
120
- type: 'text/css'
121
- }));
104
+ link.href = createReusingObjectUrl(src, url, 'text/css');
122
105
  return link;
123
106
  }
124
107
  case Mode.NONE:
@@ -1 +1 @@
1
- {"version":3,"names":["getEntireUrl","preTranspile","preTranspileScript","Mode","link","baseURI","opts","sandbox","moduleResolver","href","linkHref","matchedAssets","mode","CACHE_FROM_SANDBOX","result","_objectSpread","src","NONE","postProcessPreloadLink","as","revokeAfterLoaded","objectURL","revoke","URL","revokeObjectURL","addEventListener","once","_preTranspileScript","REMOTE_FROM_SANDBOX","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';\nimport { Mode } from './types';\n\ntype PreTranspileResult =\n | { mode: Mode.CACHE_FROM_SANDBOX; result: { src: string } & MatchResult }\n | { mode: 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: Mode.CACHE_FROM_SANDBOX,\n result: { src: linkHref, ...matchedAssets },\n };\n }\n }\n }\n\n return {\n mode: 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 switch (mode) {\n case Mode.REMOTE_FROM_SANDBOX: {\n link.as = 'fetch';\n break;\n }\n\n case Mode.CACHE_FROM_SANDBOX: {\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 break;\n }\n }\n\n break;\n }\n\n case 'style': {\n const { mode, result } = preTranspile({ href }, baseURI, opts);\n\n switch (mode) {\n case Mode.CACHE_FROM_SANDBOX: {\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 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 } = preTranspile(\n {\n href: hrefAttribute || undefined,\n },\n baseURI,\n opts,\n );\n\n switch (mode) {\n case Mode.CACHE_FROM_SANDBOX: {\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 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":["getEntireUrl","preTranspile","preTranspileScript","Mode","createReusingObjectUrl","preTranspileStyleSheetLink","link","baseURI","opts","sandbox","moduleResolver","href","rel","linkHref","matchedAssets","mode","REUSED_DEP_IN_SANDBOX","result","_objectSpread","src","NONE","postProcessPreloadLink","as","_preTranspileScript","REMOTE_ASSETS_IN_SANDBOX","url","_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":";AAAA;AACA;AACA;AACA;;AAEA,SAASA,YAAY;AACrB,SAASC,YAAY,IAAIC,kBAAkB;AAE3C,SAASC,IAAI;AACb,SAASC,sBAAsB;AAK/B,IAAMC,0BAA0B,GAAG,SAA7BA,0BAA0BA,CAC9BC,IAAoD,EACpDC,OAAe,EACfC,IAAwB,EACD;EACvB,IAAQC,OAAO,GAAqBD,IAAI,CAAhCC,OAAO;IAAEC,cAAc,GAAKF,IAAI,CAAvBE,cAAc;EAC/B,IAAQC,IAAI,GAAUL,IAAI,CAAlBK,IAAI;IAAEC,GAAG,GAAKN,IAAI,CAAZM,GAAG;EAEjB,IAAIH,OAAO,EAAE;IACX;IACA,IAAIE,IAAI,IAAIC,GAAG,KAAK,YAAY,EAAE;MAChC,IAAMC,QAAQ,GAAGb,YAAY,CAACW,IAAI,EAAEJ,OAAO,CAAC;MAE5C,IAAMO,aAAa,GAAGJ,cAAc,aAAdA,cAAc,uBAAdA,cAAc,CAAGG,QAAQ,CAAC;MAChD,IAAIC,aAAa,EAAE;QACjB,OAAO;UACLC,IAAI,EAAEZ,IAAI,CAACa,qBAAqB;UAChCC,MAAM,EAAAC,aAAA;YAAIC,GAAG,EAAEN;UAAQ,GAAKC,aAAa;QAC3C,CAAC;MACH;IACF;EACF;EAEA,OAAO;IACLC,IAAI,EAAEZ,IAAI,CAACiB;EACb,CAAC;AACH,CAAC;AAED,IAAMC,sBAAsB,GAAG,SAAzBA,sBAAsBA,CAAIf,IAAqB,EAAEC,OAAe,EAAEC,IAA0B,EAAW;EAC3G,IAAQc,EAAE,GAAWhB,IAAI,CAAjBgB,EAAE;IAAEX,IAAI,GAAKL,IAAI,CAAbK,IAAI;EAChB,QAAQW,EAAE;IACR,KAAK,QAAQ;MAAE;QACb,IAAAC,mBAAA,GAAyBrB,kBAAkB,CAAC;YAAEiB,GAAG,EAAER;UAAK,CAAC,EAAEJ,OAAO,EAAEC,IAAI,CAAC;UAAjEO,IAAI,GAAAQ,mBAAA,CAAJR,IAAI;UAAEE,MAAM,GAAAM,mBAAA,CAANN,MAAM;QAEpB,QAAQF,IAAI;UACV;AACR;AACA;AACA;AACA;UACQ,KAAKZ,IAAI,CAACqB,wBAAwB;YAAE;cAClClB,IAAI,CAACgB,EAAE,GAAG,OAAO;cACjB;YACF;UAEA,KAAKnB,IAAI,CAACa,qBAAqB;YAAE;cAC/B,IAAQS,GAAG,GAAKR,MAAM,CAAdQ,GAAG;cACXnB,IAAI,CAACK,IAAI,GAAGP,sBAAsB,CAACO,IAAI,EAAEc,GAAG,EAAE,iBAAiB,CAAC;cAEhE;YACF;QACF;QAEA;MACF;IAEA,KAAK,OAAO;MAAE;QACZ,IAAAC,qBAAA,GAAyBrB,0BAA0B,CAAC;YAAEM,IAAI,EAAJA,IAAI;YAAEC,GAAG,EAAE;UAAa,CAAC,EAAEL,OAAO,EAAEC,IAAI,CAAC;UAAvFO,KAAI,GAAAW,qBAAA,CAAJX,IAAI;UAAEE,OAAM,GAAAS,qBAAA,CAANT,MAAM;QAEpB,QAAQF,KAAI;UACV,KAAKZ,IAAI,CAACa,qBAAqB;YAAE;cAC/B,IAAQS,IAAG,GAAKR,OAAM,CAAdQ,GAAG;cACXnB,IAAI,CAACK,IAAI,GAAGP,sBAAsB,CAACO,IAAI,EAAEc,IAAG,EAAE,UAAU,CAAC;cACzD;YACF;QACF;QAEA;MACF;IAEA;MACE;EACJ;AACF,CAAC;AAED,eAAe,SAASE,aAAaA,CACnCrB,IAAqB,EACrBC,OAAe,EACfC,IAA0B,EACT;EACjB,IAAMoB,aAAa,GAAGtB,IAAI,CAACuB,YAAY,CAAC,MAAM,CAAC;EAC/C,IAAAC,sBAAA,GAAyBzB,0BAA0B,CACjD;MACEM,IAAI,EAAEiB,aAAa,IAAIG,SAAS;MAChCnB,GAAG,EAAEN,IAAI,CAACM;IACZ,CAAC,EACDL,OAAO,EACPC,IACF,CAAC;IAPOO,IAAI,GAAAe,sBAAA,CAAJf,IAAI;IAAEE,MAAM,GAAAa,sBAAA,CAANb,MAAM;EASpB,QAAQF,IAAI;IACV,KAAKZ,IAAI,CAACa,qBAAqB;MAAE;QAC/B,IAAQG,GAAG,GAAmBF,MAAM,CAA5BE,GAAG;UAAEa,OAAO,GAAUf,MAAM,CAAvBe,OAAO;UAAEP,GAAG,GAAKR,MAAM,CAAdQ,GAAG;QACzBnB,IAAI,CAAC2B,OAAO,CAACtB,IAAI,GAAGQ,GAAG;QACvBb,IAAI,CAAC2B,OAAO,CAACD,OAAO,GAAGA,OAAO;QAC9B1B,IAAI,CAACK,IAAI,GAAGP,sBAAsB,CAACe,GAAG,EAAEM,GAAG,EAAE,UAAU,CAAC;QAExD,OAAOnB,IAAI;MACb;IAEA,KAAKH,IAAI,CAACiB,IAAI;IACd;MAAS;QACP,IAAIQ,aAAa,EAAE;UACjBtB,IAAI,CAACK,IAAI,GAAGX,YAAY,CAAC4B,aAAa,EAAErB,OAAO,CAAC;UAEhD,IAAID,IAAI,CAACM,GAAG,KAAK,SAAS,EAAE;YAC1BS,sBAAsB,CAACf,IAAI,EAAEC,OAAO,EAAEC,IAAI,CAAC;UAC7C;UAEA,OAAOF,IAAI;QACb;QAEA,OAAOA,IAAI;MACb;EACF;AACF"}
@@ -6,17 +6,17 @@ import type { MatchResult } from '../module-resolver';
6
6
  import type { AssetsTranspilerOpts } from './types';
7
7
  import { Mode } from './types';
8
8
  type PreTranspileResult = {
9
- mode: Mode.REMOTE_FROM_SANDBOX;
9
+ mode: Mode.REMOTE_ASSETS_IN_SANDBOX;
10
10
  result: {
11
11
  src: string;
12
12
  };
13
13
  } | {
14
- mode: Mode.CACHE_FROM_SANDBOX;
14
+ mode: Mode.REUSED_DEP_IN_SANDBOX;
15
15
  result: {
16
16
  src: string;
17
17
  } & MatchResult;
18
18
  } | {
19
- mode: Mode.INLINE_FROM_SANDBOX;
19
+ mode: Mode.INLINE_CODE_IN_SANDBOX;
20
20
  result: {
21
21
  code: string;
22
22
  };
@@ -6,6 +6,7 @@ import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
6
6
 
7
7
  import { getEntireUrl } from "../utils";
8
8
  import { Mode } from "./types";
9
+ import { createReusingObjectUrl } from "./utils";
9
10
  var isValidJavaScriptType = function isValidJavaScriptType(type) {
10
11
  var handleTypes = ['text/javascript', 'module', 'application/javascript', 'text/ecmascript', 'application/ecmascript'];
11
12
  return !type || handleTypes.indexOf(type) !== -1;
@@ -31,14 +32,14 @@ export var preTranspile = function preTranspile(script, baseURI, opts) {
31
32
  var matchedScript = moduleResolver === null || moduleResolver === void 0 ? void 0 : moduleResolver(entireUrl);
32
33
  if (matchedScript) {
33
34
  return {
34
- mode: Mode.CACHE_FROM_SANDBOX,
35
+ mode: Mode.REUSED_DEP_IN_SANDBOX,
35
36
  result: _objectSpread({
36
37
  src: entireUrl
37
38
  }, matchedScript)
38
39
  };
39
40
  }
40
41
  return {
41
- mode: Mode.REMOTE_FROM_SANDBOX,
42
+ mode: Mode.REMOTE_ASSETS_IN_SANDBOX,
42
43
  result: {
43
44
  src: entireUrl
44
45
  }
@@ -50,7 +51,7 @@ export var preTranspile = function preTranspile(script, baseURI, opts) {
50
51
  var code = scriptNode.textContent;
51
52
  if (code) {
52
53
  return {
53
- mode: Mode.INLINE_FROM_SANDBOX,
54
+ mode: Mode.INLINE_CODE_IN_SANDBOX,
54
55
  result: {
55
56
  code: code
56
57
  }
@@ -76,7 +77,7 @@ export default function transpileScript(script, baseURI, opts) {
76
77
  mode = _preTranspile.mode,
77
78
  result = _preTranspile.result;
78
79
  switch (mode) {
79
- case Mode.REMOTE_FROM_SANDBOX:
80
+ case Mode.REMOTE_ASSETS_IN_SANDBOX:
80
81
  {
81
82
  var src = result.src;
82
83
 
@@ -104,7 +105,7 @@ export default function transpileScript(script, baseURI, opts) {
104
105
  });
105
106
  return script;
106
107
  }
107
- case Mode.INLINE_FROM_SANDBOX:
108
+ case Mode.INLINE_CODE_IN_SANDBOX:
108
109
  {
109
110
  var rawNode = opts.rawNode;
110
111
  var scriptNode = script.textContent ? script : rawNode.childNodes[0];
@@ -114,7 +115,7 @@ export default function transpileScript(script, baseURI, opts) {
114
115
  script.dataset.consumed = 'true';
115
116
  return script;
116
117
  }
117
- case Mode.CACHE_FROM_SANDBOX:
118
+ case Mode.REUSED_DEP_IN_SANDBOX:
118
119
  {
119
120
  var url = result.url,
120
121
  version = result.version,
@@ -128,9 +129,7 @@ export default function transpileScript(script, baseURI, opts) {
128
129
  }
129
130
 
130
131
  // When the script hits the dependency reuse logic, the current script is not executed, and an empty script is returned directly
131
- script.src = URL.createObjectURL(new Blob(["// ".concat(_src, " is reusing the execution result of ").concat(url)], {
132
- type: 'text/javascript'
133
- }));
132
+ script.src = createReusingObjectUrl(_src, url, 'text/javascript');
134
133
  return script;
135
134
  }
136
135
  case Mode.NONE:
@@ -1 +1 @@
1
- {"version":3,"names":["getEntireUrl","Mode","isValidJavaScriptType","type","handleTypes","indexOf","getCredentials","crossOrigin","undefined","preTranspile","script","baseURI","opts","sandbox","moduleResolver","src","entireUrl","matchedScript","mode","CACHE_FROM_SANDBOX","result","_objectSpread","REMOTE_FROM_SANDBOX","rawNode","scriptNode","textContent","childNodes","code","INLINE_FROM_SANDBOX","NONE","transpileScript","srcAttribute","getAttribute","fetch","_preTranspile","removeAttribute","dataset","syncMode","hasAttribute","priority","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';\nimport { Mode } 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: Mode.REMOTE_FROM_SANDBOX; result: { src: string } }\n | { mode: Mode.CACHE_FROM_SANDBOX; result: { src: string } & MatchResult }\n | { mode: Mode.INLINE_FROM_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.CACHE_FROM_SANDBOX,\n result: { src: entireUrl, ...matchedScript },\n };\n }\n\n return {\n mode: Mode.REMOTE_FROM_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_FROM_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 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_FROM_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_FROM_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.CACHE_FROM_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 = 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 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":["getEntireUrl","Mode","createReusingObjectUrl","isValidJavaScriptType","type","handleTypes","indexOf","getCredentials","crossOrigin","undefined","preTranspile","script","baseURI","opts","sandbox","moduleResolver","src","entireUrl","matchedScript","mode","REUSED_DEP_IN_SANDBOX","result","_objectSpread","REMOTE_ASSETS_IN_SANDBOX","rawNode","scriptNode","textContent","childNodes","code","INLINE_CODE_IN_SANDBOX","NONE","transpileScript","srcAttribute","getAttribute","fetch","_preTranspile","removeAttribute","dataset","syncMode","hasAttribute","priority","credentials","then","res","text","codeFactory","makeEvaluateFactory","fetchPriority","URL","createObjectURL","Blob","consumed","url","version"],"sources":["../../../src/assets-transpilers/script.ts"],"sourcesContent":["/**\n * @author Kuitos\n * @since 2023-03-16\n */\n\nimport type { MatchResult } from '../module-resolver';\nimport { getEntireUrl } from '../utils';\nimport type { AssetsTranspilerOpts } from './types';\nimport { Mode } from './types';\nimport { createReusingObjectUrl } from './utils';\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: 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 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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"}
@@ -13,8 +13,8 @@ export type AssetsTranspilerOpts = BaseTranspilerOpts & {
13
13
  rawNode: Node;
14
14
  };
15
15
  export declare enum Mode {
16
- REMOTE_FROM_SANDBOX = "REMOTE_FROM_SANDBOX",
17
- CACHE_FROM_SANDBOX = "CACHE_IN_SANDBOX",
18
- INLINE_FROM_SANDBOX = "INLINE_FROM_SANDBOX",
16
+ REMOTE_ASSETS_IN_SANDBOX = "RAIS",
17
+ REUSED_DEP_IN_SANDBOX = "RDIS",
18
+ INLINE_CODE_IN_SANDBOX = "ICIS",
19
19
  NONE = "NONE"
20
20
  }
@@ -4,9 +4,9 @@
4
4
  */
5
5
 
6
6
  export var Mode = /*#__PURE__*/function (Mode) {
7
- Mode["REMOTE_FROM_SANDBOX"] = "REMOTE_FROM_SANDBOX";
8
- Mode["CACHE_FROM_SANDBOX"] = "CACHE_IN_SANDBOX";
9
- Mode["INLINE_FROM_SANDBOX"] = "INLINE_FROM_SANDBOX";
7
+ Mode["REMOTE_ASSETS_IN_SANDBOX"] = "RAIS";
8
+ Mode["REUSED_DEP_IN_SANDBOX"] = "RDIS";
9
+ Mode["INLINE_CODE_IN_SANDBOX"] = "ICIS";
10
10
  Mode["NONE"] = "NONE";
11
11
  return Mode;
12
12
  }({});
@@ -1 +1 @@
1
- {"version":3,"names":["Mode"],"sources":["../../../src/assets-transpilers/types.ts"],"sourcesContent":["/**\n * @author Kuitos\n * @since 2023-08-26\n */\nimport type { Sandbox } from '@qiankunjs/sandbox';\nimport type { BaseLoaderOpts } from '../common';\n\nimport type { MatchResult } from '../module-resolver';\n\nexport type BaseTranspilerOpts = BaseLoaderOpts & {\n moduleResolver?: (url: string) => MatchResult | undefined;\n sandbox?: Sandbox;\n};\n\nexport type AssetsTranspilerOpts = BaseTranspilerOpts & { rawNode: Node };\n\nexport enum Mode {\n REMOTE_FROM_SANDBOX = 'REMOTE_FROM_SANDBOX',\n CACHE_FROM_SANDBOX = 'CACHE_IN_SANDBOX',\n INLINE_FROM_SANDBOX = 'INLINE_FROM_SANDBOX',\n NONE = 'NONE',\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;;AAaA,WAAYA,IAAI,0BAAJA,IAAI;EAAJA,IAAI;EAAJA,IAAI;EAAJA,IAAI;EAAJA,IAAI;EAAA,OAAJA,IAAI;AAAA"}
1
+ {"version":3,"names":["Mode"],"sources":["../../../src/assets-transpilers/types.ts"],"sourcesContent":["/**\n * @author Kuitos\n * @since 2023-08-26\n */\nimport type { Sandbox } from '@qiankunjs/sandbox';\nimport type { BaseLoaderOpts } from '../common';\n\nimport type { MatchResult } from '../module-resolver';\n\nexport type BaseTranspilerOpts = BaseLoaderOpts & {\n moduleResolver?: (url: string) => MatchResult | undefined;\n sandbox?: Sandbox;\n};\n\nexport type AssetsTranspilerOpts = BaseTranspilerOpts & { rawNode: Node };\n\nexport enum Mode {\n REMOTE_ASSETS_IN_SANDBOX = 'RAIS',\n REUSED_DEP_IN_SANDBOX = 'RDIS',\n INLINE_CODE_IN_SANDBOX = 'ICIS',\n NONE = 'NONE',\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;;AAaA,WAAYA,IAAI,0BAAJA,IAAI;EAAJA,IAAI;EAAJA,IAAI;EAAJA,IAAI;EAAJA,IAAI;EAAA,OAAJA,IAAI;AAAA"}
@@ -0,0 +1 @@
1
+ export declare const createReusingObjectUrl: ((src: string, url: string, type: 'text/javascript' | 'text/css') => string) & import("lodash").MemoizedFunction;
@@ -0,0 +1,13 @@
1
+ import _memoize from "lodash/memoize";
2
+ /**
3
+ * @author Kuitos
4
+ * @since 2023-10-09
5
+ */
6
+ export var createReusingObjectUrl = _memoize(function (src, url, type) {
7
+ return URL.createObjectURL(new Blob(["/* ".concat(src, " is reusing the execution result of ").concat(url, " */")], {
8
+ type: type
9
+ }));
10
+ }, function (src, url, type) {
11
+ return "".concat(src, "#").concat(url, "#").concat(type);
12
+ });
13
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createReusingObjectUrl","_memoize","src","url","type","URL","createObjectURL","Blob","concat"],"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"],"mappings":";AAAA;AACA;AACA;AACA;AAGA,OAAO,IAAMA,sBAAsB,GAAGC,QAAA,CACpC,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"}
@@ -1,7 +1,7 @@
1
1
  import type { MatchResult } from './types';
2
2
  declare global {
3
3
  interface HTMLElement {
4
- __cached_deps__?: string[];
4
+ __matched_deps__?: string[];
5
5
  }
6
6
  }
7
7
  export type { MatchResult } from './types';
@@ -17,10 +17,10 @@ export function moduleResolver(url, microAppContainer, mainAppContainer) {
17
17
  if (mainAppDependencyMapString) {
18
18
  var _microAppContainer$__;
19
19
  var mainAppDependencyMap = JSON.parse(mainAppDependencyMapString);
20
- var cachedDeps = (_microAppContainer$__ = microAppContainer.__cached_deps__) !== null && _microAppContainer$__ !== void 0 ? _microAppContainer$__ : microAppContainer.__cached_deps__ = [];
21
- var matchedDep = findDependency(microAppDependency, normalizeDependencies(mainAppDependencyMap.dependencies), cachedDeps);
20
+ var matchedDeps = (_microAppContainer$__ = microAppContainer.__matched_deps__) !== null && _microAppContainer$__ !== void 0 ? _microAppContainer$__ : microAppContainer.__matched_deps__ = [];
21
+ var matchedDep = findDependency(microAppDependency, normalizeDependencies(mainAppDependencyMap.dependencies), matchedDeps);
22
22
  if (matchedDep) {
23
- cachedDeps.push(matchedDep.name);
23
+ matchedDeps.push(matchedDep.name);
24
24
  return matchedDep;
25
25
  }
26
26
  }
@@ -28,13 +28,13 @@ export function moduleResolver(url, microAppContainer, mainAppContainer) {
28
28
  }
29
29
  return undefined;
30
30
  }
31
- function findDependency(dependency, mainAppDependencies, cachedDependencies) {
32
- var matched = mainAppDependencies.find(function (cachedDependency) {
33
- var _dependency$peerDeps;
34
- return cachedDependency.name === dependency.name && satisfies(cachedDependency.version, dependency.range) && ( // peer dependencies must be cached before
35
- (_dependency$peerDeps = dependency.peerDeps) === null || _dependency$peerDeps === void 0 ? void 0 : _dependency$peerDeps.every(function (peerDep) {
36
- return cachedDependencies.indexOf(peerDep) !== -1;
37
- }));
31
+ function findDependency(dependency, mainAppDependencies, matchedDependencies) {
32
+ var matched = mainAppDependencies.find(function (mainAppDependency) {
33
+ return mainAppDependency.name === dependency.name && satisfies(mainAppDependency.version, dependency.range) &&
34
+ // peer dependencies must be cached before
35
+ (dependency.peerDeps || []).every(function (peerDep) {
36
+ return matchedDependencies.indexOf(peerDep) !== -1;
37
+ });
38
38
  });
39
39
  if (matched) {
40
40
  return {
@@ -1 +1 @@
1
- {"version":3,"names":["satisfies","moduleResolver","url","microAppContainer","mainAppContainer","_microAppContainer$qu","dependencyMapSelector","microAppDependenciesString","querySelector","innerHTML","_ref","JSON","parse","dependencies","normalizedDependencies","normalizeDependencies","microAppDependency","find","v","_mainAppContainer$que","mainAppDependencyMapString","_microAppContainer$__","mainAppDependencyMap","cachedDeps","__cached_deps__","matchedDep","findDependency","push","name","undefined","dependency","mainAppDependencies","cachedDependencies","matched","cachedDependency","_dependency$peerDeps","version","range","peerDeps","every","peerDep","indexOf","Object","keys","map","_objectSpread"],"sources":["../../../src/module-resolver/index.ts"],"sourcesContent":["import satisfies from 'semver/functions/satisfies';\nimport type { MatchResult } from './types';\n\ndeclare global {\n interface HTMLElement {\n __cached_deps__?: string[];\n }\n}\n\ntype Dependency = {\n url: string;\n version: string;\n range: string;\n peerDeps?: string[];\n};\n\ntype NormalizedDependency = {\n name: string;\n} & Dependency;\n\ntype DependencyMap = {\n dependencies: Record<string, Dependency>;\n};\n\nexport type { MatchResult } from './types';\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 mainAppDependencyMapString = mainAppContainer.querySelector(dependencyMapSelector)?.innerHTML;\n\n if (mainAppDependencyMapString) {\n const mainAppDependencyMap = JSON.parse(mainAppDependencyMapString) as DependencyMap;\n const cachedDeps = (microAppContainer.__cached_deps__ ??= []);\n const matchedDep = findDependency(\n microAppDependency,\n normalizeDependencies(mainAppDependencyMap.dependencies),\n cachedDeps,\n );\n\n if (matchedDep) {\n cachedDeps.push(matchedDep.name);\n return matchedDep;\n }\n }\n }\n }\n\n return undefined;\n}\n\nfunction findDependency(\n dependency: NormalizedDependency,\n mainAppDependencies: NormalizedDependency[],\n cachedDependencies: string[],\n): MatchResult | undefined {\n const matched = mainAppDependencies.find(\n (cachedDependency) =>\n cachedDependency.name === dependency.name &&\n satisfies(cachedDependency.version, dependency.range) &&\n // peer dependencies must be cached before\n dependency.peerDeps?.every((peerDep) => cachedDependencies.indexOf(peerDep) !== -1),\n );\n\n if (matched) {\n return {\n name: matched.name,\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":";AAAA,OAAOA,SAAS,MAAM,4BAA4B;AA0BlD,OAAO,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,0BAA0B,IAAAD,qBAAA,GAAGf,gBAAgB,CAACI,aAAa,CAACF,qBAAqB,CAAC,cAAAa,qBAAA,uBAArDA,qBAAA,CAAuDV,SAAS;MAEnG,IAAIW,0BAA0B,EAAE;QAAA,IAAAC,qBAAA;QAC9B,IAAMC,oBAAoB,GAAGX,IAAI,CAACC,KAAK,CAACQ,0BAA0B,CAAkB;QACpF,IAAMG,UAAU,IAAAF,qBAAA,GAAIlB,iBAAiB,CAACqB,eAAe,cAAAH,qBAAA,cAAAA,qBAAA,GAAjClB,iBAAiB,CAACqB,eAAe,GAAK,EAAG;QAC7D,IAAMC,UAAU,GAAGC,cAAc,CAC/BV,kBAAkB,EAClBD,qBAAqB,CAACO,oBAAoB,CAACT,YAAY,CAAC,EACxDU,UACF,CAAC;QAED,IAAIE,UAAU,EAAE;UACdF,UAAU,CAACI,IAAI,CAACF,UAAU,CAACG,IAAI,CAAC;UAChC,OAAOH,UAAU;QACnB;MACF;IACF;EACF;EAEA,OAAOI,SAAS;AAClB;AAEA,SAASH,cAAcA,CACrBI,UAAgC,EAChCC,mBAA2C,EAC3CC,kBAA4B,EACH;EACzB,IAAMC,OAAO,GAAGF,mBAAmB,CAACd,IAAI,CACtC,UAACiB,gBAAgB;IAAA,IAAAC,oBAAA;IAAA,OACfD,gBAAgB,CAACN,IAAI,KAAKE,UAAU,CAACF,IAAI,IACzC5B,SAAS,CAACkC,gBAAgB,CAACE,OAAO,EAAEN,UAAU,CAACO,KAAK,CAAC,MACrD;IAAA,CAAAF,oBAAA,GACAL,UAAU,CAACQ,QAAQ,cAAAH,oBAAA,uBAAnBA,oBAAA,CAAqBI,KAAK,CAAC,UAACC,OAAO;MAAA,OAAKR,kBAAkB,CAACS,OAAO,CAACD,OAAO,CAAC,KAAK,CAAC,CAAC;IAAA,EAAC;EAAA,CACvF,CAAC;EAED,IAAIP,OAAO,EAAE;IACX,OAAO;MACLL,IAAI,EAAEK,OAAO,CAACL,IAAI;MAClBQ,OAAO,EAAEH,OAAO,CAACG,OAAO;MACxBlC,GAAG,EAAE+B,OAAO,CAAC/B;IACf,CAAC;EACH;EAEA,OAAO2B,SAAS;AAClB;AAEA,SAASd,qBAAqBA,CAACF,YAA2C,EAA0B;EAClG,OAAO6B,MAAM,CAACC,IAAI,CAAC9B,YAAY,CAAC,CAAC+B,GAAG,CAAC,UAAChB,IAAI;IAAA,OAAAiB,aAAA;MACxCjB,IAAI,EAAJA;IAAI,GACDf,YAAY,CAACe,IAAI,CAAC;EAAA,CACrB,CAAC;AACL"}
1
+ {"version":3,"names":["satisfies","moduleResolver","url","microAppContainer","mainAppContainer","_microAppContainer$qu","dependencyMapSelector","microAppDependenciesString","querySelector","innerHTML","_ref","JSON","parse","dependencies","normalizedDependencies","normalizeDependencies","microAppDependency","find","v","_mainAppContainer$que","mainAppDependencyMapString","_microAppContainer$__","mainAppDependencyMap","matchedDeps","__matched_deps__","matchedDep","findDependency","push","name","undefined","dependency","mainAppDependencies","matchedDependencies","matched","mainAppDependency","version","range","peerDeps","every","peerDep","indexOf","Object","keys","map","_objectSpread"],"sources":["../../../src/module-resolver/index.ts"],"sourcesContent":["import satisfies from 'semver/functions/satisfies';\nimport type { MatchResult } from './types';\n\ndeclare global {\n interface HTMLElement {\n __matched_deps__?: string[];\n }\n}\n\ntype Dependency = {\n url: string;\n version: string;\n range: string;\n peerDeps?: string[];\n};\n\ntype NormalizedDependency = {\n name: string;\n} & Dependency;\n\ntype DependencyMap = {\n dependencies: Record<string, Dependency>;\n};\n\nexport type { MatchResult } from './types';\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 mainAppDependencyMapString = mainAppContainer.querySelector(dependencyMapSelector)?.innerHTML;\n\n if (mainAppDependencyMapString) {\n const mainAppDependencyMap = JSON.parse(mainAppDependencyMapString) as DependencyMap;\n const matchedDeps = (microAppContainer.__matched_deps__ ??= []);\n const matchedDep = findDependency(\n microAppDependency,\n normalizeDependencies(mainAppDependencyMap.dependencies),\n matchedDeps,\n );\n\n if (matchedDep) {\n matchedDeps.push(matchedDep.name);\n return matchedDep;\n }\n }\n }\n }\n\n return undefined;\n}\n\nfunction findDependency(\n dependency: NormalizedDependency,\n mainAppDependencies: NormalizedDependency[],\n matchedDependencies: string[],\n): MatchResult | undefined {\n const matched = mainAppDependencies.find(\n (mainAppDependency) =>\n mainAppDependency.name === dependency.name &&\n satisfies(mainAppDependency.version, dependency.range) &&\n // peer dependencies must be cached before\n (dependency.peerDeps || []).every((peerDep) => matchedDependencies.indexOf(peerDep) !== -1),\n );\n\n if (matched) {\n return {\n name: matched.name,\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":";AAAA,OAAOA,SAAS,MAAM,4BAA4B;AA0BlD,OAAO,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,0BAA0B,IAAAD,qBAAA,GAAGf,gBAAgB,CAACI,aAAa,CAACF,qBAAqB,CAAC,cAAAa,qBAAA,uBAArDA,qBAAA,CAAuDV,SAAS;MAEnG,IAAIW,0BAA0B,EAAE;QAAA,IAAAC,qBAAA;QAC9B,IAAMC,oBAAoB,GAAGX,IAAI,CAACC,KAAK,CAACQ,0BAA0B,CAAkB;QACpF,IAAMG,WAAW,IAAAF,qBAAA,GAAIlB,iBAAiB,CAACqB,gBAAgB,cAAAH,qBAAA,cAAAA,qBAAA,GAAlClB,iBAAiB,CAACqB,gBAAgB,GAAK,EAAG;QAC/D,IAAMC,UAAU,GAAGC,cAAc,CAC/BV,kBAAkB,EAClBD,qBAAqB,CAACO,oBAAoB,CAACT,YAAY,CAAC,EACxDU,WACF,CAAC;QAED,IAAIE,UAAU,EAAE;UACdF,WAAW,CAACI,IAAI,CAACF,UAAU,CAACG,IAAI,CAAC;UACjC,OAAOH,UAAU;QACnB;MACF;IACF;EACF;EAEA,OAAOI,SAAS;AAClB;AAEA,SAASH,cAAcA,CACrBI,UAAgC,EAChCC,mBAA2C,EAC3CC,mBAA6B,EACJ;EACzB,IAAMC,OAAO,GAAGF,mBAAmB,CAACd,IAAI,CACtC,UAACiB,iBAAiB;IAAA,OAChBA,iBAAiB,CAACN,IAAI,KAAKE,UAAU,CAACF,IAAI,IAC1C5B,SAAS,CAACkC,iBAAiB,CAACC,OAAO,EAAEL,UAAU,CAACM,KAAK,CAAC;IACtD;IACA,CAACN,UAAU,CAACO,QAAQ,IAAI,EAAE,EAAEC,KAAK,CAAC,UAACC,OAAO;MAAA,OAAKP,mBAAmB,CAACQ,OAAO,CAACD,OAAO,CAAC,KAAK,CAAC,CAAC;IAAA,EAAC;EAAA,CAC/F,CAAC;EAED,IAAIN,OAAO,EAAE;IACX,OAAO;MACLL,IAAI,EAAEK,OAAO,CAACL,IAAI;MAClBO,OAAO,EAAEF,OAAO,CAACE,OAAO;MACxBjC,GAAG,EAAE+B,OAAO,CAAC/B;IACf,CAAC;EACH;EAEA,OAAO2B,SAAS;AAClB;AAEA,SAASd,qBAAqBA,CAACF,YAA2C,EAA0B;EAClG,OAAO4B,MAAM,CAACC,IAAI,CAAC7B,YAAY,CAAC,CAAC8B,GAAG,CAAC,UAACf,IAAI;IAAA,OAAAgB,aAAA;MACxChB,IAAI,EAAJA;IAAI,GACDf,YAAY,CAACe,IAAI,CAAC;EAAA,CACrB,CAAC;AACL"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qiankunjs/shared",
3
- "version": "0.0.1-rc.0",
3
+ "version": "0.0.1-rc.2",
4
4
  "description": "",
5
5
  "main": "./dist/cjs/index.js",
6
6
  "module": "./dist/esm/index.js",
@@ -12,7 +12,7 @@
12
12
  "@babel/runtime": "^7.10.5",
13
13
  "lodash": "^4.17.11",
14
14
  "semver": "^7.5.3",
15
- "@qiankunjs/sandbox": "^0.0.1-rc.0"
15
+ "@qiankunjs/sandbox": "^0.0.1-rc.2"
16
16
  },
17
17
  "files": [
18
18
  "dist",
@@ -7,16 +7,16 @@ import transpileScript from './script';
7
7
  import type { AssetsTranspilerOpts } from './types';
8
8
 
9
9
  export function transpileAssets<T extends Node>(node: T, baseURI: string, opts: AssetsTranspilerOpts): T {
10
- const htmlElement = (node as unknown) as HTMLElement;
10
+ const htmlElement = node as unknown as HTMLElement;
11
11
  const { tagName } = htmlElement;
12
12
 
13
13
  switch (tagName) {
14
14
  case 'SCRIPT': {
15
- return (transpileScript(htmlElement as HTMLScriptElement, baseURI, opts) as unknown) as T;
15
+ return transpileScript(htmlElement as HTMLScriptElement, baseURI, opts) as unknown as T;
16
16
  }
17
17
 
18
18
  case 'LINK': {
19
- return (transpileLink(htmlElement as HTMLLinkElement, baseURI, opts) as unknown) as T;
19
+ return transpileLink(htmlElement as HTMLLinkElement, baseURI, opts) as unknown as T;
20
20
  }
21
21
 
22
22
  default: