@zenbujs/core 0.0.3 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/dist/{advice-config-CjgkEf2E.mjs → advice-config-BLXjqjGN.mjs} +21 -13
  2. package/dist/advice-config-D6K_a7e9.mjs +2 -0
  3. package/dist/advice.mjs +1 -1
  4. package/dist/{base-window-BUt8pwbw.mjs → base-window-D8CpxMU3.mjs} +2 -2
  5. package/dist/base-window-OXg2KSyP.mjs +2 -0
  6. package/dist/{build-config-pbv0w4oN.mjs → build-config-BwnnfrN-.mjs} +8 -2
  7. package/dist/{build-electron-BzHa_hRi.mjs → build-electron-C3Beey84.mjs} +12 -6
  8. package/dist/{build-source-CnTfQBGK.mjs → build-source-BvC4bPqH.mjs} +13 -8
  9. package/dist/cli/bin.mjs +12 -15
  10. package/dist/cli/build.d.mts +1 -52
  11. package/dist/cli/build.mjs +2 -47
  12. package/dist/cli/resolve-config.mjs +36 -0
  13. package/dist/{cli-BLbQQIVB.mjs → cli-F0B4dvSg.mjs} +3 -3
  14. package/dist/config-Ch1FreWU.mjs +2 -0
  15. package/dist/config.d.mts +2 -0
  16. package/dist/config.mjs +3 -0
  17. package/dist/db-Bz_CDIWg.mjs +2 -0
  18. package/dist/{db-BXadETOb.mjs → db-Cd5ETuPG.mjs} +47 -41
  19. package/dist/db.d.mts +1 -1
  20. package/dist/env-bootstrap.d.mts +1 -1
  21. package/dist/http-B36qtsm0.mjs +2 -0
  22. package/dist/index-CKKoxA9V.d.mts +1 -0
  23. package/dist/index.d.mts +5 -5
  24. package/dist/index.mjs +2 -2
  25. package/dist/{link-VOoGs-pY.mjs → link-BJmsKgPa.mjs} +87 -120
  26. package/dist/load-config-BG2tPIfF.mjs +126 -0
  27. package/dist/load-config-CQG4297M.mjs +2 -0
  28. package/dist/loaders/zenbu.d.mts +16 -0
  29. package/dist/loaders/zenbu.mjs +151 -62
  30. package/dist/{monorepo-CQeQBIpa.mjs → monorepo-DCruz9Jx.mjs} +2 -2
  31. package/dist/{publish-source-BJdpDAFH.mjs → publish-source-34Hn9zb0.mjs} +12 -6
  32. package/dist/react.d.mts +3 -3
  33. package/dist/{registry-Dh_e7HU1.d.mts → registry-CioEYLI5.d.mts} +1 -1
  34. package/dist/registry.d.mts +1 -1
  35. package/dist/{reloader-lLAJ3lqg.mjs → reloader-DJoCB0bC.mjs} +2 -2
  36. package/dist/reloader-FeHKV2jd.mjs +2 -0
  37. package/dist/renderer-host-BQpS0ZM2.mjs +2 -0
  38. package/dist/{renderer-host-Bg8QdeeH.mjs → renderer-host-ztaSIOGx.mjs} +71 -205
  39. package/dist/{rpc-BwwQK6hD.mjs → rpc-CsgWnlZx.mjs} +2 -2
  40. package/dist/rpc-D_s7-WZe.mjs +2 -0
  41. package/dist/rpc.d.mts +1 -1
  42. package/dist/{runtime-DUFKDIe4.mjs → runtime-C95iyVn6.mjs} +53 -1
  43. package/dist/{runtime-CjqDr8Yf.d.mts → runtime-CsiDppGF.d.mts} +41 -1
  44. package/dist/runtime.d.mts +2 -2
  45. package/dist/runtime.mjs +2 -2
  46. package/dist/{schema-DMoSkwUx.d.mts → schema-DvT61x2_.d.mts} +1 -1
  47. package/dist/schema.d.mts +1 -1
  48. package/dist/server-CgzQOPSW.mjs +2 -0
  49. package/dist/{server-BXwZEQ-n.mjs → server-DB3Eki_G.mjs} +1 -1
  50. package/dist/services/default.mjs +10 -10
  51. package/dist/services/index.d.mts +3 -3
  52. package/dist/services/index.mjs +6 -6
  53. package/dist/{setup-gate-BcoqWu8S.mjs → setup-gate-D8XfYY52.mjs} +35 -5
  54. package/dist/setup-gate.d.mts +1 -1
  55. package/dist/setup-gate.mjs +1 -1
  56. package/dist/transforms-DVoy8dCu.mjs +47 -0
  57. package/dist/transforms-EVd5Fgyk.d.mts +136 -0
  58. package/dist/view-registry-2zePxTEg.mjs +2 -0
  59. package/dist/{vite-plugins-Bh3SCOw-.mjs → vite-plugins-t4MlFcz3.mjs} +4 -18
  60. package/dist/vite.mjs +1 -1
  61. package/dist/{window-CmmpCVX6.mjs → window-DUvMTons.mjs} +3 -3
  62. package/dist/window-S3TlTXlK.mjs +2 -0
  63. package/package.json +9 -8
  64. package/dist/advice-config-Cy133IQP.mjs +0 -2
  65. package/dist/base-window-DEIAk618.mjs +0 -2
  66. package/dist/config-LK73dJmO.mjs +0 -2
  67. package/dist/db-ByKPbnP6.mjs +0 -2
  68. package/dist/http-IBcLzbYu.mjs +0 -2
  69. package/dist/load-build-config-DozuRhAN.mjs +0 -40
  70. package/dist/reloader-BCkLjDhS.mjs +0 -2
  71. package/dist/renderer-host-DpvBPTHJ.mjs +0 -2
  72. package/dist/rpc-CqitnyR4.mjs +0 -2
  73. package/dist/server-DjrZUbbu.mjs +0 -2
  74. package/dist/view-registry-BualWgAf.mjs +0 -2
  75. package/dist/window-CM2a9Kyc.mjs +0 -2
  76. package/dist/{index-FtE8MXJ_.d.mts → cli/resolve-config.d.mts} +0 -0
  77. package/dist/{config-CdVrW85P.mjs → config-BlRXeUXx.mjs} +0 -0
  78. package/dist/{dev-BU_llQh1.mjs → dev-DLutFPyo.mjs} +0 -0
  79. package/dist/{env-bootstrap-BtVME-CU.d.mts → env-bootstrap-uCKbw2q8.d.mts} +0 -0
  80. package/dist/{index-Bhlbyrn7.d.mts → index-CE0iPntP.d.mts} +0 -0
  81. package/dist/{index-CPZ5d6Hl.d.mts → index-UK58xuoR.d.mts} +0 -0
  82. package/dist/{mirror-sync-BN59kMCG.mjs → mirror-sync-EiWvdzTJ.mjs} +1 -1
  83. /package/dist/{node-D4M19_mV.mjs → node-CvZnTx53.mjs} +0 -0
  84. /package/dist/{setup-gate-BqOzm7zp.d.mts → setup-gate-D62nX5lk.d.mts} +0 -0
@@ -2,6 +2,7 @@ import { createRequire } from "node:module";
2
2
  import fs from "node:fs";
3
3
  import path from "node:path";
4
4
  import { fileURLToPath, pathToFileURL } from "node:url";
5
+ import { execFileSync } from "node:child_process";
5
6
  //#region src/loaders/zenbu.ts
6
7
  const verbose = process.env.ZENBU_VERBOSE === "1";
7
8
  const { subscribe } = createRequire(import.meta.url)("@parcel/watcher");
@@ -20,48 +21,42 @@ const stats = {
20
21
  };
21
22
  const barrels = /* @__PURE__ */ new Map();
22
23
  const dirWatchers = /* @__PURE__ */ new Map();
24
+ let resolvedPayload = null;
25
+ let resolvedPluginSourceFiles = [];
26
+ /**
27
+ * Number of times we've materialized the plugin root since boot. The first
28
+ * call uses the payload that setup-gate sent through `register()`'s `data`
29
+ * channel; every subsequent call shells out to `resolve-config.mjs` to
30
+ * re-evaluate `zenbu.config.ts` from scratch (so editing the config file
31
+ * actually picks up new plugins / removed plugins / changed paths).
32
+ *
33
+ * We can't `await import()` from inside the loader (Node's ESM loader hooks
34
+ * run in a worker thread and serialize on this same hook, deadlocking).
35
+ * `execFileSync` blocks the loader for ~300ms per HMR cycle, which is fine.
36
+ */
37
+ let pluginsRootInvocations = 0;
23
38
  function initialize(data) {
24
- if (!data?.tracePort) return;
25
- tracePort = data.tracePort;
26
- tracePort.on("message", (msg) => {
27
- if (msg !== "flush") return;
28
- try {
29
- tracePort?.postMessage({
30
- name: loaderName,
31
- ...stats
32
- });
33
- } catch {}
34
- stats.resolveCount = 0;
35
- stats.resolveMs = 0;
36
- stats.loadCount = 0;
37
- stats.loadMs = 0;
38
- });
39
- tracePort.unref?.();
40
- }
41
- function parseJsonc(str) {
42
- let result = "";
43
- let i = 0;
44
- while (i < str.length) if (str[i] === "\"") {
45
- let j = i + 1;
46
- while (j < str.length) if (str[j] === "\\") j += 2;
47
- else if (str[j] === "\"") {
48
- j++;
49
- break;
50
- } else j++;
51
- result += str.slice(i, j);
52
- i = j;
53
- } else if (str[i] === "/" && str[i + 1] === "/") {
54
- i += 2;
55
- while (i < str.length && str[i] !== "\n") i++;
56
- } else if (str[i] === "/" && str[i + 1] === "*") {
57
- i += 2;
58
- while (i < str.length && !(str[i] === "*" && str[i + 1] === "/")) i++;
59
- i += 2;
60
- } else {
61
- result += str[i];
62
- i++;
39
+ if (data?.payload) {
40
+ resolvedPayload = data.payload;
41
+ resolvedPluginSourceFiles = data.pluginSourceFiles ?? [];
42
+ }
43
+ if (data?.tracePort) {
44
+ tracePort = data.tracePort;
45
+ tracePort.on("message", (msg) => {
46
+ if (msg !== "flush") return;
47
+ try {
48
+ tracePort?.postMessage({
49
+ name: loaderName,
50
+ ...stats
51
+ });
52
+ } catch {}
53
+ stats.resolveCount = 0;
54
+ stats.resolveMs = 0;
55
+ stats.loadCount = 0;
56
+ stats.loadMs = 0;
57
+ });
58
+ tracePort.unref?.();
63
59
  }
64
- return JSON.parse(result.replace(/,\s*([\]}])/g, "$1"));
65
60
  }
66
61
  function globRegex(filePattern) {
67
62
  return new RegExp(`^${filePattern.replace(/\./g, "\\.").replace(/\*/g, ".*")}$`);
@@ -123,26 +118,94 @@ function ensureDirWatcher(dir) {
123
118
  function buildSource(imports) {
124
119
  return imports.map((specifier) => `import ${JSON.stringify(specifier)}\n`).join("");
125
120
  }
126
- function readPluginList(configPath) {
127
- const config = parseJsonc(fs.readFileSync(configPath, "utf8"));
128
- if (!config || typeof config !== "object" || !Array.isArray(config.plugins)) return [];
129
- return Array.from(new Set(config.plugins.filter((plugin) => typeof plugin === "string")));
121
+ /**
122
+ * Read the resolved config from the process global. setup-gate populates
123
+ * this before registering our loader, so by the time `load()` is invoked
124
+ * the snapshot is always present.
125
+ *
126
+ * We can't `await import("zenbu.config.ts")` from inside `load()` because
127
+ * Node's ESM loader serializes load hooks — a dynamic import re-enters the
128
+ * loader chain and deadlocks. Pre-resolving in setup-gate sidesteps that.
129
+ */
130
+ function resolveConfigViaSubprocess(projectDir) {
131
+ const here = path.dirname(fileURLToPath(import.meta.url));
132
+ const candidates = [path.resolve(here, "..", "cli", "resolve-config.mjs"), path.resolve(here, "..", "..", "dist", "cli", "resolve-config.mjs")];
133
+ const resolverScript = candidates.find((c) => fs.existsSync(c));
134
+ if (!resolverScript) throw new Error(`[zenbu-loader] resolve-config.mjs not found (looked in: ${candidates.join(", ")})`);
135
+ /**
136
+ * this takes ~100ms and can be heavily optimized, but its a fine solution for now
137
+ */
138
+ const env = {
139
+ ...process.env,
140
+ ELECTRON_RUN_AS_NODE: "1"
141
+ };
142
+ const out = execFileSync(process.execPath, [resolverScript, projectDir], {
143
+ encoding: "utf8",
144
+ timeout: 1e3,
145
+ env,
146
+ stdio: [
147
+ "ignore",
148
+ "pipe",
149
+ "inherit"
150
+ ]
151
+ });
152
+ return JSON.parse(out);
130
153
  }
131
- function buildPluginRoot(configPath) {
154
+ function getResolvedConfig(configPath) {
155
+ if (pluginsRootInvocations === 0) {
156
+ pluginsRootInvocations += 1;
157
+ if (!resolvedPayload) throw new Error("[zenbu-loader] zenbu config not resolved before loader registration. setup-gate must pass it via register(specifier, { data: { payload, pluginSourceFiles } }).");
158
+ return {
159
+ payload: resolvedPayload,
160
+ pluginSourceFiles: resolvedPluginSourceFiles
161
+ };
162
+ }
163
+ pluginsRootInvocations += 1;
164
+ const fresh = resolveConfigViaSubprocess(path.dirname(configPath));
165
+ resolvedPayload = fresh.payload;
166
+ resolvedPluginSourceFiles = fresh.pluginSourceFiles;
167
+ return fresh;
168
+ }
169
+ /**
170
+ * Generate the top-level plugins barrel. The first import is the registry
171
+ * setup module; ESM evaluates left-to-right in import order, so by the time
172
+ * the plugin barrels start importing service files, `replacePlugins(...)` and
173
+ * `registerAppEntrypoint(...)` have already populated the runtime registry.
174
+ */
175
+ function buildPluginsRoot(payload) {
176
+ const registryUrl = `zenbu:registry?data=${encodeURIComponent(JSON.stringify(payload))}`;
177
+ const barrelUrls = payload.plugins.map((p) => `zenbu:barrel?plugin=${encodeURIComponent(JSON.stringify(p))}`);
132
178
  return {
133
- source: `${buildSource(readPluginList(configPath).map((manifestPath) => `zenbu:barrel?manifest=${encodeURIComponent(path.resolve(manifestPath))}`))}import.meta.hot?.accept()\n`,
134
- watchPaths: new Set([configPath])
179
+ source: `${buildSource([registryUrl, ...barrelUrls])}import.meta.hot?.accept()\n`,
180
+ barrelUrls
135
181
  };
136
182
  }
137
- function buildBarrel(manifestPath) {
138
- const manifest = parseJsonc(fs.readFileSync(manifestPath, "utf8"));
139
- const baseDir = path.dirname(manifestPath);
140
- const entries = manifest && typeof manifest === "object" && Array.isArray(manifest.services) ? manifest.services.filter((entry) => typeof entry === "string") : [];
183
+ /**
184
+ * Generate the registry-setup module body. Side-effect only — no exports.
185
+ * Imported FIRST by the plugins root so its `replacePlugins` /
186
+ * `registerAppEntrypoint` calls run before any plugin's service files
187
+ * evaluate.
188
+ */
189
+ function buildRegistryModule(payload) {
190
+ return [
191
+ "import { replacePlugins, registerAppEntrypoint } from \"@zenbujs/core/runtime\"",
192
+ `replacePlugins(${JSON.stringify(payload.plugins)})`,
193
+ `registerAppEntrypoint(${JSON.stringify(payload.appEntrypoint)})`,
194
+ "import.meta.hot?.accept()"
195
+ ].join("\n") + "\n";
196
+ }
197
+ /**
198
+ * Generate a per-plugin barrel: just service-file imports anchored at the
199
+ * plugin's `dir`. Glob-form entries get expanded via `fs.readdirSync` and
200
+ * a parcel-watcher subscription is opened so dynohot invalidates the
201
+ * barrel when service files are added/removed under the watched directory.
202
+ */
203
+ function buildPluginBarrel(plugin) {
141
204
  const imports = [];
142
- const watchPaths = new Set([manifestPath]);
205
+ const watchPaths = new Set([plugin.dir]);
143
206
  const globs = [];
144
- for (const entry of entries) {
145
- const resolved = path.resolve(baseDir, entry);
207
+ for (const entry of plugin.services) {
208
+ const resolved = path.isAbsolute(entry) ? entry : path.resolve(plugin.dir, entry);
146
209
  if (resolved.includes("*")) {
147
210
  const dir = path.dirname(resolved);
148
211
  const regex = globRegex(path.basename(resolved));
@@ -153,8 +216,7 @@ function buildBarrel(manifestPath) {
153
216
  snapshot: snapshotDir(dir, regex)
154
217
  });
155
218
  for (const file of expandGlob(resolved)) imports.push(pathToFileURL(file).href);
156
- } else if (resolved.endsWith(".json") || resolved.endsWith(".jsonc")) imports.push(`zenbu:barrel?manifest=${encodeURIComponent(resolved)}`);
157
- else imports.push(pathToFileURL(resolved).href);
219
+ } else imports.push(pathToFileURL(resolved).href);
158
220
  }
159
221
  return {
160
222
  source: `${buildSource(imports)}import.meta.hot?.accept()\n`,
@@ -224,9 +286,30 @@ function loadImpl(url, context, nextLoad) {
224
286
  if (url.startsWith("zenbu:plugins?")) {
225
287
  const params = new URL(url).searchParams;
226
288
  const configPath = decodeURIComponent(params.get("config") ?? "");
227
- const { source, watchPaths } = buildPluginRoot(configPath);
228
- if (context.hot?.watch) for (const watchPath of watchPaths) context.hot.watch(pathToFileURL(watchPath));
229
- if (verbose) console.log(`[zenbu-loader] generated plugin root for ${path.basename(configPath)} (${source.split("\n").filter(Boolean).length} imports, ${watchPaths.size} watches)`);
289
+ const { payload, pluginSourceFiles } = getResolvedConfig(configPath);
290
+ const { source, barrelUrls } = buildPluginsRoot(payload);
291
+ if (context.hot?.watch) {
292
+ context.hot.watch(pathToFileURL(configPath));
293
+ for (const file of pluginSourceFiles) context.hot.watch(pathToFileURL(file));
294
+ }
295
+ if (verbose) console.log(`[zenbu-loader] generated plugin root for ${path.basename(configPath)} (${payload.plugins.length} plugins, ${barrelUrls.length} barrels)`);
296
+ return {
297
+ format: "module",
298
+ source,
299
+ shortCircuit: true
300
+ };
301
+ }
302
+ if (url.startsWith("zenbu:registry?")) {
303
+ const params = new URL(url).searchParams;
304
+ const data = decodeURIComponent(params.get("data") ?? "");
305
+ let payload;
306
+ try {
307
+ payload = JSON.parse(data);
308
+ } catch (err) {
309
+ throw new Error(`[zenbu-loader] bad registry payload: ${err.message}`);
310
+ }
311
+ const source = buildRegistryModule(payload);
312
+ if (verbose) console.log(`[zenbu-loader] emitted registry module (${payload.plugins.length} plugins, entrypoint=${path.basename(payload.appEntrypoint)})`);
230
313
  return {
231
314
  format: "module",
232
315
  source,
@@ -235,8 +318,14 @@ function loadImpl(url, context, nextLoad) {
235
318
  }
236
319
  if (url.startsWith("zenbu:barrel?")) {
237
320
  const params = new URL(url).searchParams;
238
- const manifestPath = decodeURIComponent(params.get("manifest") ?? "");
239
- const { source, watchPaths, globs } = buildBarrel(manifestPath);
321
+ const pluginRaw = decodeURIComponent(params.get("plugin") ?? "");
322
+ let plugin;
323
+ try {
324
+ plugin = JSON.parse(pluginRaw);
325
+ } catch (err) {
326
+ throw new Error(`[zenbu-loader] bad plugin payload: ${err.message}`);
327
+ }
328
+ const { source, watchPaths, globs } = buildPluginBarrel(plugin);
240
329
  if (context.hot?.watch) for (const watchPath of watchPaths) context.hot.watch(pathToFileURL(watchPath));
241
330
  if (context.hot) {
242
331
  barrels.set(url, {
@@ -245,7 +334,7 @@ function loadImpl(url, context, nextLoad) {
245
334
  });
246
335
  for (const glob of globs) ensureDirWatcher(glob.dir);
247
336
  }
248
- if (verbose) console.log(`[zenbu-loader] generated barrel for ${path.basename(manifestPath)} (${source.split("\n").filter(Boolean).length} imports, ${watchPaths.size} watches, ${globs.length} globs)`);
337
+ if (verbose) console.log(`[zenbu-loader] generated barrel for plugin ${plugin.name} (${source.split("\n").filter(Boolean).length} imports, ${watchPaths.size} watches, ${globs.length} globs)`);
249
338
  return {
250
339
  format: "module",
251
340
  source,
@@ -7,8 +7,8 @@ const MARKER_FILE = ".zenbu-dev-link";
7
7
  const DEFAULT_MONOREPO = path.join(os.homedir(), ".zenbu", "plugins", "zenbu");
8
8
  function resolveProjectDir() {
9
9
  const cwd = process.cwd();
10
- if (fs.existsSync(path.join(cwd, "zenbu.plugin.json")) || fs.existsSync(path.join(cwd, "zenbu")) || fs.existsSync(path.join(cwd, MARKER_FILE))) return cwd;
11
- console.error("zen monorepo: not in a zenbu project (no zenbu.plugin.json or zenbu/ found)");
10
+ if (fs.existsSync(path.join(cwd, "zenbu.config.ts")) || fs.existsSync(path.join(cwd, "zenbu")) || fs.existsSync(path.join(cwd, MARKER_FILE))) return cwd;
11
+ console.error("zen monorepo: not in a zenbu project (no zenbu.config.ts or zenbu/ found)");
12
12
  process.exit(1);
13
13
  }
14
14
  function resolveMonorepoPath(explicit) {
@@ -1,14 +1,19 @@
1
- import { n as loadBuildConfig, t as findBuildConfig } from "./load-build-config-DozuRhAN.mjs";
2
- import { n as init, r as push } from "./mirror-sync-BN59kMCG.mjs";
1
+ import { n as loadConfig } from "./load-config-BG2tPIfF.mjs";
2
+ import { n as init, r as push } from "./mirror-sync-EiWvdzTJ.mjs";
3
3
  import fs from "node:fs";
4
4
  import path from "node:path";
5
- import fsp from "node:fs/promises";
6
5
  import { execFileSync } from "node:child_process";
6
+ import fsp from "node:fs/promises";
7
7
  //#region src/cli/commands/publish-source.ts
8
8
  function resolveProjectDir() {
9
9
  const cwd = process.cwd();
10
- if (fs.existsSync(path.join(cwd, "zenbu.plugin.json"))) return cwd;
11
- console.error("zen publish:source: no zenbu.plugin.json found in current directory");
10
+ for (const name of [
11
+ "zenbu.config.ts",
12
+ "zenbu.config.mts",
13
+ "zenbu.config.js",
14
+ "zenbu.config.mjs"
15
+ ]) if (fs.existsSync(path.join(cwd, name))) return cwd;
16
+ console.error("zen publish:source: no zenbu.config.ts found in current directory");
12
17
  process.exit(1);
13
18
  }
14
19
  function currentSourceSha(projectDir) {
@@ -85,7 +90,8 @@ function logResult(action, result, mirrorUrl) {
85
90
  async function runPublishSource(argv) {
86
91
  const projectDir = resolveProjectDir();
87
92
  const flags = parseFlags(argv);
88
- const config = await loadBuildConfig(flags.config ? path.resolve(projectDir, flags.config) : findBuildConfig(projectDir));
93
+ const { resolved } = await loadConfig(projectDir);
94
+ const config = resolved.build;
89
95
  const target = flags.target ?? config.mirror?.target;
90
96
  if (!target) {
91
97
  console.error("zen publish:source: no mirror target specified (config.mirror.target or --target)");
package/dist/react.d.mts CHANGED
@@ -1,6 +1,6 @@
1
- import { f as CollectionRefBrand, h as InferCollectionItem, n as connectReplica, o as ClientProxy, p as CollectionRefValue, u as CollectionState, y as SchemaShape } from "./index-CPZ5d6Hl.mjs";
2
- import { c as ResolvedServiceRouter, l as ZenbuRegister, o as ResolvedDbRoot, s as ResolvedEvents } from "./registry-Dh_e7HU1.mjs";
3
- import { n as EventProxy, r as RouterProxy } from "./index-Bhlbyrn7.mjs";
1
+ import { f as CollectionRefBrand, h as InferCollectionItem, n as connectReplica, o as ClientProxy, p as CollectionRefValue, u as CollectionState, y as SchemaShape } from "./index-UK58xuoR.mjs";
2
+ import { c as ResolvedServiceRouter, l as ZenbuRegister, o as ResolvedDbRoot, s as ResolvedEvents } from "./registry-CioEYLI5.mjs";
3
+ import { n as EventProxy, r as RouterProxy } from "./index-CE0iPntP.mjs";
4
4
  import * as _$react from "react";
5
5
  import { ReactNode } from "react";
6
6
 
@@ -1,4 +1,4 @@
1
- import { n as SchemaRoot } from "./schema-DMoSkwUx.mjs";
1
+ import { n as SchemaRoot } from "./schema-DvT61x2_.mjs";
2
2
 
3
3
  //#region src/registry.d.ts
4
4
  type CoreEvents = {
@@ -1,2 +1,2 @@
1
- import { a as Events, c as ResolvedServiceRouter, i as CoreServiceRouter, l as ZenbuRegister, n as CoreEvents, o as ResolvedDbRoot, r as CorePreloads, s as ResolvedEvents, t as CoreDbSections } from "./registry-Dh_e7HU1.mjs";
1
+ import { a as Events, c as ResolvedServiceRouter, i as CoreServiceRouter, l as ZenbuRegister, n as CoreEvents, o as ResolvedDbRoot, r as CorePreloads, s as ResolvedEvents, t as CoreDbSections } from "./registry-CioEYLI5.mjs";
2
2
  export { CoreDbSections, CoreEvents, CorePreloads, CoreServiceRouter, Events, ResolvedDbRoot, ResolvedEvents, ResolvedServiceRouter, ZenbuRegister };
@@ -1,6 +1,6 @@
1
- import { i as runtime, t as Service } from "./runtime-DUFKDIe4.mjs";
1
+ import { t as Service, u as runtime } from "./runtime-C95iyVn6.mjs";
2
2
  import { t as createLogger } from "./log-CyKv8hQg.mjs";
3
- import { a as zenbuVitePlugins } from "./vite-plugins-Bh3SCOw-.mjs";
3
+ import { a as zenbuVitePlugins } from "./vite-plugins-t4MlFcz3.mjs";
4
4
  import os from "node:os";
5
5
  import path, { resolve } from "node:path";
6
6
  import { createHash } from "node:crypto";
@@ -0,0 +1,2 @@
1
+ import "./reloader-DJoCB0bC.mjs";
2
+ export {};
@@ -0,0 +1,2 @@
1
+ import "./renderer-host-ztaSIOGx.mjs";
2
+ export {};