@rocicorp/zero 0.3.2024102502 → 0.3.2024102600
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.
- package/out/{chunk-2RUT5EQV.js → chunk-F5QR3K72.js} +2 -7
- package/out/chunk-F5QR3K72.js.map +7 -0
- package/out/chunk-HARIWJ2J.js +8 -0
- package/out/{chunk-2RUT5EQV.js.map → chunk-HARIWJ2J.js.map} +1 -1
- package/out/chunk-NKGIR6IA.js +1 -0
- package/out/chunk-NKGIR6IA.js.map +7 -0
- package/out/chunk-RCVGGCMG.js +288 -0
- package/out/chunk-RCVGGCMG.js.map +7 -0
- package/out/internal.js +9 -0
- package/out/internal.js.map +7 -0
- package/out/react.js +2 -1
- package/out/react.js.map +1 -1
- package/out/replicache/src/version.d.ts.map +1 -1
- package/out/replicache/src/version.js +2 -1
- package/out/replicache/src/version.js.map +1 -1
- package/out/solid.js +82 -0
- package/out/solid.js.map +7 -0
- package/out/zero/src/internal.d.ts +2 -0
- package/out/zero/src/internal.d.ts.map +1 -0
- package/out/zero/src/solid.d.ts +2 -0
- package/out/zero/src/solid.d.ts.map +1 -0
- package/out/zero-cache/src/config/config-query.d.ts +1 -1
- package/out/zero-cache/src/config/config-query.d.ts.map +1 -1
- package/out/zero-cache/src/server/life-cycle.d.ts +1 -0
- package/out/zero-cache/src/server/life-cycle.d.ts.map +1 -1
- package/out/zero-cache/src/server/life-cycle.js +10 -9
- package/out/zero-cache/src/server/life-cycle.js.map +1 -1
- package/out/zero-cache/src/server/main.js +2 -0
- package/out/zero-cache/src/server/main.js.map +1 -1
- package/out/zero-cache/src/server/task-state-watcher.d.ts +14 -0
- package/out/zero-cache/src/server/task-state-watcher.d.ts.map +1 -0
- package/out/zero-cache/src/server/task-state-watcher.js +75 -0
- package/out/zero-cache/src/server/task-state-watcher.js.map +1 -0
- package/out/zero-cache/src/services/view-syncer/view-syncer.d.ts.map +1 -1
- package/out/zero-cache/src/services/view-syncer/view-syncer.js +10 -4
- package/out/zero-cache/src/services/view-syncer/view-syncer.js.map +1 -1
- package/out/zero-client/src/client/version.d.ts.map +1 -1
- package/out/zero-client/src/client/version.js +2 -1
- package/out/zero-client/src/client/version.js.map +1 -1
- package/out/zero-internal/src/mod.d.ts +7 -0
- package/out/zero-internal/src/mod.d.ts.map +1 -0
- package/out/zero-solid/src/mod.d.ts +2 -0
- package/out/zero-solid/src/mod.d.ts.map +1 -0
- package/out/zero-solid/src/solid-view.d.ts +10 -0
- package/out/zero-solid/src/solid-view.d.ts.map +1 -0
- package/out/zero-solid/src/use-query.d.ts +5 -0
- package/out/zero-solid/src/use-query.d.ts.map +1 -0
- package/out/zero.js +25 -279
- package/out/zero.js.map +4 -4
- package/out/zql/src/zql/ivm/array-view.d.ts +1 -10
- package/out/zql/src/zql/ivm/array-view.d.ts.map +1 -1
- package/out/zql/src/zql/ivm/array-view.js +2 -158
- package/out/zql/src/zql/ivm/array-view.js.map +1 -1
- package/out/zql/src/zql/ivm/view-apply-change.d.ts +5 -0
- package/out/zql/src/zql/ivm/view-apply-change.d.ts.map +1 -0
- package/out/zql/src/zql/ivm/view-apply-change.js +156 -0
- package/out/zql/src/zql/ivm/view-apply-change.js.map +1 -0
- package/out/zql/src/zql/ivm/view.d.ts +15 -0
- package/out/zql/src/zql/ivm/view.d.ts.map +1 -0
- package/out/zql/src/zql/ivm/view.js +2 -0
- package/out/zql/src/zql/ivm/view.js.map +1 -0
- package/out/zql/src/zql/query/query-impl.d.ts +4 -5
- package/out/zql/src/zql/query/query-impl.d.ts.map +1 -1
- package/out/zql/src/zql/query/query-impl.js +8 -3
- package/out/zql/src/zql/query/query-impl.js.map +1 -1
- package/out/zql/src/zql/query/query.d.ts +2 -2
- package/out/zql/src/zql/query/query.d.ts.map +1 -1
- package/package.json +9 -1
|
@@ -1,11 +1,7 @@
|
|
|
1
|
-
import type { Value } from '../../../../zero-protocol/src/data.js';
|
|
2
1
|
import type { Listener, TypedView } from '../query/typed-view.js';
|
|
3
2
|
import type { Change } from './change.js';
|
|
4
3
|
import type { Input, Output } from './operator.js';
|
|
5
|
-
|
|
6
|
-
singular: boolean;
|
|
7
|
-
relationships: Record<string, Format>;
|
|
8
|
-
};
|
|
4
|
+
import type { Format, View } from './view.js';
|
|
9
5
|
/**
|
|
10
6
|
* Implements a materialized view of the output of an operator.
|
|
11
7
|
*
|
|
@@ -27,9 +23,4 @@ export declare class ArrayView<V extends View> implements Output, TypedView<V> {
|
|
|
27
23
|
push(change: Change): void;
|
|
28
24
|
flush(): void;
|
|
29
25
|
}
|
|
30
|
-
export type View = EntryList | Entry | undefined;
|
|
31
|
-
export type EntryList = Entry[];
|
|
32
|
-
export type Entry = {
|
|
33
|
-
[key: string]: Value | View;
|
|
34
|
-
};
|
|
35
26
|
//# sourceMappingURL=array-view.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"array-view.d.ts","sourceRoot":"","sources":["../../../../../../zql/src/zql/ivm/array-view.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"array-view.d.ts","sourceRoot":"","sources":["../../../../../../zql/src/zql/ivm/array-view.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,QAAQ,EAAE,SAAS,EAAC,MAAM,wBAAwB,CAAC;AAChE,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,aAAa,CAAC;AACxC,OAAO,KAAK,EAAC,KAAK,EAAE,MAAM,EAAC,MAAM,eAAe,CAAC;AAGjD,OAAO,KAAK,EAAQ,MAAM,EAAE,IAAI,EAAC,MAAM,WAAW,CAAC;AAEnD;;;;;;;;;;GAUG;AACH,qBAAa,SAAS,CAAC,CAAC,SAAS,IAAI,CAAE,YAAW,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;;IAUpE,SAAS,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;gBAKlC,KAAK,EAAE,KAAK,EACZ,MAAM,GAAE,MAA6C;IAWvD,IAAI,IAAI,IACmB,CAAC,CAC3B;IAED,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;IAiBjC,OAAO;IAkBP,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAK1B,KAAK;CAON"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import { assert
|
|
2
|
-
import {
|
|
3
|
-
import { assertOrderingIncludesPK } from '../builder/builder.js';
|
|
1
|
+
import { assert } from '../../../../shared/src/asserts.js';
|
|
2
|
+
import { applyChange } from './view-apply-change.js';
|
|
4
3
|
/**
|
|
5
4
|
* Implements a materialized view of the output of an operator.
|
|
6
5
|
*
|
|
@@ -28,7 +27,6 @@ export class ArrayView {
|
|
|
28
27
|
this.#format = format;
|
|
29
28
|
this.#input.setOutput(this);
|
|
30
29
|
this.#root = { '': format.singular ? undefined : [] };
|
|
31
|
-
assertOrderingIncludesPK(this.#schema.sort, this.#schema.primaryKey);
|
|
32
30
|
this.#hydrate();
|
|
33
31
|
}
|
|
34
32
|
get data() {
|
|
@@ -48,7 +46,6 @@ export class ArrayView {
|
|
|
48
46
|
}
|
|
49
47
|
}
|
|
50
48
|
destroy() {
|
|
51
|
-
this.#input.destroy();
|
|
52
49
|
this.onDestroy?.();
|
|
53
50
|
}
|
|
54
51
|
#hydrate() {
|
|
@@ -70,157 +67,4 @@ export class ArrayView {
|
|
|
70
67
|
this.#fireListeners();
|
|
71
68
|
}
|
|
72
69
|
}
|
|
73
|
-
function applyChange(parentEntry, change, schema, relationship, format) {
|
|
74
|
-
if (schema.isHidden) {
|
|
75
|
-
switch (change.type) {
|
|
76
|
-
case 'add':
|
|
77
|
-
case 'remove':
|
|
78
|
-
for (const [relationship, children] of Object.entries(change.node.relationships)) {
|
|
79
|
-
const childSchema = must(schema.relationships[relationship]);
|
|
80
|
-
for (const node of children) {
|
|
81
|
-
applyChange(parentEntry, { type: change.type, node }, childSchema, relationship, format);
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
return;
|
|
85
|
-
case 'edit':
|
|
86
|
-
// If hidden at this level it means that the hidden row was changed. If
|
|
87
|
-
// the row was changed in such a way that it would change the
|
|
88
|
-
// relationships then the edit would have been split into remove and
|
|
89
|
-
// add.
|
|
90
|
-
return;
|
|
91
|
-
case 'child': {
|
|
92
|
-
const childSchema = must(schema.relationships[change.child.relationshipName]);
|
|
93
|
-
applyChange(parentEntry, change.child.change, childSchema, relationship, format);
|
|
94
|
-
return;
|
|
95
|
-
}
|
|
96
|
-
default:
|
|
97
|
-
unreachable(change);
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
const { singular, relationships: childFormats } = format;
|
|
101
|
-
switch (change.type) {
|
|
102
|
-
case 'add': {
|
|
103
|
-
// TODO: Only create a new entry if we need to mutate the existing one.
|
|
104
|
-
const newEntry = {
|
|
105
|
-
...change.node.row,
|
|
106
|
-
};
|
|
107
|
-
if (singular) {
|
|
108
|
-
assertUndefined(parentEntry[relationship], 'single output already exists');
|
|
109
|
-
parentEntry[relationship] = newEntry;
|
|
110
|
-
}
|
|
111
|
-
else {
|
|
112
|
-
const view = parentEntry[relationship];
|
|
113
|
-
assertArray(view);
|
|
114
|
-
const { pos, found } = binarySearch(view, newEntry, schema.compareRows);
|
|
115
|
-
assert(!found, 'node already exists');
|
|
116
|
-
view.splice(pos, 0, newEntry);
|
|
117
|
-
}
|
|
118
|
-
for (const [relationship, children] of Object.entries(change.node.relationships)) {
|
|
119
|
-
// TODO: Is there a flag to make TypeScript complain that dictionary access might be undefined?
|
|
120
|
-
const childSchema = must(schema.relationships[relationship]);
|
|
121
|
-
const childFormat = must(childFormats[relationship]);
|
|
122
|
-
const newView = childFormat.singular ? undefined : [];
|
|
123
|
-
newEntry[relationship] = newView;
|
|
124
|
-
for (const node of children) {
|
|
125
|
-
applyChange(newEntry, { type: 'add', node }, childSchema, relationship, childFormat);
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
break;
|
|
129
|
-
}
|
|
130
|
-
case 'remove': {
|
|
131
|
-
if (singular) {
|
|
132
|
-
assertObject(parentEntry[relationship]);
|
|
133
|
-
parentEntry[relationship] = undefined;
|
|
134
|
-
}
|
|
135
|
-
else {
|
|
136
|
-
assertArray(parentEntry[relationship]);
|
|
137
|
-
const view = parentEntry[relationship];
|
|
138
|
-
const { pos, found } = binarySearch(view, change.node.row, schema.compareRows);
|
|
139
|
-
assert(found, 'node does not exist');
|
|
140
|
-
view.splice(pos, 1);
|
|
141
|
-
}
|
|
142
|
-
break;
|
|
143
|
-
}
|
|
144
|
-
case 'child': {
|
|
145
|
-
let existing;
|
|
146
|
-
if (singular) {
|
|
147
|
-
assertObject(parentEntry[relationship]);
|
|
148
|
-
existing = parentEntry[relationship];
|
|
149
|
-
}
|
|
150
|
-
else {
|
|
151
|
-
assertArray(parentEntry[relationship]);
|
|
152
|
-
const list = parentEntry[relationship];
|
|
153
|
-
const { pos, found } = binarySearch(list, change.row, schema.compareRows);
|
|
154
|
-
assert(found, 'node does not exist');
|
|
155
|
-
existing = list[pos];
|
|
156
|
-
}
|
|
157
|
-
const childSchema = must(schema.relationships[change.child.relationshipName]);
|
|
158
|
-
const childFormat = must(format.relationships[change.child.relationshipName]);
|
|
159
|
-
applyChange(existing, change.child.change, childSchema, change.child.relationshipName, childFormat);
|
|
160
|
-
break;
|
|
161
|
-
}
|
|
162
|
-
case 'edit': {
|
|
163
|
-
if (singular) {
|
|
164
|
-
assertObject(parentEntry[relationship]);
|
|
165
|
-
parentEntry[relationship] = {
|
|
166
|
-
...parentEntry[relationship],
|
|
167
|
-
...change.row,
|
|
168
|
-
};
|
|
169
|
-
}
|
|
170
|
-
else {
|
|
171
|
-
assertArray(parentEntry[relationship]);
|
|
172
|
-
const view = parentEntry[relationship];
|
|
173
|
-
// If the order changed due to the edit, we need to remove and reinsert.
|
|
174
|
-
if (schema.compareRows(change.oldRow, change.row) === 0) {
|
|
175
|
-
const { pos, found } = binarySearch(view, change.oldRow, schema.compareRows);
|
|
176
|
-
assert(found, 'node does not exists');
|
|
177
|
-
view[pos] = makeEntryPreserveRelationships(change.row, view[pos], schema.relationships);
|
|
178
|
-
}
|
|
179
|
-
else {
|
|
180
|
-
// Remove
|
|
181
|
-
const { pos, found } = binarySearch(view, change.oldRow, schema.compareRows);
|
|
182
|
-
assert(found, 'node does not exists');
|
|
183
|
-
const oldEntry = view[pos];
|
|
184
|
-
view.splice(pos, 1);
|
|
185
|
-
// Insert
|
|
186
|
-
{
|
|
187
|
-
const { pos, found } = binarySearch(view, change.row, schema.compareRows);
|
|
188
|
-
assert(!found, 'node already exists');
|
|
189
|
-
view.splice(pos, 0, makeEntryPreserveRelationships(change.row, oldEntry, schema.relationships));
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
break;
|
|
194
|
-
}
|
|
195
|
-
default:
|
|
196
|
-
unreachable(change);
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
// TODO: Do not return an object. It puts unnecessary pressure on the GC.
|
|
200
|
-
function binarySearch(view, target, comparator) {
|
|
201
|
-
let low = 0;
|
|
202
|
-
let high = view.length - 1;
|
|
203
|
-
while (low <= high) {
|
|
204
|
-
const mid = (low + high) >>> 1;
|
|
205
|
-
const comparison = comparator(view[mid], target);
|
|
206
|
-
if (comparison < 0) {
|
|
207
|
-
low = mid + 1;
|
|
208
|
-
}
|
|
209
|
-
else if (comparison > 0) {
|
|
210
|
-
high = mid - 1;
|
|
211
|
-
}
|
|
212
|
-
else {
|
|
213
|
-
return { pos: mid, found: true };
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
return { pos: low, found: false };
|
|
217
|
-
}
|
|
218
|
-
function makeEntryPreserveRelationships(row, entry, relationships) {
|
|
219
|
-
const result = { ...row };
|
|
220
|
-
for (const relationship in relationships) {
|
|
221
|
-
assert(!(relationship in row), 'Relationship already exists');
|
|
222
|
-
result[relationship] = entry[relationship];
|
|
223
|
-
}
|
|
224
|
-
return result;
|
|
225
|
-
}
|
|
226
70
|
//# sourceMappingURL=array-view.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"array-view.js","sourceRoot":"","sources":["../../../../../../zql/src/zql/ivm/array-view.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"array-view.js","sourceRoot":"","sources":["../../../../../../zql/src/zql/ivm/array-view.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,MAAM,EAAC,MAAM,mCAAmC,CAAC;AAMzD,OAAO,EAAC,WAAW,EAAC,MAAM,wBAAwB,CAAC;AAGnD;;;;;;;;;;GAUG;AACH,MAAM,OAAO,SAAS;IACX,MAAM,CAAQ;IACd,UAAU,GAAG,IAAI,GAAG,EAAe,CAAC;IACpC,OAAO,CAAc;IACrB,OAAO,CAAS;IAEzB,2EAA2E;IAC3E,6DAA6D;IACpD,KAAK,CAAQ;IAEtB,SAAS,CAA2B;IAEpC,MAAM,GAAG,KAAK,CAAC;IAEf,YACE,KAAY,EACZ,SAAiB,EAAC,QAAQ,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE,EAAC;QAErD,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;QACjC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC5B,IAAI,CAAC,KAAK,GAAG,EAAC,EAAE,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAC,CAAC;QAEpD,IAAI,CAAC,QAAQ,EAAE,CAAC;IAClB,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAM,CAAC;IAC7B,CAAC;IAED,WAAW,CAAC,QAAqB;QAC/B,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,6BAA6B,CAAC,CAAC;QACtE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAE9B,QAAQ,CAAC,IAAI,CAAC,IAAoB,CAAC,CAAC;QAEpC,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACnC,CAAC,CAAC;IACJ,CAAC;IAED,cAAc;QACZ,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACvC,QAAQ,CAAC,IAAI,CAAC,IAAoB,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAED,OAAO;QACL,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC;IACrB,CAAC;IAED,QAAQ;QACN,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;YACzC,WAAW,CACT,IAAI,CAAC,KAAK,EACV,EAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAC,EACnB,IAAI,CAAC,OAAO,EACZ,EAAE,EACF,IAAI,CAAC,OAAO,CACb,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,KAAK,EAAE,CAAC;IACf,CAAC;IAED,IAAI,CAAC,MAAc;QACjB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IAClE,CAAC;IAED,KAAK;QACH,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,OAAO;QACT,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,cAAc,EAAE,CAAC;IACxB,CAAC;CACF"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { Change } from './change.js';
|
|
2
|
+
import type { TableSchema } from './schema.js';
|
|
3
|
+
import type { Entry, Format } from './view.js';
|
|
4
|
+
export declare function applyChange(parentEntry: Entry, change: Change, schema: TableSchema, relationship: string, format: Format): void;
|
|
5
|
+
//# sourceMappingURL=view-apply-change.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"view-apply-change.d.ts","sourceRoot":"","sources":["../../../../../../zql/src/zql/ivm/view-apply-change.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,aAAa,CAAC;AAExC,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAC,KAAK,EAAa,MAAM,EAAC,MAAM,WAAW,CAAC;AAExD,wBAAgB,WAAW,CACzB,WAAW,EAAE,KAAK,EAClB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,WAAW,EACnB,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,QA6Lf"}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import { assert, assertArray, assertObject, assertUndefined, unreachable, } from '../../../../shared/src/asserts.js';
|
|
2
|
+
import { must } from '../../../../shared/src/must.js';
|
|
3
|
+
export function applyChange(parentEntry, change, schema, relationship, format) {
|
|
4
|
+
if (schema.isHidden) {
|
|
5
|
+
switch (change.type) {
|
|
6
|
+
case 'add':
|
|
7
|
+
case 'remove':
|
|
8
|
+
for (const [relationship, children] of Object.entries(change.node.relationships)) {
|
|
9
|
+
const childSchema = must(schema.relationships[relationship]);
|
|
10
|
+
for (const node of children) {
|
|
11
|
+
applyChange(parentEntry, { type: change.type, node }, childSchema, relationship, format);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
return;
|
|
15
|
+
case 'edit':
|
|
16
|
+
// If hidden at this level it means that the hidden row was changed. If
|
|
17
|
+
// the row was changed in such a way that it would change the
|
|
18
|
+
// relationships then the edit would have been split into remove and
|
|
19
|
+
// add.
|
|
20
|
+
return;
|
|
21
|
+
case 'child': {
|
|
22
|
+
const childSchema = must(schema.relationships[change.child.relationshipName]);
|
|
23
|
+
applyChange(parentEntry, change.child.change, childSchema, relationship, format);
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
default:
|
|
27
|
+
unreachable(change);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
const { singular, relationships: childFormats } = format;
|
|
31
|
+
switch (change.type) {
|
|
32
|
+
case 'add': {
|
|
33
|
+
// TODO: Only create a new entry if we need to mutate the existing one.
|
|
34
|
+
const newEntry = {
|
|
35
|
+
...change.node.row,
|
|
36
|
+
};
|
|
37
|
+
if (singular) {
|
|
38
|
+
assertUndefined(parentEntry[relationship], 'single output already exists');
|
|
39
|
+
parentEntry[relationship] = newEntry;
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
const view = parentEntry[relationship];
|
|
43
|
+
assertArray(view);
|
|
44
|
+
const { pos, found } = binarySearch(view, newEntry, schema.compareRows);
|
|
45
|
+
assert(!found, 'node already exists');
|
|
46
|
+
view.splice(pos, 0, newEntry);
|
|
47
|
+
}
|
|
48
|
+
for (const [relationship, children] of Object.entries(change.node.relationships)) {
|
|
49
|
+
// TODO: Is there a flag to make TypeScript complain that dictionary access might be undefined?
|
|
50
|
+
const childSchema = must(schema.relationships[relationship]);
|
|
51
|
+
const childFormat = must(childFormats[relationship]);
|
|
52
|
+
const newView = childFormat.singular ? undefined : [];
|
|
53
|
+
newEntry[relationship] = newView;
|
|
54
|
+
for (const node of children) {
|
|
55
|
+
applyChange(newEntry, { type: 'add', node }, childSchema, relationship, childFormat);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
break;
|
|
59
|
+
}
|
|
60
|
+
case 'remove': {
|
|
61
|
+
if (singular) {
|
|
62
|
+
assertObject(parentEntry[relationship]);
|
|
63
|
+
parentEntry[relationship] = undefined;
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
assertArray(parentEntry[relationship]);
|
|
67
|
+
const view = parentEntry[relationship];
|
|
68
|
+
const { pos, found } = binarySearch(view, change.node.row, schema.compareRows);
|
|
69
|
+
assert(found, 'node does not exist');
|
|
70
|
+
view.splice(pos, 1);
|
|
71
|
+
}
|
|
72
|
+
break;
|
|
73
|
+
}
|
|
74
|
+
case 'child': {
|
|
75
|
+
let existing;
|
|
76
|
+
if (singular) {
|
|
77
|
+
assertObject(parentEntry[relationship]);
|
|
78
|
+
existing = parentEntry[relationship];
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
assertArray(parentEntry[relationship]);
|
|
82
|
+
const list = parentEntry[relationship];
|
|
83
|
+
const { pos, found } = binarySearch(list, change.row, schema.compareRows);
|
|
84
|
+
assert(found, 'node does not exist');
|
|
85
|
+
existing = list[pos];
|
|
86
|
+
}
|
|
87
|
+
const childSchema = must(schema.relationships[change.child.relationshipName]);
|
|
88
|
+
const childFormat = must(format.relationships[change.child.relationshipName]);
|
|
89
|
+
applyChange(existing, change.child.change, childSchema, change.child.relationshipName, childFormat);
|
|
90
|
+
break;
|
|
91
|
+
}
|
|
92
|
+
case 'edit': {
|
|
93
|
+
if (singular) {
|
|
94
|
+
assertObject(parentEntry[relationship]);
|
|
95
|
+
parentEntry[relationship] = {
|
|
96
|
+
...parentEntry[relationship],
|
|
97
|
+
...change.row,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
assertArray(parentEntry[relationship]);
|
|
102
|
+
const view = parentEntry[relationship];
|
|
103
|
+
// If the order changed due to the edit, we need to remove and reinsert.
|
|
104
|
+
if (schema.compareRows(change.oldRow, change.row) === 0) {
|
|
105
|
+
const { pos, found } = binarySearch(view, change.oldRow, schema.compareRows);
|
|
106
|
+
assert(found, 'node does not exists');
|
|
107
|
+
view[pos] = makeEntryPreserveRelationships(change.row, view[pos], schema.relationships);
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
// Remove
|
|
111
|
+
const { pos, found } = binarySearch(view, change.oldRow, schema.compareRows);
|
|
112
|
+
assert(found, 'node does not exists');
|
|
113
|
+
const oldEntry = view[pos];
|
|
114
|
+
view.splice(pos, 1);
|
|
115
|
+
// Insert
|
|
116
|
+
{
|
|
117
|
+
const { pos, found } = binarySearch(view, change.row, schema.compareRows);
|
|
118
|
+
assert(!found, 'node already exists');
|
|
119
|
+
view.splice(pos, 0, makeEntryPreserveRelationships(change.row, oldEntry, schema.relationships));
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
break;
|
|
124
|
+
}
|
|
125
|
+
default:
|
|
126
|
+
unreachable(change);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
// TODO: Do not return an object. It puts unnecessary pressure on the GC.
|
|
130
|
+
function binarySearch(view, target, comparator) {
|
|
131
|
+
let low = 0;
|
|
132
|
+
let high = view.length - 1;
|
|
133
|
+
while (low <= high) {
|
|
134
|
+
const mid = (low + high) >>> 1;
|
|
135
|
+
const comparison = comparator(view[mid], target);
|
|
136
|
+
if (comparison < 0) {
|
|
137
|
+
low = mid + 1;
|
|
138
|
+
}
|
|
139
|
+
else if (comparison > 0) {
|
|
140
|
+
high = mid - 1;
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
return { pos: mid, found: true };
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
return { pos: low, found: false };
|
|
147
|
+
}
|
|
148
|
+
function makeEntryPreserveRelationships(row, entry, relationships) {
|
|
149
|
+
const result = { ...row };
|
|
150
|
+
for (const relationship in relationships) {
|
|
151
|
+
assert(!(relationship in row), 'Relationship already exists');
|
|
152
|
+
result[relationship] = entry[relationship];
|
|
153
|
+
}
|
|
154
|
+
return result;
|
|
155
|
+
}
|
|
156
|
+
//# sourceMappingURL=view-apply-change.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"view-apply-change.js","sourceRoot":"","sources":["../../../../../../zql/src/zql/ivm/view-apply-change.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { Value } from '../../../../zero-protocol/src/data.js';
|
|
2
|
+
import type { Input } from './operator.js';
|
|
3
|
+
import type { Query, QueryType } from '../query/query.js';
|
|
4
|
+
import type { TableSchema } from '../query/schema.js';
|
|
5
|
+
export type View = EntryList | Entry | undefined;
|
|
6
|
+
export type EntryList = Entry[];
|
|
7
|
+
export type Entry = {
|
|
8
|
+
[key: string]: Value | View;
|
|
9
|
+
};
|
|
10
|
+
export type Format = {
|
|
11
|
+
singular: boolean;
|
|
12
|
+
relationships: Record<string, Format>;
|
|
13
|
+
};
|
|
14
|
+
export type ViewFactory<TSchema extends TableSchema, TReturn extends QueryType, T> = (query: Query<TSchema, TReturn>, input: Input, format: Format, onDestroy: () => void, onTransactionCommit: (cb: () => void) => void) => T;
|
|
15
|
+
//# sourceMappingURL=view.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"view.d.ts","sourceRoot":"","sources":["../../../../../../zql/src/zql/ivm/view.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,KAAK,EAAC,MAAM,uCAAuC,CAAC;AACjE,OAAO,KAAK,EAAC,KAAK,EAAC,MAAM,eAAe,CAAC;AACzC,OAAO,KAAK,EAAC,KAAK,EAAE,SAAS,EAAC,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,oBAAoB,CAAC;AAEpD,MAAM,MAAM,IAAI,GAAG,SAAS,GAAG,KAAK,GAAG,SAAS,CAAC;AACjD,MAAM,MAAM,SAAS,GAAG,KAAK,EAAE,CAAC;AAChC,MAAM,MAAM,KAAK,GAAG;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK,GAAG,IAAI,CAAA;CAAC,CAAC;AAElD,MAAM,MAAM,MAAM,GAAG;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACvC,CAAC;AAEF,MAAM,MAAM,WAAW,CACrB,OAAO,SAAS,WAAW,EAC3B,OAAO,SAAS,SAAS,EACzB,CAAC,IACC,CACF,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,EAC9B,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,IAAI,EACrB,mBAAmB,EAAE,CAAC,EAAE,EAAE,MAAM,IAAI,KAAK,IAAI,KAC1C,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"view.js","sourceRoot":"","sources":["../../../../../../zql/src/zql/ivm/view.ts"],"names":[],"mappings":""}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import type { AST } from '../../../../zero-protocol/src/ast.js';
|
|
2
2
|
import { type BuilderDelegate } from '../builder/builder.js';
|
|
3
|
-
import { type Format } from '../ivm/array-view.js';
|
|
4
|
-
import type { Input } from '../ivm/operator.js';
|
|
5
3
|
import { type NormalizedTableSchema } from './normalize-table-schema.js';
|
|
6
4
|
import type { AddSelections, AddSubselect, DefaultQueryResultRow, GetFieldTypeNoNullOrUndefined, MakeSingular, Operator, Parameter, Query, QueryType, SchemaToRow, Selector, Smash } from './query.js';
|
|
7
5
|
import { type PullSchemaForRelationship, type TableSchema } from './schema.js';
|
|
8
6
|
import type { TypedView } from './typed-view.js';
|
|
7
|
+
import type { Format } from '../ivm/view.js';
|
|
8
|
+
import type { ViewFactory } from '../ivm/view.js';
|
|
9
9
|
export declare function newQuery<TSchema extends TableSchema, TReturn extends QueryType = DefaultQueryResultRow<TSchema>>(delegate: QueryDelegate, tableSchema: TSchema): Query<TSchema, TReturn>;
|
|
10
10
|
export type CommitListener = () => void;
|
|
11
11
|
export type GotCallback = (got: boolean) => void;
|
|
@@ -30,7 +30,7 @@ export declare abstract class AbstractQuery<TSchema extends TableSchema, TReturn
|
|
|
30
30
|
orderBy<TSelector extends keyof TSchema['columns']>(field: TSelector, direction: 'asc' | 'desc'): Query<TSchema, TReturn>;
|
|
31
31
|
protected _completeAst(): AST;
|
|
32
32
|
abstract materialize(): TypedView<Smash<TReturn>>;
|
|
33
|
-
abstract materialize<T>(factory:
|
|
33
|
+
abstract materialize<T>(factory: ViewFactory<TSchema, TReturn, T>): T;
|
|
34
34
|
abstract preload(): {
|
|
35
35
|
cleanup: () => void;
|
|
36
36
|
complete: Promise<void>;
|
|
@@ -43,11 +43,10 @@ export declare class QueryImpl<TSchema extends TableSchema, TReturn extends Quer
|
|
|
43
43
|
get singular(): TReturn['singular'];
|
|
44
44
|
protected _newQuery<TSchema extends TableSchema, TReturn extends QueryType>(schema: NormalizedTableSchema, ast: AST, format: Format | undefined): Query<TSchema, TReturn>;
|
|
45
45
|
materialize(): TypedView<Smash<TReturn>>;
|
|
46
|
-
materialize<T>(factory:
|
|
46
|
+
materialize<T>(factory: ViewFactory<TSchema, TReturn, T>): T;
|
|
47
47
|
preload(): {
|
|
48
48
|
cleanup: () => void;
|
|
49
49
|
complete: Promise<void>;
|
|
50
50
|
};
|
|
51
51
|
}
|
|
52
|
-
export type MaterializeFactory<TSchema extends TableSchema, TReturn extends QueryType, T> = (query: Query<TSchema, TReturn>, input: Input, format: Format, onDestroy: () => void, onTransactionCommit: (cb: () => void) => void) => T;
|
|
53
52
|
//# sourceMappingURL=query-impl.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query-impl.d.ts","sourceRoot":"","sources":["../../../../../../zql/src/zql/query/query-impl.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,GAAG,EAAW,MAAM,sCAAsC,CAAC;AAExE,OAAO,
|
|
1
|
+
{"version":3,"file":"query-impl.d.ts","sourceRoot":"","sources":["../../../../../../zql/src/zql/query/query-impl.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
3
3
|
import { resolver } from '@rocicorp/resolver';
|
|
4
4
|
import { assert } from '../../../../shared/src/asserts.js';
|
|
5
|
-
import { buildPipeline } from '../builder/builder.js';
|
|
5
|
+
import { assertOrderingIncludesPK, buildPipeline, } from '../builder/builder.js';
|
|
6
6
|
import { ArrayView } from '../ivm/array-view.js';
|
|
7
7
|
import { normalizeTableSchema, } from './normalize-table-schema.js';
|
|
8
8
|
import { isFieldRelationship, isJunctionRelationship, } from './schema.js';
|
|
@@ -216,12 +216,17 @@ export class QueryImpl extends AbstractQuery {
|
|
|
216
216
|
const ast = this._completeAst();
|
|
217
217
|
const removeServerQuery = this.#delegate.addServerQuery(ast);
|
|
218
218
|
const input = buildPipeline(ast, this.#delegate, undefined);
|
|
219
|
+
const schema = input.getSchema();
|
|
220
|
+
// TODO: Can this assert be removed this._completeAst above ensures this is
|
|
221
|
+
// true.
|
|
222
|
+
assertOrderingIncludesPK(schema.sort, schema.primaryKey);
|
|
219
223
|
let removeCommitObserver;
|
|
220
224
|
const onDestroy = () => {
|
|
225
|
+
input.destroy();
|
|
221
226
|
removeCommitObserver?.();
|
|
222
227
|
removeServerQuery();
|
|
223
228
|
};
|
|
224
|
-
const view = (factory ??
|
|
229
|
+
const view = (factory ?? arrayViewFactory)(this, input, this.#format, onDestroy, cb => {
|
|
225
230
|
removeCommitObserver = this.#delegate.onTransactionCommit(cb);
|
|
226
231
|
});
|
|
227
232
|
return view;
|
|
@@ -261,7 +266,7 @@ function addPrimaryKeysToAst(schema, ast) {
|
|
|
261
266
|
orderBy: addPrimaryKeys(schema, ast.orderBy),
|
|
262
267
|
};
|
|
263
268
|
}
|
|
264
|
-
function
|
|
269
|
+
function arrayViewFactory(_query, input, format, onDestroy, onTransactionCommit) {
|
|
265
270
|
const v = new ArrayView(input, format);
|
|
266
271
|
v.onDestroy = onDestroy;
|
|
267
272
|
onTransactionCommit(() => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query-impl.js","sourceRoot":"","sources":["../../../../../../zql/src/zql/query/query-impl.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,uDAAuD;AACvD,OAAO,EAAC,QAAQ,EAAC,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAC,MAAM,EAAC,MAAM,mCAAmC,CAAC;AAGzD,OAAO,
|
|
1
|
+
{"version":3,"file":"query-impl.js","sourceRoot":"","sources":["../../../../../../zql/src/zql/query/query-impl.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { Row } from '../../../../zero-protocol/src/data.js';
|
|
2
2
|
import type { SchemaValue } from '../ivm/schema.js';
|
|
3
3
|
import type { Source } from '../ivm/source.js';
|
|
4
|
-
import type {
|
|
4
|
+
import type { ViewFactory } from '../ivm/view.js';
|
|
5
5
|
import type { PullSchemaForRelationship, TableSchema } from './schema.js';
|
|
6
6
|
import type { TypedView } from './typed-view.js';
|
|
7
7
|
/**
|
|
@@ -123,7 +123,7 @@ export interface Query<TSchema extends TableSchema, TReturn extends QueryType =
|
|
|
123
123
|
orderBy<TSelector extends Selector<TSchema>>(field: TSelector, direction: 'asc' | 'desc'): Query<TSchema, TReturn>;
|
|
124
124
|
one(): Query<TSchema, MakeSingular<TReturn>>;
|
|
125
125
|
materialize(): TypedView<Smash<TReturn>>;
|
|
126
|
-
materialize<T>(factory:
|
|
126
|
+
materialize<T>(factory: ViewFactory<TSchema, TReturn, T>): T;
|
|
127
127
|
preload(): {
|
|
128
128
|
cleanup: () => void;
|
|
129
129
|
complete: Promise<void>;
|