@instantdb/core 0.22.88 → 0.22.89-experimental.drewh-fix-export.20277749804.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/__tests__/src/Reactor.test.js +18 -11
  2. package/__tests__/src/{datalog.test.js → datalog.test.ts} +17 -5
  3. package/__tests__/src/{instaml.test.js → instaml.test.ts} +183 -119
  4. package/__tests__/src/instaql.bench.ts +34 -0
  5. package/__tests__/src/{instaql.test.js → instaql.test.ts} +342 -455
  6. package/__tests__/src/instaqlInference.test.js +13 -9
  7. package/__tests__/src/{store.test.js → store.test.ts} +215 -212
  8. package/dist/commonjs/Reactor.d.ts +23 -6
  9. package/dist/commonjs/Reactor.d.ts.map +1 -1
  10. package/dist/commonjs/Reactor.js +110 -45
  11. package/dist/commonjs/Reactor.js.map +1 -1
  12. package/dist/commonjs/SyncTable.d.ts +4 -1
  13. package/dist/commonjs/SyncTable.d.ts.map +1 -1
  14. package/dist/commonjs/SyncTable.js +35 -37
  15. package/dist/commonjs/SyncTable.js.map +1 -1
  16. package/dist/commonjs/instaml.d.ts +17 -4
  17. package/dist/commonjs/instaml.d.ts.map +1 -1
  18. package/dist/commonjs/instaml.js +115 -82
  19. package/dist/commonjs/instaml.js.map +1 -1
  20. package/dist/commonjs/instaql.d.ts +4 -3
  21. package/dist/commonjs/instaql.d.ts.map +1 -1
  22. package/dist/commonjs/instaql.js +65 -63
  23. package/dist/commonjs/instaql.js.map +1 -1
  24. package/dist/commonjs/reactorTypes.d.ts +29 -0
  25. package/dist/commonjs/reactorTypes.d.ts.map +1 -0
  26. package/dist/commonjs/reactorTypes.js +3 -0
  27. package/dist/commonjs/reactorTypes.js.map +1 -0
  28. package/dist/commonjs/store.d.ts +67 -25
  29. package/dist/commonjs/store.d.ts.map +1 -1
  30. package/dist/commonjs/store.js +177 -81
  31. package/dist/commonjs/store.js.map +1 -1
  32. package/dist/esm/Reactor.d.ts +23 -6
  33. package/dist/esm/Reactor.d.ts.map +1 -1
  34. package/dist/esm/Reactor.js +111 -46
  35. package/dist/esm/Reactor.js.map +1 -1
  36. package/dist/esm/SyncTable.d.ts +4 -1
  37. package/dist/esm/SyncTable.d.ts.map +1 -1
  38. package/dist/esm/SyncTable.js +35 -37
  39. package/dist/esm/SyncTable.js.map +1 -1
  40. package/dist/esm/instaml.d.ts +17 -4
  41. package/dist/esm/instaml.d.ts.map +1 -1
  42. package/dist/esm/instaml.js +112 -77
  43. package/dist/esm/instaml.js.map +1 -1
  44. package/dist/esm/instaql.d.ts +4 -3
  45. package/dist/esm/instaql.d.ts.map +1 -1
  46. package/dist/esm/instaql.js +65 -63
  47. package/dist/esm/instaql.js.map +1 -1
  48. package/dist/esm/reactorTypes.d.ts +29 -0
  49. package/dist/esm/reactorTypes.d.ts.map +1 -0
  50. package/dist/esm/reactorTypes.js +2 -0
  51. package/dist/esm/reactorTypes.js.map +1 -0
  52. package/dist/esm/store.d.ts +67 -25
  53. package/dist/esm/store.d.ts.map +1 -1
  54. package/dist/esm/store.js +174 -81
  55. package/dist/esm/store.js.map +1 -1
  56. package/dist/standalone/index.js +1605 -1415
  57. package/dist/standalone/index.umd.cjs +3 -3
  58. package/package.json +2 -2
  59. package/src/Reactor.js +152 -75
  60. package/src/SyncTable.ts +85 -45
  61. package/src/{instaml.js → instaml.ts} +201 -96
  62. package/src/instaql.ts +88 -62
  63. package/src/reactorTypes.ts +32 -0
  64. package/src/store.ts +257 -101
  65. package/__tests__/src/instaql.bench.js +0 -29
@@ -1,9 +1,10 @@
1
1
  import * as s from './store.ts';
2
2
  export declare function compareOrder(id_a: string, v_a: any, id_b: string, v_b: any, dataType: any): number;
3
- export default function query({ store, pageInfo, aggregate, }: {
3
+ export default function query({ store, attrsStore, pageInfo, aggregate, }: {
4
4
  store: s.Store;
5
- pageInfo: any;
6
- aggregate: any;
5
+ attrsStore: s.AttrsStore;
6
+ pageInfo?: any;
7
+ aggregate?: any;
7
8
  }, q: any): {
8
9
  data: any;
9
10
  pageInfo?: any;
@@ -1 +1 @@
1
- {"version":3,"file":"instaql.d.ts","sourceRoot":"","sources":["../../src/instaql.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,CAAC,MAAM,YAAY,CAAC;AAikBhC,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,KAAA,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,KAAA,EAAE,QAAQ,KAAA,UAa1E;AAoRD,MAAM,CAAC,OAAO,UAAU,KAAK,CAC3B,EACE,KAAK,EACL,QAAQ,EACR,SAAS,GACV,EAAE;IACD,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC;IACf,QAAQ,EAAE,GAAG,CAAC;IACd,SAAS,EAAE,GAAG,CAAC;CAChB,EACD,CAAC,KAAA;UAiBqB,GAAG;eAAa,GAAG;gBAAc,GAAG;EAU3D"}
1
+ {"version":3,"file":"instaql.d.ts","sourceRoot":"","sources":["../../src/instaql.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,CAAC,MAAM,YAAY,CAAC;AAolBhC,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,KAAA,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,KAAA,EAAE,QAAQ,KAAA,UAa1E;AAyRD,MAAM,CAAC,OAAO,UAAU,KAAK,CAC3B,EACE,KAAK,EACL,UAAU,EACV,QAAQ,EACR,SAAS,GACV,EAAE;IACD,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC;IACf,UAAU,EAAE,CAAC,CAAC,UAAU,CAAC;IACzB,QAAQ,CAAC,EAAE,GAAG,CAAC;IACf,SAAS,CAAC,EAAE,GAAG,CAAC;CACjB,EACD,CAAC,KAAA;UAiBqB,GAAG;eAAa,GAAG;gBAAc,GAAG;EAU3D"}
@@ -54,20 +54,20 @@ class AttrNotFoundError extends Error {
54
54
  this.name = 'AttrNotFoundError';
55
55
  }
56
56
  }
57
- function idAttr(store, ns) {
58
- const attr = s.getPrimaryKeyAttr(store, ns);
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, store, etype, level) {
65
- return [eidWhere(makeVar, store, etype, level)];
64
+ function defaultWhere(makeVar, attrsStore, etype, level) {
65
+ return [eidWhere(makeVar, attrsStore, etype, level)];
66
66
  }
67
- function eidWhere(makeVar, store, etype, level) {
67
+ function eidWhere(makeVar, attrsStore, etype, level) {
68
68
  return [
69
69
  makeVar(etype, level),
70
- idAttr(store, etype).id,
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, store, etype, level, label) {
79
- const fwdAttr = s.getAttrByFwdIdentName(store, etype, label);
80
- const revAttr = s.getAttrByReverseIdentName(store, etype, label);
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, store, valueEtype, valueLevel, valueLabel, v) {
200
- const fwdAttr = s.getAttrByFwdIdentName(store, valueEtype, valueLabel);
201
- const revAttr = s.getAttrByReverseIdentName(store, valueEtype, valueLabel);
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(store, valueEtype, 'id');
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, store, etype, level, refsPath) {
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, store, etype, level, label);
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, store, etype, level, path, v) {
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, store, etype, level, refsPath);
240
- const valuePat = valueAttrPat(makeVar, store, lastEtype, lastLevel, valueLabel, v);
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' */, store, etype, level, whereValue) {
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, store, etype, level, w);
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, store, etype, level, path) {
283
- return growPath(path).map((path) => whereCondAttrPats(makeVar, store, etype, level, path, { $isNull: true }));
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, store, etype, level, where) {
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', store, etype, level, v);
290
+ return parseWhereClauses(makeVar, 'or', attrsStore, etype, level, v);
289
291
  }
290
292
  if (isAndClauses([k, v])) {
291
- return parseWhereClauses(makeVar, 'and', store, etype, level, v);
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, store, etype, level, path, v);
307
- const nilPats = whereCondAttrPatsForNullIsTrue(makeVar, store, etype, level, path);
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, store, etype, level, path),
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, store, etype, level, path, v);
331
+ return whereCondAttrPats(makeVar, attrsStore, etype, level, path, v);
330
332
  });
331
333
  }
332
- function makeWhere(store, etype, level, where) {
334
+ function makeWhere(attrsStore, etype, level, where) {
333
335
  const makeVar = makeVarImpl;
334
336
  if (!where) {
335
- return defaultWhere(makeVar, store, etype, level);
337
+ return defaultWhere(makeVar, attrsStore, etype, level);
336
338
  }
337
- const parsedWhere = parseWhere(makeVar, store, etype, level, where);
338
- return parsedWhere.concat(defaultWhere(makeVar, store, etype, level));
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, store, etype, level, label, eid) {
348
- const [nextEtype, nextLevel, pat, attr, isForward] = refAttrPat(makeVar, store, etype, level, label);
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 = store.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));
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, store, etype, level, label, eid);
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(store, cursor) {
439
+ function orderAttrFromCursor(attrsStore, cursor) {
438
440
  const cursorAttrId = cursor[1];
439
- return store.attrs[cursorAttrId];
441
+ return attrsStore.getAttr(cursorAttrId);
440
442
  }
441
- function orderAttrFromOrder(store, etype, order) {
443
+ function orderAttrFromOrder(attrsStore, etype, order) {
442
444
  const label = Object.keys(order)[0];
443
- return s.getAttrByFwdIdentName(store, etype, label);
445
+ return s.getAttrByFwdIdentName(attrsStore, etype, label);
444
446
  }
445
- function getOrderAttr(store, etype, cursor, order) {
447
+ function getOrderAttr(attrsStore, etype, cursor, order) {
446
448
  if (cursor) {
447
- return orderAttrFromCursor(store, cursor);
449
+ return orderAttrFromCursor(attrsStore, cursor);
448
450
  }
449
451
  if (order) {
450
- return orderAttrFromOrder(store, etype, order);
452
+ return orderAttrFromOrder(attrsStore, etype, order);
451
453
  }
452
454
  }
453
- function objectAttrs(store, etype, dq) {
455
+ function objectAttrs(attrsStore, etype, dq) {
454
456
  var _a, _b;
455
457
  if (!Array.isArray(dq.fields)) {
456
- return s.getBlobAttrs(store, etype);
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(store, etype, field);
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(store, etype, 'id');
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(store, etype, startCursor, order);
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(store, etype, dq);
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(store, etype, level, (_a = form.$) === null || _a === void 0 ? void 0 : _a.where), join);
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,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=reactorTypes.js.map
@@ -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"]}