@rocicorp/zero 0.3.2024102502 → 0.3.2024102800
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 +5 -4
- package/out/react.js.map +2 -2
- 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 +84 -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 +2 -2
- package/out/zero-cache/src/config/config-query.d.ts.map +1 -1
- package/out/zero-cache/src/config/config-query.js +1 -1
- package/out/zero-cache/src/config/config-query.js.map +1 -1
- package/out/zero-cache/src/server/life-cycle.d.ts +2 -0
- package/out/zero-cache/src/server/life-cycle.d.ts.map +1 -1
- package/out/zero-cache/src/server/life-cycle.js +37 -21
- package/out/zero-cache/src/server/life-cycle.js.map +1 -1
- package/out/zero-cache/src/server/main.js +2 -7
- package/out/zero-cache/src/server/main.js.map +1 -1
- package/out/zero-cache/src/services/change-streamer/pg/schema/ddl.d.ts.map +1 -1
- package/out/zero-cache/src/services/change-streamer/pg/schema/ddl.js +9 -1
- package/out/zero-cache/src/services/change-streamer/pg/schema/ddl.js.map +1 -1
- package/out/zero-cache/src/services/dispatcher/dispatcher.d.ts +2 -2
- package/out/zero-cache/src/services/dispatcher/dispatcher.d.ts.map +1 -1
- package/out/zero-cache/src/services/dispatcher/dispatcher.js +1 -0
- package/out/zero-cache/src/services/dispatcher/dispatcher.js.map +1 -1
- 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/query-manager.d.ts.map +1 -1
- package/out/zero-client/src/client/query-manager.js +2 -5
- package/out/zero-client/src/client/query-manager.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 +8 -0
- package/out/zero-internal/src/mod.d.ts.map +1 -0
- package/out/zero-protocol/src/ast-hash.d.ts +3 -0
- package/out/zero-protocol/src/ast-hash.d.ts.map +1 -0
- package/out/zero-protocol/src/ast-hash.js +14 -0
- package/out/zero-protocol/src/ast-hash.js.map +1 -0
- package/out/zero-protocol/src/ast.d.ts.map +1 -1
- package/out/zero-protocol/src/ast.js +8 -1
- package/out/zero-protocol/src/ast.js.map +1 -1
- package/out/zero-react/src/use-query.d.ts.map +1 -1
- 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 +4 -0
- package/out/zero-solid/src/use-query.d.ts.map +1 -0
- package/out/zero.js +445 -673
- 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 +11 -12
- package/out/zql/src/zql/query/query-impl.d.ts.map +1 -1
- package/out/zql/src/zql/query/query-impl.js +51 -37
- package/out/zql/src/zql/query/query-impl.js.map +1 -1
- package/out/zql/src/zql/query/query-internal.d.ts +11 -0
- package/out/zql/src/zql/query/query-internal.d.ts.map +1 -0
- package/out/zql/src/zql/query/query-internal.js +2 -0
- package/out/zql/src/zql/query/query-internal.js.map +1 -0
- package/out/zql/src/zql/query/query.d.ts +0 -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,8 +1,8 @@
|
|
|
1
1
|
import type { AST } from '../../../../zero-protocol/src/ast.js';
|
|
2
2
|
import { type BuilderDelegate } from '../builder/builder.js';
|
|
3
|
-
import {
|
|
4
|
-
import type { Input } from '../ivm/operator.js';
|
|
3
|
+
import type { Format, ViewFactory } from '../ivm/view.js';
|
|
5
4
|
import { type NormalizedTableSchema } from './normalize-table-schema.js';
|
|
5
|
+
import type { QueryInternal } from './query-internal.js';
|
|
6
6
|
import type { AddSelections, AddSubselect, DefaultQueryResultRow, GetFieldTypeNoNullOrUndefined, MakeSingular, Operator, Parameter, Query, QueryType, SchemaToRow, Selector, Smash } from './query.js';
|
|
7
7
|
import { type PullSchemaForRelationship, type TableSchema } from './schema.js';
|
|
8
8
|
import type { TypedView } from './typed-view.js';
|
|
@@ -14,10 +14,11 @@ export interface QueryDelegate extends BuilderDelegate {
|
|
|
14
14
|
onTransactionCommit(cb: CommitListener): () => void;
|
|
15
15
|
}
|
|
16
16
|
export declare function staticParam<TAnchor, TField extends keyof TAnchor>(anchorClass: 'authData' | 'preMutationRow', field: TField): Parameter<TAnchor, TField, TAnchor[TField]>;
|
|
17
|
-
export declare abstract class AbstractQuery<TSchema extends TableSchema, TReturn extends QueryType = DefaultQueryResultRow<TSchema>> implements
|
|
17
|
+
export declare abstract class AbstractQuery<TSchema extends TableSchema, TReturn extends QueryType = DefaultQueryResultRow<TSchema>> implements QueryInternal<TSchema, TReturn> {
|
|
18
18
|
#private;
|
|
19
|
-
constructor(schema: NormalizedTableSchema, ast
|
|
20
|
-
get
|
|
19
|
+
constructor(schema: NormalizedTableSchema, ast: AST, format?: Format | undefined);
|
|
20
|
+
get format(): Format;
|
|
21
|
+
hash(): string;
|
|
21
22
|
select<TFields extends Selector<TSchema>[]>(..._fields: TFields): Query<TSchema, AddSelections<TSchema, TFields, TReturn>>;
|
|
22
23
|
protected abstract _newQuery<TSchema extends TableSchema, TReturn extends QueryType>(schema: NormalizedTableSchema, ast: AST, format: Format | undefined): Query<TSchema, TReturn>;
|
|
23
24
|
one(): Query<TSchema, MakeSingular<TReturn>>;
|
|
@@ -30,24 +31,22 @@ export declare abstract class AbstractQuery<TSchema extends TableSchema, TReturn
|
|
|
30
31
|
orderBy<TSelector extends keyof TSchema['columns']>(field: TSelector, direction: 'asc' | 'desc'): Query<TSchema, TReturn>;
|
|
31
32
|
protected _completeAst(): AST;
|
|
32
33
|
abstract materialize(): TypedView<Smash<TReturn>>;
|
|
33
|
-
abstract materialize<T>(factory:
|
|
34
|
+
abstract materialize<T>(factory: ViewFactory<TSchema, TReturn, T>): T;
|
|
34
35
|
abstract preload(): {
|
|
35
36
|
cleanup: () => void;
|
|
36
37
|
complete: Promise<void>;
|
|
37
38
|
};
|
|
38
39
|
}
|
|
40
|
+
export declare const astForTestingSymbol: unique symbol;
|
|
39
41
|
export declare class QueryImpl<TSchema extends TableSchema, TReturn extends QueryType = DefaultQueryResultRow<TSchema>> extends AbstractQuery<TSchema, TReturn> {
|
|
40
42
|
#private;
|
|
41
|
-
constructor(delegate: QueryDelegate, schema: NormalizedTableSchema, ast?: AST
|
|
42
|
-
get
|
|
43
|
-
get singular(): TReturn['singular'];
|
|
43
|
+
constructor(delegate: QueryDelegate, schema: NormalizedTableSchema, ast?: AST, format?: Format | undefined);
|
|
44
|
+
get [astForTestingSymbol](): AST;
|
|
44
45
|
protected _newQuery<TSchema extends TableSchema, TReturn extends QueryType>(schema: NormalizedTableSchema, ast: AST, format: Format | undefined): Query<TSchema, TReturn>;
|
|
45
|
-
materialize():
|
|
46
|
-
materialize<T>(factory: MaterializeFactory<TSchema, TReturn, T>): T;
|
|
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":"
|
|
1
|
+
{"version":3,"file":"query-impl.d.ts","sourceRoot":"","sources":["../../../../../../zql/src/zql/query/query-impl.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAC,GAAG,EAAW,MAAM,sCAAsC,CAAC;AAExE,OAAO,EAAgB,KAAK,eAAe,EAAC,MAAM,uBAAuB,CAAC;AAG1E,OAAO,KAAK,EAAC,MAAM,EAAE,WAAW,EAAC,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAEL,KAAK,qBAAqB,EAC3B,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EACZ,qBAAqB,EACrB,6BAA6B,EAC7B,YAAY,EACZ,QAAQ,EACR,SAAS,EACT,KAAK,EACL,SAAS,EACT,WAAW,EACX,QAAQ,EACR,KAAK,EACN,MAAM,YAAY,CAAC;AACpB,OAAO,EAGL,KAAK,yBAAyB,EAC9B,KAAK,WAAW,EACjB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,iBAAiB,CAAC;AAE/C,wBAAgB,QAAQ,CACtB,OAAO,SAAS,WAAW,EAC3B,OAAO,SAAS,SAAS,GAAG,qBAAqB,CAAC,OAAO,CAAC,EAC1D,QAAQ,EAAE,aAAa,EAAE,WAAW,EAAE,OAAO,GAAG,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAExE;AAcD,MAAM,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC;AACxC,MAAM,MAAM,WAAW,GAAG,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;AACjD,MAAM,WAAW,aAAc,SAAQ,eAAe;IACpD,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,WAAW,CAAC,EAAE,WAAW,GAAG,SAAS,GAAG,MAAM,IAAI,CAAC;IAC5E,mBAAmB,CAAC,EAAE,EAAE,cAAc,GAAG,MAAM,IAAI,CAAC;CACrD;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,SAAS,MAAM,OAAO,EAC/D,WAAW,EAAE,UAAU,GAAG,gBAAgB,EAC1C,KAAK,EAAE,MAAM,GACZ,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAM7C;AAED,8BAAsB,aAAa,CACjC,OAAO,SAAS,WAAW,EAC3B,OAAO,SAAS,SAAS,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAC1D,YAAW,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC;;gBAQxC,MAAM,EAAE,qBAAqB,EAC7B,GAAG,EAAE,GAAG,EACR,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS;IAO7B,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,IAAI,IAAI,MAAM;IASd,MAAM,CAAC,OAAO,SAAS,QAAQ,CAAC,OAAO,CAAC,EAAE,EACxC,GAAG,OAAO,EAAE,OAAO,GAClB,KAAK,CAAC,OAAO,EAAE,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAK3D,SAAS,CAAC,QAAQ,CAAC,SAAS,CAC1B,OAAO,SAAS,WAAW,EAC3B,OAAO,SAAS,SAAS,EAEzB,MAAM,EAAE,qBAAqB,EAC7B,GAAG,EAAE,GAAG,EACR,MAAM,EAAE,MAAM,GAAG,SAAS,GACzB,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC;IAE1B,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;IAc5C,OAAO,CAAC,aAAa,SAAS,MAAM,OAAO,CAAC,eAAe,CAAC,EAC1D,YAAY,EAAE,aAAa,GAC1B,KAAK,CACN,OAAO,EACP,YAAY,CACV,KAAK,CACH,yBAAyB,CAAC,OAAO,EAAE,aAAa,CAAC,EACjD,qBAAqB,CAAC,yBAAyB,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC,CACzE,EACD,OAAO,EACP,aAAa,GAAG,MAAM,CACvB,CACF;IAgHD,KAAK,CACH,KAAK,EAAE,GAAG,EACV,SAAS,EACL,QAAQ,GACR,6BAA6B,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAC5C,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAC5B,KAAK,CAAC,EACF,6BAA6B,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAC5C,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAC3B,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC;IA2B1B,KAAK,CACH,GAAG,EAAE,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,EAClC,IAAI,CAAC,EAAE;QAAC,SAAS,EAAE,OAAO,CAAA;KAAC,GAAG,SAAS,GACtC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC;IAc1B,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC;IAkB7C,OAAO,CAAC,SAAS,SAAS,MAAM,OAAO,CAAC,SAAS,CAAC,EAChD,KAAK,EAAE,SAAS,EAChB,SAAS,EAAE,KAAK,GAAG,MAAM,GACxB,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC;IAa1B,SAAS,CAAC,YAAY,IAAI,GAAG;IA2B7B,QAAQ,CAAC,WAAW,IAAI,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACjD,QAAQ,CAAC,WAAW,CAAC,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC;IACrE,QAAQ,CAAC,OAAO,IAAI;QAClB,OAAO,EAAE,MAAM,IAAI,CAAC;QACpB,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;KACzB;CACF;AAED,eAAO,MAAM,mBAAmB,eAAW,CAAC;AAE5C,qBAAa,SAAS,CACpB,OAAO,SAAS,WAAW,EAC3B,OAAO,SAAS,SAAS,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAC1D,SAAQ,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC;;gBAKrC,QAAQ,EAAE,aAAa,EACvB,MAAM,EAAE,qBAAqB,EAC7B,GAAG,GAAE,GAA+B,EACpC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS;IAQ7B,IAAI,CAAC,mBAAmB,CAAC,IAAI,GAAG,CAE/B;IAED,SAAS,CAAC,SAAS,CAAC,OAAO,SAAS,WAAW,EAAE,OAAO,SAAS,SAAS,EACxE,MAAM,EAAE,qBAAqB,EAC7B,GAAG,EAAE,GAAG,EACR,MAAM,EAAE,MAAM,GAAG,SAAS,GACzB,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC;IAI1B,WAAW,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC;IA0B7D,OAAO,IAAI;QACT,OAAO,EAAE,MAAM,IAAI,CAAC;QACpB,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;KACzB;CAaF"}
|