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

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 (65) hide show
  1. package/dist/cjs/assets-transpilers/index.js +1 -1
  2. package/dist/cjs/assets-transpilers/link.js +3 -3
  3. package/dist/cjs/assets-transpilers/link.js.map +1 -1
  4. package/dist/cjs/assets-transpilers/script.js +6 -6
  5. package/dist/cjs/assets-transpilers/script.js.map +1 -1
  6. package/dist/cjs/assets-transpilers/utils.js +1 -1
  7. package/dist/cjs/fetch-utils/makeFetchCacheable.d.ts +2 -0
  8. package/dist/cjs/fetch-utils/{wrapFetchWithCache.js → makeFetchCacheable.js} +10 -11
  9. package/dist/cjs/fetch-utils/makeFetchCacheable.js.map +1 -0
  10. package/dist/cjs/fetch-utils/makeFetchRetryable.d.ts +6 -0
  11. package/dist/cjs/fetch-utils/makeFetchRetryable.js +57 -0
  12. package/dist/cjs/fetch-utils/makeFetchRetryable.js.map +1 -0
  13. package/dist/cjs/fetch-utils/makeFetchThrowable.d.ts +7 -0
  14. package/dist/cjs/fetch-utils/makeFetchThrowable.js +65 -0
  15. package/dist/cjs/fetch-utils/makeFetchThrowable.js.map +1 -0
  16. package/dist/cjs/fetch-utils/miniLruCache.js +1 -1
  17. package/dist/cjs/fetch-utils/utils.d.ts +2 -0
  18. package/dist/cjs/fetch-utils/utils.js +10 -0
  19. package/dist/cjs/fetch-utils/utils.js.map +1 -0
  20. package/dist/cjs/index.d.ts +3 -1
  21. package/dist/cjs/index.js +26 -4
  22. package/dist/cjs/index.js.map +1 -1
  23. package/dist/cjs/module-resolver/index.js +3 -3
  24. package/dist/cjs/module-resolver/index.js.map +1 -1
  25. package/dist/cjs/module-resolver/satisfies.d.ts +8 -0
  26. package/dist/cjs/module-resolver/satisfies.js +42 -0
  27. package/dist/cjs/module-resolver/satisfies.js.map +1 -0
  28. package/dist/cjs/reporter/QiankunError.js +1 -1
  29. package/dist/cjs/typings.d.ts +0 -4
  30. package/dist/cjs/utils.d.ts +1 -1
  31. package/dist/cjs/utils.js +16 -12
  32. package/dist/cjs/utils.js.map +1 -1
  33. package/dist/esm/assets-transpilers/link.js +3 -3
  34. package/dist/esm/assets-transpilers/link.js.map +1 -1
  35. package/dist/esm/assets-transpilers/script.js +6 -6
  36. package/dist/esm/assets-transpilers/script.js.map +1 -1
  37. package/dist/esm/fetch-utils/makeFetchCacheable.d.ts +2 -0
  38. package/dist/esm/fetch-utils/{wrapFetchWithCache.js → makeFetchCacheable.js} +8 -9
  39. package/dist/esm/fetch-utils/makeFetchCacheable.js.map +1 -0
  40. package/dist/esm/fetch-utils/makeFetchRetryable.d.ts +6 -0
  41. package/dist/esm/fetch-utils/makeFetchRetryable.js +50 -0
  42. package/dist/esm/fetch-utils/makeFetchRetryable.js.map +1 -0
  43. package/dist/esm/fetch-utils/makeFetchThrowable.d.ts +7 -0
  44. package/dist/esm/fetch-utils/makeFetchThrowable.js +58 -0
  45. package/dist/esm/fetch-utils/makeFetchThrowable.js.map +1 -0
  46. package/dist/esm/fetch-utils/utils.d.ts +2 -0
  47. package/dist/esm/fetch-utils/utils.js +4 -0
  48. package/dist/esm/fetch-utils/utils.js.map +1 -0
  49. package/dist/esm/index.d.ts +3 -1
  50. package/dist/esm/index.js +3 -1
  51. package/dist/esm/index.js.map +1 -1
  52. package/dist/esm/module-resolver/index.js +1 -1
  53. package/dist/esm/module-resolver/index.js.map +1 -1
  54. package/dist/esm/module-resolver/satisfies.d.ts +8 -0
  55. package/dist/esm/module-resolver/satisfies.js +37 -0
  56. package/dist/esm/module-resolver/satisfies.js.map +1 -0
  57. package/dist/esm/typings.d.ts +0 -4
  58. package/dist/esm/utils.d.ts +1 -1
  59. package/dist/esm/utils.js +12 -7
  60. package/dist/esm/utils.js.map +1 -1
  61. package/package.json +8 -4
  62. package/dist/cjs/fetch-utils/wrapFetchWithCache.d.ts +0 -3
  63. package/dist/cjs/fetch-utils/wrapFetchWithCache.js.map +0 -1
  64. package/dist/esm/fetch-utils/wrapFetchWithCache.d.ts +0 -3
  65. package/dist/esm/fetch-utils/wrapFetchWithCache.js.map +0 -1
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
@@ -24,7 +24,7 @@ var preTranspileStyleSheetLink = function preTranspileStyleSheetLink(link, baseU
24
24
 
25
25
  // filter preload links
26
26
  if (href && rel === 'stylesheet') {
27
- var linkHref = (0, _utils.getEntireUrl)(href, baseURI);
27
+ var linkHref = (0, _utils.resolveUrl)(href, baseURI);
28
28
  var matchedAssets = moduleResolver === null || moduleResolver === void 0 ? void 0 : moduleResolver(linkHref);
29
29
  if (matchedAssets) {
30
30
  return {
@@ -121,7 +121,7 @@ function transpileLink(link, baseURI, opts) {
121
121
  default:
122
122
  {
123
123
  if (hrefAttribute) {
124
- link.href = (0, _utils.getEntireUrl)(hrefAttribute, baseURI);
124
+ link.href = (0, _utils.resolveUrl)(hrefAttribute, baseURI);
125
125
  if (link.rel === 'preload') {
126
126
  postProcessPreloadLink(link, baseURI, opts);
127
127
  }
@@ -1 +1 @@
1
- {"version":3,"names":["_reporter","require","_utils","_script","_types","_utils2","preTranspileStyleSheetLink","link","baseURI","opts","sandbox","moduleResolver","href","rel","linkHref","getEntireUrl","matchedAssets","mode","Mode","REUSED_DEP_IN_SANDBOX","REUSED_DEP","result","_objectSpread2","default","src","NONE","postProcessPreloadLink","as","_preTranspileScript","preTranspileScript","REMOTE_ASSETS_IN_SANDBOX","process","env","NODE_ENV","hasAttribute","warn","concat","url","createReusingObjectUrl","_preTranspileStyleShe","transpileLink","hrefAttribute","getAttribute","_preTranspileStyleShe2","undefined","version","dataset"],"sources":["../../../src/assets-transpilers/link.ts"],"sourcesContent":["/**\n * @author Kuitos\n * @since 2023-04-26\n */\nimport type { MatchResult } from '../module-resolver';\nimport { warn } from '../reporter';\nimport { getEntireUrl } from '../utils';\nimport { preTranspile as preTranspileScript } from './script';\nimport type { AssetsTranspilerOpts, BaseTranspilerOpts } from './types';\nimport { Mode } from './types';\nimport { createReusingObjectUrl } from './utils';\n\ntype PreTranspileResult =\n | { mode: Mode.REUSED_DEP_IN_SANDBOX | Mode.REUSED_DEP; result: { src: string } & MatchResult }\n | { mode: Mode.NONE; result?: never };\nconst preTranspileStyleSheetLink = (\n link: Partial<Pick<HTMLLinkElement, 'href' | 'rel'>>,\n baseURI: string,\n opts: BaseTranspilerOpts,\n): PreTranspileResult => {\n const { sandbox, moduleResolver } = opts;\n const { href, rel } = link;\n\n // filter preload links\n if (href && rel === 'stylesheet') {\n const linkHref = getEntireUrl(href, baseURI);\n\n const matchedAssets = moduleResolver?.(linkHref);\n if (matchedAssets) {\n return {\n mode: sandbox ? Mode.REUSED_DEP_IN_SANDBOX : Mode.REUSED_DEP,\n result: { src: linkHref, ...matchedAssets },\n };\n }\n }\n\n return {\n mode: Mode.NONE,\n };\n};\n\nconst postProcessPreloadLink = (link: HTMLLinkElement, baseURI: string, opts: AssetsTranspilerOpts): void => {\n const { as, href } = link;\n switch (as) {\n case 'script': {\n const { mode, result } = preTranspileScript({ src: href }, baseURI, opts);\n\n switch (mode) {\n /**\n * While the assets are transpiling in sandbox, it means they will be evaluated with manual fetching,\n * thus we need to set the attribute `as` to fetch instead of script or style to avoid preload cache missing.\n * see https://stackoverflow.com/questions/52635660/can-link-rel-preload-be-made-to-work-with-fetch/63814972#63814972\n */\n case Mode.REMOTE_ASSETS_IN_SANDBOX: {\n if (process.env.NODE_ENV === 'development' && !link.hasAttribute('crossorigin')) {\n warn(\n `crossorigin attribute of script ${href} is not specified, that will make preload invalid, see https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/rel/preload#cors-enabled_fetches`,\n );\n }\n link.as = 'fetch';\n break;\n }\n\n case Mode.REUSED_DEP_IN_SANDBOX:\n case Mode.REUSED_DEP: {\n const { url } = result;\n link.href = createReusingObjectUrl(href, url, 'text/javascript');\n\n break;\n }\n }\n\n break;\n }\n\n case 'style': {\n const { mode, result } = preTranspileStyleSheetLink({ href, rel: 'stylesheet' }, baseURI, opts);\n\n switch (mode) {\n case Mode.REUSED_DEP_IN_SANDBOX:\n case Mode.REUSED_DEP: {\n const { url } = result;\n link.href = createReusingObjectUrl(href, url, 'text/css');\n break;\n }\n }\n\n break;\n }\n\n default:\n break;\n }\n};\n\nexport default function transpileLink(\n link: HTMLLinkElement,\n baseURI: string,\n opts: AssetsTranspilerOpts,\n): HTMLLinkElement {\n const hrefAttribute = link.getAttribute('href');\n const { mode, result } = preTranspileStyleSheetLink(\n {\n href: hrefAttribute || undefined,\n rel: link.rel,\n },\n baseURI,\n opts,\n );\n\n switch (mode) {\n case Mode.REUSED_DEP_IN_SANDBOX:\n case Mode.REUSED_DEP: {\n const { src, version, url } = result;\n link.dataset.href = src;\n link.dataset.version = version;\n link.href = createReusingObjectUrl(src, url, 'text/css');\n\n return link;\n }\n\n case Mode.NONE:\n default: {\n if (hrefAttribute) {\n link.href = getEntireUrl(hrefAttribute, baseURI);\n\n if (link.rel === 'preload') {\n postProcessPreloadLink(link, baseURI, opts);\n }\n\n return link;\n }\n\n return link;\n }\n }\n}\n"],"mappings":";;;;;;;;AAKA,IAAAA,SAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AACA,IAAAE,OAAA,GAAAF,OAAA;AAEA,IAAAG,MAAA,GAAAH,OAAA;AACA,IAAAI,OAAA,GAAAJ,OAAA;AAVA;AACA;AACA;AACA;;AAYA,IAAMK,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;EACA,IAAID,IAAI,IAAIC,GAAG,KAAK,YAAY,EAAE;IAChC,IAAMC,QAAQ,GAAG,IAAAC,mBAAY,EAACH,IAAI,EAAEJ,OAAO,CAAC;IAE5C,IAAMQ,aAAa,GAAGL,cAAc,aAAdA,cAAc,uBAAdA,cAAc,CAAGG,QAAQ,CAAC;IAChD,IAAIE,aAAa,EAAE;MACjB,OAAO;QACLC,IAAI,EAAEP,OAAO,GAAGQ,WAAI,CAACC,qBAAqB,GAAGD,WAAI,CAACE,UAAU;QAC5DC,MAAM,MAAAC,cAAA,CAAAC,OAAA;UAAIC,GAAG,EAAEV;QAAQ,GAAKE,aAAa;MAC3C,CAAC;IACH;EACF;EAEA,OAAO;IACLC,IAAI,EAAEC,WAAI,CAACO;EACb,CAAC;AACH,CAAC;AAED,IAAMC,sBAAsB,GAAG,SAAzBA,sBAAsBA,CAAInB,IAAqB,EAAEC,OAAe,EAAEC,IAA0B,EAAW;EAC3G,IAAQkB,EAAE,GAAWpB,IAAI,CAAjBoB,EAAE;IAAEf,IAAI,GAAKL,IAAI,CAAbK,IAAI;EAChB,QAAQe,EAAE;IACR,KAAK,QAAQ;MAAE;QACb,IAAAC,mBAAA,GAAyB,IAAAC,oBAAkB,EAAC;YAAEL,GAAG,EAAEZ;UAAK,CAAC,EAAEJ,OAAO,EAAEC,IAAI,CAAC;UAAjEQ,IAAI,GAAAW,mBAAA,CAAJX,IAAI;UAAEI,MAAM,GAAAO,mBAAA,CAANP,MAAM;QAEpB,QAAQJ,IAAI;UACV;AACR;AACA;AACA;AACA;UACQ,KAAKC,WAAI,CAACY,wBAAwB;YAAE;cAClC,IAAIC,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,aAAa,IAAI,CAAC1B,IAAI,CAAC2B,YAAY,CAAC,aAAa,CAAC,EAAE;gBAC/E,IAAAC,cAAI,qCAAAC,MAAA,CACiCxB,IAAI,yJACzC,CAAC;cACH;cACAL,IAAI,CAACoB,EAAE,GAAG,OAAO;cACjB;YACF;UAEA,KAAKT,WAAI,CAACC,qBAAqB;UAC/B,KAAKD,WAAI,CAACE,UAAU;YAAE;cACpB,IAAQiB,GAAG,GAAKhB,MAAM,CAAdgB,GAAG;cACX9B,IAAI,CAACK,IAAI,GAAG,IAAA0B,8BAAsB,EAAC1B,IAAI,EAAEyB,GAAG,EAAE,iBAAiB,CAAC;cAEhE;YACF;QACF;QAEA;MACF;IAEA,KAAK,OAAO;MAAE;QACZ,IAAAE,qBAAA,GAAyBjC,0BAA0B,CAAC;YAAEM,IAAI,EAAJA,IAAI;YAAEC,GAAG,EAAE;UAAa,CAAC,EAAEL,OAAO,EAAEC,IAAI,CAAC;UAAvFQ,KAAI,GAAAsB,qBAAA,CAAJtB,IAAI;UAAEI,OAAM,GAAAkB,qBAAA,CAANlB,MAAM;QAEpB,QAAQJ,KAAI;UACV,KAAKC,WAAI,CAACC,qBAAqB;UAC/B,KAAKD,WAAI,CAACE,UAAU;YAAE;cACpB,IAAQiB,IAAG,GAAKhB,OAAM,CAAdgB,GAAG;cACX9B,IAAI,CAACK,IAAI,GAAG,IAAA0B,8BAAsB,EAAC1B,IAAI,EAAEyB,IAAG,EAAE,UAAU,CAAC;cACzD;YACF;QACF;QAEA;MACF;IAEA;MACE;EACJ;AACF,CAAC;AAEc,SAASG,aAAaA,CACnCjC,IAAqB,EACrBC,OAAe,EACfC,IAA0B,EACT;EACjB,IAAMgC,aAAa,GAAGlC,IAAI,CAACmC,YAAY,CAAC,MAAM,CAAC;EAC/C,IAAAC,sBAAA,GAAyBrC,0BAA0B,CACjD;MACEM,IAAI,EAAE6B,aAAa,IAAIG,SAAS;MAChC/B,GAAG,EAAEN,IAAI,CAACM;IACZ,CAAC,EACDL,OAAO,EACPC,IACF,CAAC;IAPOQ,IAAI,GAAA0B,sBAAA,CAAJ1B,IAAI;IAAEI,MAAM,GAAAsB,sBAAA,CAANtB,MAAM;EASpB,QAAQJ,IAAI;IACV,KAAKC,WAAI,CAACC,qBAAqB;IAC/B,KAAKD,WAAI,CAACE,UAAU;MAAE;QACpB,IAAQI,GAAG,GAAmBH,MAAM,CAA5BG,GAAG;UAAEqB,OAAO,GAAUxB,MAAM,CAAvBwB,OAAO;UAAER,GAAG,GAAKhB,MAAM,CAAdgB,GAAG;QACzB9B,IAAI,CAACuC,OAAO,CAAClC,IAAI,GAAGY,GAAG;QACvBjB,IAAI,CAACuC,OAAO,CAACD,OAAO,GAAGA,OAAO;QAC9BtC,IAAI,CAACK,IAAI,GAAG,IAAA0B,8BAAsB,EAACd,GAAG,EAAEa,GAAG,EAAE,UAAU,CAAC;QAExD,OAAO9B,IAAI;MACb;IAEA,KAAKW,WAAI,CAACO,IAAI;IACd;MAAS;QACP,IAAIgB,aAAa,EAAE;UACjBlC,IAAI,CAACK,IAAI,GAAG,IAAAG,mBAAY,EAAC0B,aAAa,EAAEjC,OAAO,CAAC;UAEhD,IAAID,IAAI,CAACM,GAAG,KAAK,SAAS,EAAE;YAC1Ba,sBAAsB,CAACnB,IAAI,EAAEC,OAAO,EAAEC,IAAI,CAAC;UAC7C;UAEA,OAAOF,IAAI;QACb;QAEA,OAAOA,IAAI;MACb;EACF;AACF"}
1
+ {"version":3,"names":["_reporter","require","_utils","_script","_types","_utils2","preTranspileStyleSheetLink","link","baseURI","opts","sandbox","moduleResolver","href","rel","linkHref","resolveUrl","matchedAssets","mode","Mode","REUSED_DEP_IN_SANDBOX","REUSED_DEP","result","_objectSpread2","default","src","NONE","postProcessPreloadLink","as","_preTranspileScript","preTranspileScript","REMOTE_ASSETS_IN_SANDBOX","process","env","NODE_ENV","hasAttribute","warn","concat","url","createReusingObjectUrl","_preTranspileStyleShe","transpileLink","hrefAttribute","getAttribute","_preTranspileStyleShe2","undefined","version","dataset"],"sources":["../../../src/assets-transpilers/link.ts"],"sourcesContent":["/**\n * @author Kuitos\n * @since 2023-04-26\n */\nimport type { MatchResult } from '../module-resolver';\nimport { warn } from '../reporter';\nimport { resolveUrl } from '../utils';\nimport { preTranspile as preTranspileScript } from './script';\nimport type { AssetsTranspilerOpts, BaseTranspilerOpts } from './types';\nimport { Mode } from './types';\nimport { createReusingObjectUrl } from './utils';\n\ntype PreTranspileResult =\n | { mode: Mode.REUSED_DEP_IN_SANDBOX | Mode.REUSED_DEP; result: { src: string } & MatchResult }\n | { mode: Mode.NONE; result?: never };\nconst preTranspileStyleSheetLink = (\n link: Partial<Pick<HTMLLinkElement, 'href' | 'rel'>>,\n baseURI: string,\n opts: BaseTranspilerOpts,\n): PreTranspileResult => {\n const { sandbox, moduleResolver } = opts;\n const { href, rel } = link;\n\n // filter preload links\n if (href && rel === 'stylesheet') {\n const linkHref = resolveUrl(href, baseURI);\n\n const matchedAssets = moduleResolver?.(linkHref);\n if (matchedAssets) {\n return {\n mode: sandbox ? Mode.REUSED_DEP_IN_SANDBOX : Mode.REUSED_DEP,\n result: { src: linkHref, ...matchedAssets },\n };\n }\n }\n\n return {\n mode: Mode.NONE,\n };\n};\n\nconst postProcessPreloadLink = (link: HTMLLinkElement, baseURI: string, opts: AssetsTranspilerOpts): void => {\n const { as, href } = link;\n switch (as) {\n case 'script': {\n const { mode, result } = preTranspileScript({ src: href }, baseURI, opts);\n\n switch (mode) {\n /**\n * While the assets are transpiling in sandbox, it means they will be evaluated with manual fetching,\n * thus we need to set the attribute `as` to fetch instead of script or style to avoid preload cache missing.\n * see https://stackoverflow.com/questions/52635660/can-link-rel-preload-be-made-to-work-with-fetch/63814972#63814972\n */\n case Mode.REMOTE_ASSETS_IN_SANDBOX: {\n if (process.env.NODE_ENV === 'development' && !link.hasAttribute('crossorigin')) {\n warn(\n `crossorigin attribute of script ${href} is not specified, that will make preload invalid, see https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/rel/preload#cors-enabled_fetches`,\n );\n }\n link.as = 'fetch';\n break;\n }\n\n case Mode.REUSED_DEP_IN_SANDBOX:\n case Mode.REUSED_DEP: {\n const { url } = result;\n link.href = createReusingObjectUrl(href, url, 'text/javascript');\n\n break;\n }\n }\n\n break;\n }\n\n case 'style': {\n const { mode, result } = preTranspileStyleSheetLink({ href, rel: 'stylesheet' }, baseURI, opts);\n\n switch (mode) {\n case Mode.REUSED_DEP_IN_SANDBOX:\n case Mode.REUSED_DEP: {\n const { url } = result;\n link.href = createReusingObjectUrl(href, url, 'text/css');\n break;\n }\n }\n\n break;\n }\n\n default:\n break;\n }\n};\n\nexport default function transpileLink(\n link: HTMLLinkElement,\n baseURI: string,\n opts: AssetsTranspilerOpts,\n): HTMLLinkElement {\n const hrefAttribute = link.getAttribute('href');\n const { mode, result } = preTranspileStyleSheetLink(\n {\n href: hrefAttribute || undefined,\n rel: link.rel,\n },\n baseURI,\n opts,\n );\n\n switch (mode) {\n case Mode.REUSED_DEP_IN_SANDBOX:\n case Mode.REUSED_DEP: {\n const { src, version, url } = result;\n link.dataset.href = src;\n link.dataset.version = version;\n link.href = createReusingObjectUrl(src, url, 'text/css');\n\n return link;\n }\n\n case Mode.NONE:\n default: {\n if (hrefAttribute) {\n link.href = resolveUrl(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,12 +1,12 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.default = transpileScript;
8
8
  exports.preTranspile = void 0;
9
- var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
9
+ var _regeneratorRuntime2 = _interopRequireDefault(require("@babel/runtime/helpers/regeneratorRuntime"));
10
10
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
11
11
  var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
12
12
  var _utils = require("../utils");
@@ -33,7 +33,7 @@ var preTranspile = exports.preTranspile = function preTranspile(script, baseURI,
33
33
  var src = script.src,
34
34
  type = script.type;
35
35
  if (src) {
36
- var entireUrl = (0, _utils.getEntireUrl)(src, baseURI);
36
+ var entireUrl = (0, _utils.resolveUrl)(src, baseURI);
37
37
  var matchedScript = moduleResolver === null || moduleResolver === void 0 ? void 0 : moduleResolver(entireUrl);
38
38
  if (matchedScript) {
39
39
  return {
@@ -97,9 +97,9 @@ function transpileScript(script, baseURI, opts) {
97
97
  }).then(function (res) {
98
98
  return res.text();
99
99
  }).then( /*#__PURE__*/function () {
100
- var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(code) {
100
+ var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee(code) {
101
101
  var prevScriptTranspiledDeferred, beforeScriptExecuteEvent, beforeExecutedListenerScript, codeFactory;
102
- return _regenerator.default.wrap(function _callee$(_context) {
102
+ return (0, _regeneratorRuntime2.default)().wrap(function _callee$(_context) {
103
103
  while (1) switch (_context.prev = _context.next) {
104
104
  case 0:
105
105
  prevScriptTranspiledDeferred = opts.prevScriptTranspiledDeferred; // add preprocess code to dispatch a CustomEvent before the script is executed
@@ -120,7 +120,7 @@ function transpileScript(script, baseURI, opts) {
120
120
  // HTMLScriptElement default fetchPriority is 'auto', we should set it to 'high' to make it execute earlier while it's not async script
121
121
  script.fetchPriority = 'high';
122
122
  case 9:
123
- // change the script src to the blob url to make it execute in the sandbox
123
+ // change the script src to the blob url to make it executed in the sandbox
124
124
  script.src = URL.createObjectURL(new Blob([codeFactory], {
125
125
  type: 'text/javascript'
126
126
  }));
@@ -1 +1 @@
1
- {"version":3,"names":["_utils","require","_types","_utils2","getCredentials","crossOrigin","undefined","preTranspile","exports","script","baseURI","opts","sandbox","moduleResolver","src","type","entireUrl","getEntireUrl","matchedScript","mode","Mode","REUSED_DEP_IN_SANDBOX","REUSED_DEP","result","_objectSpread2","default","REMOTE_ASSETS_IN_SANDBOX","REMOTE_ASSETS","isValidJavaScriptType","code","textContent","INLINE_CODE_IN_SANDBOX","NONE","transpileScript","srcAttribute","getAttribute","scriptTranspiledDeferred","_preTranspile","fetch","removeAttribute","dataset","syncMode","hasAttribute","priority","credentials","then","res","text","_ref","_asyncToGenerator2","_regenerator","mark","_callee","prevScriptTranspiledDeferred","beforeScriptExecuteEvent","beforeExecutedListenerScript","codeFactory","wrap","_callee$","_context","prev","next","concat","makeEvaluateFactory","isSettled","waitUntilSettled","promise","fetchPriority","URL","createObjectURL","Blob","window","addEventListener","listener","evt","_ref2","detail","s","revokeObjectURL","consumed","removeEventListener","resolve","stop","_x","apply","arguments","catch","e","reject","url","version","createReusingObjectUrl","onScriptComplete","prevListener","event","onload","onerror","call","bind"],"sources":["../../../src/assets-transpilers/script.ts"],"sourcesContent":["/**\n * @author Kuitos\n * @since 2023-03-16\n */\n\nimport type { MatchResult } from '../module-resolver';\nimport { getEntireUrl, waitUntilSettled } from '../utils';\nimport type { AssetsTranspilerOpts, ScriptTranspilerOpts } from './types';\nimport { Mode } from './types';\nimport { createReusingObjectUrl, isValidJavaScriptType } from './utils';\n\nconst getCredentials = (crossOrigin: string | null): RequestInit['credentials'] | undefined => {\n switch (crossOrigin) {\n case 'anonymous':\n return 'same-origin';\n case 'use-credentials':\n return 'include';\n default:\n return undefined;\n }\n};\n\ntype PreTranspileResult =\n | { mode: Mode.REMOTE_ASSETS_IN_SANDBOX | Mode.REMOTE_ASSETS; result: { src: string } }\n | { mode: Mode.REUSED_DEP_IN_SANDBOX | Mode.REUSED_DEP; result: { src: string } & MatchResult }\n | { mode: Mode.INLINE_CODE_IN_SANDBOX; result: { code: string } }\n | { mode: Mode.NONE; result?: never };\n\nexport const preTranspile = (\n script: Partial<Pick<HTMLScriptElement, 'src' | 'type' | 'textContent'>>,\n baseURI: string,\n opts: AssetsTranspilerOpts,\n): PreTranspileResult => {\n const { sandbox, moduleResolver } = opts;\n\n const { src, type } = script;\n\n if (src) {\n const entireUrl = getEntireUrl(src, baseURI);\n const matchedScript = moduleResolver?.(entireUrl);\n if (matchedScript) {\n return {\n mode: sandbox ? Mode.REUSED_DEP_IN_SANDBOX : Mode.REUSED_DEP,\n result: { src: entireUrl, ...matchedScript },\n };\n }\n\n return {\n mode: sandbox ? Mode.REMOTE_ASSETS_IN_SANDBOX : Mode.REMOTE_ASSETS,\n result: { src: entireUrl },\n };\n }\n\n if (isValidJavaScriptType(type) && sandbox) {\n const code = script.textContent;\n if (code) {\n return {\n mode: Mode.INLINE_CODE_IN_SANDBOX,\n result: {\n code,\n },\n };\n }\n }\n\n return { mode: Mode.NONE };\n};\n\nexport default function transpileScript(\n script: HTMLScriptElement,\n baseURI: string,\n opts: ScriptTranspilerOpts,\n): HTMLScriptElement {\n // Can't use script.src directly, because it will be resolved to absolute path by browser with Node.baseURI\n // Such as <script src=\"./foo.js\"></script> will be resolved to http://localhost:8000/foo.js while read script.src\n const srcAttribute = script.getAttribute('src');\n const { sandbox, scriptTranspiledDeferred } = opts;\n\n try {\n const { mode, result } = preTranspile(\n {\n src: srcAttribute || undefined,\n type: script.type,\n textContent: script.textContent,\n },\n baseURI,\n opts,\n );\n\n switch (mode) {\n case Mode.REMOTE_ASSETS_IN_SANDBOX: {\n const { fetch } = opts;\n const { src } = result;\n\n // We must remove script src to avoid self execution as we need to fetch the script content and transpile it\n script.removeAttribute('src');\n script.dataset.src = src;\n\n const syncMode = !script.hasAttribute('async');\n const priority: Priority = syncMode ? 'high' : 'low';\n const credentials = getCredentials(script.crossOrigin);\n\n void fetch(src, { credentials, priority })\n .then((res) => res.text())\n .then(async (code) => {\n const { prevScriptTranspiledDeferred } = opts;\n\n // add preprocess code to dispatch a CustomEvent before the script is executed\n const beforeScriptExecuteEvent = 'q:bse';\n const beforeExecutedListenerScript = `;(function(){var s=document.currentScript;var e=new CustomEvent('${beforeScriptExecuteEvent}',{detail:{s:s}});window.dispatchEvent(e);})();`;\n\n const codeFactory = beforeExecutedListenerScript + sandbox!.makeEvaluateFactory(code, src);\n\n if (syncMode) {\n // if it's a sync script and there is a previous sync script, we should wait it until loaded to consistent with the browser behavior\n if (prevScriptTranspiledDeferred && !prevScriptTranspiledDeferred.isSettled()) {\n await waitUntilSettled(prevScriptTranspiledDeferred.promise);\n }\n\n // HTMLScriptElement default fetchPriority is 'auto', we should set it to 'high' to make it execute earlier while it's not async script\n script.fetchPriority = 'high';\n }\n\n // change the script src to the blob url to make it execute in the sandbox\n script.src = URL.createObjectURL(new Blob([codeFactory], { type: 'text/javascript' }));\n\n window.addEventListener(beforeScriptExecuteEvent, function listener(evt: CustomEventInit) {\n const { s } = evt.detail as { s: HTMLScriptElement };\n if (s === script) {\n URL.revokeObjectURL(s.src);\n // change the script src to the original src while the script is executing\n // thus the script behavior can be more consistent with the native browser logic\n s.src = src;\n s.dataset.consumed = 'true';\n delete s.dataset.src;\n\n window.removeEventListener(beforeScriptExecuteEvent, listener);\n }\n });\n\n scriptTranspiledDeferred?.resolve();\n })\n .catch((e) => {\n scriptTranspiledDeferred?.reject();\n throw e;\n });\n\n return script;\n }\n\n case Mode.INLINE_CODE_IN_SANDBOX: {\n const { code } = result;\n script.textContent = sandbox!.makeEvaluateFactory(code);\n // mark the script have consumed\n script.dataset.consumed = 'true';\n\n scriptTranspiledDeferred?.resolve();\n\n return script;\n }\n\n case Mode.REUSED_DEP_IN_SANDBOX:\n case Mode.REUSED_DEP: {\n const { url, version, src } = result;\n\n script.dataset.src = src;\n script.dataset.version = version;\n\n const syncMode = !script.getAttribute('async');\n // HTMLScriptElement default fetchPriority is 'auto', we should set it to 'high' to make it execute earlier while it's not async script\n if (syncMode) {\n script.fetchPriority = 'high';\n }\n\n // When the script hits the dependency reuse logic, the current script is not executed, and an empty script is returned directly\n script.src = createReusingObjectUrl(src, url, 'text/javascript');\n\n const onScriptComplete = (\n prevListener: typeof HTMLScriptElement.prototype.onload | typeof HTMLScriptElement.prototype.onerror,\n event: Event,\n ) => {\n script.onload = script.onerror = null;\n\n script.src = src;\n script.dataset.consumed = 'true';\n script.dataset.src = url;\n\n prevListener?.call(script, event);\n };\n script.onload = onScriptComplete.bind(null, script.onload);\n script.onerror = onScriptComplete.bind(null, script.onerror) as typeof HTMLScriptElement.prototype.onerror;\n\n scriptTranspiledDeferred?.resolve();\n\n return script;\n }\n\n case Mode.REMOTE_ASSETS:\n case Mode.NONE:\n default: {\n if (result?.src) {\n script.src = result.src;\n }\n\n scriptTranspiledDeferred?.resolve();\n\n return script;\n }\n }\n } catch (e) {\n scriptTranspiledDeferred?.reject(e);\n throw e;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["_utils","require","_types","_utils2","getCredentials","crossOrigin","undefined","preTranspile","exports","script","baseURI","opts","sandbox","moduleResolver","src","type","entireUrl","resolveUrl","matchedScript","mode","Mode","REUSED_DEP_IN_SANDBOX","REUSED_DEP","result","_objectSpread2","default","REMOTE_ASSETS_IN_SANDBOX","REMOTE_ASSETS","isValidJavaScriptType","code","textContent","INLINE_CODE_IN_SANDBOX","NONE","transpileScript","srcAttribute","getAttribute","scriptTranspiledDeferred","_preTranspile","fetch","removeAttribute","dataset","syncMode","hasAttribute","priority","credentials","then","res","text","_ref","_asyncToGenerator2","_regeneratorRuntime2","mark","_callee","prevScriptTranspiledDeferred","beforeScriptExecuteEvent","beforeExecutedListenerScript","codeFactory","wrap","_callee$","_context","prev","next","concat","makeEvaluateFactory","isSettled","waitUntilSettled","promise","fetchPriority","URL","createObjectURL","Blob","window","addEventListener","listener","evt","_ref2","detail","s","revokeObjectURL","consumed","removeEventListener","resolve","stop","_x","apply","arguments","catch","e","reject","url","version","createReusingObjectUrl","onScriptComplete","prevListener","event","onload","onerror","call","bind"],"sources":["../../../src/assets-transpilers/script.ts"],"sourcesContent":["/**\n * @author Kuitos\n * @since 2023-03-16\n */\n\nimport type { MatchResult } from '../module-resolver';\nimport { resolveUrl, waitUntilSettled } from '../utils';\nimport type { AssetsTranspilerOpts, ScriptTranspilerOpts } from './types';\nimport { Mode } from './types';\nimport { createReusingObjectUrl, isValidJavaScriptType } from './utils';\n\nconst getCredentials = (crossOrigin: string | null): RequestInit['credentials'] | undefined => {\n switch (crossOrigin) {\n case 'anonymous':\n return 'same-origin';\n case 'use-credentials':\n return 'include';\n default:\n return undefined;\n }\n};\n\ntype PreTranspileResult =\n | { mode: Mode.REMOTE_ASSETS_IN_SANDBOX | Mode.REMOTE_ASSETS; result: { src: string } }\n | { mode: Mode.REUSED_DEP_IN_SANDBOX | Mode.REUSED_DEP; result: { src: string } & MatchResult }\n | { mode: Mode.INLINE_CODE_IN_SANDBOX; result: { code: string } }\n | { mode: Mode.NONE; result?: never };\n\nexport const preTranspile = (\n script: Partial<Pick<HTMLScriptElement, 'src' | 'type' | 'textContent'>>,\n baseURI: string,\n opts: AssetsTranspilerOpts,\n): PreTranspileResult => {\n const { sandbox, moduleResolver } = opts;\n\n const { src, type } = script;\n\n if (src) {\n const entireUrl = resolveUrl(src, baseURI);\n const matchedScript = moduleResolver?.(entireUrl);\n if (matchedScript) {\n return {\n mode: sandbox ? Mode.REUSED_DEP_IN_SANDBOX : Mode.REUSED_DEP,\n result: { src: entireUrl, ...matchedScript },\n };\n }\n\n return {\n mode: sandbox ? Mode.REMOTE_ASSETS_IN_SANDBOX : Mode.REMOTE_ASSETS,\n result: { src: entireUrl },\n };\n }\n\n if (isValidJavaScriptType(type) && sandbox) {\n const code = script.textContent;\n if (code) {\n return {\n mode: Mode.INLINE_CODE_IN_SANDBOX,\n result: {\n code,\n },\n };\n }\n }\n\n return { mode: Mode.NONE };\n};\n\nexport default function transpileScript(\n script: HTMLScriptElement,\n baseURI: string,\n opts: ScriptTranspilerOpts,\n): HTMLScriptElement {\n // Can't use script.src directly, because it will be resolved to absolute path by browser with Node.baseURI\n // Such as <script src=\"./foo.js\"></script> will be resolved to http://localhost:8000/foo.js while read script.src\n const srcAttribute = script.getAttribute('src');\n const { sandbox, scriptTranspiledDeferred } = opts;\n\n try {\n const { mode, result } = preTranspile(\n {\n src: srcAttribute || undefined,\n type: script.type,\n textContent: script.textContent,\n },\n baseURI,\n opts,\n );\n\n switch (mode) {\n case Mode.REMOTE_ASSETS_IN_SANDBOX: {\n const { fetch } = opts;\n const { src } = result;\n\n // We must remove script src to avoid self execution as we need to fetch the script content and transpile it\n script.removeAttribute('src');\n script.dataset.src = src;\n\n const syncMode = !script.hasAttribute('async');\n const priority: Priority = syncMode ? 'high' : 'low';\n const credentials = getCredentials(script.crossOrigin);\n\n void fetch(src, { credentials, priority })\n .then((res) => res.text())\n .then(async (code) => {\n const { prevScriptTranspiledDeferred } = opts;\n\n // add preprocess code to dispatch a CustomEvent before the script is executed\n const beforeScriptExecuteEvent = 'q:bse';\n const beforeExecutedListenerScript = `;(function(){var s=document.currentScript;var e=new CustomEvent('${beforeScriptExecuteEvent}',{detail:{s:s}});window.dispatchEvent(e);})();`;\n\n const codeFactory = beforeExecutedListenerScript + sandbox!.makeEvaluateFactory(code, src);\n\n if (syncMode) {\n // if it's a sync script and there is a previous sync script(mainly there are multiple defer scripts), we should wait it until loaded to consistent with the browser behavior\n if (prevScriptTranspiledDeferred && !prevScriptTranspiledDeferred.isSettled()) {\n await waitUntilSettled(prevScriptTranspiledDeferred.promise);\n }\n\n // HTMLScriptElement default fetchPriority is 'auto', we should set it to 'high' to make it execute earlier while it's not async script\n script.fetchPriority = 'high';\n }\n\n // change the script src to the blob url to make it executed in the sandbox\n script.src = URL.createObjectURL(new Blob([codeFactory], { type: 'text/javascript' }));\n\n window.addEventListener(beforeScriptExecuteEvent, function listener(evt: CustomEventInit) {\n const { s } = evt.detail as { s: HTMLScriptElement };\n if (s === script) {\n URL.revokeObjectURL(s.src);\n // change the script src to the original src while the script is executing\n // thus the script behavior can be more consistent with the native browser logic\n s.src = src;\n s.dataset.consumed = 'true';\n delete s.dataset.src;\n\n window.removeEventListener(beforeScriptExecuteEvent, listener);\n }\n });\n\n scriptTranspiledDeferred?.resolve();\n })\n .catch((e) => {\n scriptTranspiledDeferred?.reject();\n throw e;\n });\n\n return script;\n }\n\n case Mode.INLINE_CODE_IN_SANDBOX: {\n const { code } = result;\n script.textContent = sandbox!.makeEvaluateFactory(code);\n // mark the script have consumed\n script.dataset.consumed = 'true';\n\n scriptTranspiledDeferred?.resolve();\n\n return script;\n }\n\n case Mode.REUSED_DEP_IN_SANDBOX:\n case Mode.REUSED_DEP: {\n const { url, version, src } = result;\n\n script.dataset.src = src;\n script.dataset.version = version;\n\n const syncMode = !script.getAttribute('async');\n // HTMLScriptElement default fetchPriority is 'auto', we should set it to 'high' to make it execute earlier while it's not async script\n if (syncMode) {\n script.fetchPriority = 'high';\n }\n\n // When the script hits the dependency reuse logic, the current script is not executed, and an empty script is returned directly\n script.src = createReusingObjectUrl(src, url, 'text/javascript');\n\n const onScriptComplete = (\n prevListener: typeof HTMLScriptElement.prototype.onload | typeof HTMLScriptElement.prototype.onerror,\n event: Event,\n ) => {\n script.onload = script.onerror = null;\n\n script.src = src;\n script.dataset.consumed = 'true';\n script.dataset.src = url;\n\n prevListener?.call(script, event);\n };\n script.onload = onScriptComplete.bind(null, script.onload);\n script.onerror = onScriptComplete.bind(null, script.onerror) as typeof HTMLScriptElement.prototype.onerror;\n\n scriptTranspiledDeferred?.resolve();\n\n return script;\n }\n\n case Mode.REMOTE_ASSETS:\n case Mode.NONE:\n default: {\n if (result?.src) {\n script.src = result.src;\n }\n\n scriptTranspiledDeferred?.resolve();\n\n return script;\n }\n }\n } catch (e) {\n scriptTranspiledDeferred?.reject(e);\n throw e;\n }\n}\n"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
@@ -0,0 +1,2 @@
1
+ import { type Fetch } from './utils';
2
+ export declare const makeFetchCacheable: (fetch: Fetch) => Fetch;
@@ -1,17 +1,19 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.wrapFetchWithCache = void 0;
8
- var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
7
+ exports.makeFetchCacheable = void 0;
8
+ var _regeneratorRuntime2 = _interopRequireDefault(require("@babel/runtime/helpers/regeneratorRuntime"));
9
9
  var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
10
10
  var _once2 = _interopRequireDefault(require("lodash/once"));
11
11
  var _miniLruCache = require("./miniLruCache");
12
+ var _utils = require("./utils");
12
13
  /**
13
14
  * @author Kuitos
14
15
  * @since 2023-11-06
16
+ * wrap fetch with lru cache
15
17
  */
16
18
 
17
19
  var getCacheKey = function getCacheKey(input) {
@@ -20,18 +22,15 @@ var getCacheKey = function getCacheKey(input) {
20
22
  var getGlobalCache = (0, _once2.default)(function () {
21
23
  return new _miniLruCache.LRUCache(50);
22
24
  });
23
- var isValidaResponse = function isValidaResponse(status) {
24
- return status >= 200 && status < 400;
25
- };
26
- var wrapFetchWithCache = exports.wrapFetchWithCache = function wrapFetchWithCache(fetch) {
25
+ var makeFetchCacheable = exports.makeFetchCacheable = function makeFetchCacheable(fetch) {
27
26
  var lruCache = getGlobalCache();
28
27
  var cachedFetch = function cachedFetch(input, init) {
29
28
  var fetchInput = input;
30
29
  var cacheKey = getCacheKey(fetchInput);
31
30
  var wrapFetchPromise = /*#__PURE__*/function () {
32
- var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(promise) {
31
+ var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee(promise) {
33
32
  var res, status;
34
- return _regenerator.default.wrap(function _callee$(_context) {
33
+ return (0, _regeneratorRuntime2.default)().wrap(function _callee$(_context) {
35
34
  while (1) switch (_context.prev = _context.next) {
36
35
  case 0:
37
36
  _context.prev = 0;
@@ -40,7 +39,7 @@ var wrapFetchWithCache = exports.wrapFetchWithCache = function wrapFetchWithCach
40
39
  case 3:
41
40
  res = _context.sent;
42
41
  status = res.status;
43
- if (!isValidaResponse(status)) {
42
+ if (!(0, _utils.isValidResponse)(status)) {
44
43
  lruCache.delete(cacheKey);
45
44
  }
46
45
 
@@ -71,4 +70,4 @@ var wrapFetchWithCache = exports.wrapFetchWithCache = function wrapFetchWithCach
71
70
  };
72
71
  return cachedFetch;
73
72
  };
74
- //# sourceMappingURL=wrapFetchWithCache.js.map
73
+ //# sourceMappingURL=makeFetchCacheable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_miniLruCache","require","_utils","getCacheKey","input","url","href","getGlobalCache","_once2","default","LRUCache","makeFetchCacheable","exports","fetch","lruCache","cachedFetch","init","fetchInput","cacheKey","wrapFetchPromise","_ref","_asyncToGenerator2","_regeneratorRuntime2","mark","_callee","promise","res","status","wrap","_callee$","_context","prev","next","sent","isValidResponse","delete","abrupt","clone","t0","stop","_x","apply","arguments","cachedFetchPromise","get","fetchPromise","set"],"sources":["../../../src/fetch-utils/makeFetchCacheable.ts"],"sourcesContent":["/**\n * @author Kuitos\n * @since 2023-11-06\n * wrap fetch with lru cache\n */\nimport { once } from 'lodash';\nimport { LRUCache } from './miniLruCache';\nimport { type Fetch, isValidResponse } from './utils';\n\nconst getCacheKey = (input: Parameters<Fetch>[0]): string => {\n return typeof input === 'string' ? input : 'url' in input ? input.url : input.href;\n};\n\nconst getGlobalCache = once(() => {\n return new LRUCache<string, Promise<Response>>(50);\n});\n\nexport const makeFetchCacheable: (fetch: Fetch) => Fetch = (fetch) => {\n const lruCache = getGlobalCache();\n\n const cachedFetch: Fetch = (input, init) => {\n const fetchInput = input;\n const cacheKey = getCacheKey(fetchInput);\n const wrapFetchPromise = async (promise: Promise<Response>): Promise<Response> => {\n try {\n const res = await promise;\n\n const { status } = res;\n if (!isValidResponse(status)) {\n lruCache.delete(cacheKey);\n }\n\n // must clone the response as one response body can only be read once as a stream\n return res.clone();\n } catch (e) {\n lruCache.delete(cacheKey);\n throw e;\n }\n };\n\n const cachedFetchPromise = lruCache.get(cacheKey);\n if (cachedFetchPromise) {\n return wrapFetchPromise(cachedFetchPromise);\n }\n\n const fetchPromise = fetch(fetchInput, init);\n lruCache.set(cacheKey, fetchPromise);\n\n return wrapFetchPromise(fetchPromise);\n };\n\n return cachedFetch;\n};\n"],"mappings":";;;;;;;;;;AAMA,IAAAA,aAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AAPA;AACA;AACA;AACA;AACA;;AAKA,IAAME,WAAW,GAAG,SAAdA,WAAWA,CAAIC,KAA2B,EAAa;EAC3D,OAAO,OAAOA,KAAK,KAAK,QAAQ,GAAGA,KAAK,GAAG,KAAK,IAAIA,KAAK,GAAGA,KAAK,CAACC,GAAG,GAAGD,KAAK,CAACE,IAAI;AACpF,CAAC;AAED,IAAMC,cAAc,GAAG,IAAAC,MAAA,CAAAC,OAAA,EAAK,YAAM;EAChC,OAAO,IAAIC,sBAAQ,CAA4B,EAAE,CAAC;AACpD,CAAC,CAAC;AAEK,IAAMC,kBAA2C,GAAAC,OAAA,CAAAD,kBAAA,GAAG,SAA9CA,kBAA2CA,CAAIE,KAAK,EAAK;EACpE,IAAMC,QAAQ,GAAGP,cAAc,CAAC,CAAC;EAEjC,IAAMQ,WAAkB,GAAG,SAArBA,WAAkBA,CAAIX,KAAK,EAAEY,IAAI,EAAK;IAC1C,IAAMC,UAAU,GAAGb,KAAK;IACxB,IAAMc,QAAQ,GAAGf,WAAW,CAACc,UAAU,CAAC;IACxC,IAAME,gBAAgB;MAAA,IAAAC,IAAA,OAAAC,kBAAA,CAAAZ,OAAA,oBAAAa,oBAAA,CAAAb,OAAA,IAAAc,IAAA,CAAG,SAAAC,QAAOC,OAA0B;QAAA,IAAAC,GAAA,EAAAC,MAAA;QAAA,WAAAL,oBAAA,CAAAb,OAAA,IAAAmB,IAAA,UAAAC,SAAAC,QAAA;UAAA,kBAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAAE,IAAA;YAAA;cAAAF,QAAA,CAAAC,IAAA;cAAAD,QAAA,CAAAE,IAAA;cAAA,OAEpCP,OAAO;YAAA;cAAnBC,GAAG,GAAAI,QAAA,CAAAG,IAAA;cAEDN,MAAM,GAAKD,GAAG,CAAdC,MAAM;cACd,IAAI,CAAC,IAAAO,sBAAe,EAACP,MAAM,CAAC,EAAE;gBAC5Bb,QAAQ,CAACqB,MAAM,CAACjB,QAAQ,CAAC;cAC3B;;cAEA;cAAA,OAAAY,QAAA,CAAAM,MAAA,WACOV,GAAG,CAACW,KAAK,CAAC,CAAC;YAAA;cAAAP,QAAA,CAAAC,IAAA;cAAAD,QAAA,CAAAQ,EAAA,GAAAR,QAAA;cAElBhB,QAAQ,CAACqB,MAAM,CAACjB,QAAQ,CAAC;cAAC,MAAAY,QAAA,CAAAQ,EAAA;YAAA;YAAA;cAAA,OAAAR,QAAA,CAAAS,IAAA;UAAA;QAAA,GAAAf,OAAA;MAAA,CAG7B;MAAA,gBAfKL,gBAAgBA,CAAAqB,EAAA;QAAA,OAAApB,IAAA,CAAAqB,KAAA,OAAAC,SAAA;MAAA;IAAA,GAerB;IAED,IAAMC,kBAAkB,GAAG7B,QAAQ,CAAC8B,GAAG,CAAC1B,QAAQ,CAAC;IACjD,IAAIyB,kBAAkB,EAAE;MACtB,OAAOxB,gBAAgB,CAACwB,kBAAkB,CAAC;IAC7C;IAEA,IAAME,YAAY,GAAGhC,KAAK,CAACI,UAAU,EAAED,IAAI,CAAC;IAC5CF,QAAQ,CAACgC,GAAG,CAAC5B,QAAQ,EAAE2B,YAAY,CAAC;IAEpC,OAAO1B,gBAAgB,CAAC0B,YAAY,CAAC;EACvC,CAAC;EAED,OAAO9B,WAAW;AACpB,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @author Kuitos
3
+ * @since 2024-03-05
4
+ */
5
+ import { type Fetch } from './utils';
6
+ export declare const makeFetchRetryable: (fetch: Fetch, retryTimes?: number) => Fetch;
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.makeFetchRetryable = void 0;
8
+ var _regeneratorRuntime2 = _interopRequireDefault(require("@babel/runtime/helpers/regeneratorRuntime"));
9
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
10
+ /**
11
+ * @author Kuitos
12
+ * @since 2024-03-05
13
+ */
14
+
15
+ var makeFetchRetryable = exports.makeFetchRetryable = function makeFetchRetryable(fetch) {
16
+ var retryTimes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
17
+ var retryCount = 0;
18
+ var fetchWithRetryable = /*#__PURE__*/function () {
19
+ var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee(input, init) {
20
+ return (0, _regeneratorRuntime2.default)().wrap(function _callee$(_context) {
21
+ while (1) switch (_context.prev = _context.next) {
22
+ case 0:
23
+ _context.prev = 0;
24
+ _context.next = 3;
25
+ return fetch(input, init);
26
+ case 3:
27
+ return _context.abrupt("return", _context.sent);
28
+ case 6:
29
+ _context.prev = 6;
30
+ _context.t0 = _context["catch"](0);
31
+ if (!(retryCount < retryTimes)) {
32
+ _context.next = 14;
33
+ break;
34
+ }
35
+ retryCount++;
36
+ if (process.env.NODE_ENV === 'development') {
37
+ console.debug("[qiankun] fetch retrying --> url: ".concat(typeof input === 'string' ? input : 'url' in input ? input.url : input.href, " , time: ").concat(retryCount));
38
+ }
39
+ _context.next = 13;
40
+ return fetchWithRetryable(input, init);
41
+ case 13:
42
+ return _context.abrupt("return", _context.sent);
43
+ case 14:
44
+ throw _context.t0;
45
+ case 15:
46
+ case "end":
47
+ return _context.stop();
48
+ }
49
+ }, _callee, null, [[0, 6]]);
50
+ }));
51
+ return function fetchWithRetryable(_x, _x2) {
52
+ return _ref.apply(this, arguments);
53
+ };
54
+ }();
55
+ return fetchWithRetryable;
56
+ };
57
+ //# sourceMappingURL=makeFetchRetryable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["makeFetchRetryable","exports","fetch","retryTimes","arguments","length","undefined","retryCount","fetchWithRetryable","_ref","_asyncToGenerator2","default","_regeneratorRuntime2","mark","_callee","input","init","wrap","_callee$","_context","prev","next","abrupt","sent","t0","process","env","NODE_ENV","console","debug","concat","url","href","stop","_x","_x2","apply"],"sources":["../../../src/fetch-utils/makeFetchRetryable.ts"],"sourcesContent":["/**\n * @author Kuitos\n * @since 2024-03-05\n */\n\nimport { type Fetch } from './utils';\n\nexport const makeFetchRetryable: (fetch: Fetch, retryTimes?: number) => Fetch = (fetch, retryTimes = 1) => {\n let retryCount = 0;\n\n const fetchWithRetryable: Fetch = async (input, init) => {\n try {\n return await fetch(input, init);\n } catch (e) {\n if (retryCount < retryTimes) {\n retryCount++;\n\n if (process.env.NODE_ENV === 'development') {\n console.debug(\n `[qiankun] fetch retrying --> url: ${\n typeof input === 'string' ? input : 'url' in input ? input.url : input.href\n } , time: ${retryCount}`,\n );\n }\n\n return await fetchWithRetryable(input, init);\n }\n\n throw e;\n }\n };\n\n return fetchWithRetryable;\n};\n"],"mappings":";;;;;;;;;AAAA;AACA;AACA;AACA;;AAIO,IAAMA,kBAAgE,GAAAC,OAAA,CAAAD,kBAAA,GAAG,SAAnEA,kBAAgEA,CAAIE,KAAK,EAAqB;EAAA,IAAnBC,UAAU,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,CAAC;EACpG,IAAIG,UAAU,GAAG,CAAC;EAElB,IAAMC,kBAAyB;IAAA,IAAAC,IAAA,OAAAC,kBAAA,CAAAC,OAAA,oBAAAC,oBAAA,CAAAD,OAAA,IAAAE,IAAA,CAAG,SAAAC,QAAOC,KAAK,EAAEC,IAAI;MAAA,WAAAJ,oBAAA,CAAAD,OAAA,IAAAM,IAAA,UAAAC,SAAAC,QAAA;QAAA,kBAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAAE,IAAA;UAAA;YAAAF,QAAA,CAAAC,IAAA;YAAAD,QAAA,CAAAE,IAAA;YAAA,OAEnCnB,KAAK,CAACa,KAAK,EAAEC,IAAI,CAAC;UAAA;YAAA,OAAAG,QAAA,CAAAG,MAAA,WAAAH,QAAA,CAAAI,IAAA;UAAA;YAAAJ,QAAA,CAAAC,IAAA;YAAAD,QAAA,CAAAK,EAAA,GAAAL,QAAA;YAAA,MAE3BZ,UAAU,GAAGJ,UAAU;cAAAgB,QAAA,CAAAE,IAAA;cAAA;YAAA;YACzBd,UAAU,EAAE;YAEZ,IAAIkB,OAAO,CAACC,GAAG,CAACC,QAAQ,KAAK,aAAa,EAAE;cAC1CC,OAAO,CAACC,KAAK,sCAAAC,MAAA,CAET,OAAOf,KAAK,KAAK,QAAQ,GAAGA,KAAK,GAAG,KAAK,IAAIA,KAAK,GAAGA,KAAK,CAACgB,GAAG,GAAGhB,KAAK,CAACiB,IAAI,eAAAF,MAAA,CACjEvB,UAAU,CACxB,CAAC;YACH;YAACY,QAAA,CAAAE,IAAA;YAAA,OAEYb,kBAAkB,CAACO,KAAK,EAAEC,IAAI,CAAC;UAAA;YAAA,OAAAG,QAAA,CAAAG,MAAA,WAAAH,QAAA,CAAAI,IAAA;UAAA;YAAA,MAAAJ,QAAA,CAAAK,EAAA;UAAA;UAAA;YAAA,OAAAL,QAAA,CAAAc,IAAA;QAAA;MAAA,GAAAnB,OAAA;IAAA,CAKjD;IAAA,gBApBKN,kBAAyBA,CAAA0B,EAAA,EAAAC,GAAA;MAAA,OAAA1B,IAAA,CAAA2B,KAAA,OAAAhC,SAAA;IAAA;EAAA,GAoB9B;EAED,OAAOI,kBAAkB;AAC3B,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @author Kuitos
3
+ * @since 2024-03-05
4
+ * wrap fetch to throw error when response status is not 200~400
5
+ */
6
+ import { type Fetch } from './utils';
7
+ export declare const makeFetchThrowable: (fetch: Fetch) => Fetch;
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.makeFetchThrowable = void 0;
8
+ var _regeneratorRuntime2 = _interopRequireDefault(require("@babel/runtime/helpers/regeneratorRuntime"));
9
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
10
+ var _utils = require("./utils");
11
+ /**
12
+ * @author Kuitos
13
+ * @since 2024-03-05
14
+ * wrap fetch to throw error when response status is not 200~400
15
+ */
16
+
17
+ var makeFetchThrowable = exports.makeFetchThrowable = function makeFetchThrowable(fetch) {
18
+ return /*#__PURE__*/function () {
19
+ var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/(0, _regeneratorRuntime2.default)().mark(function _callee(url, init) {
20
+ var urlString, res;
21
+ return (0, _regeneratorRuntime2.default)().wrap(function _callee$(_context) {
22
+ while (1) switch (_context.prev = _context.next) {
23
+ case 0:
24
+ urlString = typeof url === 'string' ? url : 'url' in url ? url.url : url.href;
25
+ _context.prev = 1;
26
+ _context.next = 4;
27
+ return fetch(url, init);
28
+ case 4:
29
+ res = _context.sent;
30
+ _context.next = 11;
31
+ break;
32
+ case 7:
33
+ _context.prev = 7;
34
+ _context.t0 = _context["catch"](1);
35
+ // The error message of fetch failed is usually "Failed to fetch"
36
+ // We need to prepend the url to the error message to make it easier to debug
37
+ // e.g. "https://example.com/script.js Failed to fetch"
38
+ try {
39
+ if (_context.t0 instanceof Error && !_context.t0.message.includes(urlString)) {
40
+ _context.t0.message = "".concat(urlString, " ").concat(_context.t0.message);
41
+ }
42
+ } catch (_) {
43
+ // e.message may be readonly
44
+ }
45
+ throw _context.t0;
46
+ case 11:
47
+ if ((0, _utils.isValidResponse)(res.status)) {
48
+ _context.next = 13;
49
+ break;
50
+ }
51
+ throw new Error("".concat(urlString, " [RESPONSE_ERROR_AS_STATUS_INVALID] ").concat(res.status, " ").concat(res.statusText));
52
+ case 13:
53
+ return _context.abrupt("return", res);
54
+ case 14:
55
+ case "end":
56
+ return _context.stop();
57
+ }
58
+ }, _callee, null, [[1, 7]]);
59
+ }));
60
+ return function (_x, _x2) {
61
+ return _ref.apply(this, arguments);
62
+ };
63
+ }();
64
+ };
65
+ //# sourceMappingURL=makeFetchThrowable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_utils","require","makeFetchThrowable","exports","fetch","_ref","_asyncToGenerator2","default","_regeneratorRuntime2","mark","_callee","url","init","urlString","res","wrap","_callee$","_context","prev","next","href","sent","t0","Error","message","includes","concat","_","isValidResponse","status","statusText","abrupt","stop","_x","_x2","apply","arguments"],"sources":["../../../src/fetch-utils/makeFetchThrowable.ts"],"sourcesContent":["/**\n * @author Kuitos\n * @since 2024-03-05\n * wrap fetch to throw error when response status is not 200~400\n */\n\nimport { type Fetch, isValidResponse } from './utils';\n\nexport const makeFetchThrowable: (fetch: Fetch) => Fetch = (fetch) => {\n return async (url, init) => {\n const urlString = typeof url === 'string' ? url : 'url' in url ? url.url : url.href;\n\n let res: Response;\n try {\n res = await fetch(url, init);\n } catch (e) {\n // The error message of fetch failed is usually \"Failed to fetch\"\n // We need to prepend the url to the error message to make it easier to debug\n // e.g. \"https://example.com/script.js Failed to fetch\"\n try {\n if (e instanceof Error && !e.message.includes(urlString)) {\n e.message = `${urlString} ${e.message}`;\n }\n } catch (_) {\n // e.message may be readonly\n }\n throw e;\n }\n\n if (!isValidResponse(res.status)) {\n throw new Error(`${urlString} [RESPONSE_ERROR_AS_STATUS_INVALID] ${res.status} ${res.statusText}`);\n }\n\n return res;\n };\n};\n"],"mappings":";;;;;;;;;AAMA,IAAAA,MAAA,GAAAC,OAAA;AANA;AACA;AACA;AACA;AACA;;AAIO,IAAMC,kBAA2C,GAAAC,OAAA,CAAAD,kBAAA,GAAG,SAA9CA,kBAA2CA,CAAIE,KAAK,EAAK;EACpE;IAAA,IAAAC,IAAA,OAAAC,kBAAA,CAAAC,OAAA,oBAAAC,oBAAA,CAAAD,OAAA,IAAAE,IAAA,CAAO,SAAAC,QAAOC,GAAG,EAAEC,IAAI;MAAA,IAAAC,SAAA,EAAAC,GAAA;MAAA,WAAAN,oBAAA,CAAAD,OAAA,IAAAQ,IAAA,UAAAC,SAAAC,QAAA;QAAA,kBAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAAE,IAAA;UAAA;YACfN,SAAS,GAAG,OAAOF,GAAG,KAAK,QAAQ,GAAGA,GAAG,GAAG,KAAK,IAAIA,GAAG,GAAGA,GAAG,CAACA,GAAG,GAAGA,GAAG,CAACS,IAAI;YAAAH,QAAA,CAAAC,IAAA;YAAAD,QAAA,CAAAE,IAAA;YAAA,OAIrEf,KAAK,CAACO,GAAG,EAAEC,IAAI,CAAC;UAAA;YAA5BE,GAAG,GAAAG,QAAA,CAAAI,IAAA;YAAAJ,QAAA,CAAAE,IAAA;YAAA;UAAA;YAAAF,QAAA,CAAAC,IAAA;YAAAD,QAAA,CAAAK,EAAA,GAAAL,QAAA;YAEH;YACA;YACA;YACA,IAAI;cACF,IAAIA,QAAA,CAAAK,EAAA,YAAaC,KAAK,IAAI,CAACN,QAAA,CAAAK,EAAA,CAAEE,OAAO,CAACC,QAAQ,CAACZ,SAAS,CAAC,EAAE;gBACxDI,QAAA,CAAAK,EAAA,CAAEE,OAAO,MAAAE,MAAA,CAAMb,SAAS,OAAAa,MAAA,CAAIT,QAAA,CAAAK,EAAA,CAAEE,OAAO,CAAE;cACzC;YACF,CAAC,CAAC,OAAOG,CAAC,EAAE;cACV;YAAA;YACD,MAAAV,QAAA,CAAAK,EAAA;UAAA;YAAA,IAIE,IAAAM,sBAAe,EAACd,GAAG,CAACe,MAAM,CAAC;cAAAZ,QAAA,CAAAE,IAAA;cAAA;YAAA;YAAA,MACxB,IAAII,KAAK,IAAAG,MAAA,CAAIb,SAAS,0CAAAa,MAAA,CAAuCZ,GAAG,CAACe,MAAM,OAAAH,MAAA,CAAIZ,GAAG,CAACgB,UAAU,CAAE,CAAC;UAAA;YAAA,OAAAb,QAAA,CAAAc,MAAA,WAG7FjB,GAAG;UAAA;UAAA;YAAA,OAAAG,QAAA,CAAAe,IAAA;QAAA;MAAA,GAAAtB,OAAA;IAAA,CACX;IAAA,iBAAAuB,EAAA,EAAAC,GAAA;MAAA,OAAA7B,IAAA,CAAA8B,KAAA,OAAAC,SAAA;IAAA;EAAA;AACH,CAAC"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
@@ -0,0 +1,2 @@
1
+ export type Fetch = typeof window.fetch;
2
+ export declare const isValidResponse: (status: number) => boolean;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.isValidResponse = void 0;
7
+ var isValidResponse = exports.isValidResponse = function isValidResponse(status) {
8
+ return status >= 200 && status < 400;
9
+ };
10
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["isValidResponse","exports","status"],"sources":["../../../src/fetch-utils/utils.ts"],"sourcesContent":["export type Fetch = typeof window.fetch;\n\nexport const isValidResponse = (status: number): boolean => {\n return status >= 200 && status < 400;\n};\n"],"mappings":";;;;;;AAEO,IAAMA,eAAe,GAAAC,OAAA,CAAAD,eAAA,GAAG,SAAlBA,eAAeA,CAAIE,MAAc,EAAc;EAC1D,OAAOA,MAAM,IAAI,GAAG,IAAIA,MAAM,GAAG,GAAG;AACtC,CAAC"}
@@ -7,5 +7,7 @@ export * from './utils';
7
7
  export * from './module-resolver';
8
8
  export * from './common';
9
9
  export * from './reporter';
10
- export * from './fetch-utils/wrapFetchWithCache';
10
+ export * from './fetch-utils/makeFetchCacheable';
11
+ export * from './fetch-utils/makeFetchRetryable';
12
+ export * from './fetch-utils/makeFetchThrowable';
11
13
  export * from './deferred-queue';
package/dist/cjs/index.js CHANGED
@@ -58,14 +58,36 @@ Object.keys(_reporter).forEach(function (key) {
58
58
  }
59
59
  });
60
60
  });
61
- var _wrapFetchWithCache = require("./fetch-utils/wrapFetchWithCache");
62
- Object.keys(_wrapFetchWithCache).forEach(function (key) {
61
+ var _makeFetchCacheable = require("./fetch-utils/makeFetchCacheable");
62
+ Object.keys(_makeFetchCacheable).forEach(function (key) {
63
63
  if (key === "default" || key === "__esModule") return;
64
- if (key in exports && exports[key] === _wrapFetchWithCache[key]) return;
64
+ if (key in exports && exports[key] === _makeFetchCacheable[key]) return;
65
65
  Object.defineProperty(exports, key, {
66
66
  enumerable: true,
67
67
  get: function get() {
68
- return _wrapFetchWithCache[key];
68
+ return _makeFetchCacheable[key];
69
+ }
70
+ });
71
+ });
72
+ var _makeFetchRetryable = require("./fetch-utils/makeFetchRetryable");
73
+ Object.keys(_makeFetchRetryable).forEach(function (key) {
74
+ if (key === "default" || key === "__esModule") return;
75
+ if (key in exports && exports[key] === _makeFetchRetryable[key]) return;
76
+ Object.defineProperty(exports, key, {
77
+ enumerable: true,
78
+ get: function get() {
79
+ return _makeFetchRetryable[key];
80
+ }
81
+ });
82
+ });
83
+ var _makeFetchThrowable = require("./fetch-utils/makeFetchThrowable");
84
+ Object.keys(_makeFetchThrowable).forEach(function (key) {
85
+ if (key === "default" || key === "__esModule") return;
86
+ if (key in exports && exports[key] === _makeFetchThrowable[key]) return;
87
+ Object.defineProperty(exports, key, {
88
+ enumerable: true,
89
+ get: function get() {
90
+ return _makeFetchThrowable[key];
69
91
  }
70
92
  });
71
93
  });
@@ -1 +1 @@
1
- {"version":3,"names":["_assetsTranspilers","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get","_utils","_moduleResolver","_common","_reporter","_wrapFetchWithCache","_deferredQueue"],"sources":["../../src/index.ts"],"sourcesContent":["/**\n * @author Kuitos\n * @since 2023-05-06\n */\nexport * from './assets-transpilers';\nexport * from './utils';\nexport * from './module-resolver';\nexport * from './common';\nexport * from './reporter';\nexport * from './fetch-utils/wrapFetchWithCache';\nexport * from './deferred-queue';\n"],"mappings":";;;;;AAIA,IAAAA,kBAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,kBAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,kBAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,IAAA;MAAA,OAAAT,kBAAA,CAAAK,GAAA;IAAA;EAAA;AAAA;AACA,IAAAK,MAAA,GAAAT,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAO,MAAA,EAAAN,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAK,MAAA,CAAAL,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,IAAA;MAAA,OAAAC,MAAA,CAAAL,GAAA;IAAA;EAAA;AAAA;AACA,IAAAM,eAAA,GAAAV,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAQ,eAAA,EAAAP,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAM,eAAA,CAAAN,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,IAAA;MAAA,OAAAE,eAAA,CAAAN,GAAA;IAAA;EAAA;AAAA;AACA,IAAAO,OAAA,GAAAX,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAS,OAAA,EAAAR,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAO,OAAA,CAAAP,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,IAAA;MAAA,OAAAG,OAAA,CAAAP,GAAA;IAAA;EAAA;AAAA;AACA,IAAAQ,SAAA,GAAAZ,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAU,SAAA,EAAAT,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAQ,SAAA,CAAAR,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,IAAA;MAAA,OAAAI,SAAA,CAAAR,GAAA;IAAA;EAAA;AAAA;AACA,IAAAS,mBAAA,GAAAb,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAW,mBAAA,EAAAV,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAS,mBAAA,CAAAT,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,IAAA;MAAA,OAAAK,mBAAA,CAAAT,GAAA;IAAA;EAAA;AAAA;AACA,IAAAU,cAAA,GAAAd,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAY,cAAA,EAAAX,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAU,cAAA,CAAAV,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,IAAA;MAAA,OAAAM,cAAA,CAAAV,GAAA;IAAA;EAAA;AAAA"}
1
+ {"version":3,"names":["_assetsTranspilers","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get","_utils","_moduleResolver","_common","_reporter","_makeFetchCacheable","_makeFetchRetryable","_makeFetchThrowable","_deferredQueue"],"sources":["../../src/index.ts"],"sourcesContent":["/**\n * @author Kuitos\n * @since 2023-05-06\n */\nexport * from './assets-transpilers';\nexport * from './utils';\nexport * from './module-resolver';\nexport * from './common';\nexport * from './reporter';\nexport * from './fetch-utils/makeFetchCacheable';\nexport * from './fetch-utils/makeFetchRetryable';\nexport * from './fetch-utils/makeFetchThrowable';\nexport * from './deferred-queue';\n"],"mappings":"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"}
@@ -1,12 +1,12 @@
1
1
  "use strict";
2
2
 
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.moduleResolver = moduleResolver;
8
8
  var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
9
- var _satisfies = _interopRequireDefault(require("semver/functions/satisfies"));
9
+ var _satisfies = require("./satisfies");
10
10
  function moduleResolver(url, microAppContainer, mainAppContainer) {
11
11
  var _microAppContainer$qu;
12
12
  var dependencyMapSelector = 'script[type=dependencymap]';
@@ -37,7 +37,7 @@ function moduleResolver(url, microAppContainer, mainAppContainer) {
37
37
  }
38
38
  function findDependency(dependency, mainAppDependencies, matchedDependencies) {
39
39
  var matched = mainAppDependencies.find(function (mainAppDependency) {
40
- return mainAppDependency.name === dependency.name && (0, _satisfies.default)(mainAppDependency.version, dependency.range) &&
40
+ return mainAppDependency.name === dependency.name && (0, _satisfies.satisfies)(mainAppDependency.version, dependency.range) &&
41
41
  // peer dependencies must be cached before
42
42
  (dependency.peerDeps || []).every(function (peerDep) {
43
43
  return matchedDependencies.indexOf(peerDep) !== -1;
@@ -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","mainAppDependencyMapString","_microAppContainer$__","mainAppDependencyMap","matchedDeps","__matched_deps__","matchedDep","findDependency","push","name","undefined","dependency","mainAppDependencies","matchedDependencies","matched","mainAppDependency","satisfies","version","range","peerDeps","every","peerDep","indexOf","Object","keys","map","_objectSpread2","default"],"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,IAAAA,UAAA,GAAAC,sBAAA,CAAAC,OAAA;AA0BO,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,IAC1C,IAAAO,kBAAS,EAACD,iBAAiB,CAACE,OAAO,EAAEN,UAAU,CAACO,KAAK,CAAC;IACtD;IACA,CAACP,UAAU,CAACQ,QAAQ,IAAI,EAAE,EAAEC,KAAK,CAAC,UAACC,OAAO;MAAA,OAAKR,mBAAmB,CAACS,OAAO,CAACD,OAAO,CAAC,KAAK,CAAC,CAAC;IAAA,EAAC;EAAA,CAC/F,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,WAAAiB,cAAA,CAAAC,OAAA;MACxClB,IAAI,EAAJA;IAAI,GACDf,YAAY,CAACe,IAAI,CAAC;EAAA,CACrB,CAAC;AACL"}
1
+ {"version":3,"names":["_satisfies","require","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","satisfies","version","range","peerDeps","every","peerDep","indexOf","Object","keys","map","_objectSpread2","default"],"sources":["../../../src/module-resolver/index.ts"],"sourcesContent":["import { satisfies } from './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,IAAAA,UAAA,GAAAC,OAAA;AA0BO,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,IAC1C,IAAAO,oBAAS,EAACD,iBAAiB,CAACE,OAAO,EAAEN,UAAU,CAACO,KAAK,CAAC;IACtD;IACA,CAACP,UAAU,CAACQ,QAAQ,IAAI,EAAE,EAAEC,KAAK,CAAC,UAACC,OAAO;MAAA,OAAKR,mBAAmB,CAACS,OAAO,CAACD,OAAO,CAAC,KAAK,CAAC,CAAC;IAAA,EAAC;EAAA,CAC/F,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,WAAAiB,cAAA,CAAAC,OAAA;MACxClB,IAAI,EAAJA;IAAI,GACDf,YAAY,CAACe,IAAI,CAAC;EAAA,CACrB,CAAC;AACL"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Semver-compatible satisfies check using compare-versions.
3
+ * Handles edge cases that compare-versions doesn't support:
4
+ * - Full wildcards (*, x, X)
5
+ * - Short wildcards (1.x, 1.*)
6
+ * - Prerelease version behavior
7
+ */
8
+ export declare function satisfies(version: string, range: string): boolean;