everything-dev 1.14.0 → 1.14.3

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 (56) hide show
  1. package/dist/cli/upgrade.cjs +2 -1
  2. package/dist/cli/upgrade.cjs.map +1 -1
  3. package/dist/cli/upgrade.mjs +2 -1
  4. package/dist/cli/upgrade.mjs.map +1 -1
  5. package/dist/contract.d.cts +31 -31
  6. package/dist/contract.d.mts +31 -31
  7. package/dist/orchestrator.cjs +0 -1
  8. package/dist/orchestrator.cjs.map +1 -1
  9. package/dist/plugin.cjs +39 -44
  10. package/dist/plugin.cjs.map +1 -1
  11. package/dist/plugin.d.cts +31 -31
  12. package/dist/plugin.d.mts +31 -31
  13. package/dist/plugin.mjs +39 -44
  14. package/dist/plugin.mjs.map +1 -1
  15. package/dist/shared.cjs +0 -10
  16. package/dist/shared.cjs.map +1 -1
  17. package/dist/shared.mjs +1 -9
  18. package/dist/shared.mjs.map +1 -1
  19. package/package.json +4 -30
  20. package/src/cli/upgrade.ts +1 -0
  21. package/src/plugin.ts +57 -49
  22. package/dist/api.cjs +0 -124
  23. package/dist/api.cjs.map +0 -1
  24. package/dist/api.d.cts +0 -36
  25. package/dist/api.d.cts.map +0 -1
  26. package/dist/api.d.mts +0 -36
  27. package/dist/api.d.mts.map +0 -1
  28. package/dist/api.mjs +0 -119
  29. package/dist/api.mjs.map +0 -1
  30. package/dist/federation.server.cjs +0 -27
  31. package/dist/federation.server.cjs.map +0 -1
  32. package/dist/federation.server.mjs +0 -27
  33. package/dist/federation.server.mjs.map +0 -1
  34. package/dist/host.cjs +0 -402
  35. package/dist/host.cjs.map +0 -1
  36. package/dist/host.d.cts +0 -22
  37. package/dist/host.d.cts.map +0 -1
  38. package/dist/host.d.mts +0 -22
  39. package/dist/host.d.mts.map +0 -1
  40. package/dist/host.mjs +0 -399
  41. package/dist/host.mjs.map +0 -1
  42. package/dist/orchestrator.d.cts +0 -44
  43. package/dist/orchestrator.d.cts.map +0 -1
  44. package/dist/orchestrator.d.mts +0 -44
  45. package/dist/orchestrator.d.mts.map +0 -1
  46. package/dist/service-descriptor.d.cts +0 -137
  47. package/dist/service-descriptor.d.cts.map +0 -1
  48. package/dist/service-descriptor.d.mts +0 -137
  49. package/dist/service-descriptor.d.mts.map +0 -1
  50. package/dist/shared.d.cts +0 -36
  51. package/dist/shared.d.cts.map +0 -1
  52. package/dist/shared.d.mts +0 -36
  53. package/dist/shared.d.mts.map +0 -1
  54. package/src/api.ts +0 -181
  55. package/src/federation.server.ts +0 -43
  56. package/src/host.ts +0 -573
@@ -40,6 +40,7 @@ const OBSOLETE_FILES = [
40
40
  "ui/scripts/generate-metadata.ts",
41
41
  ".github/dependabot.yml",
42
42
  ".github/templates/dependabot.yml",
43
+ "packages/everything-dev/cli.js",
43
44
  ];
44
45
 
45
46
  interface NpmPackageInfo {
package/src/plugin.ts CHANGED
@@ -243,20 +243,41 @@ function listPluginAttachments(config: BosConfig | null) {
243
243
  .sort((a, b) => a.key.localeCompare(b.key));
244
244
  }
245
245
 
246
- async function refreshApiContractBridge(
246
+ interface GeneratedArtifacts {
247
+ sidebarPath: string;
248
+ resolvedConfigPath?: string;
249
+ contractBridgePath: string;
250
+ }
251
+
252
+ async function generateCodeArtifacts(
247
253
  configDir: string,
248
- env: "development" | "production" = "development",
249
- ): Promise<void> {
250
- const refreshed = await loadConfig({ cwd: configDir, env });
251
- if (!refreshed) return;
254
+ config: BosConfig,
255
+ opts?: {
256
+ env?: BosEnv;
257
+ extendsChain?: string[];
258
+ runtimeConfig?: RuntimeConfig;
259
+ },
260
+ ): Promise<GeneratedArtifacts | null> {
261
+ writePluginSidebarGen(configDir, config);
262
+
263
+ if (opts?.env) {
264
+ writeResolvedConfig(configDir, config, opts.env, opts.extendsChain);
265
+ }
266
+
267
+ const runtimeConfig = opts?.runtimeConfig ?? (await loadConfig({ cwd: configDir }))?.runtime;
268
+ if (!runtimeConfig) return null;
252
269
 
253
- await syncApiContractBridge({
270
+ const bridge = await syncApiContractBridge({
254
271
  configDir,
255
- runtimeConfig: refreshed.runtime,
256
- apiBaseUrl: refreshed.runtime.api.url,
272
+ runtimeConfig,
273
+ apiBaseUrl: runtimeConfig.api.url,
257
274
  });
258
275
 
259
- writePluginSidebarGen(configDir, refreshed.config);
276
+ return {
277
+ sidebarPath: join(configDir, "ui/src/lib/plugin-sidebar.gen.ts"),
278
+ resolvedConfigPath: opts?.env ? join(configDir, ".bos/bos.resolved-config.json") : undefined,
279
+ contractBridgePath: bridge.bridgePath,
280
+ };
260
281
  }
261
282
 
262
283
  function extractPublishedUrl(output: string): string | null {
@@ -512,7 +533,7 @@ export default createPlugin({
512
533
  };
513
534
 
514
535
  await saveBosConfig(deps.configDir, deps.bosConfig);
515
- await refreshApiContractBridge(deps.configDir);
536
+ await generateCodeArtifacts(deps.configDir, deps.bosConfig);
516
537
 
517
538
  const stored = deps.bosConfig.plugins?.[key];
518
539
  const storedObj = stored && typeof stored === "object" ? stored : {};
@@ -552,7 +573,7 @@ export default createPlugin({
552
573
  };
553
574
 
554
575
  await saveBosConfig(deps.configDir, deps.bosConfig);
555
- await refreshApiContractBridge(deps.configDir);
576
+ await generateCodeArtifacts(deps.configDir, deps.bosConfig);
556
577
 
557
578
  return {
558
579
  status: "removed" as const,
@@ -749,7 +770,7 @@ export default createPlugin({
749
770
  }
750
771
  }
751
772
 
752
- await refreshApiContractBridge(deps.configDir);
773
+ await generateCodeArtifacts(deps.configDir, deps.bosConfig);
753
774
  }
754
775
 
755
776
  return {
@@ -808,16 +829,6 @@ export default createPlugin({
808
829
  deps.bosConfig = refreshed?.config ?? deps.bosConfig;
809
830
  deps.runtimeConfig = refreshed?.runtime ?? deps.runtimeConfig;
810
831
 
811
- if (deps.bosConfig) {
812
- writeResolvedConfig(
813
- deps.configDir,
814
- deps.bosConfig,
815
- "development",
816
- refreshed?.source.extended,
817
- );
818
- writePluginSidebarGen(deps.configDir, deps.bosConfig);
819
- }
820
-
821
832
  if (!deps.bosConfig) {
822
833
  return {
823
834
  status: "error" as const,
@@ -848,6 +859,12 @@ export default createPlugin({
848
859
  ssr,
849
860
  });
850
861
 
862
+ await generateCodeArtifacts(deps.configDir, deps.bosConfig, {
863
+ env: "development",
864
+ extendsChain: refreshed?.source.extended,
865
+ runtimeConfig,
866
+ });
867
+
851
868
  const services = buildServiceDescriptorMap(runtimeConfig, { ssr, proxy });
852
869
  const packages = [...services.keys()];
853
870
  const displayEnv: Record<string, string> = {};
@@ -857,12 +874,6 @@ export default createPlugin({
857
874
  if (proxyUrl) displayEnv.API_PROXY = proxyUrl;
858
875
  }
859
876
 
860
- await syncApiContractBridge({
861
- configDir: deps.configDir,
862
- runtimeConfig: runtimeConfig,
863
- apiBaseUrl: runtimeConfig.api.url,
864
- });
865
-
866
877
  const orchestrator: AppOrchestrator = {
867
878
  packages,
868
879
  env: displayEnv,
@@ -937,7 +948,10 @@ export default createPlugin({
937
948
  plugins: runtimePlugins,
938
949
  });
939
950
 
940
- writePluginSidebarGen(deps.configDir, config);
951
+ await generateCodeArtifacts(deps.configDir, config, {
952
+ env: "production",
953
+ runtimeConfig,
954
+ });
941
955
 
942
956
  // ── Production Readiness Validation ──
943
957
  const productionEnv: Record<string, string> = {};
@@ -979,12 +993,6 @@ export default createPlugin({
979
993
 
980
994
  const services = buildServiceDescriptorMap(runtimeConfig);
981
995
 
982
- await syncApiContractBridge({
983
- configDir: deps.configDir,
984
- runtimeConfig: runtimeConfig,
985
- apiBaseUrl: runtimeConfig.api.url,
986
- });
987
-
988
996
  const stagingEnvVars: Record<string, string> = isStaging
989
997
  ? { BOS_GATEWAY: config.staging?.domain ?? config.domain ?? "" }
990
998
  : {};
@@ -1052,9 +1060,6 @@ export default createPlugin({
1052
1060
 
1053
1061
  const buildEnv: BosEnv = input.deploy ? "production" : "development";
1054
1062
 
1055
- writeResolvedConfig(deps.configDir, deps.bosConfig, buildEnv);
1056
- writePluginSidebarGen(deps.configDir, deps.bosConfig);
1057
-
1058
1063
  const targets = selectWorkspaceTargets(input.packages, deps.bosConfig);
1059
1064
  if (targets.length === 0) {
1060
1065
  return {
@@ -1073,10 +1078,9 @@ export default createPlugin({
1073
1078
  plugins: deps.runtimeConfig?.plugins,
1074
1079
  });
1075
1080
 
1076
- await syncApiContractBridge({
1077
- configDir: deps.configDir,
1081
+ await generateCodeArtifacts(deps.configDir, deps.bosConfig, {
1082
+ env: buildEnv,
1078
1083
  runtimeConfig,
1079
- apiBaseUrl: runtimeConfig.api.url,
1080
1084
  });
1081
1085
 
1082
1086
  const { built, skipped } = await buildWorkspaceTargets({
@@ -1141,6 +1145,11 @@ export default createPlugin({
1141
1145
  }
1142
1146
 
1143
1147
  if (input.deploy) {
1148
+ await generateCodeArtifacts(deps.configDir, deps.bosConfig, {
1149
+ env: "production",
1150
+ runtimeConfig: deps.runtimeConfig ?? undefined,
1151
+ });
1152
+
1144
1153
  const result = await buildWorkspaceTargets({
1145
1154
  configDir: deps.configDir,
1146
1155
  bosConfig: deps.bosConfig,
@@ -1423,7 +1432,7 @@ export default createPlugin({
1423
1432
 
1424
1433
  const initConfig = await loadConfig({ cwd: directory });
1425
1434
  if (initConfig?.config) {
1426
- writePluginSidebarGen(directory, initConfig.config);
1435
+ await generateCodeArtifacts(directory, initConfig.config);
1427
1436
  }
1428
1437
 
1429
1438
  s.stop("Project initialized");
@@ -1480,7 +1489,7 @@ export default createPlugin({
1480
1489
  if (result.status === "synced" || result.status === "dry-run") {
1481
1490
  const syncedConfig = await loadConfig({ cwd: projectDir });
1482
1491
  if (syncedConfig?.config) {
1483
- writePluginSidebarGen(projectDir, syncedConfig.config);
1492
+ await generateCodeArtifacts(projectDir, syncedConfig.config);
1484
1493
  }
1485
1494
  }
1486
1495
 
@@ -1595,13 +1604,12 @@ export default createPlugin({
1595
1604
  };
1596
1605
  }
1597
1606
 
1598
- const result = await syncApiContractBridge({
1599
- configDir: projectDir,
1607
+ await generateCodeArtifacts(projectDir, refreshed.config, {
1600
1608
  runtimeConfig: refreshed.runtime,
1601
- apiBaseUrl: refreshed.runtime.api.url,
1602
1609
  });
1603
1610
 
1604
1611
  const generated = [
1612
+ "ui/src/lib/plugin-sidebar.gen.ts",
1605
1613
  "ui/src/lib/api-types.gen.ts",
1606
1614
  "api/src/lib/plugins-types.gen.ts",
1607
1615
  "api/src/lib/auth-types.gen.ts",
@@ -1619,10 +1627,10 @@ export default createPlugin({
1619
1627
  return {
1620
1628
  status: "success" as const,
1621
1629
  generated,
1622
- fetched: result.source === "remote" ? [refreshed.runtime.api.url] : [],
1623
- skipped: result.source === "local" ? ["api (local)"] : [],
1630
+ fetched: refreshed.runtime.api.source === "remote" ? [refreshed.runtime.api.url] : [],
1631
+ skipped: refreshed.runtime.api.source === "local" ? ["api (local)"] : [],
1624
1632
  failed: [],
1625
- source: result.source,
1633
+ source: refreshed.runtime.api.source,
1626
1634
  };
1627
1635
  } catch (error) {
1628
1636
  return {
package/dist/api.cjs DELETED
@@ -1,124 +0,0 @@
1
- Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
- const require_runtime = require('./_virtual/_rolldown/runtime.cjs');
3
- require('./sdk.cjs');
4
- const require_integrity = require('./integrity.cjs');
5
- const require_mf = require('./mf.cjs');
6
- let every_plugin = require("every-plugin");
7
-
8
- //#region src/api.ts
9
- async function loadApiPlugin(opts) {
10
- const remoteEntryUrl = (() => {
11
- if (opts.entry.endsWith("/remoteEntry.js")) return opts.entry;
12
- if (opts.entry.endsWith("/mf-manifest.json")) return `${opts.entry.replace(/\/mf-manifest\.json$/, "")}/remoteEntry.js`;
13
- if (opts.entry.endsWith(".js")) return opts.entry;
14
- return `${opts.entry.replace(/\/$/, "")}/remoteEntry.js`;
15
- })();
16
- if (opts.integrity) await require_integrity.verifySriForUrl(remoteEntryUrl, opts.integrity);
17
- await require_mf.ensureNodeRuntimePlugin();
18
- await require_mf.registerRemote({
19
- name: opts.runtimeId,
20
- entry: remoteEntryUrl
21
- });
22
- const plugin = await (0, every_plugin.createPluginRuntime)({
23
- registry: { [opts.runtimeId]: { remote: remoteEntryUrl } },
24
- secrets: opts.secrets ?? {}
25
- }).usePlugin(opts.runtimeId, {
26
- variables: opts.variables ?? {},
27
- secrets: opts.secrets ?? {}
28
- }, opts.plugins);
29
- return {
30
- key: opts.key,
31
- name: opts.name,
32
- router: plugin.router,
33
- createClient: plugin.createClient,
34
- metadata: {
35
- remoteUrl: remoteEntryUrl,
36
- version: plugin.metadata.version
37
- }
38
- };
39
- }
40
- function collectSecrets(config, envSecrets) {
41
- const secrets = {};
42
- for (const key of config.secrets ?? []) {
43
- const value = envSecrets?.[key] ?? process.env[key];
44
- if (value) secrets[key] = value;
45
- }
46
- return secrets;
47
- }
48
- async function loadApiPluginsFromRuntimeConfig(runtimeConfig, envSecrets) {
49
- const entries = [];
50
- if (runtimeConfig.api?.url) entries.push(["api", runtimeConfig.api]);
51
- for (const [key, plugin] of Object.entries(runtimeConfig.plugins ?? {})) if (plugin.url) entries.push([key, plugin]);
52
- if (entries.length === 0) {
53
- console.log("[API] No plugins configured");
54
- return {
55
- base: null,
56
- plugins: [],
57
- errors: []
58
- };
59
- }
60
- const pluginEntries = entries.filter(([key]) => key !== "api");
61
- const apiEntry = entries.find(([key]) => key === "api");
62
- const pluginResults = await Promise.allSettled(pluginEntries.map(async ([key, pluginConfig]) => {
63
- console.log(`[API] Loading plugin: ${pluginConfig.name} from ${pluginConfig.entry}`);
64
- return loadApiPlugin({
65
- key,
66
- runtimeId: pluginConfig.name,
67
- name: pluginConfig.name,
68
- entry: pluginConfig.entry,
69
- variables: pluginConfig.variables,
70
- secrets: collectSecrets(pluginConfig, envSecrets),
71
- integrity: pluginConfig.integrity
72
- });
73
- }));
74
- const plugins = [];
75
- const errors = [];
76
- const pluginsClient = {};
77
- pluginResults.forEach((result, index) => {
78
- const [key] = pluginEntries[index] ?? ["unknown"];
79
- if (result.status === "fulfilled") {
80
- plugins.push(result.value);
81
- pluginsClient[key] = result.value.createClient;
82
- } else errors.push({
83
- key,
84
- error: result.reason instanceof Error ? result.reason.message : String(result.reason)
85
- });
86
- });
87
- let base = null;
88
- if (apiEntry) {
89
- const [key, apiConfig] = apiEntry;
90
- try {
91
- console.log(`[API] Loading API plugin: ${apiConfig.name} from ${apiConfig.entry}`);
92
- base = await loadApiPlugin({
93
- key,
94
- runtimeId: apiConfig.name,
95
- name: apiConfig.name,
96
- entry: apiConfig.entry,
97
- variables: apiConfig.variables,
98
- secrets: collectSecrets(apiConfig, envSecrets),
99
- integrity: apiConfig.integrity,
100
- plugins: pluginsClient
101
- });
102
- } catch (error) {
103
- errors.push({
104
- key,
105
- error: error instanceof Error ? error.message : String(error)
106
- });
107
- }
108
- }
109
- return {
110
- base,
111
- plugins,
112
- errors
113
- };
114
- }
115
- function createStitchedRouter(baseRouter, plugins) {
116
- if (!plugins || plugins.length === 0) return baseRouter;
117
- return plugins.reduce((router, plugin) => Object.assign(router, plugin.router), baseRouter);
118
- }
119
-
120
- //#endregion
121
- exports.createStitchedRouter = createStitchedRouter;
122
- exports.loadApiPlugin = loadApiPlugin;
123
- exports.loadApiPluginsFromRuntimeConfig = loadApiPluginsFromRuntimeConfig;
124
- //# sourceMappingURL=api.cjs.map
package/dist/api.cjs.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"api.cjs","names":["verifySriForUrl","ensureNodeRuntimePlugin","registerRemote"],"sources":["../src/api.ts"],"sourcesContent":["import { verifySriForUrl } from \"./integrity\";\nimport { ensureNodeRuntimePlugin, registerRemote } from \"./mf\";\nimport { createPluginRuntime } from \"./sdk\";\nimport type { RuntimeConfig, RuntimePluginConfig } from \"./types\";\n\nexport interface LoadedPluginResult {\n key: string;\n name: string;\n router: any;\n createClient: (context?: unknown) => any;\n metadata: {\n remoteUrl: string;\n version?: string;\n };\n}\n\nexport interface LoadedPluginsResult {\n base: LoadedPluginResult | null;\n plugins: LoadedPluginResult[];\n errors: Array<{ key: string; error: string }>;\n}\n\nexport async function loadApiPlugin(opts: {\n key: string;\n runtimeId: string;\n name: string;\n entry: string;\n variables?: Record<string, string>;\n secrets?: Record<string, string>;\n integrity?: string;\n plugins?: Record<string, unknown>;\n}): Promise<LoadedPluginResult> {\n const remoteEntryUrl = (() => {\n if (opts.entry.endsWith(\"/remoteEntry.js\")) return opts.entry;\n if (opts.entry.endsWith(\"/mf-manifest.json\")) {\n return `${opts.entry.replace(/\\/mf-manifest\\.json$/, \"\")}/remoteEntry.js`;\n }\n if (opts.entry.endsWith(\".js\")) return opts.entry;\n return `${opts.entry.replace(/\\/$/, \"\")}/remoteEntry.js`;\n })();\n\n if (opts.integrity) {\n await verifySriForUrl(remoteEntryUrl, opts.integrity);\n }\n\n await ensureNodeRuntimePlugin();\n await registerRemote({ name: opts.runtimeId, entry: remoteEntryUrl });\n\n const runtime: any = createPluginRuntime({\n registry: {\n [opts.runtimeId]: { remote: remoteEntryUrl },\n },\n secrets: opts.secrets ?? {},\n });\n\n // biome-ignore lint/correctness/useHookAtTopLevel: usePlugin is not a React hook\n const plugin = await runtime.usePlugin(\n opts.runtimeId,\n {\n variables: opts.variables ?? {},\n secrets: opts.secrets ?? {},\n },\n opts.plugins,\n );\n\n return {\n key: opts.key,\n name: opts.name,\n router: plugin.router,\n createClient: plugin.createClient as (context?: unknown) => any,\n metadata: {\n remoteUrl: remoteEntryUrl,\n version: plugin.metadata.version,\n },\n };\n}\n\nfunction collectSecrets(config: RuntimePluginConfig, envSecrets?: Record<string, string>) {\n const secrets: Record<string, string> = {};\n for (const key of config.secrets ?? []) {\n const value = envSecrets?.[key] ?? process.env[key];\n if (value) {\n secrets[key] = value;\n }\n }\n return secrets;\n}\n\nexport async function loadApiPluginsFromRuntimeConfig(\n runtimeConfig: RuntimeConfig,\n envSecrets?: Record<string, string>,\n): Promise<LoadedPluginsResult> {\n const entries: Array<[string, RuntimePluginConfig]> = [];\n\n if (runtimeConfig.api?.url) {\n entries.push([\"api\", runtimeConfig.api]);\n }\n\n for (const [key, plugin] of Object.entries(runtimeConfig.plugins ?? {})) {\n if (plugin.url) {\n entries.push([key, plugin]);\n }\n }\n\n if (entries.length === 0) {\n console.log(\"[API] No plugins configured\");\n return { base: null, plugins: [], errors: [] };\n }\n\n // Phase 1: Load non-API plugins first\n const pluginEntries = entries.filter(([key]) => key !== \"api\");\n const apiEntry = entries.find(([key]) => key === \"api\");\n\n const pluginResults = await Promise.allSettled(\n pluginEntries.map(async ([key, pluginConfig]) => {\n console.log(`[API] Loading plugin: ${pluginConfig.name} from ${pluginConfig.entry}`);\n return loadApiPlugin({\n key,\n runtimeId: pluginConfig.name,\n name: pluginConfig.name,\n entry: pluginConfig.entry,\n variables: pluginConfig.variables,\n secrets: collectSecrets(pluginConfig, envSecrets),\n integrity: pluginConfig.integrity,\n });\n }),\n );\n\n const plugins: LoadedPluginResult[] = [];\n const errors: Array<{ key: string; error: string }> = [];\n\n const pluginsClient: Record<string, unknown> = {};\n\n pluginResults.forEach((result, index) => {\n const [key] = pluginEntries[index] ?? [\"unknown\"];\n if (result.status === \"fulfilled\") {\n plugins.push(result.value);\n pluginsClient[key] = result.value.createClient;\n } else {\n errors.push({\n key,\n error: result.reason instanceof Error ? result.reason.message : String(result.reason),\n });\n }\n });\n\n // Phase 2: Load API plugin with injected plugins client\n let base: LoadedPluginResult | null = null;\n\n if (apiEntry) {\n const [key, apiConfig] = apiEntry;\n try {\n console.log(`[API] Loading API plugin: ${apiConfig.name} from ${apiConfig.entry}`);\n base = await loadApiPlugin({\n key,\n runtimeId: apiConfig.name,\n name: apiConfig.name,\n entry: apiConfig.entry,\n variables: apiConfig.variables,\n secrets: collectSecrets(apiConfig, envSecrets),\n integrity: apiConfig.integrity,\n plugins: pluginsClient,\n });\n } catch (error) {\n errors.push({\n key,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n\n return { base, plugins, errors };\n}\n\nexport function createStitchedRouter(baseRouter: any, plugins: LoadedPluginResult[] | null): any {\n if (!plugins || plugins.length === 0) {\n return baseRouter;\n }\n\n return plugins.reduce((router, plugin) => Object.assign(router, plugin.router), baseRouter);\n}\n"],"mappings":"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"}
package/dist/api.d.cts DELETED
@@ -1,36 +0,0 @@
1
- import { RuntimeConfig } from "./types.cjs";
2
-
3
- //#region src/api.d.ts
4
- interface LoadedPluginResult {
5
- key: string;
6
- name: string;
7
- router: any;
8
- createClient: (context?: unknown) => any;
9
- metadata: {
10
- remoteUrl: string;
11
- version?: string;
12
- };
13
- }
14
- interface LoadedPluginsResult {
15
- base: LoadedPluginResult | null;
16
- plugins: LoadedPluginResult[];
17
- errors: Array<{
18
- key: string;
19
- error: string;
20
- }>;
21
- }
22
- declare function loadApiPlugin(opts: {
23
- key: string;
24
- runtimeId: string;
25
- name: string;
26
- entry: string;
27
- variables?: Record<string, string>;
28
- secrets?: Record<string, string>;
29
- integrity?: string;
30
- plugins?: Record<string, unknown>;
31
- }): Promise<LoadedPluginResult>;
32
- declare function loadApiPluginsFromRuntimeConfig(runtimeConfig: RuntimeConfig, envSecrets?: Record<string, string>): Promise<LoadedPluginsResult>;
33
- declare function createStitchedRouter(baseRouter: any, plugins: LoadedPluginResult[] | null): any;
34
- //#endregion
35
- export { LoadedPluginResult, LoadedPluginsResult, createStitchedRouter, loadApiPlugin, loadApiPluginsFromRuntimeConfig };
36
- //# sourceMappingURL=api.d.cts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"api.d.cts","names":[],"sources":["../src/api.ts"],"mappings":";;;UAKiB,kBAAA;EACf,GAAA;EACA,IAAA;EACA,MAAA;EACA,YAAA,GAAe,OAAA;EACf,QAAA;IACE,SAAA;IACA,OAAA;EAAA;AAAA;AAAA,UAIa,mBAAA;EACf,IAAA,EAAM,kBAAA;EACN,OAAA,EAAS,kBAAA;EACT,MAAA,EAAQ,KAAA;IAAQ,GAAA;IAAa,KAAA;EAAA;AAAA;AAAA,iBAGT,aAAA,CAAc,IAAA;EAClC,GAAA;EACA,SAAA;EACA,IAAA;EACA,KAAA;EACA,SAAA,GAAY,MAAA;EACZ,OAAA,GAAU,MAAA;EACV,SAAA;EACA,OAAA,GAAU,MAAA;AAAA,IACR,OAAA,CAAQ,kBAAA;AAAA,iBAyDU,+BAAA,CACpB,aAAA,EAAe,aAAA,EACf,UAAA,GAAa,MAAA,mBACZ,OAAA,CAAQ,mBAAA;AAAA,iBAmFK,oBAAA,CAAqB,UAAA,OAAiB,OAAA,EAAS,kBAAA"}
package/dist/api.d.mts DELETED
@@ -1,36 +0,0 @@
1
- import { RuntimeConfig } from "./types.mjs";
2
-
3
- //#region src/api.d.ts
4
- interface LoadedPluginResult {
5
- key: string;
6
- name: string;
7
- router: any;
8
- createClient: (context?: unknown) => any;
9
- metadata: {
10
- remoteUrl: string;
11
- version?: string;
12
- };
13
- }
14
- interface LoadedPluginsResult {
15
- base: LoadedPluginResult | null;
16
- plugins: LoadedPluginResult[];
17
- errors: Array<{
18
- key: string;
19
- error: string;
20
- }>;
21
- }
22
- declare function loadApiPlugin(opts: {
23
- key: string;
24
- runtimeId: string;
25
- name: string;
26
- entry: string;
27
- variables?: Record<string, string>;
28
- secrets?: Record<string, string>;
29
- integrity?: string;
30
- plugins?: Record<string, unknown>;
31
- }): Promise<LoadedPluginResult>;
32
- declare function loadApiPluginsFromRuntimeConfig(runtimeConfig: RuntimeConfig, envSecrets?: Record<string, string>): Promise<LoadedPluginsResult>;
33
- declare function createStitchedRouter(baseRouter: any, plugins: LoadedPluginResult[] | null): any;
34
- //#endregion
35
- export { LoadedPluginResult, LoadedPluginsResult, createStitchedRouter, loadApiPlugin, loadApiPluginsFromRuntimeConfig };
36
- //# sourceMappingURL=api.d.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"api.d.mts","names":[],"sources":["../src/api.ts"],"mappings":";;;UAKiB,kBAAA;EACf,GAAA;EACA,IAAA;EACA,MAAA;EACA,YAAA,GAAe,OAAA;EACf,QAAA;IACE,SAAA;IACA,OAAA;EAAA;AAAA;AAAA,UAIa,mBAAA;EACf,IAAA,EAAM,kBAAA;EACN,OAAA,EAAS,kBAAA;EACT,MAAA,EAAQ,KAAA;IAAQ,GAAA;IAAa,KAAA;EAAA;AAAA;AAAA,iBAGT,aAAA,CAAc,IAAA;EAClC,GAAA;EACA,SAAA;EACA,IAAA;EACA,KAAA;EACA,SAAA,GAAY,MAAA;EACZ,OAAA,GAAU,MAAA;EACV,SAAA;EACA,OAAA,GAAU,MAAA;AAAA,IACR,OAAA,CAAQ,kBAAA;AAAA,iBAyDU,+BAAA,CACpB,aAAA,EAAe,aAAA,EACf,UAAA,GAAa,MAAA,mBACZ,OAAA,CAAQ,mBAAA;AAAA,iBAmFK,oBAAA,CAAqB,UAAA,OAAiB,OAAA,EAAS,kBAAA"}
package/dist/api.mjs DELETED
@@ -1,119 +0,0 @@
1
- import { createPluginRuntime } from "./sdk.mjs";
2
- import { verifySriForUrl } from "./integrity.mjs";
3
- import { ensureNodeRuntimePlugin, registerRemote } from "./mf.mjs";
4
-
5
- //#region src/api.ts
6
- async function loadApiPlugin(opts) {
7
- const remoteEntryUrl = (() => {
8
- if (opts.entry.endsWith("/remoteEntry.js")) return opts.entry;
9
- if (opts.entry.endsWith("/mf-manifest.json")) return `${opts.entry.replace(/\/mf-manifest\.json$/, "")}/remoteEntry.js`;
10
- if (opts.entry.endsWith(".js")) return opts.entry;
11
- return `${opts.entry.replace(/\/$/, "")}/remoteEntry.js`;
12
- })();
13
- if (opts.integrity) await verifySriForUrl(remoteEntryUrl, opts.integrity);
14
- await ensureNodeRuntimePlugin();
15
- await registerRemote({
16
- name: opts.runtimeId,
17
- entry: remoteEntryUrl
18
- });
19
- const plugin = await createPluginRuntime({
20
- registry: { [opts.runtimeId]: { remote: remoteEntryUrl } },
21
- secrets: opts.secrets ?? {}
22
- }).usePlugin(opts.runtimeId, {
23
- variables: opts.variables ?? {},
24
- secrets: opts.secrets ?? {}
25
- }, opts.plugins);
26
- return {
27
- key: opts.key,
28
- name: opts.name,
29
- router: plugin.router,
30
- createClient: plugin.createClient,
31
- metadata: {
32
- remoteUrl: remoteEntryUrl,
33
- version: plugin.metadata.version
34
- }
35
- };
36
- }
37
- function collectSecrets(config, envSecrets) {
38
- const secrets = {};
39
- for (const key of config.secrets ?? []) {
40
- const value = envSecrets?.[key] ?? process.env[key];
41
- if (value) secrets[key] = value;
42
- }
43
- return secrets;
44
- }
45
- async function loadApiPluginsFromRuntimeConfig(runtimeConfig, envSecrets) {
46
- const entries = [];
47
- if (runtimeConfig.api?.url) entries.push(["api", runtimeConfig.api]);
48
- for (const [key, plugin] of Object.entries(runtimeConfig.plugins ?? {})) if (plugin.url) entries.push([key, plugin]);
49
- if (entries.length === 0) {
50
- console.log("[API] No plugins configured");
51
- return {
52
- base: null,
53
- plugins: [],
54
- errors: []
55
- };
56
- }
57
- const pluginEntries = entries.filter(([key]) => key !== "api");
58
- const apiEntry = entries.find(([key]) => key === "api");
59
- const pluginResults = await Promise.allSettled(pluginEntries.map(async ([key, pluginConfig]) => {
60
- console.log(`[API] Loading plugin: ${pluginConfig.name} from ${pluginConfig.entry}`);
61
- return loadApiPlugin({
62
- key,
63
- runtimeId: pluginConfig.name,
64
- name: pluginConfig.name,
65
- entry: pluginConfig.entry,
66
- variables: pluginConfig.variables,
67
- secrets: collectSecrets(pluginConfig, envSecrets),
68
- integrity: pluginConfig.integrity
69
- });
70
- }));
71
- const plugins = [];
72
- const errors = [];
73
- const pluginsClient = {};
74
- pluginResults.forEach((result, index) => {
75
- const [key] = pluginEntries[index] ?? ["unknown"];
76
- if (result.status === "fulfilled") {
77
- plugins.push(result.value);
78
- pluginsClient[key] = result.value.createClient;
79
- } else errors.push({
80
- key,
81
- error: result.reason instanceof Error ? result.reason.message : String(result.reason)
82
- });
83
- });
84
- let base = null;
85
- if (apiEntry) {
86
- const [key, apiConfig] = apiEntry;
87
- try {
88
- console.log(`[API] Loading API plugin: ${apiConfig.name} from ${apiConfig.entry}`);
89
- base = await loadApiPlugin({
90
- key,
91
- runtimeId: apiConfig.name,
92
- name: apiConfig.name,
93
- entry: apiConfig.entry,
94
- variables: apiConfig.variables,
95
- secrets: collectSecrets(apiConfig, envSecrets),
96
- integrity: apiConfig.integrity,
97
- plugins: pluginsClient
98
- });
99
- } catch (error) {
100
- errors.push({
101
- key,
102
- error: error instanceof Error ? error.message : String(error)
103
- });
104
- }
105
- }
106
- return {
107
- base,
108
- plugins,
109
- errors
110
- };
111
- }
112
- function createStitchedRouter(baseRouter, plugins) {
113
- if (!plugins || plugins.length === 0) return baseRouter;
114
- return plugins.reduce((router, plugin) => Object.assign(router, plugin.router), baseRouter);
115
- }
116
-
117
- //#endregion
118
- export { createStitchedRouter, loadApiPlugin, loadApiPluginsFromRuntimeConfig };
119
- //# sourceMappingURL=api.mjs.map
package/dist/api.mjs.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"api.mjs","names":[],"sources":["../src/api.ts"],"sourcesContent":["import { verifySriForUrl } from \"./integrity\";\nimport { ensureNodeRuntimePlugin, registerRemote } from \"./mf\";\nimport { createPluginRuntime } from \"./sdk\";\nimport type { RuntimeConfig, RuntimePluginConfig } from \"./types\";\n\nexport interface LoadedPluginResult {\n key: string;\n name: string;\n router: any;\n createClient: (context?: unknown) => any;\n metadata: {\n remoteUrl: string;\n version?: string;\n };\n}\n\nexport interface LoadedPluginsResult {\n base: LoadedPluginResult | null;\n plugins: LoadedPluginResult[];\n errors: Array<{ key: string; error: string }>;\n}\n\nexport async function loadApiPlugin(opts: {\n key: string;\n runtimeId: string;\n name: string;\n entry: string;\n variables?: Record<string, string>;\n secrets?: Record<string, string>;\n integrity?: string;\n plugins?: Record<string, unknown>;\n}): Promise<LoadedPluginResult> {\n const remoteEntryUrl = (() => {\n if (opts.entry.endsWith(\"/remoteEntry.js\")) return opts.entry;\n if (opts.entry.endsWith(\"/mf-manifest.json\")) {\n return `${opts.entry.replace(/\\/mf-manifest\\.json$/, \"\")}/remoteEntry.js`;\n }\n if (opts.entry.endsWith(\".js\")) return opts.entry;\n return `${opts.entry.replace(/\\/$/, \"\")}/remoteEntry.js`;\n })();\n\n if (opts.integrity) {\n await verifySriForUrl(remoteEntryUrl, opts.integrity);\n }\n\n await ensureNodeRuntimePlugin();\n await registerRemote({ name: opts.runtimeId, entry: remoteEntryUrl });\n\n const runtime: any = createPluginRuntime({\n registry: {\n [opts.runtimeId]: { remote: remoteEntryUrl },\n },\n secrets: opts.secrets ?? {},\n });\n\n // biome-ignore lint/correctness/useHookAtTopLevel: usePlugin is not a React hook\n const plugin = await runtime.usePlugin(\n opts.runtimeId,\n {\n variables: opts.variables ?? {},\n secrets: opts.secrets ?? {},\n },\n opts.plugins,\n );\n\n return {\n key: opts.key,\n name: opts.name,\n router: plugin.router,\n createClient: plugin.createClient as (context?: unknown) => any,\n metadata: {\n remoteUrl: remoteEntryUrl,\n version: plugin.metadata.version,\n },\n };\n}\n\nfunction collectSecrets(config: RuntimePluginConfig, envSecrets?: Record<string, string>) {\n const secrets: Record<string, string> = {};\n for (const key of config.secrets ?? []) {\n const value = envSecrets?.[key] ?? process.env[key];\n if (value) {\n secrets[key] = value;\n }\n }\n return secrets;\n}\n\nexport async function loadApiPluginsFromRuntimeConfig(\n runtimeConfig: RuntimeConfig,\n envSecrets?: Record<string, string>,\n): Promise<LoadedPluginsResult> {\n const entries: Array<[string, RuntimePluginConfig]> = [];\n\n if (runtimeConfig.api?.url) {\n entries.push([\"api\", runtimeConfig.api]);\n }\n\n for (const [key, plugin] of Object.entries(runtimeConfig.plugins ?? {})) {\n if (plugin.url) {\n entries.push([key, plugin]);\n }\n }\n\n if (entries.length === 0) {\n console.log(\"[API] No plugins configured\");\n return { base: null, plugins: [], errors: [] };\n }\n\n // Phase 1: Load non-API plugins first\n const pluginEntries = entries.filter(([key]) => key !== \"api\");\n const apiEntry = entries.find(([key]) => key === \"api\");\n\n const pluginResults = await Promise.allSettled(\n pluginEntries.map(async ([key, pluginConfig]) => {\n console.log(`[API] Loading plugin: ${pluginConfig.name} from ${pluginConfig.entry}`);\n return loadApiPlugin({\n key,\n runtimeId: pluginConfig.name,\n name: pluginConfig.name,\n entry: pluginConfig.entry,\n variables: pluginConfig.variables,\n secrets: collectSecrets(pluginConfig, envSecrets),\n integrity: pluginConfig.integrity,\n });\n }),\n );\n\n const plugins: LoadedPluginResult[] = [];\n const errors: Array<{ key: string; error: string }> = [];\n\n const pluginsClient: Record<string, unknown> = {};\n\n pluginResults.forEach((result, index) => {\n const [key] = pluginEntries[index] ?? [\"unknown\"];\n if (result.status === \"fulfilled\") {\n plugins.push(result.value);\n pluginsClient[key] = result.value.createClient;\n } else {\n errors.push({\n key,\n error: result.reason instanceof Error ? result.reason.message : String(result.reason),\n });\n }\n });\n\n // Phase 2: Load API plugin with injected plugins client\n let base: LoadedPluginResult | null = null;\n\n if (apiEntry) {\n const [key, apiConfig] = apiEntry;\n try {\n console.log(`[API] Loading API plugin: ${apiConfig.name} from ${apiConfig.entry}`);\n base = await loadApiPlugin({\n key,\n runtimeId: apiConfig.name,\n name: apiConfig.name,\n entry: apiConfig.entry,\n variables: apiConfig.variables,\n secrets: collectSecrets(apiConfig, envSecrets),\n integrity: apiConfig.integrity,\n plugins: pluginsClient,\n });\n } catch (error) {\n errors.push({\n key,\n error: error instanceof Error ? error.message : String(error),\n });\n }\n }\n\n return { base, plugins, errors };\n}\n\nexport function createStitchedRouter(baseRouter: any, plugins: LoadedPluginResult[] | null): any {\n if (!plugins || plugins.length === 0) {\n return baseRouter;\n }\n\n return plugins.reduce((router, plugin) => Object.assign(router, plugin.router), baseRouter);\n}\n"],"mappings":"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"}
@@ -1,27 +0,0 @@
1
- const require_integrity = require('./integrity.cjs');
2
- const require_mf = require('./mf.cjs');
3
-
4
- //#region src/federation.server.ts
5
- async function loadRouterModule(config) {
6
- const isLocalDev = config.ui.source === "local";
7
- const ssrUrl = config.ui.ssrUrl ?? (isLocalDev ? config.ui.url : void 0);
8
- if (!ssrUrl) {
9
- if (!isLocalDev) throw new Error("SSR URL not configured in production. Set app.ui.ssr in bos.config.json to enable SSR.");
10
- throw new Error("SSR URL not configured. In local dev, set app.ui.ssr or use a UI package with SSR support.");
11
- }
12
- const ssrEntryUrl = `${ssrUrl.replace(/\/$/, "")}/remoteEntry.server.js`;
13
- if (config.ui.ssrIntegrity) await require_integrity.verifySriForUrl(ssrEntryUrl, config.ui.ssrIntegrity);
14
- await require_mf.ensureNodeRuntimePlugin();
15
- await require_mf.registerRemote({
16
- name: config.ui.name,
17
- entry: ssrEntryUrl,
18
- type: "script"
19
- });
20
- const loadedModule = await require_mf.loadRemoteModule(`${config.ui.name}/Router`, { from: "build" });
21
- if (!loadedModule) throw new Error(`Module not found: ${config.ui.name}/Router`);
22
- return loadedModule.default;
23
- }
24
-
25
- //#endregion
26
- exports.loadRouterModule = loadRouterModule;
27
- //# sourceMappingURL=federation.server.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"federation.server.cjs","names":["verifySriForUrl","ensureNodeRuntimePlugin","registerRemote","loadRemoteModule"],"sources":["../src/federation.server.ts"],"sourcesContent":["import { verifySriForUrl } from \"./integrity\";\nimport { ensureNodeRuntimePlugin, loadRemoteModule, registerRemote } from \"./mf\";\nimport type { RuntimeConfig } from \"./types\";\nimport type { RouterModule } from \"./ui/types\";\n\nexport type { RouterModule };\n\nexport async function loadRouterModule(config: RuntimeConfig): Promise<RouterModule> {\n const isLocalDev = config.ui.source === \"local\";\n const ssrUrl = config.ui.ssrUrl ?? (isLocalDev ? config.ui.url : undefined);\n\n if (!ssrUrl) {\n if (!isLocalDev) {\n throw new Error(\n \"SSR URL not configured in production. Set app.ui.ssr in bos.config.json to enable SSR.\",\n );\n }\n\n throw new Error(\n \"SSR URL not configured. In local dev, set app.ui.ssr or use a UI package with SSR support.\",\n );\n }\n\n const ssrEntryUrl = `${ssrUrl.replace(/\\/$/, \"\")}/remoteEntry.server.js`;\n\n if (config.ui.ssrIntegrity) {\n await verifySriForUrl(ssrEntryUrl, config.ui.ssrIntegrity);\n }\n\n await ensureNodeRuntimePlugin();\n await registerRemote({\n name: config.ui.name,\n entry: ssrEntryUrl,\n type: \"script\",\n });\n\n const loadedModule = await loadRemoteModule<any>(`${config.ui.name}/Router`, { from: \"build\" });\n if (!loadedModule) {\n throw new Error(`Module not found: ${config.ui.name}/Router`);\n }\n\n return loadedModule.default as RouterModule;\n}\n"],"mappings":";;;;AAOA,eAAsB,iBAAiB,QAA8C;CACnF,MAAM,aAAa,OAAO,GAAG,WAAW;CACxC,MAAM,SAAS,OAAO,GAAG,WAAW,aAAa,OAAO,GAAG,MAAM;AAEjE,KAAI,CAAC,QAAQ;AACX,MAAI,CAAC,WACH,OAAM,IAAI,MACR,yFACD;AAGH,QAAM,IAAI,MACR,6FACD;;CAGH,MAAM,cAAc,GAAG,OAAO,QAAQ,OAAO,GAAG,CAAC;AAEjD,KAAI,OAAO,GAAG,aACZ,OAAMA,kCAAgB,aAAa,OAAO,GAAG,aAAa;AAG5D,OAAMC,oCAAyB;AAC/B,OAAMC,0BAAe;EACnB,MAAM,OAAO,GAAG;EAChB,OAAO;EACP,MAAM;EACP,CAAC;CAEF,MAAM,eAAe,MAAMC,4BAAsB,GAAG,OAAO,GAAG,KAAK,UAAU,EAAE,MAAM,SAAS,CAAC;AAC/F,KAAI,CAAC,aACH,OAAM,IAAI,MAAM,qBAAqB,OAAO,GAAG,KAAK,SAAS;AAG/D,QAAO,aAAa"}
@@ -1,27 +0,0 @@
1
- import { verifySriForUrl } from "./integrity.mjs";
2
- import { ensureNodeRuntimePlugin, loadRemoteModule, registerRemote } from "./mf.mjs";
3
-
4
- //#region src/federation.server.ts
5
- async function loadRouterModule(config) {
6
- const isLocalDev = config.ui.source === "local";
7
- const ssrUrl = config.ui.ssrUrl ?? (isLocalDev ? config.ui.url : void 0);
8
- if (!ssrUrl) {
9
- if (!isLocalDev) throw new Error("SSR URL not configured in production. Set app.ui.ssr in bos.config.json to enable SSR.");
10
- throw new Error("SSR URL not configured. In local dev, set app.ui.ssr or use a UI package with SSR support.");
11
- }
12
- const ssrEntryUrl = `${ssrUrl.replace(/\/$/, "")}/remoteEntry.server.js`;
13
- if (config.ui.ssrIntegrity) await verifySriForUrl(ssrEntryUrl, config.ui.ssrIntegrity);
14
- await ensureNodeRuntimePlugin();
15
- await registerRemote({
16
- name: config.ui.name,
17
- entry: ssrEntryUrl,
18
- type: "script"
19
- });
20
- const loadedModule = await loadRemoteModule(`${config.ui.name}/Router`, { from: "build" });
21
- if (!loadedModule) throw new Error(`Module not found: ${config.ui.name}/Router`);
22
- return loadedModule.default;
23
- }
24
-
25
- //#endregion
26
- export { loadRouterModule };
27
- //# sourceMappingURL=federation.server.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"federation.server.mjs","names":[],"sources":["../src/federation.server.ts"],"sourcesContent":["import { verifySriForUrl } from \"./integrity\";\nimport { ensureNodeRuntimePlugin, loadRemoteModule, registerRemote } from \"./mf\";\nimport type { RuntimeConfig } from \"./types\";\nimport type { RouterModule } from \"./ui/types\";\n\nexport type { RouterModule };\n\nexport async function loadRouterModule(config: RuntimeConfig): Promise<RouterModule> {\n const isLocalDev = config.ui.source === \"local\";\n const ssrUrl = config.ui.ssrUrl ?? (isLocalDev ? config.ui.url : undefined);\n\n if (!ssrUrl) {\n if (!isLocalDev) {\n throw new Error(\n \"SSR URL not configured in production. Set app.ui.ssr in bos.config.json to enable SSR.\",\n );\n }\n\n throw new Error(\n \"SSR URL not configured. In local dev, set app.ui.ssr or use a UI package with SSR support.\",\n );\n }\n\n const ssrEntryUrl = `${ssrUrl.replace(/\\/$/, \"\")}/remoteEntry.server.js`;\n\n if (config.ui.ssrIntegrity) {\n await verifySriForUrl(ssrEntryUrl, config.ui.ssrIntegrity);\n }\n\n await ensureNodeRuntimePlugin();\n await registerRemote({\n name: config.ui.name,\n entry: ssrEntryUrl,\n type: \"script\",\n });\n\n const loadedModule = await loadRemoteModule<any>(`${config.ui.name}/Router`, { from: \"build\" });\n if (!loadedModule) {\n throw new Error(`Module not found: ${config.ui.name}/Router`);\n }\n\n return loadedModule.default as RouterModule;\n}\n"],"mappings":";;;;AAOA,eAAsB,iBAAiB,QAA8C;CACnF,MAAM,aAAa,OAAO,GAAG,WAAW;CACxC,MAAM,SAAS,OAAO,GAAG,WAAW,aAAa,OAAO,GAAG,MAAM;AAEjE,KAAI,CAAC,QAAQ;AACX,MAAI,CAAC,WACH,OAAM,IAAI,MACR,yFACD;AAGH,QAAM,IAAI,MACR,6FACD;;CAGH,MAAM,cAAc,GAAG,OAAO,QAAQ,OAAO,GAAG,CAAC;AAEjD,KAAI,OAAO,GAAG,aACZ,OAAM,gBAAgB,aAAa,OAAO,GAAG,aAAa;AAG5D,OAAM,yBAAyB;AAC/B,OAAM,eAAe;EACnB,MAAM,OAAO,GAAG;EAChB,OAAO;EACP,MAAM;EACP,CAAC;CAEF,MAAM,eAAe,MAAM,iBAAsB,GAAG,OAAO,GAAG,KAAK,UAAU,EAAE,MAAM,SAAS,CAAC;AAC/F,KAAI,CAAC,aACH,OAAM,IAAI,MAAM,qBAAqB,OAAO,GAAG,KAAK,SAAS;AAG/D,QAAO,aAAa"}