@module-federation/sdk 2.0.0 → 2.1.0

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 (113) hide show
  1. package/dist/_virtual/_rolldown/runtime.cjs +19 -0
  2. package/dist/_virtual/_rolldown/runtime.js +18 -0
  3. package/dist/constant.cjs +70 -0
  4. package/dist/constant.cjs.map +1 -0
  5. package/dist/constant.d.ts +53 -0
  6. package/dist/constant.js +55 -0
  7. package/dist/constant.js.map +1 -0
  8. package/dist/createModuleFederationConfig.cjs +9 -0
  9. package/dist/createModuleFederationConfig.cjs.map +1 -0
  10. package/dist/createModuleFederationConfig.d.ts +8 -0
  11. package/dist/createModuleFederationConfig.js +8 -0
  12. package/dist/createModuleFederationConfig.js.map +1 -0
  13. package/dist/dom.cjs +166 -0
  14. package/dist/dom.cjs.map +1 -0
  15. package/dist/dom.d.ts +35 -0
  16. package/dist/dom.js +162 -0
  17. package/dist/dom.js.map +1 -0
  18. package/dist/env.cjs +32 -0
  19. package/dist/env.cjs.map +1 -0
  20. package/dist/{src/env.d.ts → env.d.ts} +5 -2
  21. package/dist/env.js +29 -0
  22. package/dist/env.js.map +1 -0
  23. package/dist/generateSnapshotFromManifest.cjs +138 -0
  24. package/dist/generateSnapshotFromManifest.cjs.map +1 -0
  25. package/dist/generateSnapshotFromManifest.d.ts +22 -0
  26. package/dist/generateSnapshotFromManifest.js +134 -0
  27. package/dist/generateSnapshotFromManifest.js.map +1 -0
  28. package/dist/index.cjs +89 -0
  29. package/dist/index.d.ts +20 -1
  30. package/dist/index.js +15 -0
  31. package/dist/logger.cjs +129 -0
  32. package/dist/logger.cjs.map +1 -0
  33. package/dist/logger.d.ts +34 -0
  34. package/dist/logger.js +125 -0
  35. package/dist/logger.js.map +1 -0
  36. package/dist/node.cjs +122 -0
  37. package/dist/node.cjs.map +1 -0
  38. package/dist/node.d.ts +17 -0
  39. package/dist/node.js +120 -0
  40. package/dist/node.js.map +1 -0
  41. package/dist/normalize-webpack-path.cjs +28 -0
  42. package/dist/normalize-webpack-path.cjs.map +1 -0
  43. package/dist/normalize-webpack-path.d.ts +10 -1
  44. package/dist/normalize-webpack-path.js +26 -0
  45. package/dist/normalize-webpack-path.js.map +1 -0
  46. package/dist/normalizeOptions.cjs +19 -0
  47. package/dist/normalizeOptions.cjs.map +1 -0
  48. package/dist/normalizeOptions.d.ts +5 -0
  49. package/dist/normalizeOptions.js +18 -0
  50. package/dist/normalizeOptions.js.map +1 -0
  51. package/dist/types/common.d.ts +14 -0
  52. package/dist/types/hooks.d.ts +16 -0
  53. package/dist/types/index.d.ts +10 -0
  54. package/dist/types/manifest.d.ts +34 -0
  55. package/dist/types/plugins/ContainerPlugin.cjs +13 -0
  56. package/dist/types/plugins/ContainerPlugin.cjs.map +1 -0
  57. package/dist/types/plugins/ContainerPlugin.d.ts +40 -0
  58. package/dist/types/plugins/ContainerPlugin.js +8 -0
  59. package/dist/types/plugins/ContainerPlugin.js.map +1 -0
  60. package/dist/types/plugins/ContainerReferencePlugin.cjs +13 -0
  61. package/dist/types/plugins/ContainerReferencePlugin.cjs.map +1 -0
  62. package/dist/types/plugins/ContainerReferencePlugin.d.ts +23 -0
  63. package/dist/types/plugins/ContainerReferencePlugin.js +8 -0
  64. package/dist/types/plugins/ContainerReferencePlugin.js.map +1 -0
  65. package/dist/types/plugins/ModuleFederationPlugin.cjs +13 -0
  66. package/dist/types/plugins/ModuleFederationPlugin.cjs.map +1 -0
  67. package/dist/types/plugins/ModuleFederationPlugin.d.ts +432 -0
  68. package/dist/types/plugins/ModuleFederationPlugin.js +8 -0
  69. package/dist/types/plugins/ModuleFederationPlugin.js.map +1 -0
  70. package/dist/types/plugins/SharePlugin.cjs +13 -0
  71. package/dist/types/plugins/SharePlugin.cjs.map +1 -0
  72. package/dist/types/plugins/SharePlugin.d.ts +29 -0
  73. package/dist/types/plugins/SharePlugin.js +8 -0
  74. package/dist/types/plugins/SharePlugin.js.map +1 -0
  75. package/dist/types/plugins/index.d.ts +4 -0
  76. package/dist/types/snapshot.d.ts +81 -0
  77. package/dist/types/stats.d.ts +101 -0
  78. package/dist/utils.cjs +127 -0
  79. package/dist/utils.cjs.map +1 -0
  80. package/dist/{src/utils.d.ts → utils.d.ts} +9 -3
  81. package/dist/utils.js +116 -0
  82. package/dist/utils.js.map +1 -0
  83. package/package.json +10 -7
  84. package/dist/index.cjs.cjs +0 -1032
  85. package/dist/index.cjs.cjs.map +0 -1
  86. package/dist/index.cjs.d.ts +0 -1
  87. package/dist/index.esm.js +0 -978
  88. package/dist/index.esm.js.map +0 -1
  89. package/dist/normalize-webpack-path.cjs.cjs +0 -42
  90. package/dist/normalize-webpack-path.cjs.cjs.map +0 -1
  91. package/dist/normalize-webpack-path.cjs.d.ts +0 -1
  92. package/dist/normalize-webpack-path.esm.js +0 -39
  93. package/dist/normalize-webpack-path.esm.js.map +0 -1
  94. package/dist/src/constant.d.ts +0 -49
  95. package/dist/src/createModuleFederationConfig.d.ts +0 -2
  96. package/dist/src/dom.d.ts +0 -29
  97. package/dist/src/generateSnapshotFromManifest.d.ts +0 -15
  98. package/dist/src/index.d.ts +0 -11
  99. package/dist/src/logger.d.ts +0 -32
  100. package/dist/src/node.d.ts +0 -11
  101. package/dist/src/normalize-webpack-path.d.ts +0 -5
  102. package/dist/src/normalizeOptions.d.ts +0 -1
  103. package/dist/src/types/common.d.ts +0 -10
  104. package/dist/src/types/hooks.d.ts +0 -12
  105. package/dist/src/types/index.d.ts +0 -6
  106. package/dist/src/types/manifest.d.ts +0 -29
  107. package/dist/src/types/plugins/ContainerPlugin.d.ts +0 -32
  108. package/dist/src/types/plugins/ContainerReferencePlugin.d.ts +0 -15
  109. package/dist/src/types/plugins/ModuleFederationPlugin.d.ts +0 -425
  110. package/dist/src/types/plugins/SharePlugin.d.ts +0 -21
  111. package/dist/src/types/plugins/index.d.ts +0 -4
  112. package/dist/src/types/snapshot.d.ts +0 -77
  113. package/dist/src/types/stats.d.ts +0 -97
@@ -0,0 +1,19 @@
1
+ //#region \0rolldown/runtime.js
2
+ var __defProp = Object.defineProperty;
3
+ var __exportAll = (all, no_symbols) => {
4
+ let target = {};
5
+ for (var name in all) {
6
+ __defProp(target, name, {
7
+ get: all[name],
8
+ enumerable: true
9
+ });
10
+ }
11
+ if (!no_symbols) {
12
+ __defProp(target, Symbol.toStringTag, { value: "Module" });
13
+ }
14
+ return target;
15
+ };
16
+
17
+ //#endregion
18
+
19
+ exports.__exportAll = __exportAll;
@@ -0,0 +1,18 @@
1
+ //#region \0rolldown/runtime.js
2
+ var __defProp = Object.defineProperty;
3
+ var __exportAll = (all, no_symbols) => {
4
+ let target = {};
5
+ for (var name in all) {
6
+ __defProp(target, name, {
7
+ get: all[name],
8
+ enumerable: true
9
+ });
10
+ }
11
+ if (!no_symbols) {
12
+ __defProp(target, Symbol.toStringTag, { value: "Module" });
13
+ }
14
+ return target;
15
+ };
16
+
17
+ //#endregion
18
+ export { __exportAll };
@@ -0,0 +1,70 @@
1
+
2
+ //#region src/constant.ts
3
+ const FederationModuleManifest = "federation-manifest.json";
4
+ const MANIFEST_EXT = ".json";
5
+ const BROWSER_LOG_KEY = "FEDERATION_DEBUG";
6
+ const NameTransformSymbol = {
7
+ AT: "@",
8
+ HYPHEN: "-",
9
+ SLASH: "/"
10
+ };
11
+ const NameTransformMap = {
12
+ [NameTransformSymbol.AT]: "scope_",
13
+ [NameTransformSymbol.HYPHEN]: "_",
14
+ [NameTransformSymbol.SLASH]: "__"
15
+ };
16
+ const EncodedNameTransformMap = {
17
+ [NameTransformMap[NameTransformSymbol.AT]]: NameTransformSymbol.AT,
18
+ [NameTransformMap[NameTransformSymbol.HYPHEN]]: NameTransformSymbol.HYPHEN,
19
+ [NameTransformMap[NameTransformSymbol.SLASH]]: NameTransformSymbol.SLASH
20
+ };
21
+ const SEPARATOR = ":";
22
+ const ManifestFileName = "mf-manifest.json";
23
+ const StatsFileName = "mf-stats.json";
24
+ const MFModuleType = {
25
+ NPM: "npm",
26
+ APP: "app"
27
+ };
28
+ const MODULE_DEVTOOL_IDENTIFIER = "__MF_DEVTOOLS_MODULE_INFO__";
29
+ const ENCODE_NAME_PREFIX = "ENCODE_NAME_PREFIX";
30
+ const TEMP_DIR = ".federation";
31
+ const MFPrefetchCommon = {
32
+ identifier: "MFDataPrefetch",
33
+ globalKey: "__PREFETCH__",
34
+ library: "mf-data-prefetch",
35
+ exportsKey: "__PREFETCH_EXPORTS__",
36
+ fileName: "bootstrap.js"
37
+ };
38
+ let TreeShakingStatus = /* @__PURE__ */ function(TreeShakingStatus) {
39
+ /**
40
+ * Not handled by deploy server, needs to infer by the real runtime period.
41
+ */
42
+ TreeShakingStatus[TreeShakingStatus["UNKNOWN"] = 1] = "UNKNOWN";
43
+ /**
44
+ * It means the shared has been calculated , runtime should take this shared as first choice.
45
+ */
46
+ TreeShakingStatus[TreeShakingStatus["CALCULATED"] = 2] = "CALCULATED";
47
+ /**
48
+ * It means the shared has been calculated, and marked as no used
49
+ */
50
+ TreeShakingStatus[TreeShakingStatus["NO_USE"] = 0] = "NO_USE";
51
+ return TreeShakingStatus;
52
+ }({});
53
+
54
+ //#endregion
55
+ exports.BROWSER_LOG_KEY = BROWSER_LOG_KEY;
56
+ exports.ENCODE_NAME_PREFIX = ENCODE_NAME_PREFIX;
57
+ exports.EncodedNameTransformMap = EncodedNameTransformMap;
58
+ exports.FederationModuleManifest = FederationModuleManifest;
59
+ exports.MANIFEST_EXT = MANIFEST_EXT;
60
+ exports.MFModuleType = MFModuleType;
61
+ exports.MFPrefetchCommon = MFPrefetchCommon;
62
+ exports.MODULE_DEVTOOL_IDENTIFIER = MODULE_DEVTOOL_IDENTIFIER;
63
+ exports.ManifestFileName = ManifestFileName;
64
+ exports.NameTransformMap = NameTransformMap;
65
+ exports.NameTransformSymbol = NameTransformSymbol;
66
+ exports.SEPARATOR = SEPARATOR;
67
+ exports.StatsFileName = StatsFileName;
68
+ exports.TEMP_DIR = TEMP_DIR;
69
+ exports.TreeShakingStatus = TreeShakingStatus;
70
+ //# sourceMappingURL=constant.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constant.cjs","names":[],"sources":["../src/constant.ts"],"sourcesContent":["export const FederationModuleManifest = 'federation-manifest.json';\nexport const MANIFEST_EXT = '.json';\n\nexport const BROWSER_LOG_KEY = 'FEDERATION_DEBUG';\n\nexport const NameTransformSymbol = {\n AT: '@',\n HYPHEN: '-',\n SLASH: '/',\n} as const;\nexport const NameTransformMap = {\n [NameTransformSymbol.AT]: 'scope_',\n [NameTransformSymbol.HYPHEN]: '_',\n [NameTransformSymbol.SLASH]: '__',\n} as const;\n\nexport const EncodedNameTransformMap = {\n [NameTransformMap[NameTransformSymbol.AT]]: NameTransformSymbol.AT,\n [NameTransformMap[NameTransformSymbol.HYPHEN]]: NameTransformSymbol.HYPHEN,\n [NameTransformMap[NameTransformSymbol.SLASH]]: NameTransformSymbol.SLASH,\n};\n\nexport const SEPARATOR = ':';\n\nexport const ManifestFileName = 'mf-manifest.json';\nexport const StatsFileName = 'mf-stats.json';\n\nexport const MFModuleType = {\n NPM: 'npm',\n APP: 'app',\n};\n\nexport const MODULE_DEVTOOL_IDENTIFIER = '__MF_DEVTOOLS_MODULE_INFO__';\nexport const ENCODE_NAME_PREFIX = 'ENCODE_NAME_PREFIX';\nexport const TEMP_DIR = '.federation';\n\nexport const MFPrefetchCommon = {\n identifier: 'MFDataPrefetch',\n globalKey: '__PREFETCH__',\n library: 'mf-data-prefetch',\n exportsKey: '__PREFETCH_EXPORTS__',\n fileName: 'bootstrap.js',\n};\n\nexport const enum TreeShakingStatus {\n /**\n * Not handled by deploy server, needs to infer by the real runtime period.\n */\n UNKNOWN = 1,\n /**\n * It means the shared has been calculated , runtime should take this shared as first choice.\n */\n CALCULATED = 2,\n /**\n * It means the shared has been calculated, and marked as no used\n */\n NO_USE = 0,\n}\n"],"mappings":";;AAAA,MAAa,2BAA2B;AACxC,MAAa,eAAe;AAE5B,MAAa,kBAAkB;AAE/B,MAAa,sBAAsB;CACjC,IAAI;CACJ,QAAQ;CACR,OAAO;CACR;AACD,MAAa,mBAAmB;EAC7B,oBAAoB,KAAK;EACzB,oBAAoB,SAAS;EAC7B,oBAAoB,QAAQ;CAC9B;AAED,MAAa,0BAA0B;EACpC,iBAAiB,oBAAoB,MAAM,oBAAoB;EAC/D,iBAAiB,oBAAoB,UAAU,oBAAoB;EACnE,iBAAiB,oBAAoB,SAAS,oBAAoB;CACpE;AAED,MAAa,YAAY;AAEzB,MAAa,mBAAmB;AAChC,MAAa,gBAAgB;AAE7B,MAAa,eAAe;CAC1B,KAAK;CACL,KAAK;CACN;AAED,MAAa,4BAA4B;AACzC,MAAa,qBAAqB;AAClC,MAAa,WAAW;AAExB,MAAa,mBAAmB;CAC9B,YAAY;CACZ,WAAW;CACX,SAAS;CACT,YAAY;CACZ,UAAU;CACX;AAED,IAAkB,gEAAX;;;;AAIL;;;;AAIA;;;;AAIA"}
@@ -0,0 +1,53 @@
1
+ //#region src/constant.d.ts
2
+ declare const FederationModuleManifest = "federation-manifest.json";
3
+ declare const MANIFEST_EXT = ".json";
4
+ declare const BROWSER_LOG_KEY = "FEDERATION_DEBUG";
5
+ declare const NameTransformSymbol: {
6
+ readonly AT: "@";
7
+ readonly HYPHEN: "-";
8
+ readonly SLASH: "/";
9
+ };
10
+ declare const NameTransformMap: {
11
+ readonly "@": "scope_";
12
+ readonly "-": "_";
13
+ readonly "/": "__";
14
+ };
15
+ declare const EncodedNameTransformMap: {
16
+ scope_: "@";
17
+ _: "-";
18
+ __: "/";
19
+ };
20
+ declare const SEPARATOR = ":";
21
+ declare const ManifestFileName = "mf-manifest.json";
22
+ declare const StatsFileName = "mf-stats.json";
23
+ declare const MFModuleType: {
24
+ NPM: string;
25
+ APP: string;
26
+ };
27
+ declare const MODULE_DEVTOOL_IDENTIFIER = "__MF_DEVTOOLS_MODULE_INFO__";
28
+ declare const ENCODE_NAME_PREFIX = "ENCODE_NAME_PREFIX";
29
+ declare const TEMP_DIR = ".federation";
30
+ declare const MFPrefetchCommon: {
31
+ identifier: string;
32
+ globalKey: string;
33
+ library: string;
34
+ exportsKey: string;
35
+ fileName: string;
36
+ };
37
+ declare const enum TreeShakingStatus {
38
+ /**
39
+ * Not handled by deploy server, needs to infer by the real runtime period.
40
+ */
41
+ UNKNOWN = 1,
42
+ /**
43
+ * It means the shared has been calculated , runtime should take this shared as first choice.
44
+ */
45
+ CALCULATED = 2,
46
+ /**
47
+ * It means the shared has been calculated, and marked as no used
48
+ */
49
+ NO_USE = 0
50
+ }
51
+ //#endregion
52
+ export { BROWSER_LOG_KEY, ENCODE_NAME_PREFIX, EncodedNameTransformMap, FederationModuleManifest, MANIFEST_EXT, MFModuleType, MFPrefetchCommon, MODULE_DEVTOOL_IDENTIFIER, ManifestFileName, NameTransformMap, NameTransformSymbol, SEPARATOR, StatsFileName, TEMP_DIR, TreeShakingStatus };
53
+ //# sourceMappingURL=constant.d.ts.map
@@ -0,0 +1,55 @@
1
+ //#region src/constant.ts
2
+ const FederationModuleManifest = "federation-manifest.json";
3
+ const MANIFEST_EXT = ".json";
4
+ const BROWSER_LOG_KEY = "FEDERATION_DEBUG";
5
+ const NameTransformSymbol = {
6
+ AT: "@",
7
+ HYPHEN: "-",
8
+ SLASH: "/"
9
+ };
10
+ const NameTransformMap = {
11
+ [NameTransformSymbol.AT]: "scope_",
12
+ [NameTransformSymbol.HYPHEN]: "_",
13
+ [NameTransformSymbol.SLASH]: "__"
14
+ };
15
+ const EncodedNameTransformMap = {
16
+ [NameTransformMap[NameTransformSymbol.AT]]: NameTransformSymbol.AT,
17
+ [NameTransformMap[NameTransformSymbol.HYPHEN]]: NameTransformSymbol.HYPHEN,
18
+ [NameTransformMap[NameTransformSymbol.SLASH]]: NameTransformSymbol.SLASH
19
+ };
20
+ const SEPARATOR = ":";
21
+ const ManifestFileName = "mf-manifest.json";
22
+ const StatsFileName = "mf-stats.json";
23
+ const MFModuleType = {
24
+ NPM: "npm",
25
+ APP: "app"
26
+ };
27
+ const MODULE_DEVTOOL_IDENTIFIER = "__MF_DEVTOOLS_MODULE_INFO__";
28
+ const ENCODE_NAME_PREFIX = "ENCODE_NAME_PREFIX";
29
+ const TEMP_DIR = ".federation";
30
+ const MFPrefetchCommon = {
31
+ identifier: "MFDataPrefetch",
32
+ globalKey: "__PREFETCH__",
33
+ library: "mf-data-prefetch",
34
+ exportsKey: "__PREFETCH_EXPORTS__",
35
+ fileName: "bootstrap.js"
36
+ };
37
+ let TreeShakingStatus = /* @__PURE__ */ function(TreeShakingStatus) {
38
+ /**
39
+ * Not handled by deploy server, needs to infer by the real runtime period.
40
+ */
41
+ TreeShakingStatus[TreeShakingStatus["UNKNOWN"] = 1] = "UNKNOWN";
42
+ /**
43
+ * It means the shared has been calculated , runtime should take this shared as first choice.
44
+ */
45
+ TreeShakingStatus[TreeShakingStatus["CALCULATED"] = 2] = "CALCULATED";
46
+ /**
47
+ * It means the shared has been calculated, and marked as no used
48
+ */
49
+ TreeShakingStatus[TreeShakingStatus["NO_USE"] = 0] = "NO_USE";
50
+ return TreeShakingStatus;
51
+ }({});
52
+
53
+ //#endregion
54
+ export { BROWSER_LOG_KEY, ENCODE_NAME_PREFIX, EncodedNameTransformMap, FederationModuleManifest, MANIFEST_EXT, MFModuleType, MFPrefetchCommon, MODULE_DEVTOOL_IDENTIFIER, ManifestFileName, NameTransformMap, NameTransformSymbol, SEPARATOR, StatsFileName, TEMP_DIR, TreeShakingStatus };
55
+ //# sourceMappingURL=constant.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constant.js","names":[],"sources":["../src/constant.ts"],"sourcesContent":["export const FederationModuleManifest = 'federation-manifest.json';\nexport const MANIFEST_EXT = '.json';\n\nexport const BROWSER_LOG_KEY = 'FEDERATION_DEBUG';\n\nexport const NameTransformSymbol = {\n AT: '@',\n HYPHEN: '-',\n SLASH: '/',\n} as const;\nexport const NameTransformMap = {\n [NameTransformSymbol.AT]: 'scope_',\n [NameTransformSymbol.HYPHEN]: '_',\n [NameTransformSymbol.SLASH]: '__',\n} as const;\n\nexport const EncodedNameTransformMap = {\n [NameTransformMap[NameTransformSymbol.AT]]: NameTransformSymbol.AT,\n [NameTransformMap[NameTransformSymbol.HYPHEN]]: NameTransformSymbol.HYPHEN,\n [NameTransformMap[NameTransformSymbol.SLASH]]: NameTransformSymbol.SLASH,\n};\n\nexport const SEPARATOR = ':';\n\nexport const ManifestFileName = 'mf-manifest.json';\nexport const StatsFileName = 'mf-stats.json';\n\nexport const MFModuleType = {\n NPM: 'npm',\n APP: 'app',\n};\n\nexport const MODULE_DEVTOOL_IDENTIFIER = '__MF_DEVTOOLS_MODULE_INFO__';\nexport const ENCODE_NAME_PREFIX = 'ENCODE_NAME_PREFIX';\nexport const TEMP_DIR = '.federation';\n\nexport const MFPrefetchCommon = {\n identifier: 'MFDataPrefetch',\n globalKey: '__PREFETCH__',\n library: 'mf-data-prefetch',\n exportsKey: '__PREFETCH_EXPORTS__',\n fileName: 'bootstrap.js',\n};\n\nexport const enum TreeShakingStatus {\n /**\n * Not handled by deploy server, needs to infer by the real runtime period.\n */\n UNKNOWN = 1,\n /**\n * It means the shared has been calculated , runtime should take this shared as first choice.\n */\n CALCULATED = 2,\n /**\n * It means the shared has been calculated, and marked as no used\n */\n NO_USE = 0,\n}\n"],"mappings":";AAAA,MAAa,2BAA2B;AACxC,MAAa,eAAe;AAE5B,MAAa,kBAAkB;AAE/B,MAAa,sBAAsB;CACjC,IAAI;CACJ,QAAQ;CACR,OAAO;CACR;AACD,MAAa,mBAAmB;EAC7B,oBAAoB,KAAK;EACzB,oBAAoB,SAAS;EAC7B,oBAAoB,QAAQ;CAC9B;AAED,MAAa,0BAA0B;EACpC,iBAAiB,oBAAoB,MAAM,oBAAoB;EAC/D,iBAAiB,oBAAoB,UAAU,oBAAoB;EACnE,iBAAiB,oBAAoB,SAAS,oBAAoB;CACpE;AAED,MAAa,YAAY;AAEzB,MAAa,mBAAmB;AAChC,MAAa,gBAAgB;AAE7B,MAAa,eAAe;CAC1B,KAAK;CACL,KAAK;CACN;AAED,MAAa,4BAA4B;AACzC,MAAa,qBAAqB;AAClC,MAAa,WAAW;AAExB,MAAa,mBAAmB;CAC9B,YAAY;CACZ,WAAW;CACX,SAAS;CACT,YAAY;CACZ,UAAU;CACX;AAED,IAAkB,gEAAX;;;;AAIL;;;;AAIA;;;;AAIA"}
@@ -0,0 +1,9 @@
1
+
2
+ //#region src/createModuleFederationConfig.ts
3
+ const createModuleFederationConfig = (options) => {
4
+ return options;
5
+ };
6
+
7
+ //#endregion
8
+ exports.createModuleFederationConfig = createModuleFederationConfig;
9
+ //# sourceMappingURL=createModuleFederationConfig.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createModuleFederationConfig.cjs","names":[],"sources":["../src/createModuleFederationConfig.ts"],"sourcesContent":["import type { moduleFederationPlugin } from './types/plugins';\n\nexport const createModuleFederationConfig = (\n options: moduleFederationPlugin.ModuleFederationPluginOptions,\n): moduleFederationPlugin.ModuleFederationPluginOptions => {\n return options;\n};\n"],"mappings":";;AAEA,MAAa,gCACX,YACyD;AACzD,QAAO"}
@@ -0,0 +1,8 @@
1
+ import { ModuleFederationPluginOptions } from "./types/plugins/ModuleFederationPlugin.js";
2
+ import "./types/plugins/index.js";
3
+
4
+ //#region src/createModuleFederationConfig.d.ts
5
+ declare const createModuleFederationConfig: (options: ModuleFederationPluginOptions) => ModuleFederationPluginOptions;
6
+ //#endregion
7
+ export { createModuleFederationConfig };
8
+ //# sourceMappingURL=createModuleFederationConfig.d.ts.map
@@ -0,0 +1,8 @@
1
+ //#region src/createModuleFederationConfig.ts
2
+ const createModuleFederationConfig = (options) => {
3
+ return options;
4
+ };
5
+
6
+ //#endregion
7
+ export { createModuleFederationConfig };
8
+ //# sourceMappingURL=createModuleFederationConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createModuleFederationConfig.js","names":[],"sources":["../src/createModuleFederationConfig.ts"],"sourcesContent":["import type { moduleFederationPlugin } from './types/plugins';\n\nexport const createModuleFederationConfig = (\n options: moduleFederationPlugin.ModuleFederationPluginOptions,\n): moduleFederationPlugin.ModuleFederationPluginOptions => {\n return options;\n};\n"],"mappings":";AAEA,MAAa,gCACX,YACyD;AACzD,QAAO"}
package/dist/dom.cjs ADDED
@@ -0,0 +1,166 @@
1
+ const require_utils = require('./utils.cjs');
2
+
3
+ //#region src/dom.ts
4
+ async function safeWrapper(callback, disableWarn) {
5
+ try {
6
+ return await callback();
7
+ } catch (e) {
8
+ !disableWarn && require_utils.warn(e);
9
+ return;
10
+ }
11
+ }
12
+ function isStaticResourcesEqual(url1, url2) {
13
+ const REG_EXP = /^(https?:)?\/\//i;
14
+ return url1.replace(REG_EXP, "").replace(/\/$/, "") === url2.replace(REG_EXP, "").replace(/\/$/, "");
15
+ }
16
+ function createScript(info) {
17
+ let script = null;
18
+ let needAttach = true;
19
+ let timeout = 2e4;
20
+ let timeoutId;
21
+ const scripts = document.getElementsByTagName("script");
22
+ for (let i = 0; i < scripts.length; i++) {
23
+ const s = scripts[i];
24
+ const scriptSrc = s.getAttribute("src");
25
+ if (scriptSrc && isStaticResourcesEqual(scriptSrc, info.url)) {
26
+ script = s;
27
+ needAttach = false;
28
+ break;
29
+ }
30
+ }
31
+ if (!script) {
32
+ const attrs = info.attrs;
33
+ script = document.createElement("script");
34
+ script.type = attrs?.["type"] === "module" ? "module" : "text/javascript";
35
+ let createScriptRes = void 0;
36
+ if (info.createScriptHook) {
37
+ createScriptRes = info.createScriptHook(info.url, info.attrs);
38
+ if (createScriptRes instanceof HTMLScriptElement) script = createScriptRes;
39
+ else if (typeof createScriptRes === "object") {
40
+ if ("script" in createScriptRes && createScriptRes.script) script = createScriptRes.script;
41
+ if ("timeout" in createScriptRes && createScriptRes.timeout) timeout = createScriptRes.timeout;
42
+ }
43
+ }
44
+ if (!script.src) script.src = info.url;
45
+ if (attrs && !createScriptRes) Object.keys(attrs).forEach((name) => {
46
+ if (script) {
47
+ if (name === "async" || name === "defer") script[name] = attrs[name];
48
+ else if (!script.getAttribute(name)) script.setAttribute(name, attrs[name]);
49
+ }
50
+ });
51
+ }
52
+ const onScriptComplete = async (prev, event) => {
53
+ clearTimeout(timeoutId);
54
+ const onScriptCompleteCallback = () => {
55
+ if (event?.type === "error") info?.onErrorCallback && info?.onErrorCallback(event);
56
+ else info?.cb && info?.cb();
57
+ };
58
+ if (script) {
59
+ script.onerror = null;
60
+ script.onload = null;
61
+ safeWrapper(() => {
62
+ const { needDeleteScript = true } = info;
63
+ if (needDeleteScript) script?.parentNode && script.parentNode.removeChild(script);
64
+ });
65
+ if (prev && typeof prev === "function") {
66
+ const result = prev(event);
67
+ if (result instanceof Promise) {
68
+ const res = await result;
69
+ onScriptCompleteCallback();
70
+ return res;
71
+ }
72
+ onScriptCompleteCallback();
73
+ return result;
74
+ }
75
+ }
76
+ onScriptCompleteCallback();
77
+ };
78
+ script.onerror = onScriptComplete.bind(null, script.onerror);
79
+ script.onload = onScriptComplete.bind(null, script.onload);
80
+ timeoutId = setTimeout(() => {
81
+ onScriptComplete(null, /* @__PURE__ */ new Error(`Remote script "${info.url}" time-outed.`));
82
+ }, timeout);
83
+ return {
84
+ script,
85
+ needAttach
86
+ };
87
+ }
88
+ function createLink(info) {
89
+ let link = null;
90
+ let needAttach = true;
91
+ const links = document.getElementsByTagName("link");
92
+ for (let i = 0; i < links.length; i++) {
93
+ const l = links[i];
94
+ const linkHref = l.getAttribute("href");
95
+ const linkRel = l.getAttribute("rel");
96
+ if (linkHref && isStaticResourcesEqual(linkHref, info.url) && linkRel === info.attrs["rel"]) {
97
+ link = l;
98
+ needAttach = false;
99
+ break;
100
+ }
101
+ }
102
+ if (!link) {
103
+ link = document.createElement("link");
104
+ link.setAttribute("href", info.url);
105
+ let createLinkRes = void 0;
106
+ const attrs = info.attrs;
107
+ if (info.createLinkHook) {
108
+ createLinkRes = info.createLinkHook(info.url, attrs);
109
+ if (createLinkRes instanceof HTMLLinkElement) link = createLinkRes;
110
+ }
111
+ if (attrs && !createLinkRes) Object.keys(attrs).forEach((name) => {
112
+ if (link && !link.getAttribute(name)) link.setAttribute(name, attrs[name]);
113
+ });
114
+ }
115
+ const onLinkComplete = (prev, event) => {
116
+ const onLinkCompleteCallback = () => {
117
+ if (event?.type === "error") info?.onErrorCallback && info?.onErrorCallback(event);
118
+ else info?.cb && info?.cb();
119
+ };
120
+ if (link) {
121
+ link.onerror = null;
122
+ link.onload = null;
123
+ safeWrapper(() => {
124
+ const { needDeleteLink = true } = info;
125
+ if (needDeleteLink) link?.parentNode && link.parentNode.removeChild(link);
126
+ });
127
+ if (prev) {
128
+ const res = prev(event);
129
+ onLinkCompleteCallback();
130
+ return res;
131
+ }
132
+ }
133
+ onLinkCompleteCallback();
134
+ };
135
+ link.onerror = onLinkComplete.bind(null, link.onerror);
136
+ link.onload = onLinkComplete.bind(null, link.onload);
137
+ return {
138
+ link,
139
+ needAttach
140
+ };
141
+ }
142
+ function loadScript(url, info) {
143
+ const { attrs = {}, createScriptHook } = info;
144
+ return new Promise((resolve, reject) => {
145
+ const { script, needAttach } = createScript({
146
+ url,
147
+ cb: resolve,
148
+ onErrorCallback: reject,
149
+ attrs: {
150
+ fetchpriority: "high",
151
+ ...attrs
152
+ },
153
+ createScriptHook,
154
+ needDeleteScript: true
155
+ });
156
+ needAttach && document.head.appendChild(script);
157
+ });
158
+ }
159
+
160
+ //#endregion
161
+ exports.createLink = createLink;
162
+ exports.createScript = createScript;
163
+ exports.isStaticResourcesEqual = isStaticResourcesEqual;
164
+ exports.loadScript = loadScript;
165
+ exports.safeWrapper = safeWrapper;
166
+ //# sourceMappingURL=dom.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dom.cjs","names":["warn"],"sources":["../src/dom.ts"],"sourcesContent":["import type { CreateScriptHookDom, CreateScriptHookReturnDom } from './types';\nimport { warn } from './utils';\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport async function safeWrapper<T extends (...args: Array<any>) => any>(\n callback: T,\n disableWarn?: boolean,\n): Promise<ReturnType<T> | undefined> {\n try {\n const res = await callback();\n return res;\n } catch (e) {\n !disableWarn && warn(e);\n return;\n }\n}\n\nexport function isStaticResourcesEqual(url1: string, url2: string): boolean {\n const REG_EXP = /^(https?:)?\\/\\//i;\n // Transform url1 and url2 into relative paths\n const relativeUrl1 = url1.replace(REG_EXP, '').replace(/\\/$/, '');\n const relativeUrl2 = url2.replace(REG_EXP, '').replace(/\\/$/, '');\n // Check if the relative paths are identical\n return relativeUrl1 === relativeUrl2;\n}\n\nexport function createScript(info: {\n url: string;\n cb?: (value: void | PromiseLike<void>) => void;\n onErrorCallback?: (error: Error) => void;\n attrs?: Record<string, any>;\n needDeleteScript?: boolean;\n createScriptHook?: CreateScriptHookDom;\n}): { script: HTMLScriptElement; needAttach: boolean } {\n // Retrieve the existing script element by its src attribute\n let script: HTMLScriptElement | null = null;\n let needAttach = true;\n let timeout = 20000;\n let timeoutId: NodeJS.Timeout;\n const scripts = document.getElementsByTagName('script');\n\n for (let i = 0; i < scripts.length; i++) {\n const s = scripts[i];\n const scriptSrc = s.getAttribute('src');\n if (scriptSrc && isStaticResourcesEqual(scriptSrc, info.url)) {\n script = s;\n needAttach = false;\n break;\n }\n }\n\n if (!script) {\n const attrs = info.attrs;\n script = document.createElement('script');\n script.type = attrs?.['type'] === 'module' ? 'module' : 'text/javascript';\n let createScriptRes: CreateScriptHookReturnDom = undefined;\n if (info.createScriptHook) {\n createScriptRes = info.createScriptHook(info.url, info.attrs);\n\n if (createScriptRes instanceof HTMLScriptElement) {\n script = createScriptRes;\n } else if (typeof createScriptRes === 'object') {\n if ('script' in createScriptRes && createScriptRes.script) {\n script = createScriptRes.script;\n }\n if ('timeout' in createScriptRes && createScriptRes.timeout) {\n timeout = createScriptRes.timeout;\n }\n }\n }\n if (!script.src) {\n script.src = info.url;\n }\n if (attrs && !createScriptRes) {\n Object.keys(attrs).forEach((name) => {\n if (script) {\n if (name === 'async' || name === 'defer') {\n script[name] = attrs[name];\n // Attributes that do not exist are considered overridden\n } else if (!script.getAttribute(name)) {\n script.setAttribute(name, attrs[name]);\n }\n }\n });\n }\n }\n\n const onScriptComplete = async (\n prev: OnErrorEventHandler | GlobalEventHandlers['onload'] | null,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n event: any,\n ): Promise<void> => {\n clearTimeout(timeoutId);\n const onScriptCompleteCallback = () => {\n if (event?.type === 'error') {\n info?.onErrorCallback && info?.onErrorCallback(event);\n } else {\n info?.cb && info?.cb();\n }\n };\n\n // Prevent memory leaks in IE.\n if (script) {\n script.onerror = null;\n script.onload = null;\n safeWrapper(() => {\n const { needDeleteScript = true } = info;\n if (needDeleteScript) {\n script?.parentNode && script.parentNode.removeChild(script);\n }\n });\n if (prev && typeof prev === 'function') {\n const result = (prev as any)(event);\n if (result instanceof Promise) {\n const res = await result;\n onScriptCompleteCallback();\n return res;\n }\n onScriptCompleteCallback();\n return result;\n }\n }\n onScriptCompleteCallback();\n };\n\n script.onerror = onScriptComplete.bind(null, script.onerror);\n script.onload = onScriptComplete.bind(null, script.onload);\n\n timeoutId = setTimeout(() => {\n onScriptComplete(\n null,\n new Error(`Remote script \"${info.url}\" time-outed.`),\n );\n }, timeout);\n\n return { script, needAttach };\n}\n\nexport function createLink(info: {\n url: string;\n cb?: (value: void | PromiseLike<void>) => void;\n onErrorCallback?: (error: Error) => void;\n attrs: Record<string, string>;\n needDeleteLink?: boolean;\n createLinkHook?: (\n url: string,\n attrs?: Record<string, any>,\n ) => HTMLLinkElement | void;\n}) {\n // <link rel=\"preload\" href=\"script.js\" as=\"script\">\n\n // Retrieve the existing script element by its src attribute\n let link: HTMLLinkElement | null = null;\n let needAttach = true;\n const links = document.getElementsByTagName('link');\n for (let i = 0; i < links.length; i++) {\n const l = links[i];\n const linkHref = l.getAttribute('href');\n const linkRel = l.getAttribute('rel');\n if (\n linkHref &&\n isStaticResourcesEqual(linkHref, info.url) &&\n linkRel === info.attrs['rel']\n ) {\n link = l;\n needAttach = false;\n break;\n }\n }\n\n if (!link) {\n link = document.createElement('link');\n link.setAttribute('href', info.url);\n\n let createLinkRes: void | HTMLLinkElement = undefined;\n const attrs = info.attrs;\n\n if (info.createLinkHook) {\n createLinkRes = info.createLinkHook(info.url, attrs);\n if (createLinkRes instanceof HTMLLinkElement) {\n link = createLinkRes;\n }\n }\n\n if (attrs && !createLinkRes) {\n Object.keys(attrs).forEach((name) => {\n if (link && !link.getAttribute(name)) {\n link.setAttribute(name, attrs[name]);\n }\n });\n }\n }\n\n const onLinkComplete = (\n prev: OnErrorEventHandler | GlobalEventHandlers['onload'] | null,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n event: any,\n ): void => {\n const onLinkCompleteCallback = () => {\n if (event?.type === 'error') {\n info?.onErrorCallback && info?.onErrorCallback(event);\n } else {\n info?.cb && info?.cb();\n }\n };\n // Prevent memory leaks in IE.\n if (link) {\n link.onerror = null;\n link.onload = null;\n safeWrapper(() => {\n const { needDeleteLink = true } = info;\n if (needDeleteLink) {\n link?.parentNode && link.parentNode.removeChild(link);\n }\n });\n if (prev) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const res = (prev as any)(event);\n onLinkCompleteCallback();\n return res;\n }\n }\n onLinkCompleteCallback();\n };\n\n link.onerror = onLinkComplete.bind(null, link.onerror);\n link.onload = onLinkComplete.bind(null, link.onload);\n\n return { link, needAttach };\n}\n\nexport function loadScript(\n url: string,\n info: {\n attrs?: Record<string, any>;\n createScriptHook?: CreateScriptHookDom;\n },\n) {\n const { attrs = {}, createScriptHook } = info;\n return new Promise<void>((resolve, reject) => {\n const { script, needAttach } = createScript({\n url,\n cb: resolve,\n onErrorCallback: reject,\n attrs: {\n fetchpriority: 'high',\n ...attrs,\n },\n createScriptHook,\n needDeleteScript: true,\n });\n needAttach && document.head.appendChild(script);\n });\n}\n"],"mappings":"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"}
package/dist/dom.d.ts ADDED
@@ -0,0 +1,35 @@
1
+ import { CreateScriptHookDom } from "./types/hooks.js";
2
+ import "./types/index.js";
3
+
4
+ //#region src/dom.d.ts
5
+ declare function safeWrapper<T extends (...args: Array<any>) => any>(callback: T, disableWarn?: boolean): Promise<ReturnType<T> | undefined>;
6
+ declare function isStaticResourcesEqual(url1: string, url2: string): boolean;
7
+ declare function createScript(info: {
8
+ url: string;
9
+ cb?: (value: void | PromiseLike<void>) => void;
10
+ onErrorCallback?: (error: Error) => void;
11
+ attrs?: Record<string, any>;
12
+ needDeleteScript?: boolean;
13
+ createScriptHook?: CreateScriptHookDom;
14
+ }): {
15
+ script: HTMLScriptElement;
16
+ needAttach: boolean;
17
+ };
18
+ declare function createLink(info: {
19
+ url: string;
20
+ cb?: (value: void | PromiseLike<void>) => void;
21
+ onErrorCallback?: (error: Error) => void;
22
+ attrs: Record<string, string>;
23
+ needDeleteLink?: boolean;
24
+ createLinkHook?: (url: string, attrs?: Record<string, any>) => HTMLLinkElement | void;
25
+ }): {
26
+ link: HTMLLinkElement;
27
+ needAttach: boolean;
28
+ };
29
+ declare function loadScript(url: string, info: {
30
+ attrs?: Record<string, any>;
31
+ createScriptHook?: CreateScriptHookDom;
32
+ }): Promise<void>;
33
+ //#endregion
34
+ export { createLink, createScript, isStaticResourcesEqual, loadScript, safeWrapper };
35
+ //# sourceMappingURL=dom.d.ts.map
package/dist/dom.js ADDED
@@ -0,0 +1,162 @@
1
+ import { warn } from "./utils.js";
2
+
3
+ //#region src/dom.ts
4
+ async function safeWrapper(callback, disableWarn) {
5
+ try {
6
+ return await callback();
7
+ } catch (e) {
8
+ !disableWarn && warn(e);
9
+ return;
10
+ }
11
+ }
12
+ function isStaticResourcesEqual(url1, url2) {
13
+ const REG_EXP = /^(https?:)?\/\//i;
14
+ return url1.replace(REG_EXP, "").replace(/\/$/, "") === url2.replace(REG_EXP, "").replace(/\/$/, "");
15
+ }
16
+ function createScript(info) {
17
+ let script = null;
18
+ let needAttach = true;
19
+ let timeout = 2e4;
20
+ let timeoutId;
21
+ const scripts = document.getElementsByTagName("script");
22
+ for (let i = 0; i < scripts.length; i++) {
23
+ const s = scripts[i];
24
+ const scriptSrc = s.getAttribute("src");
25
+ if (scriptSrc && isStaticResourcesEqual(scriptSrc, info.url)) {
26
+ script = s;
27
+ needAttach = false;
28
+ break;
29
+ }
30
+ }
31
+ if (!script) {
32
+ const attrs = info.attrs;
33
+ script = document.createElement("script");
34
+ script.type = attrs?.["type"] === "module" ? "module" : "text/javascript";
35
+ let createScriptRes = void 0;
36
+ if (info.createScriptHook) {
37
+ createScriptRes = info.createScriptHook(info.url, info.attrs);
38
+ if (createScriptRes instanceof HTMLScriptElement) script = createScriptRes;
39
+ else if (typeof createScriptRes === "object") {
40
+ if ("script" in createScriptRes && createScriptRes.script) script = createScriptRes.script;
41
+ if ("timeout" in createScriptRes && createScriptRes.timeout) timeout = createScriptRes.timeout;
42
+ }
43
+ }
44
+ if (!script.src) script.src = info.url;
45
+ if (attrs && !createScriptRes) Object.keys(attrs).forEach((name) => {
46
+ if (script) {
47
+ if (name === "async" || name === "defer") script[name] = attrs[name];
48
+ else if (!script.getAttribute(name)) script.setAttribute(name, attrs[name]);
49
+ }
50
+ });
51
+ }
52
+ const onScriptComplete = async (prev, event) => {
53
+ clearTimeout(timeoutId);
54
+ const onScriptCompleteCallback = () => {
55
+ if (event?.type === "error") info?.onErrorCallback && info?.onErrorCallback(event);
56
+ else info?.cb && info?.cb();
57
+ };
58
+ if (script) {
59
+ script.onerror = null;
60
+ script.onload = null;
61
+ safeWrapper(() => {
62
+ const { needDeleteScript = true } = info;
63
+ if (needDeleteScript) script?.parentNode && script.parentNode.removeChild(script);
64
+ });
65
+ if (prev && typeof prev === "function") {
66
+ const result = prev(event);
67
+ if (result instanceof Promise) {
68
+ const res = await result;
69
+ onScriptCompleteCallback();
70
+ return res;
71
+ }
72
+ onScriptCompleteCallback();
73
+ return result;
74
+ }
75
+ }
76
+ onScriptCompleteCallback();
77
+ };
78
+ script.onerror = onScriptComplete.bind(null, script.onerror);
79
+ script.onload = onScriptComplete.bind(null, script.onload);
80
+ timeoutId = setTimeout(() => {
81
+ onScriptComplete(null, /* @__PURE__ */ new Error(`Remote script "${info.url}" time-outed.`));
82
+ }, timeout);
83
+ return {
84
+ script,
85
+ needAttach
86
+ };
87
+ }
88
+ function createLink(info) {
89
+ let link = null;
90
+ let needAttach = true;
91
+ const links = document.getElementsByTagName("link");
92
+ for (let i = 0; i < links.length; i++) {
93
+ const l = links[i];
94
+ const linkHref = l.getAttribute("href");
95
+ const linkRel = l.getAttribute("rel");
96
+ if (linkHref && isStaticResourcesEqual(linkHref, info.url) && linkRel === info.attrs["rel"]) {
97
+ link = l;
98
+ needAttach = false;
99
+ break;
100
+ }
101
+ }
102
+ if (!link) {
103
+ link = document.createElement("link");
104
+ link.setAttribute("href", info.url);
105
+ let createLinkRes = void 0;
106
+ const attrs = info.attrs;
107
+ if (info.createLinkHook) {
108
+ createLinkRes = info.createLinkHook(info.url, attrs);
109
+ if (createLinkRes instanceof HTMLLinkElement) link = createLinkRes;
110
+ }
111
+ if (attrs && !createLinkRes) Object.keys(attrs).forEach((name) => {
112
+ if (link && !link.getAttribute(name)) link.setAttribute(name, attrs[name]);
113
+ });
114
+ }
115
+ const onLinkComplete = (prev, event) => {
116
+ const onLinkCompleteCallback = () => {
117
+ if (event?.type === "error") info?.onErrorCallback && info?.onErrorCallback(event);
118
+ else info?.cb && info?.cb();
119
+ };
120
+ if (link) {
121
+ link.onerror = null;
122
+ link.onload = null;
123
+ safeWrapper(() => {
124
+ const { needDeleteLink = true } = info;
125
+ if (needDeleteLink) link?.parentNode && link.parentNode.removeChild(link);
126
+ });
127
+ if (prev) {
128
+ const res = prev(event);
129
+ onLinkCompleteCallback();
130
+ return res;
131
+ }
132
+ }
133
+ onLinkCompleteCallback();
134
+ };
135
+ link.onerror = onLinkComplete.bind(null, link.onerror);
136
+ link.onload = onLinkComplete.bind(null, link.onload);
137
+ return {
138
+ link,
139
+ needAttach
140
+ };
141
+ }
142
+ function loadScript(url, info) {
143
+ const { attrs = {}, createScriptHook } = info;
144
+ return new Promise((resolve, reject) => {
145
+ const { script, needAttach } = createScript({
146
+ url,
147
+ cb: resolve,
148
+ onErrorCallback: reject,
149
+ attrs: {
150
+ fetchpriority: "high",
151
+ ...attrs
152
+ },
153
+ createScriptHook,
154
+ needDeleteScript: true
155
+ });
156
+ needAttach && document.head.appendChild(script);
157
+ });
158
+ }
159
+
160
+ //#endregion
161
+ export { createLink, createScript, isStaticResourcesEqual, loadScript, safeWrapper };
162
+ //# sourceMappingURL=dom.js.map