@instantdb/core 0.22.86-experimental.drewh-explorer-component.20178667850.1 → 0.22.86-experimental.split-store.20178922132.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commonjs/Reactor.d.ts +20 -6
- package/dist/commonjs/Reactor.d.ts.map +1 -1
- package/dist/commonjs/Reactor.js +97 -42
- package/dist/commonjs/Reactor.js.map +1 -1
- package/dist/commonjs/SyncTable.d.ts +4 -1
- package/dist/commonjs/SyncTable.d.ts.map +1 -1
- package/dist/commonjs/SyncTable.js +35 -37
- package/dist/commonjs/SyncTable.js.map +1 -1
- package/dist/commonjs/instaml.d.ts +17 -4
- package/dist/commonjs/instaml.d.ts.map +1 -1
- package/dist/commonjs/instaml.js +105 -76
- package/dist/commonjs/instaml.js.map +1 -1
- package/dist/commonjs/instaql.d.ts +2 -1
- package/dist/commonjs/instaql.d.ts.map +1 -1
- package/dist/commonjs/instaql.js +65 -63
- package/dist/commonjs/instaql.js.map +1 -1
- package/dist/commonjs/reactorTypes.d.ts +29 -0
- package/dist/commonjs/reactorTypes.d.ts.map +1 -0
- package/dist/commonjs/reactorTypes.js +3 -0
- package/dist/commonjs/reactorTypes.js.map +1 -0
- package/dist/commonjs/store.d.ts +44 -21
- package/dist/commonjs/store.d.ts.map +1 -1
- package/dist/commonjs/store.js +164 -69
- package/dist/commonjs/store.js.map +1 -1
- package/dist/esm/Reactor.d.ts +20 -6
- package/dist/esm/Reactor.d.ts.map +1 -1
- package/dist/esm/Reactor.js +98 -43
- package/dist/esm/Reactor.js.map +1 -1
- package/dist/esm/SyncTable.d.ts +4 -1
- package/dist/esm/SyncTable.d.ts.map +1 -1
- package/dist/esm/SyncTable.js +35 -37
- package/dist/esm/SyncTable.js.map +1 -1
- package/dist/esm/instaml.d.ts +17 -4
- package/dist/esm/instaml.d.ts.map +1 -1
- package/dist/esm/instaml.js +102 -71
- package/dist/esm/instaml.js.map +1 -1
- package/dist/esm/instaql.d.ts +2 -1
- package/dist/esm/instaql.d.ts.map +1 -1
- package/dist/esm/instaql.js +65 -63
- package/dist/esm/instaql.js.map +1 -1
- package/dist/esm/reactorTypes.d.ts +29 -0
- package/dist/esm/reactorTypes.d.ts.map +1 -0
- package/dist/esm/reactorTypes.js +2 -0
- package/dist/esm/reactorTypes.js.map +1 -0
- package/dist/esm/store.d.ts +44 -21
- package/dist/esm/store.d.ts.map +1 -1
- package/dist/esm/store.js +161 -69
- package/dist/esm/store.js.map +1 -1
- package/dist/standalone/index.js +1536 -1364
- package/dist/standalone/index.umd.cjs +3 -3
- package/package.json +2 -2
- package/src/Reactor.js +126 -58
- package/src/SyncTable.ts +85 -45
- package/src/{instaml.js → instaml.ts} +195 -95
- package/src/instaql.ts +86 -60
- package/src/reactorTypes.ts +32 -0
- package/src/store.ts +209 -79
package/dist/commonjs/instaql.js
CHANGED
|
@@ -54,20 +54,20 @@ class AttrNotFoundError extends Error {
|
|
|
54
54
|
this.name = 'AttrNotFoundError';
|
|
55
55
|
}
|
|
56
56
|
}
|
|
57
|
-
function idAttr(
|
|
58
|
-
const attr = s.getPrimaryKeyAttr(
|
|
57
|
+
function idAttr(attrsStore, ns) {
|
|
58
|
+
const attr = s.getPrimaryKeyAttr(attrsStore, ns);
|
|
59
59
|
if (!attr) {
|
|
60
60
|
throw new AttrNotFoundError(`Could not find id attr for ${ns}`);
|
|
61
61
|
}
|
|
62
62
|
return attr;
|
|
63
63
|
}
|
|
64
|
-
function defaultWhere(makeVar,
|
|
65
|
-
return [eidWhere(makeVar,
|
|
64
|
+
function defaultWhere(makeVar, attrsStore, etype, level) {
|
|
65
|
+
return [eidWhere(makeVar, attrsStore, etype, level)];
|
|
66
66
|
}
|
|
67
|
-
function eidWhere(makeVar,
|
|
67
|
+
function eidWhere(makeVar, attrsStore, etype, level) {
|
|
68
68
|
return [
|
|
69
69
|
makeVar(etype, level),
|
|
70
|
-
idAttr(
|
|
70
|
+
idAttr(attrsStore, etype).id,
|
|
71
71
|
makeVar(etype, level),
|
|
72
72
|
makeVar('time', level),
|
|
73
73
|
];
|
|
@@ -75,9 +75,9 @@ function eidWhere(makeVar, store, etype, level) {
|
|
|
75
75
|
function replaceInAttrPat(attrPat, needle, v) {
|
|
76
76
|
return attrPat.map((x) => (x === needle ? v : x));
|
|
77
77
|
}
|
|
78
|
-
function refAttrPat(makeVar,
|
|
79
|
-
const fwdAttr = s.getAttrByFwdIdentName(
|
|
80
|
-
const revAttr = s.getAttrByReverseIdentName(
|
|
78
|
+
function refAttrPat(makeVar, attrsStore, etype, level, label) {
|
|
79
|
+
const fwdAttr = s.getAttrByFwdIdentName(attrsStore, etype, label);
|
|
80
|
+
const revAttr = s.getAttrByReverseIdentName(attrsStore, etype, label);
|
|
81
81
|
const attr = fwdAttr || revAttr;
|
|
82
82
|
if (!attr) {
|
|
83
83
|
throw new AttrNotFoundError(`Could not find attr for ${[etype, label]}`);
|
|
@@ -196,15 +196,15 @@ function parseValue(attr, v) {
|
|
|
196
196
|
}
|
|
197
197
|
return v;
|
|
198
198
|
}
|
|
199
|
-
function valueAttrPat(makeVar,
|
|
200
|
-
const fwdAttr = s.getAttrByFwdIdentName(
|
|
201
|
-
const revAttr = s.getAttrByReverseIdentName(
|
|
199
|
+
function valueAttrPat(makeVar, attrsStore, valueEtype, valueLevel, valueLabel, v) {
|
|
200
|
+
const fwdAttr = s.getAttrByFwdIdentName(attrsStore, valueEtype, valueLabel);
|
|
201
|
+
const revAttr = s.getAttrByReverseIdentName(attrsStore, valueEtype, valueLabel);
|
|
202
202
|
const attr = fwdAttr || revAttr;
|
|
203
203
|
if (!attr) {
|
|
204
204
|
throw new AttrNotFoundError(`No attr for etype = ${valueEtype} label = ${valueLabel}`);
|
|
205
205
|
}
|
|
206
206
|
if (v === null || v === void 0 ? void 0 : v.hasOwnProperty('$isNull')) {
|
|
207
|
-
const idAttr = s.getAttrByFwdIdentName(
|
|
207
|
+
const idAttr = s.getAttrByFwdIdentName(attrsStore, valueEtype, 'id');
|
|
208
208
|
if (!idAttr) {
|
|
209
209
|
throw new AttrNotFoundError(`No attr for etype = ${valueEtype} label = id`);
|
|
210
210
|
}
|
|
@@ -225,19 +225,19 @@ function valueAttrPat(makeVar, store, valueEtype, valueLevel, valueLabel, v) {
|
|
|
225
225
|
}
|
|
226
226
|
return [v, attr.id, makeVar(valueEtype, valueLevel), wildcard('time')];
|
|
227
227
|
}
|
|
228
|
-
function refAttrPats(makeVar,
|
|
228
|
+
function refAttrPats(makeVar, attrsStore, etype, level, refsPath) {
|
|
229
229
|
const [lastEtype, lastLevel, attrPats] = refsPath.reduce((acc, label) => {
|
|
230
230
|
const [etype, level, attrPats] = acc;
|
|
231
|
-
const [nextEtype, nextLevel, attrPat] = refAttrPat(makeVar,
|
|
231
|
+
const [nextEtype, nextLevel, attrPat] = refAttrPat(makeVar, attrsStore, etype, level, label);
|
|
232
232
|
return [nextEtype, nextLevel, [...attrPats, attrPat]];
|
|
233
233
|
}, [etype, level, []]);
|
|
234
234
|
return [lastEtype, lastLevel, attrPats];
|
|
235
235
|
}
|
|
236
|
-
function whereCondAttrPats(makeVar,
|
|
236
|
+
function whereCondAttrPats(makeVar, attrsStore, etype, level, path, v) {
|
|
237
237
|
const refsPath = path.slice(0, path.length - 1);
|
|
238
238
|
const valueLabel = path[path.length - 1];
|
|
239
|
-
const [lastEtype, lastLevel, refPats] = refAttrPats(makeVar,
|
|
240
|
-
const valuePat = valueAttrPat(makeVar,
|
|
239
|
+
const [lastEtype, lastLevel, refPats] = refAttrPats(makeVar, attrsStore, etype, level, refsPath);
|
|
240
|
+
const valuePat = valueAttrPat(makeVar, attrsStore, lastEtype, lastLevel, valueLabel, v);
|
|
241
241
|
return refPats.concat([valuePat]);
|
|
242
242
|
}
|
|
243
243
|
function withJoin(where, join) {
|
|
@@ -260,11 +260,11 @@ function genMakeVar(baseMakeVar, joinSym, orIdx) {
|
|
|
260
260
|
return `${base}-${orIdx}`;
|
|
261
261
|
};
|
|
262
262
|
}
|
|
263
|
-
function parseWhereClauses(makeVar, clauseType /* 'or' | 'and' */,
|
|
263
|
+
function parseWhereClauses(makeVar, clauseType /* 'or' | 'and' */, attrsStore, etype, level, whereValue) {
|
|
264
264
|
const joinSym = makeVar(etype, level);
|
|
265
265
|
const patterns = whereValue.map((w, i) => {
|
|
266
266
|
const makeNamespacedVar = genMakeVar(makeVar, joinSym, i);
|
|
267
|
-
return parseWhere(makeNamespacedVar,
|
|
267
|
+
return parseWhere(makeNamespacedVar, attrsStore, etype, level, w);
|
|
268
268
|
});
|
|
269
269
|
return { [clauseType]: { patterns, joinSym } };
|
|
270
270
|
}
|
|
@@ -279,16 +279,18 @@ function growPath(path) {
|
|
|
279
279
|
}
|
|
280
280
|
// Returns array of pattern arrays that should be grouped in OR
|
|
281
281
|
// to capture any intermediate nulls
|
|
282
|
-
function whereCondAttrPatsForNullIsTrue(makeVar,
|
|
283
|
-
return growPath(path).map((path) => whereCondAttrPats(makeVar,
|
|
282
|
+
function whereCondAttrPatsForNullIsTrue(makeVar, attrsStore, etype, level, path) {
|
|
283
|
+
return growPath(path).map((path) => whereCondAttrPats(makeVar, attrsStore, etype, level, path, {
|
|
284
|
+
$isNull: true,
|
|
285
|
+
}));
|
|
284
286
|
}
|
|
285
|
-
function parseWhere(makeVar,
|
|
287
|
+
function parseWhere(makeVar, attrsStore, etype, level, where) {
|
|
286
288
|
return Object.entries(where).flatMap(([k, v]) => {
|
|
287
289
|
if (isOrClauses([k, v])) {
|
|
288
|
-
return parseWhereClauses(makeVar, 'or',
|
|
290
|
+
return parseWhereClauses(makeVar, 'or', attrsStore, etype, level, v);
|
|
289
291
|
}
|
|
290
292
|
if (isAndClauses([k, v])) {
|
|
291
|
-
return parseWhereClauses(makeVar, 'and',
|
|
293
|
+
return parseWhereClauses(makeVar, 'and', attrsStore, etype, level, v);
|
|
292
294
|
}
|
|
293
295
|
// Temporary hack until we have support for a uuid index on `id`
|
|
294
296
|
if (k === '$entityIdStartsWith') {
|
|
@@ -303,8 +305,8 @@ function parseWhere(makeVar, store, etype, level, where) {
|
|
|
303
305
|
if (v === null || v === void 0 ? void 0 : v.hasOwnProperty('$not')) {
|
|
304
306
|
// `$not` won't pick up entities that are missing the attr, so we
|
|
305
307
|
// add in a `$isNull` to catch those too.
|
|
306
|
-
const notPats = whereCondAttrPats(makeVar,
|
|
307
|
-
const nilPats = whereCondAttrPatsForNullIsTrue(makeVar,
|
|
308
|
+
const notPats = whereCondAttrPats(makeVar, attrsStore, etype, level, path, v);
|
|
309
|
+
const nilPats = whereCondAttrPatsForNullIsTrue(makeVar, attrsStore, etype, level, path);
|
|
308
310
|
return [
|
|
309
311
|
{
|
|
310
312
|
or: {
|
|
@@ -320,22 +322,22 @@ function parseWhere(makeVar, store, etype, level, where) {
|
|
|
320
322
|
return [
|
|
321
323
|
{
|
|
322
324
|
or: {
|
|
323
|
-
patterns: whereCondAttrPatsForNullIsTrue(makeVar,
|
|
325
|
+
patterns: whereCondAttrPatsForNullIsTrue(makeVar, attrsStore, etype, level, path),
|
|
324
326
|
joinSym: makeVar(etype, level),
|
|
325
327
|
},
|
|
326
328
|
},
|
|
327
329
|
];
|
|
328
330
|
}
|
|
329
|
-
return whereCondAttrPats(makeVar,
|
|
331
|
+
return whereCondAttrPats(makeVar, attrsStore, etype, level, path, v);
|
|
330
332
|
});
|
|
331
333
|
}
|
|
332
|
-
function makeWhere(
|
|
334
|
+
function makeWhere(attrsStore, etype, level, where) {
|
|
333
335
|
const makeVar = makeVarImpl;
|
|
334
336
|
if (!where) {
|
|
335
|
-
return defaultWhere(makeVar,
|
|
337
|
+
return defaultWhere(makeVar, attrsStore, etype, level);
|
|
336
338
|
}
|
|
337
|
-
const parsedWhere = parseWhere(makeVar,
|
|
338
|
-
return parsedWhere.concat(defaultWhere(makeVar,
|
|
339
|
+
const parsedWhere = parseWhere(makeVar, attrsStore, etype, level, where);
|
|
340
|
+
return parsedWhere.concat(defaultWhere(makeVar, attrsStore, etype, level));
|
|
339
341
|
}
|
|
340
342
|
// Find
|
|
341
343
|
// -----------------
|
|
@@ -344,12 +346,12 @@ function makeFind(makeVar, etype, level) {
|
|
|
344
346
|
}
|
|
345
347
|
// extendObjects
|
|
346
348
|
// -----------------
|
|
347
|
-
function makeJoin(makeVar,
|
|
348
|
-
const [nextEtype, nextLevel, pat, attr, isForward] = refAttrPat(makeVar,
|
|
349
|
+
function makeJoin(makeVar, attrsStore, etype, level, label, eid) {
|
|
350
|
+
const [nextEtype, nextLevel, pat, attr, isForward] = refAttrPat(makeVar, attrsStore, etype, level, label);
|
|
349
351
|
const actualized = replaceInAttrPat(pat, makeVar(etype, level), eid);
|
|
350
352
|
return [nextEtype, nextLevel, actualized, attr, isForward];
|
|
351
353
|
}
|
|
352
|
-
function extendObjects(makeVar, store, { etype, level, form }, objects) {
|
|
354
|
+
function extendObjects(makeVar, store, attrsStore, { etype, level, form }, objects) {
|
|
353
355
|
const childQueries = Object.keys(form).filter((c) => c !== '$');
|
|
354
356
|
if (!childQueries.length) {
|
|
355
357
|
return Object.values(objects);
|
|
@@ -358,10 +360,10 @@ function extendObjects(makeVar, store, { etype, level, form }, objects) {
|
|
|
358
360
|
const childResults = childQueries.map(function getChildResult(label) {
|
|
359
361
|
var _a, _b, _c;
|
|
360
362
|
const isSingular = Boolean(store.cardinalityInference &&
|
|
361
|
-
((_c = (_b = (_a =
|
|
363
|
+
((_c = (_b = (_a = attrsStore.linkIndex) === null || _a === void 0 ? void 0 : _a[etype]) === null || _b === void 0 ? void 0 : _b[label]) === null || _c === void 0 ? void 0 : _c.isSingular));
|
|
362
364
|
try {
|
|
363
|
-
const [nextEtype, nextLevel, join] = makeJoin(makeVar,
|
|
364
|
-
const childrenArray = queryOne(store, {
|
|
365
|
+
const [nextEtype, nextLevel, join] = makeJoin(makeVar, attrsStore, etype, level, label, eid);
|
|
366
|
+
const childrenArray = queryOne(store, attrsStore, {
|
|
365
367
|
etype: nextEtype,
|
|
366
368
|
level: nextLevel,
|
|
367
369
|
form: form[label],
|
|
@@ -434,30 +436,30 @@ function isBefore(startCursor, orderAttr, direction, idVec) {
|
|
|
434
436
|
const c_v_new = dataType === 'date' ? comparableDate(c_v) : c_v;
|
|
435
437
|
return (compareOrderTriples([e, v_new], [c_e, c_v_new], dataType) === compareVal);
|
|
436
438
|
}
|
|
437
|
-
function orderAttrFromCursor(
|
|
439
|
+
function orderAttrFromCursor(attrsStore, cursor) {
|
|
438
440
|
const cursorAttrId = cursor[1];
|
|
439
|
-
return
|
|
441
|
+
return attrsStore.getAttr(cursorAttrId);
|
|
440
442
|
}
|
|
441
|
-
function orderAttrFromOrder(
|
|
443
|
+
function orderAttrFromOrder(attrsStore, etype, order) {
|
|
442
444
|
const label = Object.keys(order)[0];
|
|
443
|
-
return s.getAttrByFwdIdentName(
|
|
445
|
+
return s.getAttrByFwdIdentName(attrsStore, etype, label);
|
|
444
446
|
}
|
|
445
|
-
function getOrderAttr(
|
|
447
|
+
function getOrderAttr(attrsStore, etype, cursor, order) {
|
|
446
448
|
if (cursor) {
|
|
447
|
-
return orderAttrFromCursor(
|
|
449
|
+
return orderAttrFromCursor(attrsStore, cursor);
|
|
448
450
|
}
|
|
449
451
|
if (order) {
|
|
450
|
-
return orderAttrFromOrder(
|
|
452
|
+
return orderAttrFromOrder(attrsStore, etype, order);
|
|
451
453
|
}
|
|
452
454
|
}
|
|
453
|
-
function objectAttrs(
|
|
455
|
+
function objectAttrs(attrsStore, etype, dq) {
|
|
454
456
|
var _a, _b;
|
|
455
457
|
if (!Array.isArray(dq.fields)) {
|
|
456
|
-
return s.getBlobAttrs(
|
|
458
|
+
return s.getBlobAttrs(attrsStore, etype);
|
|
457
459
|
}
|
|
458
460
|
const attrs = new Map();
|
|
459
461
|
for (const field of dq.fields) {
|
|
460
|
-
const attr = s.getAttrByFwdIdentName(
|
|
462
|
+
const attr = s.getAttrByFwdIdentName(attrsStore, etype, field);
|
|
461
463
|
const label = (_a = attr === null || attr === void 0 ? void 0 : attr['forward-identity']) === null || _a === void 0 ? void 0 : _a[2];
|
|
462
464
|
if (label && s.isBlob(attr)) {
|
|
463
465
|
attrs.set(label, attr);
|
|
@@ -465,7 +467,7 @@ function objectAttrs(store, etype, dq) {
|
|
|
465
467
|
}
|
|
466
468
|
// Ensure we add the id field to avoid empty objects
|
|
467
469
|
if (!attrs.has('id')) {
|
|
468
|
-
const attr = s.getAttrByFwdIdentName(
|
|
470
|
+
const attr = s.getAttrByFwdIdentName(attrsStore, etype, 'id');
|
|
469
471
|
const label = (_b = attr === null || attr === void 0 ? void 0 : attr['forward-identity']) === null || _b === void 0 ? void 0 : _b[2];
|
|
470
472
|
if (label) {
|
|
471
473
|
attrs.set(label, attr);
|
|
@@ -473,14 +475,14 @@ function objectAttrs(store, etype, dq) {
|
|
|
473
475
|
}
|
|
474
476
|
return attrs;
|
|
475
477
|
}
|
|
476
|
-
function runDataloadAndReturnObjects(store, { etype, pageInfo, dq, form }) {
|
|
478
|
+
function runDataloadAndReturnObjects(store, attrsStore, { etype, pageInfo, dq, form }) {
|
|
477
479
|
var _a, _b;
|
|
478
480
|
const order = (_a = form === null || form === void 0 ? void 0 : form.$) === null || _a === void 0 ? void 0 : _a.order;
|
|
479
481
|
const isLeadingQuery = isLeading(form);
|
|
480
482
|
const direction = determineDirection(form);
|
|
481
483
|
let idVecs = (0, datalog_js_1.query)(store, dq);
|
|
482
484
|
const startCursor = pageInfo === null || pageInfo === void 0 ? void 0 : pageInfo['start-cursor'];
|
|
483
|
-
const orderAttr = getOrderAttr(
|
|
485
|
+
const orderAttr = getOrderAttr(attrsStore, etype, startCursor, order);
|
|
484
486
|
if (orderAttr && ((_b = orderAttr === null || orderAttr === void 0 ? void 0 : orderAttr['forward-identity']) === null || _b === void 0 ? void 0 : _b[2]) !== 'id') {
|
|
485
487
|
const isDate = orderAttr['checked-data-type'] === 'date';
|
|
486
488
|
const a = orderAttr.id;
|
|
@@ -503,7 +505,7 @@ function runDataloadAndReturnObjects(store, { etype, pageInfo, dq, form }) {
|
|
|
503
505
|
return compareOrderTriples(b, a, orderAttr === null || orderAttr === void 0 ? void 0 : orderAttr['checked-data-type']);
|
|
504
506
|
});
|
|
505
507
|
let objects = {};
|
|
506
|
-
const attrs = objectAttrs(
|
|
508
|
+
const attrs = objectAttrs(attrsStore, etype, dq);
|
|
507
509
|
for (const idVec of idVecs) {
|
|
508
510
|
const [id] = idVec;
|
|
509
511
|
if (objects[id]) {
|
|
@@ -555,16 +557,16 @@ function isLeading(form) {
|
|
|
555
557
|
* into a datalog query. We then run the datalog query,
|
|
556
558
|
* and reduce all the triples into objects.
|
|
557
559
|
*/
|
|
558
|
-
function resolveObjects(store, { etype, level, form, join, pageInfo }) {
|
|
560
|
+
function resolveObjects(store, attrsStore, { etype, level, form, join, pageInfo }) {
|
|
559
561
|
var _a, _b, _c, _d, _e;
|
|
560
562
|
// Wait for server to tell us where we start if we don't start from the beginning
|
|
561
563
|
if (!isLeading(form) && (!pageInfo || !pageInfo['start-cursor'])) {
|
|
562
564
|
return [];
|
|
563
565
|
}
|
|
564
|
-
const where = withJoin(makeWhere(
|
|
566
|
+
const where = withJoin(makeWhere(attrsStore, etype, level, (_a = form.$) === null || _a === void 0 ? void 0 : _a.where), join);
|
|
565
567
|
const find = makeFind(makeVarImpl, etype, level);
|
|
566
568
|
const fields = (_b = form.$) === null || _b === void 0 ? void 0 : _b.fields;
|
|
567
|
-
const objs = runDataloadAndReturnObjects(store, {
|
|
569
|
+
const objs = runDataloadAndReturnObjects(store, attrsStore, {
|
|
568
570
|
etype,
|
|
569
571
|
pageInfo,
|
|
570
572
|
form,
|
|
@@ -592,9 +594,9 @@ function resolveObjects(store, { etype, level, form, join, pageInfo }) {
|
|
|
592
594
|
* This swallows the missing attr error and returns
|
|
593
595
|
* an empty result instead
|
|
594
596
|
*/
|
|
595
|
-
function guardedResolveObjects(store, opts) {
|
|
597
|
+
function guardedResolveObjects(store, attrsStore, opts) {
|
|
596
598
|
try {
|
|
597
|
-
return resolveObjects(store, opts);
|
|
599
|
+
return resolveObjects(store, attrsStore, opts);
|
|
598
600
|
}
|
|
599
601
|
catch (e) {
|
|
600
602
|
if (e instanceof AttrNotFoundError) {
|
|
@@ -616,9 +618,9 @@ function guardedResolveObjects(store, opts) {
|
|
|
616
618
|
* `guardResolveObjects` will return the relevant `users` objects
|
|
617
619
|
* `extendObjects` will then extend each `user` object with relevant `posts`.
|
|
618
620
|
*/
|
|
619
|
-
function queryOne(store, opts) {
|
|
620
|
-
const objects = guardedResolveObjects(store, opts);
|
|
621
|
-
return extendObjects(makeVarImpl, store, opts, objects);
|
|
621
|
+
function queryOne(store, attrsStore, opts) {
|
|
622
|
+
const objects = guardedResolveObjects(store, attrsStore, opts);
|
|
623
|
+
return extendObjects(makeVarImpl, store, attrsStore, opts, objects);
|
|
622
624
|
}
|
|
623
625
|
function formatPageInfo(pageInfo) {
|
|
624
626
|
const res = {};
|
|
@@ -632,14 +634,14 @@ function formatPageInfo(pageInfo) {
|
|
|
632
634
|
}
|
|
633
635
|
return res;
|
|
634
636
|
}
|
|
635
|
-
function query({ store, pageInfo, aggregate, }, q) {
|
|
637
|
+
function query({ store, attrsStore, pageInfo, aggregate, }, q) {
|
|
636
638
|
const data = Object.keys(q).reduce(function reduceResult(res, k) {
|
|
637
639
|
if ((aggregate === null || aggregate === void 0 ? void 0 : aggregate[k]) || '$$ruleParams' === k) {
|
|
638
640
|
// Aggregate doesn't return any join rows and has no children,
|
|
639
641
|
// so don't bother querying further
|
|
640
642
|
return res;
|
|
641
643
|
}
|
|
642
|
-
res[k] = queryOne(store, {
|
|
644
|
+
res[k] = queryOne(store, attrsStore, {
|
|
643
645
|
etype: k,
|
|
644
646
|
form: q[k],
|
|
645
647
|
level: 0,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instaql.js","sourceRoot":"","sources":["../../src/instaql.ts"],"names":[],"mappings":"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","sourcesContent":["import { query as datalogQuery } from './datalog.js';\nimport { uuidCompare } from './utils/uuid.ts';\nimport { stringCompare } from './utils/strings.ts';\nimport * as s from './store.ts';\nimport { InstantDBAttr } from './attrTypes.ts';\nimport { Cursor } from './queryTypes.ts';\n\ntype Pat = [string | any, string, string | any, string | number];\ntype Pats = Array<Pat>;\ntype OrPat = {\n or: {\n patterns: FullPats;\n joinSym: string;\n };\n};\ntype AndPat = {\n and: {\n patterns: FullPats;\n joinSym: string;\n };\n};\ntype FullPat = Pat | OrPat | AndPat;\ntype FullPats = Array<FullPat>;\n\n// Pattern variables\n// -----------------\n\ntype MakeVar = (x: string, level: number) => string;\n\nlet _seed = 0;\n\nfunction wildcard(friendlyName: string) {\n return makeVarImpl(`_${friendlyName}`, _seed++);\n}\n\nfunction makeVarImpl(x: string, level: number): string {\n return `?${x}-${level}`;\n}\n\n// Where\n// -----------------\n\nclass AttrNotFoundError extends Error {\n constructor(message) {\n super(message);\n this.name = 'AttrNotFoundError';\n }\n}\n\nfunction idAttr(store: s.Store, ns: string): InstantDBAttr {\n const attr = s.getPrimaryKeyAttr(store, ns);\n\n if (!attr) {\n throw new AttrNotFoundError(`Could not find id attr for ${ns}`);\n }\n return attr;\n}\n\nfunction defaultWhere(\n makeVar: MakeVar,\n store: s.Store,\n etype: string,\n level: number,\n): Pats {\n return [eidWhere(makeVar, store, etype, level)];\n}\n\nfunction eidWhere(\n makeVar: MakeVar,\n store: s.Store,\n etype: string,\n level: number,\n): Pat {\n return [\n makeVar(etype, level),\n idAttr(store, etype).id,\n makeVar(etype, level),\n makeVar('time', level),\n ];\n}\n\nfunction replaceInAttrPat(attrPat: Pat, needle: string, v: any): Pat {\n return attrPat.map((x) => (x === needle ? v : x)) as Pat;\n}\n\nfunction refAttrPat(\n makeVar: MakeVar,\n store: s.Store,\n etype: string,\n level: number,\n label: string,\n): [string, number, Pat, InstantDBAttr, boolean] {\n const fwdAttr = s.getAttrByFwdIdentName(store, etype, label);\n const revAttr = s.getAttrByReverseIdentName(store, etype, label);\n const attr = fwdAttr || revAttr;\n\n if (!attr) {\n throw new AttrNotFoundError(`Could not find attr for ${[etype, label]}`);\n }\n\n if (attr['value-type'] !== 'ref') {\n throw new Error(`Attr ${attr.id} is not a ref`);\n }\n\n const [_f, fwdEtype] = attr['forward-identity'];\n const [_r, revEtype] = attr['reverse-identity']!;\n const nextLevel = level + 1;\n const attrPat: Pat = fwdAttr\n ? [\n makeVar(fwdEtype, level),\n attr.id,\n makeVar(revEtype, nextLevel),\n wildcard('time'),\n ]\n : [\n makeVar(fwdEtype, nextLevel),\n attr.id,\n makeVar(revEtype, level),\n wildcard('time'),\n ];\n\n const nextEtype = fwdAttr ? revEtype : fwdEtype;\n\n const isForward = Boolean(fwdAttr);\n\n return [nextEtype, nextLevel, attrPat, attr, isForward];\n}\n\nfunction makeLikeMatcher(caseSensitive: boolean, pattern: string) {\n if (typeof pattern !== 'string') {\n return function likeMatcher(_value) {\n return false;\n };\n }\n\n const escapedPattern = pattern.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n const regexPattern = escapedPattern.replace(/%/g, '.*').replace(/_/g, '.');\n\n const regex = new RegExp(\n `^${regexPattern}$`,\n caseSensitive ? undefined : 'i',\n );\n\n return function likeMatcher(value) {\n if (typeof value !== 'string') {\n return false;\n }\n return regex.test(value);\n };\n}\n\nfunction parseValue(attr: InstantDBAttr, v: any) {\n if (\n typeof v !== 'object' ||\n v.hasOwnProperty('$in') ||\n v.hasOwnProperty('in')\n ) {\n return v;\n }\n\n const isDate = attr['checked-data-type'] === 'date';\n\n if (v.hasOwnProperty('$gt')) {\n return {\n $comparator: true,\n $op: isDate\n ? function gtDate(triple) {\n return new Date(triple[2]) > new Date(v.$gt);\n }\n : function gt(triple) {\n return triple[2] > v.$gt;\n },\n };\n }\n if (v.hasOwnProperty('$gte')) {\n return {\n $comparator: true,\n $op: isDate\n ? function gteDate(triple) {\n return new Date(triple[2]) >= new Date(v.$gte);\n }\n : function gte(triple) {\n return triple[2] >= v.$gte;\n },\n };\n }\n\n if (v.hasOwnProperty('$lt')) {\n return {\n $comparator: true,\n $op: isDate\n ? function ltDate(triple) {\n return new Date(triple[2]) < new Date(v.$lt);\n }\n : function lt(triple) {\n return triple[2] < v.$lt;\n },\n };\n }\n if (v.hasOwnProperty('$lte')) {\n return {\n $comparator: true,\n $op: isDate\n ? function lteDate(triple) {\n return new Date(triple[2]) <= new Date(v.$lte);\n }\n : function lte(triple) {\n return triple[2] <= v.$lte;\n },\n };\n }\n\n if (v.hasOwnProperty('$like')) {\n const matcher = makeLikeMatcher(true, v.$like);\n return {\n $comparator: true,\n $op: function like(triple) {\n return matcher(triple[2]);\n },\n };\n }\n\n if (v.hasOwnProperty('$ilike')) {\n const matcher = makeLikeMatcher(false, v.$ilike);\n return {\n $comparator: true,\n $op: function ilike(triple) {\n return matcher(triple[2]);\n },\n };\n }\n\n return v;\n}\n\nfunction valueAttrPat(\n makeVar: MakeVar,\n store: s.Store,\n valueEtype: string,\n valueLevel: number,\n valueLabel: string,\n v: any,\n): Pat {\n const fwdAttr = s.getAttrByFwdIdentName(store, valueEtype, valueLabel);\n const revAttr = s.getAttrByReverseIdentName(store, valueEtype, valueLabel);\n const attr = fwdAttr || revAttr;\n\n if (!attr) {\n throw new AttrNotFoundError(\n `No attr for etype = ${valueEtype} label = ${valueLabel}`,\n );\n }\n\n if (v?.hasOwnProperty('$isNull')) {\n const idAttr = s.getAttrByFwdIdentName(store, valueEtype, 'id');\n if (!idAttr) {\n throw new AttrNotFoundError(\n `No attr for etype = ${valueEtype} label = id`,\n );\n }\n\n return [\n makeVar(valueEtype, valueLevel),\n idAttr.id,\n { $isNull: { attrId: attr.id, isNull: v.$isNull, reverse: !fwdAttr } },\n wildcard('time'),\n ];\n }\n\n if (fwdAttr) {\n return [\n makeVar(valueEtype, valueLevel),\n attr.id,\n parseValue(attr, v),\n wildcard('time'),\n ];\n }\n return [v, attr.id, makeVar(valueEtype, valueLevel), wildcard('time')];\n}\n\nfunction refAttrPats(\n makeVar: MakeVar,\n store: s.Store,\n etype: string,\n level: number,\n refsPath: string[],\n): [string, number, Pats] {\n const [lastEtype, lastLevel, attrPats] = refsPath.reduce(\n (acc, label) => {\n const [etype, level, attrPats] = acc;\n const [nextEtype, nextLevel, attrPat] = refAttrPat(\n makeVar,\n store,\n etype,\n level,\n label,\n );\n return [nextEtype, nextLevel, [...attrPats, attrPat]];\n },\n [etype, level, []],\n );\n\n return [lastEtype, lastLevel, attrPats];\n}\n\nfunction whereCondAttrPats(\n makeVar: MakeVar,\n store: s.Store,\n etype: string,\n level: number,\n path: string[],\n v: any,\n): Pats {\n const refsPath = path.slice(0, path.length - 1);\n const valueLabel = path[path.length - 1];\n const [lastEtype, lastLevel, refPats] = refAttrPats(\n makeVar,\n store,\n etype,\n level,\n refsPath,\n );\n const valuePat = valueAttrPat(\n makeVar,\n store,\n lastEtype,\n lastLevel,\n valueLabel,\n v,\n );\n\n return refPats.concat([valuePat]);\n}\n\nfunction withJoin(where, join) {\n return join ? [join].concat(where) : where;\n}\n\nfunction isOrClauses([k, v]): boolean {\n return k === 'or' && Array.isArray(v);\n}\n\nfunction isAndClauses([k, v]): boolean {\n return k === 'and' && Array.isArray(v);\n}\n\n// Creates a makeVar that will namespace symbols for or clauses\n// to prevent conflicts, except for the base etype\nfunction genMakeVar(baseMakeVar: MakeVar, joinSym: string, orIdx: number) {\n return (x, lvl) => {\n const base = baseMakeVar(x, lvl);\n if (joinSym == base) {\n return base;\n }\n return `${base}-${orIdx}`;\n };\n}\n\nfunction parseWhereClauses(\n makeVar: MakeVar,\n clauseType: 'or' | 'and' /* 'or' | 'and' */,\n store: s.Store,\n etype: string,\n level: number,\n whereValue: any,\n): FullPat {\n const joinSym = makeVar(etype, level);\n const patterns: FullPats = whereValue.map((w, i) => {\n const makeNamespacedVar = genMakeVar(makeVar, joinSym, i);\n return parseWhere(makeNamespacedVar, store, etype, level, w);\n });\n return { [clauseType]: { patterns, joinSym } } as AndPat | OrPat;\n}\n\n// Given a path, returns a list of paths leading up to this path:\n// growPath([1, 2, 3]) -> [[1], [1, 2], [1, 2, 3]]\nfunction growPath<T>(path: T[]) {\n const ret: Array<T[]> = [];\n for (let i = 1; i <= path.length; i++) {\n ret.push(path.slice(0, i));\n }\n return ret;\n}\n\n// Returns array of pattern arrays that should be grouped in OR\n// to capture any intermediate nulls\nfunction whereCondAttrPatsForNullIsTrue(\n makeVar: MakeVar,\n store: s.Store,\n etype: string,\n level: number,\n path: string[],\n): Pats[] {\n return growPath(path).map((path) =>\n whereCondAttrPats(makeVar, store, etype, level, path, { $isNull: true }),\n );\n}\n\nfunction parseWhere(\n makeVar: MakeVar,\n store: s.Store,\n etype: string,\n level: number,\n where: Record<string, any>,\n): FullPats {\n return Object.entries(where).flatMap(([k, v]) => {\n if (isOrClauses([k, v])) {\n return parseWhereClauses(makeVar, 'or', store, etype, level, v);\n }\n if (isAndClauses([k, v])) {\n return parseWhereClauses(makeVar, 'and', store, etype, level, v);\n }\n\n // Temporary hack until we have support for a uuid index on `id`\n if (k === '$entityIdStartsWith') {\n return [];\n }\n\n const path = k.split('.');\n\n // Normalize $ne to $not\n if (v?.hasOwnProperty('$ne')) {\n v = { ...v, $not: v.$ne };\n delete v.$ne;\n }\n\n if (v?.hasOwnProperty('$not')) {\n // `$not` won't pick up entities that are missing the attr, so we\n // add in a `$isNull` to catch those too.\n const notPats = whereCondAttrPats(makeVar, store, etype, level, path, v);\n const nilPats = whereCondAttrPatsForNullIsTrue(\n makeVar,\n store,\n etype,\n level,\n path,\n );\n return [\n {\n or: {\n patterns: [notPats, ...nilPats],\n joinSym: makeVar(etype, level),\n },\n },\n ];\n }\n\n if (v?.hasOwnProperty('$isNull') && v.$isNull === true && path.length > 1) {\n // Make sure we're capturing all of the intermediate paths that might be null\n // by checking for null at each step along the path\n return [\n {\n or: {\n patterns: whereCondAttrPatsForNullIsTrue(\n makeVar,\n store,\n etype,\n level,\n path,\n ),\n joinSym: makeVar(etype, level),\n },\n },\n ];\n }\n\n return whereCondAttrPats(makeVar, store, etype, level, path, v);\n });\n}\n\nfunction makeWhere(\n store: s.Store,\n etype: string,\n level: number,\n where: Record<string, any> | null,\n): FullPats {\n const makeVar = makeVarImpl;\n if (!where) {\n return defaultWhere(makeVar, store, etype, level);\n }\n const parsedWhere = parseWhere(makeVar, store, etype, level, where);\n return parsedWhere.concat(defaultWhere(makeVar, store, etype, level));\n}\n\n// Find\n// -----------------\n\nfunction makeFind(makeVar: MakeVar, etype: string, level: number) {\n return [makeVar(etype, level), makeVar('time', level)];\n}\n\n// extendObjects\n// -----------------\n\nfunction makeJoin(\n makeVar: MakeVar,\n store: s.Store,\n etype: string,\n level: number,\n label: string,\n eid: string,\n) {\n const [nextEtype, nextLevel, pat, attr, isForward] = refAttrPat(\n makeVar,\n store,\n etype,\n level,\n label,\n );\n const actualized = replaceInAttrPat(pat, makeVar(etype, level), eid);\n return [nextEtype, nextLevel, actualized, attr, isForward];\n}\n\nfunction extendObjects(makeVar, store, { etype, level, form }, objects) {\n const childQueries = Object.keys(form).filter((c) => c !== '$');\n if (!childQueries.length) {\n return Object.values(objects);\n }\n return Object.entries(objects).map(function extendChildren([eid, parent]) {\n const childResults = childQueries.map(function getChildResult(label) {\n const isSingular = Boolean(\n store.cardinalityInference &&\n store.linkIndex?.[etype]?.[label]?.isSingular,\n );\n\n try {\n const [nextEtype, nextLevel, join] = makeJoin(\n makeVar,\n store,\n etype,\n level,\n label,\n eid,\n );\n\n const childrenArray = queryOne(store, {\n etype: nextEtype,\n level: nextLevel,\n form: form[label],\n join,\n });\n\n const childOrChildren = isSingular ? childrenArray[0] : childrenArray;\n\n return { [label]: childOrChildren };\n } catch (e) {\n if (e instanceof AttrNotFoundError) {\n return { [label]: isSingular ? undefined : [] };\n }\n throw e;\n }\n });\n\n return childResults.reduce(function reduceChildren(parent, child) {\n return { ...parent, ...child };\n }, parent);\n });\n}\n\n// resolveObjects\n// -----------------\n\nfunction shouldIgnoreAttr(attrs, id) {\n const attr = attrs[id];\n return attr['value-type'] === 'ref' && attr['forward-identity'][2] !== 'id';\n}\n\n// Compares values where we already know that the two values are distinct\n// and not null.\n// Takes into account the data type.\nfunction compareDisparateValues(a, b, dataType) {\n if (dataType === 'string') {\n return stringCompare(a, b);\n }\n if (a > b) {\n return 1;\n }\n return -1;\n}\n\nexport function compareOrder(id_a: string, v_a, id_b: string, v_b, dataType) {\n if (v_a === v_b || (v_a == null && v_b == null)) {\n return uuidCompare(id_a, id_b);\n }\n\n if (v_b == null) {\n return 1;\n }\n if (v_a == null) {\n return -1;\n }\n\n return compareDisparateValues(v_a, v_b, dataType);\n}\n\nfunction compareOrderTriples(\n [id_a, v_a]: [string, any],\n [id_b, v_b]: [string, any],\n dataType,\n) {\n return compareOrder(id_a, v_a, id_b, v_b, dataType);\n}\n\nfunction comparableDate(x) {\n if (x == null) {\n return x;\n }\n return new Date(x).getTime();\n}\n\nfunction isBefore(startCursor, orderAttr, direction, idVec) {\n const [c_e, _c_a, c_v, c_t] = startCursor;\n const compareVal = direction === 'desc' ? 1 : -1;\n if (orderAttr['forward-identity']?.[2] === 'id') {\n return compareOrderTriples(idVec, [c_e, c_t], null) === compareVal;\n }\n const [e, v] = idVec;\n const dataType = orderAttr['checked-data-type'];\n const v_new = dataType === 'date' ? comparableDate(v) : v;\n const c_v_new = dataType === 'date' ? comparableDate(c_v) : c_v;\n\n return (\n compareOrderTriples([e, v_new], [c_e, c_v_new], dataType) === compareVal\n );\n}\n\nfunction orderAttrFromCursor(store: s.Store, cursor) {\n const cursorAttrId = cursor[1];\n return store.attrs[cursorAttrId];\n}\n\nfunction orderAttrFromOrder(store: s.Store, etype, order) {\n const label = Object.keys(order)[0];\n return s.getAttrByFwdIdentName(store, etype, label);\n}\n\nfunction getOrderAttr(store: s.Store, etype, cursor, order) {\n if (cursor) {\n return orderAttrFromCursor(store, cursor);\n }\n if (order) {\n return orderAttrFromOrder(store, etype, order);\n }\n}\n\nfunction objectAttrs(\n store: s.Store,\n etype,\n dq,\n): Map<string, InstantDBAttr> | undefined {\n if (!Array.isArray(dq.fields)) {\n return s.getBlobAttrs(store, etype);\n }\n\n const attrs = new Map();\n\n for (const field of dq.fields) {\n const attr = s.getAttrByFwdIdentName(store, etype, field);\n const label = attr?.['forward-identity']?.[2];\n if (label && s.isBlob(attr)) {\n attrs.set(label, attr);\n }\n }\n // Ensure we add the id field to avoid empty objects\n if (!attrs.has('id')) {\n const attr = s.getAttrByFwdIdentName(store, etype, 'id');\n const label = attr?.['forward-identity']?.[2];\n if (label) {\n attrs.set(label, attr);\n }\n }\n\n return attrs;\n}\n\nfunction runDataloadAndReturnObjects(\n store: s.Store,\n { etype, pageInfo, dq, form },\n) {\n const order = form?.$?.order;\n const isLeadingQuery = isLeading(form);\n const direction = determineDirection(form);\n\n let idVecs = datalogQuery(store, dq);\n\n const startCursor = pageInfo?.['start-cursor'];\n const orderAttr = getOrderAttr(store, etype, startCursor, order);\n\n if (orderAttr && orderAttr?.['forward-identity']?.[2] !== 'id') {\n const isDate = orderAttr['checked-data-type'] === 'date';\n const a = orderAttr.id;\n idVecs = idVecs.map(([id]) => {\n // order attr is required to be cardinality one, so there will\n // be at most one value here\n let v = store.eav.get(id)?.get(a)?.values()?.next()?.value?.[2];\n if (isDate) {\n v = comparableDate(v);\n }\n return [id, v];\n });\n }\n\n idVecs.sort(\n direction === 'asc'\n ? function compareIdVecs(a, b) {\n return compareOrderTriples(a, b, orderAttr?.['checked-data-type']);\n }\n : function compareIdVecs(a, b) {\n return compareOrderTriples(b, a, orderAttr?.['checked-data-type']);\n },\n );\n\n let objects = {};\n const attrs = objectAttrs(store, etype, dq);\n\n for (const idVec of idVecs) {\n const [id] = idVec;\n if (objects[id]) {\n continue;\n }\n if (\n !isLeadingQuery &&\n startCursor &&\n orderAttr &&\n isBefore(startCursor, orderAttr, direction, idVec)\n ) {\n continue;\n }\n\n const obj = s.getAsObject(store, attrs, id);\n if (obj) {\n objects[id] = obj;\n }\n }\n return objects;\n}\n\nfunction determineDirection(form) {\n const orderOpts = form.$?.order;\n if (!orderOpts) {\n return 'asc';\n }\n\n return orderOpts[Object.keys(orderOpts)[0]] || 'asc';\n}\n\n/**\n * A \"leading\" query has no `offset`, `before`, or `after`\n *\n * It is at the 'beginning' of the order\n */\nfunction isLeading(form) {\n const offset = form.$?.offset;\n const before = form.$?.before;\n const after = form.$?.after;\n return !offset && !before && !after;\n}\n\n/**\n * Given a query like:\n *\n * {\n * users: {\n * $: { where: { name: \"Joe\" } },\n * },\n * };\n *\n * `resolveObjects`, turns where clause: `{ name: \"Joe\" }`\n * into a datalog query. We then run the datalog query,\n * and reduce all the triples into objects.\n */\nfunction resolveObjects(\n store: s.Store,\n { etype, level, form, join, pageInfo },\n) {\n // Wait for server to tell us where we start if we don't start from the beginning\n if (!isLeading(form) && (!pageInfo || !pageInfo['start-cursor'])) {\n return [];\n }\n\n const where = withJoin(makeWhere(store, etype, level, form.$?.where), join);\n const find = makeFind(makeVarImpl, etype, level);\n const fields = form.$?.fields;\n\n const objs = runDataloadAndReturnObjects(store, {\n etype,\n pageInfo,\n form,\n dq: { where, find, fields },\n });\n\n const limit = form.$?.limit || form.$?.first || form.$?.last;\n if (limit != null) {\n if (level > 0) {\n console.warn(\n 'WARNING: Limits in child queries are only run client-side. Data returned from the server will not have a limit.',\n );\n }\n\n const entries = Object.entries(objs);\n if (entries.length <= limit) {\n return objs;\n }\n return Object.fromEntries(entries.slice(0, limit));\n }\n\n return objs;\n}\n\n/**\n * It's possible that we query\n * for an attribute that doesn't exist yet.\n *\n * { users: { $: { where: { nonExistentProperty: \"foo\" } } } }\n *\n * This swallows the missing attr error and returns\n * an empty result instead\n */\nfunction guardedResolveObjects(store: s.Store, opts) {\n try {\n return resolveObjects(store, opts);\n } catch (e) {\n if (e instanceof AttrNotFoundError) {\n return {};\n }\n throw e;\n }\n}\n/**\n * Given a query like:\n *\n * {\n * users: {\n * $: { where: { name: \"Joe\" } },\n * posts: {},\n * },\n * };\n *\n * `guardResolveObjects` will return the relevant `users` objects\n * `extendObjects` will then extend each `user` object with relevant `posts`.\n */\nfunction queryOne(store: s.Store, opts) {\n const objects = guardedResolveObjects(store, opts);\n return extendObjects(makeVarImpl, store, opts, objects);\n}\n\nfunction formatPageInfo(\n pageInfo: Record<\n string,\n {\n 'start-cursor'?: Cursor | null;\n 'end-cursor'?: Cursor | null;\n 'has-next-page?'?: boolean | null;\n 'has-previous-page?'?: boolean | null;\n }\n >,\n) {\n const res = {};\n for (const [k, v] of Object.entries(pageInfo)) {\n res[k] = {\n startCursor: v['start-cursor'],\n endCursor: v['end-cursor'],\n hasNextPage: v['has-next-page?'],\n hasPreviousPage: v['has-previous-page?'],\n };\n }\n return res;\n}\n\nexport default function query(\n {\n store,\n pageInfo,\n aggregate,\n }: {\n store: s.Store;\n pageInfo: any;\n aggregate: any;\n },\n q,\n) {\n const data = Object.keys(q).reduce(function reduceResult(res, k) {\n if (aggregate?.[k] || '$$ruleParams' === k) {\n // Aggregate doesn't return any join rows and has no children,\n // so don't bother querying further\n return res;\n }\n res[k] = queryOne(store, {\n etype: k,\n form: q[k],\n level: 0,\n pageInfo: pageInfo?.[k],\n });\n return res;\n }, {});\n\n const result: { data: any; pageInfo?: any; aggregate?: any } = { data };\n if (pageInfo) {\n result.pageInfo = formatPageInfo(pageInfo);\n }\n\n if (aggregate) {\n result.aggregate = aggregate;\n }\n\n return result;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"instaql.js","sourceRoot":"","sources":["../../src/instaql.ts"],"names":[],"mappings":"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","sourcesContent":["import { query as datalogQuery } from './datalog.js';\nimport { uuidCompare } from './utils/uuid.ts';\nimport { stringCompare } from './utils/strings.ts';\nimport * as s from './store.ts';\nimport { InstantDBAttr } from './attrTypes.ts';\nimport { Cursor } from './queryTypes.ts';\n\ntype Pat = [string | any, string, string | any, string | number];\ntype Pats = Array<Pat>;\ntype OrPat = {\n or: {\n patterns: FullPats;\n joinSym: string;\n };\n};\ntype AndPat = {\n and: {\n patterns: FullPats;\n joinSym: string;\n };\n};\ntype FullPat = Pat | OrPat | AndPat;\ntype FullPats = Array<FullPat>;\n\n// Pattern variables\n// -----------------\n\ntype MakeVar = (x: string, level: number) => string;\n\nlet _seed = 0;\n\nfunction wildcard(friendlyName: string) {\n return makeVarImpl(`_${friendlyName}`, _seed++);\n}\n\nfunction makeVarImpl(x: string, level: number): string {\n return `?${x}-${level}`;\n}\n\n// Where\n// -----------------\n\nclass AttrNotFoundError extends Error {\n constructor(message) {\n super(message);\n this.name = 'AttrNotFoundError';\n }\n}\n\nfunction idAttr(attrsStore: s.AttrsStore, ns: string): InstantDBAttr {\n const attr = s.getPrimaryKeyAttr(attrsStore, ns);\n\n if (!attr) {\n throw new AttrNotFoundError(`Could not find id attr for ${ns}`);\n }\n return attr;\n}\n\nfunction defaultWhere(\n makeVar: MakeVar,\n attrsStore: s.AttrsStore,\n etype: string,\n level: number,\n): Pats {\n return [eidWhere(makeVar, attrsStore, etype, level)];\n}\n\nfunction eidWhere(\n makeVar: MakeVar,\n attrsStore: s.AttrsStore,\n etype: string,\n level: number,\n): Pat {\n return [\n makeVar(etype, level),\n idAttr(attrsStore, etype).id,\n makeVar(etype, level),\n makeVar('time', level),\n ];\n}\n\nfunction replaceInAttrPat(attrPat: Pat, needle: string, v: any): Pat {\n return attrPat.map((x) => (x === needle ? v : x)) as Pat;\n}\n\nfunction refAttrPat(\n makeVar: MakeVar,\n attrsStore: s.AttrsStore,\n etype: string,\n level: number,\n label: string,\n): [string, number, Pat, InstantDBAttr, boolean] {\n const fwdAttr = s.getAttrByFwdIdentName(attrsStore, etype, label);\n const revAttr = s.getAttrByReverseIdentName(attrsStore, etype, label);\n const attr = fwdAttr || revAttr;\n\n if (!attr) {\n throw new AttrNotFoundError(`Could not find attr for ${[etype, label]}`);\n }\n\n if (attr['value-type'] !== 'ref') {\n throw new Error(`Attr ${attr.id} is not a ref`);\n }\n\n const [_f, fwdEtype] = attr['forward-identity'];\n const [_r, revEtype] = attr['reverse-identity']!;\n const nextLevel = level + 1;\n const attrPat: Pat = fwdAttr\n ? [\n makeVar(fwdEtype, level),\n attr.id,\n makeVar(revEtype, nextLevel),\n wildcard('time'),\n ]\n : [\n makeVar(fwdEtype, nextLevel),\n attr.id,\n makeVar(revEtype, level),\n wildcard('time'),\n ];\n\n const nextEtype = fwdAttr ? revEtype : fwdEtype;\n\n const isForward = Boolean(fwdAttr);\n\n return [nextEtype, nextLevel, attrPat, attr, isForward];\n}\n\nfunction makeLikeMatcher(caseSensitive: boolean, pattern: string) {\n if (typeof pattern !== 'string') {\n return function likeMatcher(_value) {\n return false;\n };\n }\n\n const escapedPattern = pattern.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n const regexPattern = escapedPattern.replace(/%/g, '.*').replace(/_/g, '.');\n\n const regex = new RegExp(\n `^${regexPattern}$`,\n caseSensitive ? undefined : 'i',\n );\n\n return function likeMatcher(value) {\n if (typeof value !== 'string') {\n return false;\n }\n return regex.test(value);\n };\n}\n\nfunction parseValue(attr: InstantDBAttr, v: any) {\n if (\n typeof v !== 'object' ||\n v.hasOwnProperty('$in') ||\n v.hasOwnProperty('in')\n ) {\n return v;\n }\n\n const isDate = attr['checked-data-type'] === 'date';\n\n if (v.hasOwnProperty('$gt')) {\n return {\n $comparator: true,\n $op: isDate\n ? function gtDate(triple) {\n return new Date(triple[2]) > new Date(v.$gt);\n }\n : function gt(triple) {\n return triple[2] > v.$gt;\n },\n };\n }\n if (v.hasOwnProperty('$gte')) {\n return {\n $comparator: true,\n $op: isDate\n ? function gteDate(triple) {\n return new Date(triple[2]) >= new Date(v.$gte);\n }\n : function gte(triple) {\n return triple[2] >= v.$gte;\n },\n };\n }\n\n if (v.hasOwnProperty('$lt')) {\n return {\n $comparator: true,\n $op: isDate\n ? function ltDate(triple) {\n return new Date(triple[2]) < new Date(v.$lt);\n }\n : function lt(triple) {\n return triple[2] < v.$lt;\n },\n };\n }\n if (v.hasOwnProperty('$lte')) {\n return {\n $comparator: true,\n $op: isDate\n ? function lteDate(triple) {\n return new Date(triple[2]) <= new Date(v.$lte);\n }\n : function lte(triple) {\n return triple[2] <= v.$lte;\n },\n };\n }\n\n if (v.hasOwnProperty('$like')) {\n const matcher = makeLikeMatcher(true, v.$like);\n return {\n $comparator: true,\n $op: function like(triple) {\n return matcher(triple[2]);\n },\n };\n }\n\n if (v.hasOwnProperty('$ilike')) {\n const matcher = makeLikeMatcher(false, v.$ilike);\n return {\n $comparator: true,\n $op: function ilike(triple) {\n return matcher(triple[2]);\n },\n };\n }\n\n return v;\n}\n\nfunction valueAttrPat(\n makeVar: MakeVar,\n attrsStore: s.AttrsStore,\n valueEtype: string,\n valueLevel: number,\n valueLabel: string,\n v: any,\n): Pat {\n const fwdAttr = s.getAttrByFwdIdentName(attrsStore, valueEtype, valueLabel);\n const revAttr = s.getAttrByReverseIdentName(\n attrsStore,\n valueEtype,\n valueLabel,\n );\n const attr = fwdAttr || revAttr;\n\n if (!attr) {\n throw new AttrNotFoundError(\n `No attr for etype = ${valueEtype} label = ${valueLabel}`,\n );\n }\n\n if (v?.hasOwnProperty('$isNull')) {\n const idAttr = s.getAttrByFwdIdentName(attrsStore, valueEtype, 'id');\n if (!idAttr) {\n throw new AttrNotFoundError(\n `No attr for etype = ${valueEtype} label = id`,\n );\n }\n\n return [\n makeVar(valueEtype, valueLevel),\n idAttr.id,\n { $isNull: { attrId: attr.id, isNull: v.$isNull, reverse: !fwdAttr } },\n wildcard('time'),\n ];\n }\n\n if (fwdAttr) {\n return [\n makeVar(valueEtype, valueLevel),\n attr.id,\n parseValue(attr, v),\n wildcard('time'),\n ];\n }\n return [v, attr.id, makeVar(valueEtype, valueLevel), wildcard('time')];\n}\n\nfunction refAttrPats(\n makeVar: MakeVar,\n attrsStore: s.AttrsStore,\n etype: string,\n level: number,\n refsPath: string[],\n): [string, number, Pats] {\n const [lastEtype, lastLevel, attrPats] = refsPath.reduce(\n (acc, label) => {\n const [etype, level, attrPats] = acc;\n const [nextEtype, nextLevel, attrPat] = refAttrPat(\n makeVar,\n attrsStore,\n etype,\n level,\n label,\n );\n return [nextEtype, nextLevel, [...attrPats, attrPat]];\n },\n [etype, level, []],\n );\n\n return [lastEtype, lastLevel, attrPats];\n}\n\nfunction whereCondAttrPats(\n makeVar: MakeVar,\n attrsStore: s.AttrsStore,\n etype: string,\n level: number,\n path: string[],\n v: any,\n): Pats {\n const refsPath = path.slice(0, path.length - 1);\n const valueLabel = path[path.length - 1];\n const [lastEtype, lastLevel, refPats] = refAttrPats(\n makeVar,\n attrsStore,\n etype,\n level,\n refsPath,\n );\n const valuePat = valueAttrPat(\n makeVar,\n attrsStore,\n lastEtype,\n lastLevel,\n valueLabel,\n v,\n );\n\n return refPats.concat([valuePat]);\n}\n\nfunction withJoin(where, join) {\n return join ? [join].concat(where) : where;\n}\n\nfunction isOrClauses([k, v]): boolean {\n return k === 'or' && Array.isArray(v);\n}\n\nfunction isAndClauses([k, v]): boolean {\n return k === 'and' && Array.isArray(v);\n}\n\n// Creates a makeVar that will namespace symbols for or clauses\n// to prevent conflicts, except for the base etype\nfunction genMakeVar(baseMakeVar: MakeVar, joinSym: string, orIdx: number) {\n return (x, lvl) => {\n const base = baseMakeVar(x, lvl);\n if (joinSym == base) {\n return base;\n }\n return `${base}-${orIdx}`;\n };\n}\n\nfunction parseWhereClauses(\n makeVar: MakeVar,\n clauseType: 'or' | 'and' /* 'or' | 'and' */,\n attrsStore: s.AttrsStore,\n etype: string,\n level: number,\n whereValue: any,\n): FullPat {\n const joinSym = makeVar(etype, level);\n const patterns: FullPats = whereValue.map((w, i) => {\n const makeNamespacedVar = genMakeVar(makeVar, joinSym, i);\n return parseWhere(makeNamespacedVar, attrsStore, etype, level, w);\n });\n return { [clauseType]: { patterns, joinSym } } as AndPat | OrPat;\n}\n\n// Given a path, returns a list of paths leading up to this path:\n// growPath([1, 2, 3]) -> [[1], [1, 2], [1, 2, 3]]\nfunction growPath<T>(path: T[]) {\n const ret: Array<T[]> = [];\n for (let i = 1; i <= path.length; i++) {\n ret.push(path.slice(0, i));\n }\n return ret;\n}\n\n// Returns array of pattern arrays that should be grouped in OR\n// to capture any intermediate nulls\nfunction whereCondAttrPatsForNullIsTrue(\n makeVar: MakeVar,\n attrsStore: s.AttrsStore,\n etype: string,\n level: number,\n path: string[],\n): Pats[] {\n return growPath(path).map((path) =>\n whereCondAttrPats(makeVar, attrsStore, etype, level, path, {\n $isNull: true,\n }),\n );\n}\n\nfunction parseWhere(\n makeVar: MakeVar,\n attrsStore: s.AttrsStore,\n etype: string,\n level: number,\n where: Record<string, any>,\n): FullPats {\n return Object.entries(where).flatMap(([k, v]) => {\n if (isOrClauses([k, v])) {\n return parseWhereClauses(makeVar, 'or', attrsStore, etype, level, v);\n }\n if (isAndClauses([k, v])) {\n return parseWhereClauses(makeVar, 'and', attrsStore, etype, level, v);\n }\n\n // Temporary hack until we have support for a uuid index on `id`\n if (k === '$entityIdStartsWith') {\n return [];\n }\n\n const path = k.split('.');\n\n // Normalize $ne to $not\n if (v?.hasOwnProperty('$ne')) {\n v = { ...v, $not: v.$ne };\n delete v.$ne;\n }\n\n if (v?.hasOwnProperty('$not')) {\n // `$not` won't pick up entities that are missing the attr, so we\n // add in a `$isNull` to catch those too.\n const notPats = whereCondAttrPats(\n makeVar,\n attrsStore,\n etype,\n level,\n path,\n v,\n );\n const nilPats = whereCondAttrPatsForNullIsTrue(\n makeVar,\n attrsStore,\n etype,\n level,\n path,\n );\n return [\n {\n or: {\n patterns: [notPats, ...nilPats],\n joinSym: makeVar(etype, level),\n },\n },\n ];\n }\n\n if (v?.hasOwnProperty('$isNull') && v.$isNull === true && path.length > 1) {\n // Make sure we're capturing all of the intermediate paths that might be null\n // by checking for null at each step along the path\n return [\n {\n or: {\n patterns: whereCondAttrPatsForNullIsTrue(\n makeVar,\n attrsStore,\n etype,\n level,\n path,\n ),\n joinSym: makeVar(etype, level),\n },\n },\n ];\n }\n\n return whereCondAttrPats(makeVar, attrsStore, etype, level, path, v);\n });\n}\n\nfunction makeWhere(\n attrsStore: s.AttrsStore,\n etype: string,\n level: number,\n where: Record<string, any> | null,\n): FullPats {\n const makeVar = makeVarImpl;\n if (!where) {\n return defaultWhere(makeVar, attrsStore, etype, level);\n }\n const parsedWhere = parseWhere(makeVar, attrsStore, etype, level, where);\n return parsedWhere.concat(defaultWhere(makeVar, attrsStore, etype, level));\n}\n\n// Find\n// -----------------\n\nfunction makeFind(makeVar: MakeVar, etype: string, level: number) {\n return [makeVar(etype, level), makeVar('time', level)];\n}\n\n// extendObjects\n// -----------------\n\nfunction makeJoin(\n makeVar: MakeVar,\n attrsStore: s.AttrsStore,\n etype: string,\n level: number,\n label: string,\n eid: string,\n) {\n const [nextEtype, nextLevel, pat, attr, isForward] = refAttrPat(\n makeVar,\n attrsStore,\n etype,\n level,\n label,\n );\n const actualized = replaceInAttrPat(pat, makeVar(etype, level), eid);\n return [nextEtype, nextLevel, actualized, attr, isForward];\n}\n\nfunction extendObjects(\n makeVar: MakeVar,\n store: s.Store,\n attrsStore: s.AttrsStore,\n { etype, level, form },\n objects,\n) {\n const childQueries = Object.keys(form).filter((c) => c !== '$');\n if (!childQueries.length) {\n return Object.values(objects);\n }\n return Object.entries(objects).map(function extendChildren([eid, parent]) {\n const childResults = childQueries.map(function getChildResult(label) {\n const isSingular = Boolean(\n store.cardinalityInference &&\n attrsStore.linkIndex?.[etype]?.[label]?.isSingular,\n );\n\n try {\n const [nextEtype, nextLevel, join] = makeJoin(\n makeVar,\n attrsStore,\n etype,\n level,\n label,\n eid,\n );\n\n const childrenArray = queryOne(store, attrsStore, {\n etype: nextEtype,\n level: nextLevel,\n form: form[label],\n join,\n });\n\n const childOrChildren = isSingular ? childrenArray[0] : childrenArray;\n\n return { [label]: childOrChildren };\n } catch (e) {\n if (e instanceof AttrNotFoundError) {\n return { [label]: isSingular ? undefined : [] };\n }\n throw e;\n }\n });\n\n return childResults.reduce(function reduceChildren(parent, child) {\n return { ...parent, ...child };\n }, parent);\n });\n}\n\n// resolveObjects\n// -----------------\n\nfunction shouldIgnoreAttr(attrs, id) {\n const attr = attrs[id];\n return attr['value-type'] === 'ref' && attr['forward-identity'][2] !== 'id';\n}\n\n// Compares values where we already know that the two values are distinct\n// and not null.\n// Takes into account the data type.\nfunction compareDisparateValues(a, b, dataType) {\n if (dataType === 'string') {\n return stringCompare(a, b);\n }\n if (a > b) {\n return 1;\n }\n return -1;\n}\n\nexport function compareOrder(id_a: string, v_a, id_b: string, v_b, dataType) {\n if (v_a === v_b || (v_a == null && v_b == null)) {\n return uuidCompare(id_a, id_b);\n }\n\n if (v_b == null) {\n return 1;\n }\n if (v_a == null) {\n return -1;\n }\n\n return compareDisparateValues(v_a, v_b, dataType);\n}\n\nfunction compareOrderTriples(\n [id_a, v_a]: [string, any],\n [id_b, v_b]: [string, any],\n dataType,\n) {\n return compareOrder(id_a, v_a, id_b, v_b, dataType);\n}\n\nfunction comparableDate(x) {\n if (x == null) {\n return x;\n }\n return new Date(x).getTime();\n}\n\nfunction isBefore(startCursor, orderAttr, direction, idVec) {\n const [c_e, _c_a, c_v, c_t] = startCursor;\n const compareVal = direction === 'desc' ? 1 : -1;\n if (orderAttr['forward-identity']?.[2] === 'id') {\n return compareOrderTriples(idVec, [c_e, c_t], null) === compareVal;\n }\n const [e, v] = idVec;\n const dataType = orderAttr['checked-data-type'];\n const v_new = dataType === 'date' ? comparableDate(v) : v;\n const c_v_new = dataType === 'date' ? comparableDate(c_v) : c_v;\n\n return (\n compareOrderTriples([e, v_new], [c_e, c_v_new], dataType) === compareVal\n );\n}\n\nfunction orderAttrFromCursor(attrsStore: s.AttrsStore, cursor) {\n const cursorAttrId = cursor[1];\n return attrsStore.getAttr(cursorAttrId);\n}\n\nfunction orderAttrFromOrder(attrsStore: s.AttrsStore, etype, order) {\n const label = Object.keys(order)[0];\n return s.getAttrByFwdIdentName(attrsStore, etype, label);\n}\n\nfunction getOrderAttr(attrsStore: s.AttrsStore, etype, cursor, order) {\n if (cursor) {\n return orderAttrFromCursor(attrsStore, cursor);\n }\n if (order) {\n return orderAttrFromOrder(attrsStore, etype, order);\n }\n}\n\nfunction objectAttrs(\n attrsStore: s.AttrsStore,\n etype,\n dq,\n): Map<string, InstantDBAttr> | undefined {\n if (!Array.isArray(dq.fields)) {\n return s.getBlobAttrs(attrsStore, etype);\n }\n\n const attrs = new Map();\n\n for (const field of dq.fields) {\n const attr = s.getAttrByFwdIdentName(attrsStore, etype, field);\n const label = attr?.['forward-identity']?.[2];\n if (label && s.isBlob(attr)) {\n attrs.set(label, attr);\n }\n }\n // Ensure we add the id field to avoid empty objects\n if (!attrs.has('id')) {\n const attr = s.getAttrByFwdIdentName(attrsStore, etype, 'id');\n const label = attr?.['forward-identity']?.[2];\n if (label) {\n attrs.set(label, attr);\n }\n }\n\n return attrs;\n}\n\nfunction runDataloadAndReturnObjects(\n store: s.Store,\n attrsStore: s.AttrsStore,\n { etype, pageInfo, dq, form },\n) {\n const order = form?.$?.order;\n const isLeadingQuery = isLeading(form);\n const direction = determineDirection(form);\n\n let idVecs = datalogQuery(store, dq);\n\n const startCursor = pageInfo?.['start-cursor'];\n const orderAttr = getOrderAttr(attrsStore, etype, startCursor, order);\n\n if (orderAttr && orderAttr?.['forward-identity']?.[2] !== 'id') {\n const isDate = orderAttr['checked-data-type'] === 'date';\n const a = orderAttr.id;\n idVecs = idVecs.map(([id]) => {\n // order attr is required to be cardinality one, so there will\n // be at most one value here\n let v = store.eav.get(id)?.get(a)?.values()?.next()?.value?.[2];\n if (isDate) {\n v = comparableDate(v);\n }\n return [id, v];\n });\n }\n\n idVecs.sort(\n direction === 'asc'\n ? function compareIdVecs(a, b) {\n return compareOrderTriples(a, b, orderAttr?.['checked-data-type']);\n }\n : function compareIdVecs(a, b) {\n return compareOrderTriples(b, a, orderAttr?.['checked-data-type']);\n },\n );\n\n let objects = {};\n const attrs = objectAttrs(attrsStore, etype, dq);\n\n for (const idVec of idVecs) {\n const [id] = idVec;\n if (objects[id]) {\n continue;\n }\n if (\n !isLeadingQuery &&\n startCursor &&\n orderAttr &&\n isBefore(startCursor, orderAttr, direction, idVec)\n ) {\n continue;\n }\n\n const obj = s.getAsObject(store, attrs, id);\n if (obj) {\n objects[id] = obj;\n }\n }\n return objects;\n}\n\nfunction determineDirection(form) {\n const orderOpts = form.$?.order;\n if (!orderOpts) {\n return 'asc';\n }\n\n return orderOpts[Object.keys(orderOpts)[0]] || 'asc';\n}\n\n/**\n * A \"leading\" query has no `offset`, `before`, or `after`\n *\n * It is at the 'beginning' of the order\n */\nfunction isLeading(form) {\n const offset = form.$?.offset;\n const before = form.$?.before;\n const after = form.$?.after;\n return !offset && !before && !after;\n}\n\n/**\n * Given a query like:\n *\n * {\n * users: {\n * $: { where: { name: \"Joe\" } },\n * },\n * };\n *\n * `resolveObjects`, turns where clause: `{ name: \"Joe\" }`\n * into a datalog query. We then run the datalog query,\n * and reduce all the triples into objects.\n */\nfunction resolveObjects(\n store: s.Store,\n attrsStore: s.AttrsStore,\n { etype, level, form, join, pageInfo },\n) {\n // Wait for server to tell us where we start if we don't start from the beginning\n if (!isLeading(form) && (!pageInfo || !pageInfo['start-cursor'])) {\n return [];\n }\n\n const where = withJoin(\n makeWhere(attrsStore, etype, level, form.$?.where),\n join,\n );\n const find = makeFind(makeVarImpl, etype, level);\n const fields = form.$?.fields;\n\n const objs = runDataloadAndReturnObjects(store, attrsStore, {\n etype,\n pageInfo,\n form,\n dq: { where, find, fields },\n });\n\n const limit = form.$?.limit || form.$?.first || form.$?.last;\n if (limit != null) {\n if (level > 0) {\n console.warn(\n 'WARNING: Limits in child queries are only run client-side. Data returned from the server will not have a limit.',\n );\n }\n\n const entries = Object.entries(objs);\n if (entries.length <= limit) {\n return objs;\n }\n return Object.fromEntries(entries.slice(0, limit));\n }\n\n return objs;\n}\n\n/**\n * It's possible that we query\n * for an attribute that doesn't exist yet.\n *\n * { users: { $: { where: { nonExistentProperty: \"foo\" } } } }\n *\n * This swallows the missing attr error and returns\n * an empty result instead\n */\nfunction guardedResolveObjects(store: s.Store, attrsStore: s.AttrsStore, opts) {\n try {\n return resolveObjects(store, attrsStore, opts);\n } catch (e) {\n if (e instanceof AttrNotFoundError) {\n return {};\n }\n throw e;\n }\n}\n/**\n * Given a query like:\n *\n * {\n * users: {\n * $: { where: { name: \"Joe\" } },\n * posts: {},\n * },\n * };\n *\n * `guardResolveObjects` will return the relevant `users` objects\n * `extendObjects` will then extend each `user` object with relevant `posts`.\n */\nfunction queryOne(store: s.Store, attrsStore: s.AttrsStore, opts) {\n const objects = guardedResolveObjects(store, attrsStore, opts);\n return extendObjects(makeVarImpl, store, attrsStore, opts, objects);\n}\n\nfunction formatPageInfo(\n pageInfo: Record<\n string,\n {\n 'start-cursor'?: Cursor | null;\n 'end-cursor'?: Cursor | null;\n 'has-next-page?'?: boolean | null;\n 'has-previous-page?'?: boolean | null;\n }\n >,\n) {\n const res = {};\n for (const [k, v] of Object.entries(pageInfo)) {\n res[k] = {\n startCursor: v['start-cursor'],\n endCursor: v['end-cursor'],\n hasNextPage: v['has-next-page?'],\n hasPreviousPage: v['has-previous-page?'],\n };\n }\n return res;\n}\n\nexport default function query(\n {\n store,\n attrsStore,\n pageInfo,\n aggregate,\n }: {\n store: s.Store;\n attrsStore: s.AttrsStore;\n pageInfo: any;\n aggregate: any;\n },\n q,\n) {\n const data = Object.keys(q).reduce(function reduceResult(res, k) {\n if (aggregate?.[k] || '$$ruleParams' === k) {\n // Aggregate doesn't return any join rows and has no children,\n // so don't bother querying further\n return res;\n }\n res[k] = queryOne(store, attrsStore, {\n etype: k,\n form: q[k],\n level: 0,\n pageInfo: pageInfo?.[k],\n });\n return res;\n }, {});\n\n const result: { data: any; pageInfo?: any; aggregate?: any } = { data };\n if (pageInfo) {\n result.pageInfo = formatPageInfo(pageInfo);\n }\n\n if (aggregate) {\n result.aggregate = aggregate;\n }\n\n return result;\n}\n"]}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { PageInfoResponse } from './queryTypes.ts';
|
|
2
|
+
import { AttrsStore, AttrsStoreJson, Store, StoreJson } from './store.ts';
|
|
3
|
+
export type QuerySubResult = {
|
|
4
|
+
store: Store;
|
|
5
|
+
attrsStore: AttrsStore;
|
|
6
|
+
pageInfo?: PageInfoResponse<any> | null | undefined;
|
|
7
|
+
aggregate?: any;
|
|
8
|
+
processedTxId: number;
|
|
9
|
+
};
|
|
10
|
+
export type QuerySub = {
|
|
11
|
+
q: Object;
|
|
12
|
+
eventId: string;
|
|
13
|
+
lastAccessed?: number | null | undefined;
|
|
14
|
+
result?: QuerySubResult;
|
|
15
|
+
};
|
|
16
|
+
export type QuerySubResultInStorage = {
|
|
17
|
+
store: StoreJson;
|
|
18
|
+
attrsStore: AttrsStoreJson;
|
|
19
|
+
pageInfo?: PageInfoResponse<any> | null | undefined;
|
|
20
|
+
aggregate?: any;
|
|
21
|
+
processedTxId: number;
|
|
22
|
+
};
|
|
23
|
+
export type QuerySubInStorage = {
|
|
24
|
+
q: Object;
|
|
25
|
+
eventId: string;
|
|
26
|
+
lastAccessed?: number | null | undefined;
|
|
27
|
+
result?: QuerySubResultInStorage;
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=reactorTypes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reactorTypes.d.ts","sourceRoot":"","sources":["../../src/reactorTypes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE1E,MAAM,MAAM,cAAc,GAAG;IAC3B,KAAK,EAAE,KAAK,CAAC;IACb,UAAU,EAAE,UAAU,CAAC;IACvB,QAAQ,CAAC,EAAE,gBAAgB,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC;IACpD,SAAS,CAAC,EAAE,GAAG,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,QAAQ,GAAG;IACrB,CAAC,EAAE,MAAM,CAAC;IACV,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACzC,MAAM,CAAC,EAAE,cAAc,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,KAAK,EAAE,SAAS,CAAC;IACjB,UAAU,EAAE,cAAc,CAAC;IAC3B,QAAQ,CAAC,EAAE,gBAAgB,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC;IACpD,SAAS,CAAC,EAAE,GAAG,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,CAAC,EAAE,MAAM,CAAC;IACV,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACzC,MAAM,CAAC,EAAE,uBAAuB,CAAC;CAClC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reactorTypes.js","sourceRoot":"","sources":["../../src/reactorTypes.ts"],"names":[],"mappings":"","sourcesContent":["import { PageInfoResponse } from './queryTypes.ts';\nimport { AttrsStore, AttrsStoreJson, Store, StoreJson } from './store.ts';\n\nexport type QuerySubResult = {\n store: Store;\n attrsStore: AttrsStore;\n pageInfo?: PageInfoResponse<any> | null | undefined;\n aggregate?: any;\n processedTxId: number;\n};\n\nexport type QuerySub = {\n q: Object;\n eventId: string;\n lastAccessed?: number | null | undefined;\n result?: QuerySubResult;\n};\n\nexport type QuerySubResultInStorage = {\n store: StoreJson;\n attrsStore: AttrsStoreJson;\n pageInfo?: PageInfoResponse<any> | null | undefined;\n aggregate?: any;\n processedTxId: number;\n};\n\nexport type QuerySubInStorage = {\n q: Object;\n eventId: string;\n lastAccessed?: number | null | undefined;\n result?: QuerySubResultInStorage;\n};\n"]}
|