doxum 0.1.22 → 0.1.25

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/README.md +210 -105
  2. package/dist/advanced.cjs +237 -2
  3. package/dist/advanced.cjs.map +1 -0
  4. package/dist/advanced.d.cts +98 -2
  5. package/dist/advanced.d.ts +98 -2
  6. package/dist/advanced.js +236 -1
  7. package/dist/advanced.js.map +1 -0
  8. package/dist/{contract-CRrZ-3sF.d.cts → contract-DB8XvNt0.d.cts} +102 -99
  9. package/dist/{contract-CxiNcqMn.d.ts → contract-Dawq6LKS.d.ts} +102 -99
  10. package/dist/definition-CHVS-RDY.d.cts +110 -0
  11. package/dist/definition-DT1NpMul.d.ts +110 -0
  12. package/dist/driver-B5vdPohL.js +385 -0
  13. package/dist/driver-B5vdPohL.js.map +1 -0
  14. package/dist/driver-BL91gn7_.cjs +480 -0
  15. package/dist/driver-BL91gn7_.cjs.map +1 -0
  16. package/dist/index.cjs +3489 -954
  17. package/dist/index.cjs.map +1 -1
  18. package/dist/index.d.cts +66 -32
  19. package/dist/index.d.ts +66 -32
  20. package/dist/index.js +4114 -1579
  21. package/dist/index.js.map +1 -1
  22. package/dist/local-sync.cjs +69 -103
  23. package/dist/local-sync.cjs.map +1 -1
  24. package/dist/local-sync.d.cts +14 -26
  25. package/dist/local-sync.d.ts +14 -26
  26. package/dist/local-sync.js +68 -96
  27. package/dist/local-sync.js.map +1 -1
  28. package/dist/react.cjs +6 -75
  29. package/dist/react.cjs.map +1 -1
  30. package/dist/react.d.cts +6 -9
  31. package/dist/react.d.ts +6 -9
  32. package/dist/react.js +7 -76
  33. package/dist/react.js.map +1 -1
  34. package/dist/record-B2yRhYsc.js +28 -0
  35. package/dist/record-B2yRhYsc.js.map +1 -0
  36. package/dist/record-ChYUi8PP.cjs +45 -0
  37. package/dist/record-ChYUi8PP.cjs.map +1 -0
  38. package/dist/scheduler--137L3j-.js +500 -0
  39. package/dist/scheduler--137L3j-.js.map +1 -0
  40. package/dist/scheduler-D4VthaaK.cjs +589 -0
  41. package/dist/scheduler-D4VthaaK.cjs.map +1 -0
  42. package/package.json +5 -8
  43. package/skills/doxum-runtime/SKILL.md +28 -8
  44. package/skills/doxum-runtime/agents/openai.yaml +1 -1
  45. package/skills/doxum-runtime/references/api.en.md +243 -0
  46. package/skills/doxum-runtime/references/api.zh-CN.md +236 -0
  47. package/skills/doxum-runtime/references/guide.en.md +26 -14
  48. package/skills/doxum-runtime/references/guide.zh-CN.md +21 -11
  49. package/skills/doxum-runtime/references/invariants.en.md +32 -6
  50. package/skills/doxum-runtime/references/invariants.zh-CN.md +26 -7
  51. package/skills/doxum-runtime/references/patterns.en.md +78 -18
  52. package/skills/doxum-runtime/references/patterns.zh-CN.md +76 -18
  53. package/skills/doxum-runtime/references/projections.en.md +206 -119
  54. package/skills/doxum-runtime/references/projections.zh-CN.md +197 -101
  55. package/dist/access-CZXv_DIF.js +0 -958
  56. package/dist/access-CZXv_DIF.js.map +0 -1
  57. package/dist/access-D64MFRSm.cjs +0 -1101
  58. package/dist/access-D64MFRSm.cjs.map +0 -1
  59. package/dist/advanced-BTStm2cW.js +0 -1192
  60. package/dist/advanced-BTStm2cW.js.map +0 -1
  61. package/dist/advanced-CqrR_4dh.d.ts +0 -176
  62. package/dist/advanced-CyR5o3Xr.d.cts +0 -176
  63. package/dist/advanced-GKZ-CZ6a.cjs +0 -1365
  64. package/dist/advanced-GKZ-CZ6a.cjs.map +0 -1
  65. package/dist/driver-BC06FEMF.cjs +0 -241
  66. package/dist/driver-BC06FEMF.cjs.map +0 -1
  67. package/dist/driver-BqRjwFmU.js +0 -200
  68. package/dist/driver-BqRjwFmU.js.map +0 -1
  69. package/dist/integration-BqDw7e2w.cjs +0 -30
  70. package/dist/integration-BqDw7e2w.cjs.map +0 -1
  71. package/dist/integration-CSXaF8HP.js +0 -25
  72. package/dist/integration-CSXaF8HP.js.map +0 -1
  73. package/dist/integration.cjs +0 -13
  74. package/dist/integration.d.cts +0 -17
  75. package/dist/integration.d.ts +0 -17
  76. package/dist/integration.js +0 -5
  77. package/dist/issue-9U6YLYz3.js +0 -647
  78. package/dist/issue-9U6YLYz3.js.map +0 -1
  79. package/dist/issue-Bo0FIO3b.cjs +0 -886
  80. package/dist/issue-Bo0FIO3b.cjs.map +0 -1
  81. package/dist/notification-CrZHVx3a.js +0 -176
  82. package/dist/notification-CrZHVx3a.js.map +0 -1
  83. package/dist/notification-DFoA9bQY.cjs +0 -235
  84. package/dist/notification-DFoA9bQY.cjs.map +0 -1
@@ -1,200 +0,0 @@
1
- import { S as validNode, i as AddressIndex, n as fail, w as isPlainObject } from "./issue-9U6YLYz3.js";
2
- //#region core/src/mutation/changes.ts
3
- const validated = /* @__PURE__ */ new WeakSet();
4
- const compareChanges = (a, b) => {
5
- if (a.kind === "reset" || b.kind === "reset") return a.kind === b.kind ? 0 : a.kind === "reset" ? -1 : 1;
6
- const length = Math.min(a.at.length, b.at.length);
7
- for (let i = 0; i < length; i++) if (a.at[i] !== b.at[i]) return lexical(a.at[i], b.at[i]);
8
- return a.at.length - b.at.length || lexical(a.kind, b.kind);
9
- };
10
- const publication = (changes) => {
11
- const result = { changes };
12
- validated.add(result);
13
- return result;
14
- };
15
- /** Register complete recorder groups; unknown input is validated separately. */
16
- const sealChanges = (changes) => {
17
- changes.sort(compareChanges);
18
- return publication(changes);
19
- };
20
- const keys = (value, expected) => Object.keys(value).every((key) => expected.includes(key));
21
- const strings = (value) => {
22
- if (!Array.isArray(value)) return false;
23
- for (const item of value) if (typeof item !== "string") return false;
24
- return true;
25
- };
26
- const order = (value) => strings(value) && new Set(value).size === value.length;
27
- const transition = (value, key) => {
28
- if (!isPlainObject(value) || typeof value[key] !== "string") return false;
29
- if (value.kind === "added") return keys(value, [
30
- "kind",
31
- key,
32
- "after"
33
- ]) && Object.hasOwn(value, "after");
34
- if (value.kind === "removed") return keys(value, [
35
- "kind",
36
- key,
37
- "before"
38
- ]) && Object.hasOwn(value, "before");
39
- return value.kind === "updated" && keys(value, [
40
- "kind",
41
- key,
42
- "before",
43
- "after"
44
- ]) && Object.hasOwn(value, "before") && Object.hasOwn(value, "after");
45
- };
46
- const lexical = (a, b) => a < b ? -1 : a === b ? 0 : 1;
47
- /** The sole unknown ChangeSet boundary, including normalized logical-address conflicts. */
48
- const decodeChanges = (input) => {
49
- if (typeof input === "object" && input !== null && validated.has(input)) return input;
50
- if (!isPlainObject(input) || !keys(input, ["changes"]) || !Array.isArray(input.changes)) return fail([], "invalid-changes", "Expected a ChangeSet.");
51
- const result = [];
52
- for (const entry of input.changes) {
53
- if (!isPlainObject(entry)) return fail([], "invalid-changes", "Expected a change.");
54
- if (entry.kind === "reset") {
55
- if (input.changes.length !== 1 || !keys(entry, [
56
- "kind",
57
- "before",
58
- "after"
59
- ]) || !Object.hasOwn(entry, "before") || !Object.hasOwn(entry, "after")) return fail([], "invalid-changes", "A reset must be the only change and contain both values.");
60
- return sealChanges([{
61
- kind: "reset",
62
- before: entry.before,
63
- after: entry.after
64
- }]);
65
- }
66
- if (!strings(entry.at)) return fail([], "invalid-changes", "Change addresses must contain strings.");
67
- const at = entry.at;
68
- if (entry.kind === "members" && keys(entry, [
69
- "kind",
70
- "at",
71
- "members",
72
- "order"
73
- ]) && Array.isArray(entry.members) && (entry.members.length || Object.hasOwn(entry, "order"))) {
74
- const seen = /* @__PURE__ */ new Set();
75
- const members = [];
76
- for (const member of entry.members) {
77
- if (!transition(member, "key") || typeof member.key !== "string" || seen.has(member.key)) return fail(at, "invalid-changes", "Malformed or duplicate member transition.");
78
- seen.add(member.key);
79
- members.push({
80
- ...member,
81
- key: member.key
82
- });
83
- }
84
- const change = {
85
- kind: "members",
86
- at,
87
- members: members.sort((a, b) => lexical(a.key, b.key))
88
- };
89
- if (Object.hasOwn(entry, "order")) {
90
- if (!isPlainObject(entry.order) || !keys(entry.order, ["before", "after"]) || !order(entry.order.before) || !order(entry.order.after)) return fail(at, "invalid-changes", "Malformed container order.");
91
- result.push({
92
- ...change,
93
- order: {
94
- before: entry.order.before,
95
- after: entry.order.after
96
- }
97
- });
98
- } else result.push(change);
99
- } else if (entry.kind === "tree" && keys(entry, [
100
- "kind",
101
- "at",
102
- "before",
103
- "after",
104
- "nodes"
105
- ]) && (entry.before === null || typeof entry.before === "string") && (entry.after === null || typeof entry.after === "string") && Array.isArray(entry.nodes)) {
106
- const seen = /* @__PURE__ */ new Set();
107
- for (const node of entry.nodes) {
108
- if (!transition(node, "id") || typeof node.id !== "string" || seen.has(node.id) || node.kind !== "added" && !validNode(node.before) || node.kind !== "removed" && !validNode(node.after)) return fail(at, "invalid-changes", "Malformed or duplicate tree transition.");
109
- seen.add(node.id);
110
- }
111
- const nodes = entry.nodes;
112
- result.push({
113
- kind: "tree",
114
- at,
115
- before: entry.before,
116
- after: entry.after,
117
- nodes: [...nodes].sort((a, b) => lexical(a.id, b.id))
118
- });
119
- } else return fail(at, "invalid-changes", "Unknown or malformed change.");
120
- }
121
- return publication(normalizeChanges(result));
122
- };
123
- const normalizeChanges = (changes) => {
124
- const sorted = changes.sort(compareChanges);
125
- const groups = new AddressIndex();
126
- const replacements = new AddressIndex();
127
- const orders = new AddressIndex();
128
- for (const change of sorted) {
129
- if (change.kind === "reset") continue;
130
- if (change.kind === "members") {
131
- if (groups.exact(change.at)?.size) return fail(change.at, "invalid-changes", "Duplicate member group.");
132
- groups.add(change.at, true);
133
- if (change.order) {
134
- if (replacements.hasAncestor(change.at)) return fail(change.at, "invalid-changes", "Overlapping container order.");
135
- orders.add(change.at, true);
136
- }
137
- for (const member of change.members) {
138
- const at = change.at.concat(member.key);
139
- if (replacements.overlaps(at) || orders.hasDescendant(at)) return fail(at, "invalid-changes", "Overlapping member transitions.");
140
- replacements.add(at, true);
141
- }
142
- } else if (change.kind === "tree") {
143
- if (replacements.overlaps(change.at) || orders.hasDescendant(change.at)) return fail(change.at, "invalid-changes", "Overlapping tree transitions.");
144
- replacements.add(change.at, true);
145
- }
146
- }
147
- return sorted;
148
- };
149
- const changeCount = (changes) => {
150
- let count = 0;
151
- for (const change of changes.changes) count += change.kind === "members" ? change.members.length + (change.order ? 1 : 0) : change.kind === "tree" ? 1 + change.nodes.length : 1;
152
- return count;
153
- };
154
- //#endregion
155
- //#region core/src/runtime/driver.ts
156
- const states = /* @__PURE__ */ new WeakMap();
157
- const stateOf = (runtime) => {
158
- const state = states.get(runtime);
159
- if (!state) throw new Error("Unknown Doxum runtime.");
160
- return state;
161
- };
162
- const bindRuntimeDriver = (runtime) => {
163
- states.set(runtime, {
164
- driver: void 0,
165
- bypassDepth: 0
166
- });
167
- };
168
- const assertRuntimeWritable = (runtime, intent) => {
169
- const state = stateOf(runtime);
170
- if (state.bypassDepth === 0) state.driver?.assertWritable(intent);
171
- };
172
- const installRuntimeWriteDriver = (runtime, driver) => {
173
- const state = stateOf(runtime);
174
- if (state.driver) throw new Error("Doxum runtime already has a write driver.");
175
- state.driver = driver;
176
- let active = true;
177
- return Object.freeze({
178
- run: (run) => {
179
- if (!active) throw new Error("Doxum runtime write driver is no longer active.");
180
- state.bypassDepth += 1;
181
- try {
182
- return run();
183
- } finally {
184
- state.bypassDepth -= 1;
185
- }
186
- },
187
- dispose: () => {
188
- if (!active) return;
189
- active = false;
190
- if (state.driver === driver) state.driver = void 0;
191
- }
192
- });
193
- };
194
- const disposeRuntimeDriver = (runtime) => {
195
- states.delete(runtime);
196
- };
197
- //#endregion
198
- export { changeCount as a, installRuntimeWriteDriver as i, bindRuntimeDriver as n, decodeChanges as o, disposeRuntimeDriver as r, sealChanges as s, assertRuntimeWritable as t };
199
-
200
- //# sourceMappingURL=driver-BqRjwFmU.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"driver-BqRjwFmU.js","names":[],"sources":["../core/src/mutation/changes.ts","../core/src/runtime/driver.ts"],"sourcesContent":["import type { Change, ChangeSet, MemberChange, ValueTransition } from '../changes';\nimport { isPlainObject } from '../value/ownership';\nimport { AddressIndex } from '../address';\nimport { fail } from './issue';\nimport { validNode } from './tree';\n\nconst validated = new WeakSet<ChangeSet>();\n\nconst compareChanges = (a: Change, b: Change): number => {\n if (a.kind === 'reset' || b.kind === 'reset')\n return a.kind === b.kind ? 0 : a.kind === 'reset' ? -1 : 1;\n const length = Math.min(a.at.length, b.at.length);\n for (let i = 0; i < length; i++) if (a.at[i] !== b.at[i]) return lexical(a.at[i], b.at[i]);\n return a.at.length - b.at.length || lexical(a.kind, b.kind);\n};\n\nconst publication = (changes: Change[]): ChangeSet => {\n const result = { changes };\n validated.add(result);\n return result;\n};\n\n/** Register complete recorder groups; unknown input is validated separately. */\nexport const sealChanges = (changes: Change[]): ChangeSet => {\n changes.sort(compareChanges);\n return publication(changes);\n};\n\nconst keys = (value: Record<string, unknown>, expected: readonly string[]) =>\n Object.keys(value).every(key => expected.includes(key));\nconst strings = (value: unknown): value is readonly string[] => {\n if (!Array.isArray(value)) return false;\n for (const item of value) if (typeof item !== 'string') return false;\n return true;\n};\nconst order = (value: unknown): value is readonly string[] =>\n strings(value) && new Set(value).size === value.length;\nconst transition = (\n value: unknown,\n key: 'key' | 'id'\n): value is ValueTransition & Record<string, unknown> => {\n if (!isPlainObject(value) || typeof value[key] !== 'string') return false;\n if (value.kind === 'added')\n return keys(value, ['kind', key, 'after']) && Object.hasOwn(value, 'after');\n if (value.kind === 'removed')\n return keys(value, ['kind', key, 'before']) && Object.hasOwn(value, 'before');\n return (\n value.kind === 'updated' &&\n keys(value, ['kind', key, 'before', 'after']) &&\n Object.hasOwn(value, 'before') &&\n Object.hasOwn(value, 'after')\n );\n};\nconst lexical = (a: string, b: string) => (a < b ? -1 : a === b ? 0 : 1);\n\n/** The sole unknown ChangeSet boundary, including normalized logical-address conflicts. */\nexport const decodeChanges = (input: unknown): ChangeSet => {\n if (typeof input === 'object' && input !== null && validated.has(input as ChangeSet))\n return input as ChangeSet;\n if (!isPlainObject(input) || !keys(input, ['changes']) || !Array.isArray(input.changes))\n return fail([], 'invalid-changes', 'Expected a ChangeSet.');\n const result: Change[] = [];\n for (const entry of input.changes) {\n if (!isPlainObject(entry)) return fail([], 'invalid-changes', 'Expected a change.');\n if (entry.kind === 'reset') {\n if (\n input.changes.length !== 1 ||\n !keys(entry, ['kind', 'before', 'after']) ||\n !Object.hasOwn(entry, 'before') ||\n !Object.hasOwn(entry, 'after')\n )\n return fail(\n [],\n 'invalid-changes',\n 'A reset must be the only change and contain both values.'\n );\n return sealChanges([{ kind: 'reset', before: entry.before, after: entry.after }]);\n }\n if (!strings(entry.at))\n return fail([], 'invalid-changes', 'Change addresses must contain strings.');\n const at = entry.at;\n if (\n entry.kind === 'members' &&\n keys(entry, ['kind', 'at', 'members', 'order']) &&\n Array.isArray(entry.members) &&\n (entry.members.length || Object.hasOwn(entry, 'order'))\n ) {\n const seen = new Set<string>();\n const members: MemberChange[] = [];\n for (const member of entry.members) {\n if (!transition(member, 'key') || typeof member.key !== 'string' || seen.has(member.key))\n return fail(at, 'invalid-changes', 'Malformed or duplicate member transition.');\n seen.add(member.key);\n members.push({ ...member, key: member.key });\n }\n const change: Extract<Change, { kind: 'members' }> = {\n kind: 'members',\n at,\n members: members.sort((a, b) => lexical(a.key, b.key)),\n };\n if (Object.hasOwn(entry, 'order')) {\n if (\n !isPlainObject(entry.order) ||\n !keys(entry.order, ['before', 'after']) ||\n !order(entry.order.before) ||\n !order(entry.order.after)\n )\n return fail(at, 'invalid-changes', 'Malformed container order.');\n result.push({ ...change, order: { before: entry.order.before, after: entry.order.after } });\n } else result.push(change);\n } else if (\n entry.kind === 'tree' &&\n keys(entry, ['kind', 'at', 'before', 'after', 'nodes']) &&\n (entry.before === null || typeof entry.before === 'string') &&\n (entry.after === null || typeof entry.after === 'string') &&\n Array.isArray(entry.nodes)\n ) {\n const seen = new Set<string>();\n for (const node of entry.nodes) {\n if (\n !transition(node, 'id') ||\n typeof node.id !== 'string' ||\n seen.has(node.id) ||\n (node.kind !== 'added' && !validNode(node.before)) ||\n (node.kind !== 'removed' && !validNode(node.after))\n )\n return fail(at, 'invalid-changes', 'Malformed or duplicate tree transition.');\n seen.add(node.id);\n }\n const nodes = entry.nodes as Extract<Change, { kind: 'tree' }>['nodes'];\n result.push({\n kind: 'tree',\n at,\n before: entry.before,\n after: entry.after,\n nodes: [...nodes].sort((a, b) => lexical(a.id, b.id)),\n });\n } else return fail(at, 'invalid-changes', 'Unknown or malformed change.');\n }\n return publication(normalizeChanges(result));\n};\n\nconst normalizeChanges = (changes: Change[]): Change[] => {\n const sorted = changes.sort(compareChanges);\n const groups = new AddressIndex<true>();\n const replacements = new AddressIndex<true>();\n const orders = new AddressIndex<true>();\n for (const change of sorted) {\n if (change.kind === 'reset') continue;\n if (change.kind === 'members') {\n if (groups.exact(change.at)?.size)\n return fail(change.at, 'invalid-changes', 'Duplicate member group.');\n groups.add(change.at, true);\n if (change.order) {\n if (replacements.hasAncestor(change.at))\n return fail(change.at, 'invalid-changes', 'Overlapping container order.');\n orders.add(change.at, true);\n }\n for (const member of change.members) {\n const at = change.at.concat(member.key);\n if (replacements.overlaps(at) || orders.hasDescendant(at))\n return fail(at, 'invalid-changes', 'Overlapping member transitions.');\n replacements.add(at, true);\n }\n } else if (change.kind === 'tree') {\n if (replacements.overlaps(change.at) || orders.hasDescendant(change.at))\n return fail(change.at, 'invalid-changes', 'Overlapping tree transitions.');\n replacements.add(change.at, true);\n }\n }\n return sorted;\n};\n\nexport const changeCount = (changes: ChangeSet): number => {\n let count = 0;\n for (const change of changes.changes)\n count +=\n change.kind === 'members'\n ? change.members.length + (change.order ? 1 : 0)\n : change.kind === 'tree'\n ? 1 + change.nodes.length\n : 1;\n return count;\n};\n","import type { CommitSource, DocumentRuntime } from './contract';\nimport type { ObjectNode } from '../schema';\n\nexport type RuntimeWriteIntent =\n | { readonly kind: 'update'; readonly source: Extract<CommitSource, 'local' | 'system'> }\n | { readonly kind: 'apply'; readonly source: CommitSource }\n | { readonly kind: 'replace'; readonly source: Extract<CommitSource, 'system' | 'remote'> };\n\nexport type RuntimeWriteDriver = {\n readonly assertWritable: (intent: RuntimeWriteIntent) => void;\n};\n\nexport type RuntimeWriteDriverLease = {\n readonly run: <TResult>(run: () => TResult) => TResult;\n readonly dispose: () => void;\n};\n\ntype RuntimeDriverState = {\n driver: RuntimeWriteDriver | undefined;\n bypassDepth: number;\n};\n\nconst states = new WeakMap<object, RuntimeDriverState>();\n\nconst stateOf = (runtime: object): RuntimeDriverState => {\n const state = states.get(runtime);\n if (!state) throw new Error('Unknown Doxum runtime.');\n return state;\n};\n\nexport const bindRuntimeDriver = (runtime: object): void => {\n states.set(runtime, { driver: undefined, bypassDepth: 0 });\n};\n\nexport const assertRuntimeWritable = (runtime: object, intent: RuntimeWriteIntent): void => {\n const state = stateOf(runtime);\n if (state.bypassDepth === 0) state.driver?.assertWritable(intent);\n};\n\nexport const installRuntimeWriteDriver = <TSchema extends ObjectNode>(\n runtime: DocumentRuntime<TSchema>,\n driver: RuntimeWriteDriver\n): RuntimeWriteDriverLease => {\n const state = stateOf(runtime);\n if (state.driver) throw new Error('Doxum runtime already has a write driver.');\n state.driver = driver;\n let active = true;\n return Object.freeze({\n run: <TResult>(run: () => TResult): TResult => {\n if (!active) throw new Error('Doxum runtime write driver is no longer active.');\n state.bypassDepth += 1;\n try {\n return run();\n } finally {\n state.bypassDepth -= 1;\n }\n },\n dispose: (): void => {\n if (!active) return;\n active = false;\n if (state.driver === driver) state.driver = undefined;\n },\n });\n};\n\nexport const disposeRuntimeDriver = (runtime: object): void => {\n states.delete(runtime);\n};\n"],"mappings":"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"}
@@ -1,30 +0,0 @@
1
- const require_access = require("./access-D64MFRSm.cjs");
2
- //#region core/src/access/dependency.ts
3
- const createDependencyTracker = () => {
4
- const targets = [];
5
- return {
6
- record: (value) => {
7
- if (!targets.some((entry) => require_access.same(entry, value))) targets.push(value);
8
- },
9
- snapshot: () => Object.freeze(targets.slice())
10
- };
11
- };
12
- //#endregion
13
- //#region core/src/integration.ts
14
- const track = (runtime, selector) => {
15
- const dependencies = createDependencyTracker();
16
- const value = require_access.readWith(runtime, selector, dependencies);
17
- return Object.freeze({
18
- value,
19
- targets: dependencies.snapshot()
20
- });
21
- };
22
- //#endregion
23
- Object.defineProperty(exports, "track", {
24
- enumerable: true,
25
- get: function() {
26
- return track;
27
- }
28
- });
29
-
30
- //# sourceMappingURL=integration-BqDw7e2w.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"integration-BqDw7e2w.cjs","names":["readWith"],"sources":["../core/src/access/dependency.ts","../core/src/integration.ts"],"sourcesContent":["import type { ImpactTarget } from '../schema';\nimport * as impactTarget from '../impact-target';\n\nexport type DependencyTracker = {\n readonly record: (target: ImpactTarget<unknown>) => void;\n readonly snapshot: () => readonly ImpactTarget<unknown>[];\n};\n\nexport const createDependencyTracker = (): DependencyTracker => {\n const targets: ImpactTarget<unknown>[] = [];\n return {\n record: value => {\n if (!targets.some(entry => impactTarget.same(entry, value))) targets.push(value);\n },\n snapshot: () => Object.freeze(targets.slice()),\n };\n};\n","import type { ObjectNode, ImpactTarget } from './schema';\nimport type { Read } from './access/scope';\nimport type { DocumentReadable } from './runtime/contract';\nimport { createDependencyTracker } from './access/dependency';\nimport { readWith } from './runtime/access';\nexport type { AddressRef } from './address';\nexport { contains, debugKey, overlaps, read as readAddress, resolveAddress } from './address';\nexport { subscribeDependencies } from './runtime/notification';\nexport { same as sameTarget } from './impact-target';\n\nexport type { ImpactTarget } from './schema';\n\nexport type TrackedSelection<TValue> = {\n readonly value: TValue;\n readonly targets: readonly ImpactTarget<unknown>[];\n};\n\n// Framework adapters receive one immutable result instead of coordinating a\n// mutable collector with the reader's scoped lifetime themselves.\nexport const track = <TSchema extends ObjectNode, TValue>(\n runtime: DocumentReadable<TSchema>,\n selector: (read: Read<TSchema>) => TValue\n): TrackedSelection<TValue> => {\n const dependencies = createDependencyTracker();\n const value = readWith(runtime, selector, dependencies);\n return Object.freeze({ value, targets: dependencies.snapshot() });\n};\n"],"mappings":";;AAQA,MAAa,gCAAmD;CAC9D,MAAM,UAAmC,EAAE;AAC3C,QAAO;EACL,SAAQ,UAAS;AACf,OAAI,CAAC,QAAQ,MAAK,UAAA,eAAA,KAA2B,OAAO,MAAM,CAAC,CAAE,SAAQ,KAAK,MAAM;;EAElF,gBAAgB,OAAO,OAAO,QAAQ,OAAO,CAAC;EAC/C;;;;ACIH,MAAa,SACX,SACA,aAC6B;CAC7B,MAAM,eAAe,yBAAyB;CAC9C,MAAM,QAAQA,eAAAA,SAAS,SAAS,UAAU,aAAa;AACvD,QAAO,OAAO,OAAO;EAAE;EAAO,SAAS,aAAa,UAAU;EAAE,CAAC"}
@@ -1,25 +0,0 @@
1
- import { m as same, r as readWith } from "./access-CZXv_DIF.js";
2
- //#region core/src/access/dependency.ts
3
- const createDependencyTracker = () => {
4
- const targets = [];
5
- return {
6
- record: (value) => {
7
- if (!targets.some((entry) => same(entry, value))) targets.push(value);
8
- },
9
- snapshot: () => Object.freeze(targets.slice())
10
- };
11
- };
12
- //#endregion
13
- //#region core/src/integration.ts
14
- const track = (runtime, selector) => {
15
- const dependencies = createDependencyTracker();
16
- const value = readWith(runtime, selector, dependencies);
17
- return Object.freeze({
18
- value,
19
- targets: dependencies.snapshot()
20
- });
21
- };
22
- //#endregion
23
- export { track as t };
24
-
25
- //# sourceMappingURL=integration-CSXaF8HP.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"integration-CSXaF8HP.js","names":["impactTarget.same"],"sources":["../core/src/access/dependency.ts","../core/src/integration.ts"],"sourcesContent":["import type { ImpactTarget } from '../schema';\nimport * as impactTarget from '../impact-target';\n\nexport type DependencyTracker = {\n readonly record: (target: ImpactTarget<unknown>) => void;\n readonly snapshot: () => readonly ImpactTarget<unknown>[];\n};\n\nexport const createDependencyTracker = (): DependencyTracker => {\n const targets: ImpactTarget<unknown>[] = [];\n return {\n record: value => {\n if (!targets.some(entry => impactTarget.same(entry, value))) targets.push(value);\n },\n snapshot: () => Object.freeze(targets.slice()),\n };\n};\n","import type { ObjectNode, ImpactTarget } from './schema';\nimport type { Read } from './access/scope';\nimport type { DocumentReadable } from './runtime/contract';\nimport { createDependencyTracker } from './access/dependency';\nimport { readWith } from './runtime/access';\nexport type { AddressRef } from './address';\nexport { contains, debugKey, overlaps, read as readAddress, resolveAddress } from './address';\nexport { subscribeDependencies } from './runtime/notification';\nexport { same as sameTarget } from './impact-target';\n\nexport type { ImpactTarget } from './schema';\n\nexport type TrackedSelection<TValue> = {\n readonly value: TValue;\n readonly targets: readonly ImpactTarget<unknown>[];\n};\n\n// Framework adapters receive one immutable result instead of coordinating a\n// mutable collector with the reader's scoped lifetime themselves.\nexport const track = <TSchema extends ObjectNode, TValue>(\n runtime: DocumentReadable<TSchema>,\n selector: (read: Read<TSchema>) => TValue\n): TrackedSelection<TValue> => {\n const dependencies = createDependencyTracker();\n const value = readWith(runtime, selector, dependencies);\n return Object.freeze({ value, targets: dependencies.snapshot() });\n};\n"],"mappings":";;AAQA,MAAa,gCAAmD;CAC9D,MAAM,UAAmC,EAAE;AAC3C,QAAO;EACL,SAAQ,UAAS;AACf,OAAI,CAAC,QAAQ,MAAK,UAASA,KAAkB,OAAO,MAAM,CAAC,CAAE,SAAQ,KAAK,MAAM;;EAElF,gBAAgB,OAAO,OAAO,QAAQ,OAAO,CAAC;EAC/C;;;;ACIH,MAAa,SACX,SACA,aAC6B;CAC7B,MAAM,eAAe,yBAAyB;CAC9C,MAAM,QAAQ,SAAS,SAAS,UAAU,aAAa;AACvD,QAAO,OAAO,OAAO;EAAE;EAAO,SAAS,aAAa,UAAU;EAAE,CAAC"}
@@ -1,13 +0,0 @@
1
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_issue = require("./issue-Bo0FIO3b.cjs");
3
- const require_access = require("./access-D64MFRSm.cjs");
4
- const require_notification = require("./notification-DFoA9bQY.cjs");
5
- const require_integration = require("./integration-BqDw7e2w.cjs");
6
- exports.contains = require_issue.contains;
7
- exports.debugKey = require_issue.debugKey;
8
- exports.overlaps = require_issue.overlaps;
9
- exports.readAddress = require_issue.read;
10
- exports.resolveAddress = require_issue.resolveAddress;
11
- exports.sameTarget = require_access.same;
12
- exports.subscribeDependencies = require_notification.subscribeDependencies;
13
- exports.track = require_integration.track;
@@ -1,17 +0,0 @@
1
- import { A as overlaps, D as AddressRef, M as resolveAddress, O as contains, Z as ObjectNode, _ as Unsubscribe, j as read, k as debugKey, q as ImpactTarget, s as DocumentReadable, t as CommitListener, w as Read } from "./contract-CRrZ-3sF.cjs";
2
-
3
- //#region core/src/impact-target.d.ts
4
- declare const same: (left: ImpactTarget<unknown>, right: ImpactTarget<unknown>) => boolean;
5
- //#endregion
6
- //#region core/src/runtime/notification.d.ts
7
- declare const subscribeDependencies: <S extends ObjectNode>(runtime: DocumentReadable<S>, targets: readonly ImpactTarget[], listener: CommitListener<S>) => Unsubscribe;
8
- //#endregion
9
- //#region core/src/integration.d.ts
10
- type TrackedSelection<TValue> = {
11
- readonly value: TValue;
12
- readonly targets: readonly ImpactTarget<unknown>[];
13
- };
14
- declare const track: <TSchema extends ObjectNode, TValue>(runtime: DocumentReadable<TSchema>, selector: (read: Read<TSchema>) => TValue) => TrackedSelection<TValue>;
15
- //#endregion
16
- export { type AddressRef, type ImpactTarget, TrackedSelection, contains, debugKey, overlaps, read as readAddress, resolveAddress, same as sameTarget, subscribeDependencies, track };
17
- //# sourceMappingURL=integration.d.cts.map
@@ -1,17 +0,0 @@
1
- import { A as overlaps, D as AddressRef, M as resolveAddress, O as contains, Z as ObjectNode, _ as Unsubscribe, j as read, k as debugKey, q as ImpactTarget, s as DocumentReadable, t as CommitListener, w as Read } from "./contract-CxiNcqMn.js";
2
-
3
- //#region core/src/impact-target.d.ts
4
- declare const same: (left: ImpactTarget<unknown>, right: ImpactTarget<unknown>) => boolean;
5
- //#endregion
6
- //#region core/src/runtime/notification.d.ts
7
- declare const subscribeDependencies: <S extends ObjectNode>(runtime: DocumentReadable<S>, targets: readonly ImpactTarget[], listener: CommitListener<S>) => Unsubscribe;
8
- //#endregion
9
- //#region core/src/integration.d.ts
10
- type TrackedSelection<TValue> = {
11
- readonly value: TValue;
12
- readonly targets: readonly ImpactTarget<unknown>[];
13
- };
14
- declare const track: <TSchema extends ObjectNode, TValue>(runtime: DocumentReadable<TSchema>, selector: (read: Read<TSchema>) => TValue) => TrackedSelection<TValue>;
15
- //#endregion
16
- export { type AddressRef, type ImpactTarget, TrackedSelection, contains, debugKey, overlaps, read as readAddress, resolveAddress, same as sameTarget, subscribeDependencies, track };
17
- //# sourceMappingURL=integration.d.ts.map
@@ -1,5 +0,0 @@
1
- import { c as debugKey, d as overlaps, f as read, o as contains, p as resolveAddress } from "./issue-9U6YLYz3.js";
2
- import { m as same } from "./access-CZXv_DIF.js";
3
- import { c as subscribeDependencies } from "./notification-CrZHVx3a.js";
4
- import { t as track } from "./integration-CSXaF8HP.js";
5
- export { contains, debugKey, overlaps, read as readAddress, resolveAddress, same as sameTarget, subscribeDependencies, track };