on-zero 0.8.0 → 0.8.1

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 (66) hide show
  1. package/dist/cjs/createZeroClient.cjs +22 -2
  2. package/dist/cjs/createZeroClient.native.js +25 -3
  3. package/dist/cjs/createZeroClient.native.js.map +1 -1
  4. package/dist/cjs/generate-helpers.cjs +30 -9
  5. package/dist/cjs/generate-helpers.native.js +59 -9
  6. package/dist/cjs/generate-helpers.native.js.map +1 -1
  7. package/dist/cjs/generate-helpers.test.cjs +70 -0
  8. package/dist/cjs/generate-helpers.test.native.js +94 -0
  9. package/dist/cjs/generate-helpers.test.native.js.map +1 -0
  10. package/dist/cjs/generate-layout.cjs +22 -7
  11. package/dist/cjs/generate-layout.native.js +22 -7
  12. package/dist/cjs/generate-layout.native.js.map +1 -1
  13. package/dist/cjs/generate.test.cjs +4 -2
  14. package/dist/cjs/generate.test.native.js +4 -2
  15. package/dist/cjs/generate.test.native.js.map +1 -1
  16. package/dist/cjs/helpers/hostStorageScope.cjs +37 -0
  17. package/dist/cjs/helpers/hostStorageScope.native.js +41 -0
  18. package/dist/cjs/helpers/hostStorageScope.native.js.map +1 -0
  19. package/dist/cjs/helpers/recoverZeroClient.cjs +8 -0
  20. package/dist/cjs/helpers/recoverZeroClient.native.js +9 -0
  21. package/dist/cjs/helpers/recoverZeroClient.native.js.map +1 -1
  22. package/dist/esm/createZeroClient.mjs +22 -2
  23. package/dist/esm/createZeroClient.mjs.map +1 -1
  24. package/dist/esm/createZeroClient.native.js +25 -3
  25. package/dist/esm/createZeroClient.native.js.map +1 -1
  26. package/dist/esm/generate-helpers.mjs +29 -9
  27. package/dist/esm/generate-helpers.mjs.map +1 -1
  28. package/dist/esm/generate-helpers.native.js +58 -9
  29. package/dist/esm/generate-helpers.native.js.map +1 -1
  30. package/dist/esm/generate-helpers.test.mjs +71 -0
  31. package/dist/esm/generate-helpers.test.mjs.map +1 -0
  32. package/dist/esm/generate-helpers.test.native.js +92 -0
  33. package/dist/esm/generate-helpers.test.native.js.map +1 -0
  34. package/dist/esm/generate-layout.mjs +22 -7
  35. package/dist/esm/generate-layout.mjs.map +1 -1
  36. package/dist/esm/generate-layout.native.js +22 -7
  37. package/dist/esm/generate-layout.native.js.map +1 -1
  38. package/dist/esm/generate.test.mjs +4 -2
  39. package/dist/esm/generate.test.mjs.map +1 -1
  40. package/dist/esm/generate.test.native.js +4 -2
  41. package/dist/esm/generate.test.native.js.map +1 -1
  42. package/dist/esm/helpers/hostStorageScope.mjs +12 -0
  43. package/dist/esm/helpers/hostStorageScope.mjs.map +1 -0
  44. package/dist/esm/helpers/hostStorageScope.native.js +13 -0
  45. package/dist/esm/helpers/hostStorageScope.native.js.map +1 -0
  46. package/dist/esm/helpers/recoverZeroClient.mjs +8 -0
  47. package/dist/esm/helpers/recoverZeroClient.mjs.map +1 -1
  48. package/dist/esm/helpers/recoverZeroClient.native.js +9 -0
  49. package/dist/esm/helpers/recoverZeroClient.native.js.map +1 -1
  50. package/package.json +1 -1
  51. package/src/createZeroClient.tsx +32 -2
  52. package/src/generate-helpers.test.ts +81 -0
  53. package/src/generate-helpers.ts +46 -9
  54. package/src/generate-layout.ts +27 -8
  55. package/src/generate.test.ts +6 -4
  56. package/src/helpers/hostStorageScope.ts +19 -0
  57. package/src/helpers/recoverZeroClient.ts +8 -0
  58. package/types/createZeroClient.d.ts.map +1 -1
  59. package/types/generate-helpers.d.ts +11 -0
  60. package/types/generate-helpers.d.ts.map +1 -1
  61. package/types/generate-helpers.test.d.ts +2 -0
  62. package/types/generate-helpers.test.d.ts.map +1 -0
  63. package/types/generate-layout.d.ts.map +1 -1
  64. package/types/helpers/hostStorageScope.d.ts +2 -0
  65. package/types/helpers/hostStorageScope.d.ts.map +1 -0
  66. package/types/helpers/recoverZeroClient.d.ts.map +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"names":["readHostStorageScope","runtime","globalThis","window","top","__on_zero_storage_scope"],"sources":["../../../src/helpers/hostStorageScope.ts"],"sourcesContent":[null],"mappings":"AAOO,SAASA,qBAAA,EAA2C;EACzD,MAAMC,OAAA,GAAUC,UAAA;EAChB,IAAI,OAAOC,MAAA,KAAW,aAAa;IACjC,IAAI;MACF,MAAMC,GAAA,GAAOD,MAAA,CAAOC,GAAA,IAAOD,MAAA;MAC3B,IAAIC,GAAA,CAAIC,uBAAA,EAAyB,OAAOD,GAAA,CAAIC,uBAAA;IAC9C,QAAQ,CAER;EACF;EACA,OAAOJ,OAAA,CAAQI,uBAAA;AACjB","ignoreList":[]}
@@ -0,0 +1,13 @@
1
+ function readHostStorageScope() {
2
+ var runtime = globalThis;
3
+ if (typeof window !== "undefined") {
4
+ try {
5
+ var _window_top;
6
+ var top = (_window_top = window.top) !== null && _window_top !== void 0 ? _window_top : window;
7
+ if (top.__on_zero_storage_scope) return top.__on_zero_storage_scope;
8
+ } catch (unused) {}
9
+ }
10
+ return runtime.__on_zero_storage_scope;
11
+ }
12
+ export { readHostStorageScope };
13
+ //# sourceMappingURL=hostStorageScope.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["readHostStorageScope","runtime","globalThis","window","_window_top","top","__on_zero_storage_scope","unused"],"sources":["../../../src/helpers/hostStorageScope.ts"],"sourcesContent":[null],"mappings":"AAOO,SAASA,qBAAA,EAA2C;EACzD,IAAAC,OAAM,GAAAC,UAAU;EAChB,IAAI,OAAOC,MAAA,KAAW,aAAa;IACjC,IAAI;MACF,IAAAC,WAAa;MACb,IAAIC,GAAA,GAAI,CAAAD,WAAA,GAAAD,MAAA,CAAyBE,GAAA,MAAO,IAAI,IAAAD,WAAA,cAAAA,WAAA,GAAAD,MAAA;MAC9C,IAAAE,GAAQ,CAAAC,uBAAA,SAAAD,GAAA,CAAAC,uBAAA;IAER,SAAAC,MAAA,GACF;EACA;EACF,OAAAN,OAAA,CAAAK,uBAAA","ignoreList":[]}
@@ -77,6 +77,14 @@ function recover(deps, reasonKey, message, dropLocalState) {
77
77
  reasonKey,
78
78
  reason: message
79
79
  });
80
+ try {
81
+ globalThis.dispatchEvent?.(new CustomEvent("on-zero-fatal", {
82
+ detail: {
83
+ reasonKey,
84
+ reason: message
85
+ }
86
+ }));
87
+ } catch {}
80
88
  return;
81
89
  }
82
90
  reloadScheduled = true;
@@ -1 +1 @@
1
- {"version":3,"names":["RECOVER_GUARD_MS","RELOAD_LATCH_TIMEOUT_MS","LOCAL_STORE_LOST","SQLITE_ERROR_NAME","SQLITE_STATEMENT_FINALIZED","STORE_CLOSED","STORE_CLOSED_REPEAT_MIN_MS","STORE_CLOSED_REPEAT_MAX_MS","reloadScheduled","reloadInProgress","reloadLatchTimer","pendingDeletes","inMemoryGuard","Map","defaultGuardStorage","window","sessionStorage","recoveryGuardOpen","reasonKey","guardStorage","key","now","Date","memLast","get","storage","rawLast","getItem","last","Number","setItem","String","set","lastStoreClosedAtMs","armReloadLatchTimeout","setTimeout","clearTimeout","unref","disarmReloadLatchTimeout","performReload","deps","Promise","resolve","doReload","reload","globalThis","location","then","allSettled","splice","map","run","beforeReload","catch","recover","message","dropLocalState","onRecovery","push","deleteLocalState","console","error","zeroEvents","emit","type","reason","warn","runReload","scheduleReload","makeZeroRecovery","onUpdateNeeded","onClientStateNotFound","onServerAckTimeout","input","label","consecutiveTimeouts","timeoutMs","logToConsole","level","context","args","prefix","Object","entries","value","join","method","logArgText","arg","Error","name","stack","isBenignStoreClosedLog","text","test","classifyMutationDesync","includes","classifyZeroRecoveryLog","nowMs","desync","prevMs","composeRecoveryLogSink","consumerLogSink","consumerFlush","flush","log","recovery","benignLogPatterns","some","pattern","matchesLogPattern","call","lastIndex","isRecoverableZeroStalePokeMessage","resetRecoveryStateForTests","length","clear"],"sources":["../../../src/helpers/recoverZeroClient.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["RECOVER_GUARD_MS","RELOAD_LATCH_TIMEOUT_MS","LOCAL_STORE_LOST","SQLITE_ERROR_NAME","SQLITE_STATEMENT_FINALIZED","STORE_CLOSED","STORE_CLOSED_REPEAT_MIN_MS","STORE_CLOSED_REPEAT_MAX_MS","reloadScheduled","reloadInProgress","reloadLatchTimer","pendingDeletes","inMemoryGuard","Map","defaultGuardStorage","window","sessionStorage","recoveryGuardOpen","reasonKey","guardStorage","key","now","Date","memLast","get","storage","rawLast","getItem","last","Number","setItem","String","set","lastStoreClosedAtMs","armReloadLatchTimeout","setTimeout","clearTimeout","unref","disarmReloadLatchTimeout","performReload","deps","Promise","resolve","doReload","reload","globalThis","location","then","allSettled","splice","map","run","beforeReload","catch","recover","message","dropLocalState","onRecovery","push","deleteLocalState","console","error","zeroEvents","emit","type","reason","dispatchEvent","CustomEvent","detail","warn","runReload","scheduleReload","makeZeroRecovery","onUpdateNeeded","onClientStateNotFound","onServerAckTimeout","input","label","consecutiveTimeouts","timeoutMs","logToConsole","level","context","args","prefix","Object","entries","value","join","method","logArgText","arg","Error","name","stack","isBenignStoreClosedLog","text","test","classifyMutationDesync","includes","classifyZeroRecoveryLog","nowMs","desync","prevMs","composeRecoveryLogSink","consumerLogSink","consumerFlush","flush","log","recovery","benignLogPatterns","some","pattern","matchesLogPattern","call","lastIndex","isRecoverableZeroStalePokeMessage","resetRecoveryStateForTests","length","clear"],"sources":["../../../src/helpers/recoverZeroClient.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
@@ -104,6 +104,15 @@ function recover(deps, reasonKey, message, dropLocalState) {
104
104
  reasonKey,
105
105
  reason: message
106
106
  });
107
+ try {
108
+ var _globalThis_dispatchEvent, _globalThis;
109
+ (_globalThis_dispatchEvent = (_globalThis = globalThis).dispatchEvent) === null || _globalThis_dispatchEvent === void 0 ? void 0 : _globalThis_dispatchEvent.call(_globalThis, new CustomEvent("on-zero-fatal", {
110
+ detail: {
111
+ reasonKey,
112
+ reason: message
113
+ }
114
+ }));
115
+ } catch (unused) {}
107
116
  return;
108
117
  }
109
118
  reloadScheduled = true;
@@ -1 +1 @@
1
- {"version":3,"names":["_instanceof","left","right","Symbol","hasInstance","_type_of","obj","constructor","RECOVER_GUARD_MS","RELOAD_LATCH_TIMEOUT_MS","LOCAL_STORE_LOST","SQLITE_ERROR_NAME","SQLITE_STATEMENT_FINALIZED","STORE_CLOSED","STORE_CLOSED_REPEAT_MIN_MS","STORE_CLOSED_REPEAT_MAX_MS","reloadScheduled","reloadInProgress","reloadLatchTimer","pendingDeletes","inMemoryGuard","Map","defaultGuardStorage","window","sessionStorage","unused","recoveryGuardOpen","reasonKey","guardStorage","_inMemoryGuard_get","key","now","Date","memLast","get","storage","rawLast","getItem","last","Number","setItem","String","set","lastStoreClosedAtMs","armReloadLatchTimeout","setTimeout","clearTimeout","unref","disarmReloadLatchTimeout","performReload","deps","_deps_reload","Promise","resolve","doReload","reload","_globalThis_location_reload","_globalThis_location","globalThis","location","call","then","allSettled","splice","map","run","_deps_beforeReload","beforeReload","catch","recover","message","dropLocalState","_deps_onRecovery","onRecovery","push","deleteLocalState","console","error","zeroEvents","emit","type","reason","warn","runReload","runReload2","scheduleReload","makeZeroRecovery","onUpdateNeeded","onClientStateNotFound","onServerAckTimeout","input","label","consecutiveTimeouts","timeoutMs","logToConsole","level","context","_len","arguments","length","args","Array","_key","prefix","Object","entries","param","value","join","method","logArgText","arg","Error","name","stack","isBenignStoreClosedLog","text","test","classifyMutationDesync","includes","classifyZeroRecoveryLog","nowMs","desync","prevMs","composeRecoveryLogSink","consumerLogSink"],"sources":["../../../src/helpers/recoverZeroClient.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_instanceof","left","right","Symbol","hasInstance","_type_of","obj","constructor","RECOVER_GUARD_MS","RELOAD_LATCH_TIMEOUT_MS","LOCAL_STORE_LOST","SQLITE_ERROR_NAME","SQLITE_STATEMENT_FINALIZED","STORE_CLOSED","STORE_CLOSED_REPEAT_MIN_MS","STORE_CLOSED_REPEAT_MAX_MS","reloadScheduled","reloadInProgress","reloadLatchTimer","pendingDeletes","inMemoryGuard","Map","defaultGuardStorage","window","sessionStorage","unused","recoveryGuardOpen","reasonKey","guardStorage","_inMemoryGuard_get","key","now","Date","memLast","get","storage","rawLast","getItem","last","Number","setItem","String","set","lastStoreClosedAtMs","armReloadLatchTimeout","setTimeout","clearTimeout","unref","disarmReloadLatchTimeout","performReload","deps","_deps_reload","Promise","resolve","doReload","reload","_globalThis_location_reload","_globalThis_location","globalThis","location","call","then","allSettled","splice","map","run","_deps_beforeReload","beforeReload","catch","recover","message","dropLocalState","_deps_onRecovery","onRecovery","push","deleteLocalState","console","error","zeroEvents","emit","type","reason","_globalThis_dispatchEvent","_globalThis","dispatchEvent","CustomEvent","detail","warn","runReload","runReload2","scheduleReload","makeZeroRecovery","onUpdateNeeded","onClientStateNotFound","onServerAckTimeout","input","label","consecutiveTimeouts","timeoutMs","logToConsole","level","context","_len","arguments","length","args","Array","_key","prefix","Object","entries","param","value","join","method","logArgText","arg","Error","name","stack","isBenignStoreClosedLog","text","test","classifyMutationDesync","includes","classifyZeroRecoveryLog","nowMs","desync","prevMs"],"sources":["../../../src/helpers/recoverZeroClient.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "on-zero",
3
- "version": "0.8.0",
3
+ "version": "0.8.1",
4
4
  "description": "A typed layer over @rocicorp/zero with queries, mutations, and permissions",
5
5
  "sideEffects": false,
6
6
  "files": [
@@ -29,9 +29,11 @@ import {
29
29
  type QueryControlMode,
30
30
  type UseQueryHook,
31
31
  } from './createUseQuery'
32
+ import { clearZeroClientData } from './helpers/clearZeroClientData'
32
33
  import { createMutators } from './helpers/createMutators'
33
34
  import { createEmitter, type Emitter } from './helpers/emitter'
34
35
  import { getAuth } from './helpers/getAuth'
36
+ import { readHostStorageScope } from './helpers/hostStorageScope'
35
37
  import { createMutationLifecycle } from './helpers/mutationLifecycle'
36
38
  import { IS_SERVER_RUNTIME } from './helpers/platform'
37
39
  import {
@@ -713,6 +715,34 @@ export function createZeroClientInternal<
713
715
  // eslint-disable-next-line react-hooks/exhaustive-deps
714
716
  }, [])
715
717
 
718
+ // host-scoped storage: composed here so embedding hosts isolate co-located
719
+ // apps without app code carrying host globals. static per page load — the
720
+ // host injects the scope before the app's module graph evaluates.
721
+ const hostScope = readHostStorageScope()
722
+ const scopedProps = hostScope
723
+ ? { ...props, storageKey: `${hostScope}-${props.storageKey ?? 'zero'}` }
724
+ : props
725
+
726
+ // expose the client proxy for harnesses/tests — set from the mounted
727
+ // provider (not module scope) so hot-reloaded trees always point at the
728
+ // live client.
729
+ ;(globalThis as { __testZero?: unknown }).__testZero = zero
730
+
731
+ // `?reset` on any URL clears local zero state, then reloads without the
732
+ // param — a universal escape hatch for corrupt local data.
733
+ useEffect(() => {
734
+ if (typeof window === 'undefined' || typeof window.location === 'undefined') return
735
+ if (!new URLSearchParams(window.location.search).has('reset')) return
736
+ const url = new URL(window.location.href)
737
+ url.searchParams.delete('reset')
738
+ void clearZeroClientData({
739
+ closeZero: async () => zero.close(),
740
+ reload: false,
741
+ }).then(() => {
742
+ window.location.replace(url.toString())
743
+ })
744
+ }, [])
745
+
716
746
  // remint() reconstructs the client in place by bumping this counter, which
717
747
  // changes instanceKey and drives the rotate effect exactly as a real
718
748
  // identity change does. register the bump so the imperative remint() API can
@@ -731,7 +761,7 @@ export function createZeroClientInternal<
731
761
  // props (callbacks, logSink, batchViewUpdates) are bound at construction.
732
762
  // remintGeneration is included so remint() forces a fresh instance.
733
763
  const instanceKey = JSON.stringify([
734
- Object.entries({ kvStore: 'mem', ...props })
764
+ Object.entries({ kvStore: 'mem', ...scopedProps })
735
765
  .filter(
736
766
  ([key, value]) =>
737
767
  key !== 'auth' && typeof value !== 'function' && value !== undefined
@@ -773,7 +803,7 @@ export function createZeroClientInternal<
773
803
  return
774
804
  }
775
805
  let cached = cachedZero
776
- const options = props as Omit<
806
+ const options = scopedProps as Omit<
777
807
  ZeroOptions<Schema, ZeroMutators>,
778
808
  'schema' | 'mutators'
779
809
  >
@@ -0,0 +1,81 @@
1
+ import { describe, expect, test } from 'vitest'
2
+
3
+ import {
4
+ generateGroupedQueriesFile,
5
+ generateModelsFile,
6
+ generateTablesFile,
7
+ } from './generate-helpers'
8
+
9
+ // the emitted files are modules, so every identifier they declare has to be
10
+ // unique. these cases all come from namespace names that are individually legal
11
+ // but previously aliased onto each other, producing output that did not compile.
12
+ function declaredIdentifiers(source: string): string[] {
13
+ const names: string[] = []
14
+ for (const line of source.split('\n')) {
15
+ const imported = line.match(/^import \* as ([$\w]+) from /)
16
+ if (imported) names.push(imported[1]!)
17
+ const declared = line.match(/^export const ([$\w]+) = /)
18
+ if (declared) names.push(declared[1]!)
19
+ const reexported = line.match(/^export \{ \w+ as ([$\w]+) \} from /)
20
+ if (reexported) names.push(reexported[1]!)
21
+ }
22
+ return names
23
+ }
24
+
25
+ function expectNoDuplicates(source: string) {
26
+ const names = declaredIdentifiers(source)
27
+ const duplicates = names.filter((name, index) => names.indexOf(name) !== index)
28
+ expect(duplicates).toEqual([])
29
+ return names
30
+ }
31
+
32
+ describe('generated module identifiers', () => {
33
+ test('grouped queries keep distinct aliases when one namespace is another plus Source', () => {
34
+ const source = generateGroupedQueriesFile([
35
+ { name: 'appById', sourceFile: 'app', importPath: '../app/queries' },
36
+ {
37
+ name: 'appSourceByAppId',
38
+ sourceFile: 'appSource',
39
+ importPath: '../appSource/queries',
40
+ },
41
+ ])
42
+
43
+ expectNoDuplicates(source)
44
+ // each namespace still exports its own queries, reading from its own module
45
+ const appExport = source.match(/export const app = \{([^}]*)\}/)![1]!
46
+ const appSourceExport = source.match(/export const appSource = \{([^}]*)\}/)![1]!
47
+ expect(appExport).toContain('appById')
48
+ expect(appSourceExport).toContain('appSourceByAppId')
49
+ expect(appExport).not.toContain('appSourceByAppId')
50
+ })
51
+
52
+ test('models keep distinct aliases when user and userPublic both exist', () => {
53
+ const source = generateModelsFile([
54
+ { name: 'user', importPath: '../user' },
55
+ { name: 'userPublic', importPath: '../userPublic' },
56
+ ] as Parameters<typeof generateModelsFile>[0])
57
+
58
+ expectNoDuplicates(source)
59
+ // both namespaces survive as distinct keys bound to their own module
60
+ const modelsObject = source.match(/export const models = \{([\s\S]*)\}/)![1]!
61
+ expect(modelsObject).toMatch(/\buser:/)
62
+ expect(modelsObject).toMatch(/\buserPublic\b/)
63
+ })
64
+
65
+ test('table re-exports keep distinct names when user and userPublic both exist', () => {
66
+ const source = generateTablesFile([
67
+ { name: 'user', importPath: '../user' },
68
+ { name: 'userPublic', importPath: '../userPublic' },
69
+ ] as Parameters<typeof generateTablesFile>[0])
70
+
71
+ expectNoDuplicates(source)
72
+ })
73
+
74
+ test('a namespace with no collision keeps its plain alias', () => {
75
+ const source = generateGroupedQueriesFile([
76
+ { name: 'todoById', sourceFile: 'todo', importPath: '../todo/queries' },
77
+ ])
78
+
79
+ expect(source).toContain(`import * as todoSource from '../todo/queries'`)
80
+ })
81
+ })
@@ -47,6 +47,32 @@ export function getModelImportName(name: string): string {
47
47
  return name === 'user' ? 'userPublic' : name
48
48
  }
49
49
 
50
+ /**
51
+ * Assigns each name a module alias that cannot collide with another namespace's
52
+ * name or with another alias. `app` and `appSource` are both legal namespaces,
53
+ * so a plain `${name}Source` suffix is not safe on its own; the same is true of
54
+ * the `user` → `userPublic` rename above when both namespaces exist. Emitting a
55
+ * duplicate identifier produces a generated file that does not compile, so the
56
+ * disambiguation has to happen here rather than in the consuming app.
57
+ *
58
+ * Iteration order is the caller's, so output stays deterministic.
59
+ */
60
+ export function uniqueModuleAliases(
61
+ names: readonly string[],
62
+ alias: (name: string) => string
63
+ ): Map<string, string> {
64
+ const taken = new Set<string>(names)
65
+ const aliases = new Map<string, string>()
66
+ for (const name of names) {
67
+ let candidate = alias(name)
68
+ // a candidate equal to its own name is the identity alias and always fine
69
+ while (candidate !== name && taken.has(candidate)) candidate += '_'
70
+ taken.add(candidate)
71
+ aliases.set(name, candidate)
72
+ }
73
+ return aliases
74
+ }
75
+
50
76
  // string-based type parser
51
77
 
52
78
  function splitTopLevelTypeUnion(type: string): string[] {
@@ -324,20 +350,23 @@ export type GeneratedInstance = {
324
350
 
325
351
  export function generateModelsFile(modules: GeneratedModule[]): string {
326
352
  const sorted = [...modules].sort((a, b) => a.name.localeCompare(b.name))
353
+ const aliases = uniqueModuleAliases(
354
+ sorted.map(({ name }) => name),
355
+ getModelImportName
356
+ )
327
357
 
328
358
  const imports = sorted
329
359
  .map(
330
- ({ name, importPath }) =>
331
- `import * as ${getModelImportName(name)} from '${importPath}'`
360
+ ({ name, importPath }) => `import * as ${aliases.get(name)!} from '${importPath}'`
332
361
  )
333
362
  .join('\n')
334
363
 
335
364
  const sortedByImportName = [...sorted].sort((a, b) =>
336
- getModelImportName(a.name).localeCompare(getModelImportName(b.name))
365
+ aliases.get(a.name)!.localeCompare(aliases.get(b.name)!)
337
366
  )
338
367
  const modelsObj = `export const models = {\n${sortedByImportName
339
368
  .map(({ name }) => {
340
- const importName = getModelImportName(name)
369
+ const importName = aliases.get(name)!
341
370
  return importName === name ? ` ${name},` : ` ${name}: ${importName},`
342
371
  })
343
372
  .join('\n')}\n}`
@@ -346,12 +375,14 @@ export function generateModelsFile(modules: GeneratedModule[]): string {
346
375
  }
347
376
 
348
377
  export function generateTypesFile(modelNames: string[]): string {
349
- const sorted = [...modelNames].sort()
378
+ const sorted = [...modelNames].sort((a, b) => a.localeCompare(b))
379
+ // must match generateTablesFile: these types index into the schema names it exports
380
+ const aliases = uniqueModuleAliases(sorted, getModelImportName)
350
381
 
351
382
  const typeExports = sorted
352
383
  .map((name) => {
353
384
  const pascalName = name.charAt(0).toUpperCase() + name.slice(1)
354
- const schemaName = getModelImportName(name)
385
+ const schemaName = aliases.get(name)!
355
386
  return `export type ${pascalName} = TableInsertRow<typeof schema.${schemaName}>\nexport type ${pascalName}Update = TableUpdateRow<typeof schema.${schemaName}>`
356
387
  })
357
388
  .join('\n\n')
@@ -361,11 +392,15 @@ export function generateTypesFile(modelNames: string[]): string {
361
392
 
362
393
  export function generateTablesFile(modules: GeneratedModule[]): string {
363
394
  const sorted = [...modules].sort((a, b) => a.name.localeCompare(b.name))
395
+ const aliases = uniqueModuleAliases(
396
+ sorted.map(({ name }) => name),
397
+ getModelImportName
398
+ )
364
399
 
365
400
  const exports = sorted
366
401
  .map(
367
402
  ({ name, importPath }) =>
368
- `export { schema as ${getModelImportName(name)} } from '${importPath}'`
403
+ `export { schema as ${aliases.get(name)!} } from '${importPath}'`
369
404
  )
370
405
  .join('\n')
371
406
 
@@ -445,19 +480,21 @@ export function generateGroupedQueriesFile(
445
480
  }
446
481
 
447
482
  const sortedFiles = [...queryByFile.keys()].sort()
483
+ const aliases = uniqueModuleAliases(sortedFiles, (file) => `${file}Source`)
448
484
  const imports = sortedFiles
449
485
  .map(
450
486
  (file) =>
451
- `import * as ${file}Source from '${queryByFile.get(file)![0]!.importPath}'`
487
+ `import * as ${aliases.get(file)!} from '${queryByFile.get(file)![0]!.importPath}'`
452
488
  )
453
489
  .join('\n')
454
490
  const exports = sortedFiles
455
491
  .map((file) => {
492
+ const alias = aliases.get(file)!
456
493
  const names = queryByFile
457
494
  .get(file)!
458
495
  .map((query) => query.name)
459
496
  .sort()
460
- return `export const ${file} = {\n${names.map((name) => ` ${name}: ${file}Source.${name},`).join('\n')}\n}`
497
+ return `export const ${file} = {\n${names.map((name) => ` ${name}: ${alias}.${name},`).join('\n')}\n}`
461
498
  })
462
499
  .join('\n\n')
463
500
 
@@ -224,11 +224,25 @@ function hasParseErrors(source: ts.SourceFile): boolean {
224
224
  )
225
225
  }
226
226
 
227
- function hasNamespaceExports(
227
+ /**
228
+ * Which kinds of data exports a single-file namespace declares.
229
+ *
230
+ * `model` covers the exports that belong in generated `models.ts`: `mutate`,
231
+ * `where`, and a `schema` table declaration. `query` covers exported functions
232
+ * that reach a query builder. The two are reported separately because a
233
+ * query-only file must NOT enter models — a models entry with no `mutate` makes
234
+ * `GetZeroMutators` fail its constraint, which silently degrades EVERY
235
+ * `zero.mutate.*` call site in the app to an untyped error. Folder namespaces
236
+ * already get this right by construction (no `mutations.ts` means no model).
237
+ */
238
+ type NamespaceExportKinds = { model: boolean; query: boolean }
239
+
240
+ function namespaceExportKinds(
228
241
  ts: typeof import('typescript'),
229
242
  baseDir: string,
230
243
  path: string
231
- ): boolean {
244
+ ): NamespaceExportKinds {
245
+ const none: NamespaceExportKinds = { model: false, query: false }
232
246
  const source = ts.createSourceFile(
233
247
  path,
234
248
  readFileSync(path, 'utf8'),
@@ -238,7 +252,7 @@ function hasNamespaceExports(
238
252
  if (hasParseErrors(source)) {
239
253
  const displayPath = relative(dirname(baseDir), path).split(sep).join('/')
240
254
  console.warn(`[on-zero] ignoring ${displayPath}: no recognized data exports`)
241
- return false
255
+ return none
242
256
  }
243
257
  const functions = new Map<string, ts.ConciseBody>()
244
258
  const exported = new Set<string>()
@@ -259,7 +273,7 @@ function hasNamespaceExports(
259
273
  (name === 'where' && initializerText.startsWith('serverWhere(')) ||
260
274
  (name === 'schema' && initializerText.startsWith('table('))
261
275
  ) {
262
- return true
276
+ return { model: true, query: false }
263
277
  }
264
278
  }
265
279
  if (ts.isArrowFunction(initializer) || ts.isFunctionExpression(initializer)) {
@@ -308,7 +322,8 @@ function hasNamespaceExports(
308
322
  return found
309
323
  }
310
324
 
311
- return [...exported].some((name) => reachesQuery(functions.get(name)!))
325
+ const query = [...exported].some((name) => reachesQuery(functions.get(name)!))
326
+ return { model: false, query }
312
327
  }
313
328
 
314
329
  function discoverNamespaces(
@@ -324,13 +339,16 @@ function discoverNamespaces(
324
339
  if (entry.isFile()) {
325
340
  if (!isSourceFile(entry.name) || entry.name === 'on-zero.config.ts') continue
326
341
  const path = resolve(instance.dir, entry.name)
327
- if (!hasNamespaceExports(ts, baseDir, path)) continue
342
+ const kinds = namespaceExportKinds(ts, baseDir, path)
343
+ if (!kinds.model && !kinds.query) continue
328
344
  const name = basename(entry.name, '.ts')
329
345
  namespaces.push({
330
346
  name,
331
347
  instance: instance.name,
332
348
  queryPath: path,
333
- modelPath: path,
349
+ // a query-only file is not a model, matching the folder layout where a
350
+ // missing mutations.ts leaves modelPath null
351
+ modelPath: kinds.model ? path : null,
334
352
  sourcePaths: [path],
335
353
  })
336
354
  continue
@@ -719,7 +737,8 @@ function assertNoUnclaimedNamespaces(
719
737
  ) {
720
738
  continue
721
739
  }
722
- if (hasNamespaceExports(ts, baseDir, path)) {
740
+ const kinds = namespaceExportKinds(ts, baseDir, path)
741
+ if (kinds.model || kinds.query) {
723
742
  throw new Error(
724
743
  `[on-zero] data namespace ${path} is outside every instance directory declared in ${configPath}`
725
744
  )
@@ -611,16 +611,18 @@ export const messages = () => zql.message.related('author')
611
611
  allTables: ['account', 'audit', 'message'],
612
612
  })
613
613
 
614
+ // only message.ts is a model: account.ts exports a query and no mutate,
615
+ // where, or table declaration, so it must not enter models.ts
614
616
  await expect(
615
617
  generate({
616
618
  dir: dataDir(),
617
619
  config: join(dataDir(), 'on-zero.config.ts'),
618
620
  silent: true,
619
621
  })
620
- ).resolves.toMatchObject({ modelCount: 2, schemaCount: 1 })
621
- expect(readFileSync(join(dataDir(), 'generated/models.ts'), 'utf8')).toContain(
622
- "from '../../project-data/message'"
623
- )
622
+ ).resolves.toMatchObject({ modelCount: 1, schemaCount: 1 })
623
+ const models = readFileSync(join(dataDir(), 'generated/models.ts'), 'utf8')
624
+ expect(models).toContain("from '../../project-data/message'")
625
+ expect(models).not.toContain('account')
624
626
  })
625
627
 
626
628
  test('rejects missing configured instance directories', async () => {
@@ -0,0 +1,19 @@
1
+ // an embedding host that runs many apps on one origin (a preview shell, a
2
+ // multi-app runner) injects a storage scope before the app's module graph
3
+ // evaluates; on-zero folds it into every storage key so co-located apps never
4
+ // share local zero state. same-origin iframes read the top window so the host
5
+ // sets it in exactly one place. standalone apps have no scope.
6
+ type ScopedGlobal = { __on_zero_storage_scope?: string }
7
+
8
+ export function readHostStorageScope(): string | undefined {
9
+ const runtime = globalThis as ScopedGlobal
10
+ if (typeof window !== 'undefined') {
11
+ try {
12
+ const top = (window.top ?? window) as unknown as ScopedGlobal
13
+ if (top.__on_zero_storage_scope) return top.__on_zero_storage_scope
14
+ } catch {
15
+ // cross-origin top window: not an embedding host
16
+ }
17
+ }
18
+ return runtime.__on_zero_storage_scope
19
+ }
@@ -224,6 +224,14 @@ function recover(
224
224
  if (!recoveryGuardOpen(reasonKey, deps.guardStorage)) {
225
225
  console.error(`[on-zero] ${message} — already recovered once, not reloading`)
226
226
  deps.zeroEvents.emit({ type: 'fatal', reasonKey, reason: message })
227
+ // hosts embedding this app (preview shells, test harnesses) observe the
228
+ // terminal state without sharing the module instance: a plain event on the
229
+ // realm's global scope.
230
+ try {
231
+ globalThis.dispatchEvent?.(
232
+ new CustomEvent('on-zero-fatal', { detail: { reasonKey, reason: message } })
233
+ )
234
+ } catch {}
227
235
  return
228
236
  }
229
237
  reloadScheduled = true
@@ -1 +1 @@
1
- {"version":3,"file":"createZeroClient.d.ts","sourceRoot":"","sources":["../src/createZeroClient.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"createZeroClient.d.ts","sourceRoot":"","sources":["../src/createZeroClient.tsx"],"names":[],"mappings":"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"}
@@ -19,6 +19,17 @@ export type ModelMutations = {
19
19
  export declare function shouldSkipObjectKey(name: string): boolean;
20
20
  export declare function formatObjectKey(name: string): string;
21
21
  export declare function getModelImportName(name: string): string;
22
+ /**
23
+ * Assigns each name a module alias that cannot collide with another namespace's
24
+ * name or with another alias. `app` and `appSource` are both legal namespaces,
25
+ * so a plain `${name}Source` suffix is not safe on its own; the same is true of
26
+ * the `user` → `userPublic` rename above when both namespaces exist. Emitting a
27
+ * duplicate identifier produces a generated file that does not compile, so the
28
+ * disambiguation has to happen here rather than in the consuming app.
29
+ *
30
+ * Iteration order is the caller's, so output stays deterministic.
31
+ */
32
+ export declare function uniqueModuleAliases(names: readonly string[], alias: (name: string) => string): Map<string, string>;
22
33
  export declare function parseTypeString(type: string): string | null;
23
34
  export type GeneratedModule = {
24
35
  name: string;