@instantdb/core 0.22.86-experimental.split-store.20178922132.1 → 0.22.87-experimental.drewh-explorer-component.20180358679.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 (57) hide show
  1. package/dist/commonjs/Reactor.d.ts +6 -20
  2. package/dist/commonjs/Reactor.d.ts.map +1 -1
  3. package/dist/commonjs/Reactor.js +42 -97
  4. package/dist/commonjs/Reactor.js.map +1 -1
  5. package/dist/commonjs/SyncTable.d.ts +1 -4
  6. package/dist/commonjs/SyncTable.d.ts.map +1 -1
  7. package/dist/commonjs/SyncTable.js +37 -35
  8. package/dist/commonjs/SyncTable.js.map +1 -1
  9. package/dist/commonjs/instaml.d.ts +4 -17
  10. package/dist/commonjs/instaml.d.ts.map +1 -1
  11. package/dist/commonjs/instaml.js +76 -105
  12. package/dist/commonjs/instaml.js.map +1 -1
  13. package/dist/commonjs/instaql.d.ts +1 -2
  14. package/dist/commonjs/instaql.d.ts.map +1 -1
  15. package/dist/commonjs/instaql.js +63 -65
  16. package/dist/commonjs/instaql.js.map +1 -1
  17. package/dist/commonjs/store.d.ts +21 -44
  18. package/dist/commonjs/store.d.ts.map +1 -1
  19. package/dist/commonjs/store.js +69 -164
  20. package/dist/commonjs/store.js.map +1 -1
  21. package/dist/esm/Reactor.d.ts +6 -20
  22. package/dist/esm/Reactor.d.ts.map +1 -1
  23. package/dist/esm/Reactor.js +43 -98
  24. package/dist/esm/Reactor.js.map +1 -1
  25. package/dist/esm/SyncTable.d.ts +1 -4
  26. package/dist/esm/SyncTable.d.ts.map +1 -1
  27. package/dist/esm/SyncTable.js +37 -35
  28. package/dist/esm/SyncTable.js.map +1 -1
  29. package/dist/esm/instaml.d.ts +4 -17
  30. package/dist/esm/instaml.d.ts.map +1 -1
  31. package/dist/esm/instaml.js +71 -102
  32. package/dist/esm/instaml.js.map +1 -1
  33. package/dist/esm/instaql.d.ts +1 -2
  34. package/dist/esm/instaql.d.ts.map +1 -1
  35. package/dist/esm/instaql.js +63 -65
  36. package/dist/esm/instaql.js.map +1 -1
  37. package/dist/esm/store.d.ts +21 -44
  38. package/dist/esm/store.d.ts.map +1 -1
  39. package/dist/esm/store.js +69 -161
  40. package/dist/esm/store.js.map +1 -1
  41. package/dist/standalone/index.js +1364 -1536
  42. package/dist/standalone/index.umd.cjs +3 -3
  43. package/package.json +2 -2
  44. package/src/Reactor.js +58 -126
  45. package/src/SyncTable.ts +45 -85
  46. package/src/{instaml.ts → instaml.js} +95 -195
  47. package/src/instaql.ts +60 -86
  48. package/src/store.ts +79 -209
  49. package/dist/commonjs/reactorTypes.d.ts +0 -29
  50. package/dist/commonjs/reactorTypes.d.ts.map +0 -1
  51. package/dist/commonjs/reactorTypes.js +0 -3
  52. package/dist/commonjs/reactorTypes.js.map +0 -1
  53. package/dist/esm/reactorTypes.d.ts +0 -29
  54. package/dist/esm/reactorTypes.d.ts.map +0 -1
  55. package/dist/esm/reactorTypes.js +0 -2
  56. package/dist/esm/reactorTypes.js.map +0 -1
  57. package/src/reactorTypes.ts +0 -32
@@ -4,6 +4,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.rewriteStep = rewriteStep;
7
+ exports.getAttrByFwdIdentName = getAttrByFwdIdentName;
8
+ exports.getAttrByReverseIdentName = getAttrByReverseIdentName;
7
9
  exports.transform = transform;
8
10
  const store_ts_1 = require("./store.js");
9
11
  const instatx_ts_1 = require("./instatx.js");
@@ -39,6 +41,21 @@ function rewriteStep(attrMapping, txStep) {
39
41
  }
40
42
  return rewritten;
41
43
  }
44
+ function getAttrByFwdIdentName(attrs, inputEtype, inputIdentName) {
45
+ return Object.values(attrs).find((attr) => {
46
+ const [_id, etype, label] = attr['forward-identity'];
47
+ return etype === inputEtype && label === inputIdentName;
48
+ });
49
+ }
50
+ function getAttrByReverseIdentName(attrs, inputEtype, inputIdentName) {
51
+ return Object.values(attrs).find((attr) => {
52
+ const revIdent = attr['reverse-identity'];
53
+ if (!revIdent)
54
+ return false;
55
+ const [_id, etype, label] = revIdent;
56
+ return etype === inputEtype && label === inputIdentName;
57
+ });
58
+ }
42
59
  function explodeLookupRef(eid) {
43
60
  if (Array.isArray(eid)) {
44
61
  return eid;
@@ -53,7 +70,7 @@ function isRefLookupIdent(attrs, etype, identName) {
53
70
  return (identName.indexOf('.') !== -1 &&
54
71
  // attr names can have `.` in them, so use the attr we find with a `.`
55
72
  // before assuming it's a ref lookup.
56
- !(0, store_ts_1.getAttrByFwdIdentName)(attrs, etype, identName));
73
+ !getAttrByFwdIdentName(attrs, etype, identName));
57
74
  }
58
75
  function extractRefLookupFwdName(identName) {
59
76
  const [fwdName, idIdent, ...rest] = identName.split('.');
@@ -64,11 +81,11 @@ function extractRefLookupFwdName(identName) {
64
81
  }
65
82
  function lookupIdentToAttr(attrs, etype, identName) {
66
83
  if (!isRefLookupIdent(attrs, etype, identName)) {
67
- return (0, store_ts_1.getAttrByFwdIdentName)(attrs, etype, identName);
84
+ return getAttrByFwdIdentName(attrs, etype, identName);
68
85
  }
69
86
  const fwdName = extractRefLookupFwdName(identName);
70
- const refAttr = (0, store_ts_1.getAttrByFwdIdentName)(attrs, etype, fwdName) ||
71
- (0, store_ts_1.getAttrByReverseIdentName)(attrs, etype, fwdName);
87
+ const refAttr = getAttrByFwdIdentName(attrs, etype, fwdName) ||
88
+ getAttrByReverseIdentName(attrs, etype, fwdName);
72
89
  if (refAttr && refAttr['value-type'] !== 'ref') {
73
90
  throw new Error(`${identName} does not reference a valid link attribute.`);
74
91
  }
@@ -97,7 +114,6 @@ function extractLookup(attrs, etype, eid) {
97
114
  return [attr.id, value];
98
115
  }
99
116
  function withIdAttrForLookup(attrs, etype, eidA, txSteps) {
100
- var _a;
101
117
  const lookup = extractLookup(attrs, etype, eidA);
102
118
  if (!Array.isArray(lookup)) {
103
119
  return txSteps;
@@ -105,65 +121,60 @@ function withIdAttrForLookup(attrs, etype, eidA, txSteps) {
105
121
  const idTuple = [
106
122
  'add-triple',
107
123
  lookup,
108
- (_a = (0, store_ts_1.getAttrByFwdIdentName)(attrs, etype, 'id')) === null || _a === void 0 ? void 0 : _a.id,
124
+ getAttrByFwdIdentName(attrs, etype, 'id').id,
109
125
  lookup,
110
126
  ];
111
127
  return [idTuple].concat(txSteps);
112
128
  }
113
- function expandLink({ attrsStore }, [etype, eidA, obj]) {
129
+ function expandLink({ attrs }, [etype, eidA, obj]) {
114
130
  const addTriples = Object.entries(obj).flatMap(([label, eidOrEids]) => {
115
131
  const eids = Array.isArray(eidOrEids) ? eidOrEids : [eidOrEids];
116
- const fwdAttr = (0, store_ts_1.getAttrByFwdIdentName)(attrsStore, etype, label);
117
- const revAttr = (0, store_ts_1.getAttrByReverseIdentName)(attrsStore, etype, label);
132
+ const fwdAttr = getAttrByFwdIdentName(attrs, etype, label);
133
+ const revAttr = getAttrByReverseIdentName(attrs, etype, label);
118
134
  return eids.map((eidB) => {
119
135
  const txStep = fwdAttr
120
136
  ? [
121
137
  'add-triple',
122
- extractLookup(attrsStore, etype, eidA),
138
+ extractLookup(attrs, etype, eidA),
123
139
  fwdAttr.id,
124
- // XXX: Better error here
125
- extractLookup(attrsStore, fwdAttr['reverse-identity'][1], eidB),
140
+ extractLookup(attrs, fwdAttr['reverse-identity'][1], eidB),
126
141
  ]
127
142
  : [
128
143
  'add-triple',
129
- // XXX: Better error here
130
- extractLookup(attrsStore, revAttr['forward-identity'][1], eidB),
131
- revAttr === null || revAttr === void 0 ? void 0 : revAttr.id,
132
- extractLookup(attrsStore, etype, eidA),
144
+ extractLookup(attrs, revAttr['forward-identity'][1], eidB),
145
+ revAttr.id,
146
+ extractLookup(attrs, etype, eidA),
133
147
  ];
134
148
  return txStep;
135
149
  });
136
150
  });
137
- return withIdAttrForLookup(attrsStore, etype, eidA, addTriples);
151
+ return withIdAttrForLookup(attrs, etype, eidA, addTriples);
138
152
  }
139
- function expandUnlink({ attrsStore }, [etype, eidA, obj]) {
153
+ function expandUnlink({ attrs }, [etype, eidA, obj]) {
140
154
  const retractTriples = Object.entries(obj).flatMap(([label, eidOrEids]) => {
141
155
  const eids = Array.isArray(eidOrEids) ? eidOrEids : [eidOrEids];
142
- const fwdAttr = (0, store_ts_1.getAttrByFwdIdentName)(attrsStore, etype, label);
143
- const revAttr = (0, store_ts_1.getAttrByReverseIdentName)(attrsStore, etype, label);
156
+ const fwdAttr = getAttrByFwdIdentName(attrs, etype, label);
157
+ const revAttr = getAttrByReverseIdentName(attrs, etype, label);
144
158
  return eids.map((eidB) => {
145
159
  const txStep = fwdAttr
146
160
  ? [
147
161
  'retract-triple',
148
- extractLookup(attrsStore, etype, eidA),
162
+ extractLookup(attrs, etype, eidA),
149
163
  fwdAttr.id,
150
- // XXX: Better error here
151
- extractLookup(attrsStore, fwdAttr['reverse-identity'][1], eidB),
164
+ extractLookup(attrs, fwdAttr['reverse-identity'][1], eidB),
152
165
  ]
153
166
  : [
154
167
  'retract-triple',
155
- // XXX: Better error here
156
- extractLookup(attrsStore, revAttr['forward-identity'][1], eidB),
168
+ extractLookup(attrs, revAttr['forward-identity'][1], eidB),
157
169
  revAttr.id,
158
- extractLookup(attrsStore, etype, eidA),
170
+ extractLookup(attrs, etype, eidA),
159
171
  ];
160
172
  return txStep;
161
173
  });
162
174
  });
163
- return withIdAttrForLookup(attrsStore, etype, eidA, retractTriples);
175
+ return withIdAttrForLookup(attrs, etype, eidA, retractTriples);
164
176
  }
165
- function checkEntityExists(stores, attrsStore, etype, eid) {
166
- var _a;
177
+ function checkEntityExists(stores, etype, eid) {
167
178
  if (Array.isArray(eid)) {
168
179
  // lookup ref
169
180
  const [entity_a, entity_v] = eid;
@@ -185,7 +196,7 @@ function checkEntityExists(stores, attrsStore, etype, eid) {
185
196
  const av = store === null || store === void 0 ? void 0 : store.eav.get(eid);
186
197
  if (av) {
187
198
  for (const attr_id of av.keys()) {
188
- if (((_a = attrsStore.getAttr(attr_id)) === null || _a === void 0 ? void 0 : _a['forward-identity'][1]) == etype) {
199
+ if (store.attrs[attr_id]['forward-identity'][1] == etype) {
189
200
  return true;
190
201
  }
191
202
  }
@@ -194,26 +205,25 @@ function checkEntityExists(stores, attrsStore, etype, eid) {
194
205
  }
195
206
  return false;
196
207
  }
197
- function convertOpts({ stores, attrsStore }, [etype, eid, obj_, opts]) {
208
+ function convertOpts({ stores, attrs }, [etype, eid, obj_, opts]) {
198
209
  return (opts === null || opts === void 0 ? void 0 : opts.upsert) === false
199
210
  ? { mode: 'update' }
200
211
  : (opts === null || opts === void 0 ? void 0 : opts.upsert) === true
201
212
  ? null
202
- : checkEntityExists(stores, attrsStore, etype, eid)
213
+ : checkEntityExists(stores, etype, eid)
203
214
  ? { mode: 'update' }
204
215
  : null; // auto mode chooses between update and upsert, not update and create, just in case
205
216
  }
206
217
  function expandCreate(ctx, step) {
207
- const { attrsStore } = ctx;
218
+ const { stores, attrs } = ctx;
208
219
  const [etype, eid, obj_, opts] = step;
209
220
  const obj = (0, object_js_1.immutableRemoveUndefined)(obj_);
210
- const lookup = extractLookup(attrsStore, etype, eid);
221
+ const lookup = extractLookup(attrs, etype, eid);
211
222
  // id first so that we don't clobber updates on the lookup field
212
223
  const attrTuples = [['id', lookup]]
213
224
  .concat(Object.entries(obj))
214
225
  .map(([identName, value]) => {
215
- // XXX: missing attr?
216
- const attr = (0, store_ts_1.getAttrByFwdIdentName)(attrsStore, etype, identName);
226
+ const attr = getAttrByFwdIdentName(attrs, etype, identName);
217
227
  if (attr['checked-data-type'] === 'date' && ctx.useDateObjects) {
218
228
  value = (0, dates_ts_1.coerceToDate)(value);
219
229
  }
@@ -222,16 +232,16 @@ function expandCreate(ctx, step) {
222
232
  return attrTuples;
223
233
  }
224
234
  function expandUpdate(ctx, step) {
225
- const { attrsStore } = ctx;
235
+ const { stores, attrs } = ctx;
226
236
  const [etype, eid, obj_, opts] = step;
227
237
  const obj = (0, object_js_1.immutableRemoveUndefined)(obj_);
228
- const lookup = extractLookup(attrsStore, etype, eid);
238
+ const lookup = extractLookup(attrs, etype, eid);
229
239
  const serverOpts = convertOpts(ctx, [etype, lookup, obj_, opts]);
230
240
  // id first so that we don't clobber updates on the lookup field
231
241
  const attrTuples = [['id', lookup]]
232
242
  .concat(Object.entries(obj))
233
243
  .map(([identName, value]) => {
234
- const attr = (0, store_ts_1.getAttrByFwdIdentName)(attrsStore, etype, identName);
244
+ const attr = getAttrByFwdIdentName(attrs, etype, identName);
235
245
  if (attr['checked-data-type'] === 'date' && ctx.useDateObjects) {
236
246
  value = (0, dates_ts_1.coerceToDate)(value);
237
247
  }
@@ -245,18 +255,18 @@ function expandUpdate(ctx, step) {
245
255
  });
246
256
  return attrTuples;
247
257
  }
248
- function expandDelete({ attrsStore }, [etype, eid]) {
249
- const lookup = extractLookup(attrsStore, etype, eid);
258
+ function expandDelete({ attrs }, [etype, eid]) {
259
+ const lookup = extractLookup(attrs, etype, eid);
250
260
  return [['delete-entity', lookup, etype]];
251
261
  }
252
262
  function expandDeepMerge(ctx, step) {
253
- const { attrsStore } = ctx;
263
+ const { stores, attrs } = ctx;
254
264
  const [etype, eid, obj_, opts] = step;
255
265
  const obj = (0, object_js_1.immutableRemoveUndefined)(obj_);
256
- const lookup = extractLookup(attrsStore, etype, eid);
266
+ const lookup = extractLookup(attrs, etype, eid);
257
267
  const serverOpts = convertOpts(ctx, [etype, lookup, obj_, opts]);
258
268
  const attrTuples = Object.entries(obj).map(([identName, value]) => {
259
- const attr = (0, store_ts_1.getAttrByFwdIdentName)(attrsStore, etype, identName);
269
+ const attr = getAttrByFwdIdentName(attrs, etype, identName);
260
270
  return [
261
271
  'deep-merge-triple',
262
272
  lookup,
@@ -268,15 +278,15 @@ function expandDeepMerge(ctx, step) {
268
278
  const idTuple = [
269
279
  'add-triple',
270
280
  lookup,
271
- (0, store_ts_1.getAttrByFwdIdentName)(attrsStore, etype, 'id').id,
281
+ getAttrByFwdIdentName(attrs, etype, 'id').id,
272
282
  lookup,
273
283
  ...(serverOpts ? [serverOpts] : []),
274
284
  ];
275
285
  // id first so that we don't clobber updates on the lookup field
276
286
  return [idTuple].concat(attrTuples);
277
287
  }
278
- function expandRuleParams({ attrsStore }, [etype, eid, ruleParams]) {
279
- const lookup = extractLookup(attrsStore, etype, eid);
288
+ function expandRuleParams({ attrs }, [etype, eid, ruleParams]) {
289
+ const lookup = extractLookup(attrs, etype, eid);
280
290
  return [['rule-params', lookup, etype, ruleParams]];
281
291
  }
282
292
  function removeIdFromArgs(step) {
@@ -348,8 +358,7 @@ function createObjectAttr(schema, etype, label, props) {
348
358
  return Object.assign(Object.assign({ id: attrId, 'forward-identity': fwdIdent, 'value-type': 'blob', cardinality: 'one', 'unique?': false, 'index?': false, isUnsynced: true }, (schemaObjectProps || {})), (props || {}));
349
359
  }
350
360
  function findSchemaLink(schema, etype, label) {
351
- const links = Object.values(schema.links);
352
- const found = links.find((x) => {
361
+ const found = Object.values(schema.links).find((x) => {
353
362
  return ((x.forward.on === etype && x.forward.label === label) ||
354
363
  (x.reverse.on === etype && x.reverse.label === label));
355
364
  });
@@ -377,13 +386,7 @@ function createRefAttr(schema, etype, label, props) {
377
386
  const attrId = (0, uuid_ts_1.default)();
378
387
  const fwdIdent = [(0, uuid_ts_1.default)(), etype, label];
379
388
  const revIdent = [(0, uuid_ts_1.default)(), label, etype];
380
- return Object.assign(Object.assign({ id: attrId,
381
- // @ts-ignore: ts thinks it's any[]
382
- 'forward-identity': fwdIdent,
383
- // @ts-ignore: ts thinks it's any[]
384
- 'reverse-identity': revIdent, 'value-type': 'ref',
385
- // @ts-ignore: ts thinks it's type string
386
- cardinality: 'many', 'unique?': false, 'index?': false, isUnsynced: true }, (schemaRefProps || {})), (props || {}));
389
+ return Object.assign(Object.assign({ id: attrId, 'forward-identity': fwdIdent, 'reverse-identity': revIdent, 'value-type': 'ref', cardinality: 'many', 'unique?': false, 'index?': false, isUnsynced: true }, (schemaRefProps || {})), (props || {}));
387
390
  }
388
391
  // Actions that have an object, e.g. not delete
389
392
  const OBJ_ACTIONS = new Set(['create', 'update', 'merge', 'link', 'unlink']);
@@ -427,49 +430,24 @@ function lookupPairsOfOp(op) {
427
430
  }
428
431
  return res;
429
432
  }
430
- function createMissingAttrs({ attrsStore, schema }, ops) {
433
+ function createMissingAttrs({ attrs: existingAttrs, schema }, ops) {
431
434
  var _a, _b;
432
- const addedIds = new Set();
433
- const localAttrs = [];
434
- const addOps = [];
435
- function attrByFwdIdent(etype, label) {
436
- return ((0, store_ts_1.getAttrByFwdIdentName)(attrsStore, etype, label) ||
437
- localAttrs.find((x) => x['forward-identity'][1] === etype &&
438
- x['forward-identity'][2] === label));
439
- }
440
- function attrByRevIdent(etype, label) {
441
- return ((0, store_ts_1.getAttrByReverseIdentName)(attrsStore, etype, label) ||
442
- localAttrs.find((x) => {
443
- var _a, _b;
444
- return ((_a = x['reverse-identity']) === null || _a === void 0 ? void 0 : _a[1]) === etype &&
445
- ((_b = x['reverse-identity']) === null || _b === void 0 ? void 0 : _b[2]) === label;
446
- }));
447
- }
435
+ const [addedIds, attrs, addOps] = [new Set(), Object.assign({}, existingAttrs), []];
448
436
  function addAttr(attr) {
449
- localAttrs.push(attr);
437
+ attrs[attr.id] = attr;
450
438
  addOps.push(['add-attr', attr]);
451
439
  addedIds.add(attr.id);
452
440
  }
453
441
  function addUnsynced(attr) {
454
- if (attr &&
455
- 'isUnsynced' in attr &&
456
- attr.isUnsynced &&
457
- !addedIds.has(attr.id)) {
458
- localAttrs.push(attr);
442
+ if ((attr === null || attr === void 0 ? void 0 : attr.isUnsynced) && !addedIds.has(attr.id)) {
459
443
  addOps.push(['add-attr', attr]);
460
444
  addedIds.add(attr.id);
461
445
  }
462
446
  }
463
- function isRefLookupIdentLocal(etype, identName) {
464
- return (identName.indexOf('.') !== -1 &&
465
- // attr names can have `.` in them, so use the attr we find with a `.`
466
- // before assuming it's a ref lookup.
467
- !attrByRevIdent(etype, identName));
468
- }
469
447
  // Adds attrs needed for a ref lookup
470
448
  function addForRef(etype, label) {
471
- const fwdAttr = attrByFwdIdent(etype, label);
472
- const revAttr = attrByRevIdent(etype, label);
449
+ const fwdAttr = getAttrByFwdIdentName(attrs, etype, label);
450
+ const revAttr = getAttrByReverseIdentName(attrs, etype, label);
473
451
  addUnsynced(fwdAttr);
474
452
  addUnsynced(revAttr);
475
453
  if (!fwdAttr && !revAttr) {
@@ -489,29 +467,29 @@ function createMissingAttrs({ attrsStore, schema }, ops) {
489
467
  addForRef(etype, linkLabel);
490
468
  // Figure out the link etype so we can make sure we have the attrs
491
469
  // for the link lookup
492
- const fwdAttr = attrByFwdIdent(etype, linkLabel);
493
- const revAttr = attrByRevIdent(etype, linkLabel);
470
+ const fwdAttr = getAttrByFwdIdentName(attrs, etype, linkLabel);
471
+ const revAttr = getAttrByReverseIdentName(attrs, etype, linkLabel);
494
472
  addUnsynced(fwdAttr);
495
473
  addUnsynced(revAttr);
496
474
  const linkEtype = ((_a = fwdAttr === null || fwdAttr === void 0 ? void 0 : fwdAttr['reverse-identity']) === null || _a === void 0 ? void 0 : _a[1]) ||
497
475
  ((_b = revAttr === null || revAttr === void 0 ? void 0 : revAttr['forward-identity']) === null || _b === void 0 ? void 0 : _b[1]) ||
498
476
  linkLabel;
499
- if (isRefLookupIdentLocal(linkEtype, identName)) {
477
+ if (isRefLookupIdent(attrs, linkEtype, identName)) {
500
478
  addForRef(linkEtype, extractRefLookupFwdName(identName));
501
479
  }
502
480
  else {
503
- const attr = attrByFwdIdent(linkEtype, identName);
481
+ const attr = getAttrByFwdIdentName(attrs, linkEtype, identName);
504
482
  if (!attr) {
505
483
  addAttr(createObjectAttr(schema, linkEtype, identName, lookupProps));
506
484
  }
507
485
  addUnsynced(attr);
508
486
  }
509
487
  }
510
- else if (isRefLookupIdentLocal(etype, identName)) {
488
+ else if (isRefLookupIdent(attrs, etype, identName)) {
511
489
  addForRef(etype, extractRefLookupFwdName(identName));
512
490
  }
513
491
  else {
514
- const attr = attrByFwdIdent(etype, identName);
492
+ const attr = getAttrByFwdIdentName(attrs, etype, identName);
515
493
  if (!attr) {
516
494
  addAttr(createObjectAttr(schema, etype, identName, lookupProps));
517
495
  }
@@ -523,13 +501,13 @@ function createMissingAttrs({ attrsStore, schema }, ops) {
523
501
  for (const op of ops) {
524
502
  const [action, etype, eid, obj] = op;
525
503
  if (OBJ_ACTIONS.has(action)) {
526
- const idAttr = attrByFwdIdent(etype, 'id');
504
+ const idAttr = getAttrByFwdIdentName(attrs, etype, 'id');
527
505
  addUnsynced(idAttr);
528
506
  if (!idAttr) {
529
507
  addAttr(createObjectAttr(schema, etype, 'id', { 'unique?': true }));
530
508
  }
531
509
  for (const label of Object.keys(obj)) {
532
- const fwdAttr = attrByFwdIdent(etype, label);
510
+ const fwdAttr = getAttrByFwdIdentName(attrs, etype, label);
533
511
  addUnsynced(fwdAttr);
534
512
  if (UPDATE_ACTIONS.has(action)) {
535
513
  if (!fwdAttr) {
@@ -537,7 +515,7 @@ function createMissingAttrs({ attrsStore, schema }, ops) {
537
515
  }
538
516
  }
539
517
  if (REF_ACTIONS.has(action)) {
540
- const revAttr = attrByRevIdent(etype, label);
518
+ const revAttr = getAttrByReverseIdentName(attrs, etype, label);
541
519
  if (!fwdAttr && !revAttr) {
542
520
  addAttr(createRefAttr(schema, etype, label));
543
521
  }
@@ -546,20 +524,13 @@ function createMissingAttrs({ attrsStore, schema }, ops) {
546
524
  }
547
525
  }
548
526
  }
549
- if (localAttrs.length) {
550
- const nextAttrs = Object.assign({}, attrsStore.attrs);
551
- for (const attr of localAttrs) {
552
- nextAttrs[attr.id] = attr;
553
- }
554
- return [new store_ts_1.AttrsStore(nextAttrs, attrsStore.linkIndex), addOps];
555
- }
556
- return [attrsStore, addOps];
527
+ return [attrs, addOps];
557
528
  }
558
529
  function transform(ctx, inputChunks) {
559
530
  const chunks = Array.isArray(inputChunks) ? inputChunks : [inputChunks];
560
531
  const ops = chunks.flatMap((tx) => (0, instatx_ts_1.getOps)(tx));
561
532
  const [newAttrs, addAttrTxSteps] = createMissingAttrs(ctx, ops);
562
- const newCtx = Object.assign(Object.assign({}, ctx), { attrsStore: newAttrs });
533
+ const newCtx = Object.assign(Object.assign({}, ctx), { attrs: newAttrs });
563
534
  const txSteps = ops.flatMap((op) => toTxSteps(newCtx, op));
564
535
  return [...addAttrTxSteps, ...txSteps];
565
536
  }
@@ -1 +1 @@
1
- {"version":3,"file":"instaml.js","sourceRoot":"","sources":["../../src/instaml.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n allMapValues,\n AttrsStore,\n getAttrByFwdIdentName,\n getAttrByReverseIdentName,\n Store,\n} from './store.ts';\nimport { getOps, isLookup, parseLookup } from './instatx.ts';\nimport { immutableRemoveUndefined } from './utils/object.js';\nimport { coerceToDate } from './utils/dates.ts';\nimport uuid from './utils/uuid.ts';\nimport {\n EntitiesWithLinks,\n IContainEntitiesAndLinks,\n LinkDef,\n} from './schemaTypes.ts';\nimport { InstantDBAttr, InstantDBIdent } from './attrTypes.ts';\n\nexport type AttrMapping = {\n attrIdMap: Record<string, string>;\n refSwapAttrIds: Set<string>;\n};\n\ntype TXStep = any[];\n\n// Rewrites optimistic attrs with the attrs we get back from the server.\nexport function rewriteStep(attrMapping: AttrMapping, txStep: TXStep): TXStep {\n const { attrIdMap, refSwapAttrIds } = attrMapping;\n const rewritten: TXStep = [];\n for (const part of txStep) {\n const newValue = attrIdMap[part];\n\n if (newValue) {\n // Rewrites attr id\n rewritten.push(newValue);\n } else if (Array.isArray(part) && part.length == 2 && attrIdMap[part[0]]) {\n // Rewrites attr id in lookups\n const [aid, value] = part;\n rewritten.push([attrIdMap[aid], value]);\n } else {\n rewritten.push(part);\n }\n }\n const [action] = txStep;\n if (\n (action === 'add-triple' || action === 'retract-triple') &&\n refSwapAttrIds.has(txStep[2])\n ) {\n // Reverse links if the optimistic link attr is backwards\n const tmp = rewritten[1];\n rewritten[1] = rewritten[3];\n rewritten[3] = tmp;\n }\n return rewritten;\n}\n\nfunction explodeLookupRef(eid) {\n if (Array.isArray(eid)) {\n return eid;\n }\n const entries = Object.entries(eid);\n if (entries.length !== 1) {\n throw new Error(\n 'lookup must be an object with a single unique attr and value.',\n );\n }\n return entries[0];\n}\n\nfunction isRefLookupIdent(attrs: AttrsStore, etype: string, identName: string) {\n return (\n identName.indexOf('.') !== -1 &&\n // attr names can have `.` in them, so use the attr we find with a `.`\n // before assuming it's a ref lookup.\n !getAttrByFwdIdentName(attrs, etype, identName)\n );\n}\n\nfunction extractRefLookupFwdName(identName) {\n const [fwdName, idIdent, ...rest] = identName.split('.');\n if (rest.length > 0 || idIdent !== 'id') {\n throw new Error(`${identName} is not a valid lookup attribute.`);\n }\n\n return fwdName;\n}\n\nfunction lookupIdentToAttr(\n attrs: AttrsStore,\n etype: string,\n identName: string,\n) {\n if (!isRefLookupIdent(attrs, etype, identName)) {\n return getAttrByFwdIdentName(attrs, etype, identName);\n }\n\n const fwdName = extractRefLookupFwdName(identName);\n\n const refAttr =\n getAttrByFwdIdentName(attrs, etype, fwdName) ||\n getAttrByReverseIdentName(attrs, etype, fwdName);\n if (refAttr && refAttr['value-type'] !== 'ref') {\n throw new Error(`${identName} does not reference a valid link attribute.`);\n }\n return refAttr;\n}\n\n// Returns [attr, value] for the eid if the eid is a lookup.\n// If it's a regular eid, returns null\nfunction lookupPairOfEid(eid) {\n if (typeof eid === 'string' && !isLookup(eid)) {\n return null;\n }\n return typeof eid === 'string' && isLookup(eid)\n ? parseLookup(eid)\n : explodeLookupRef(eid);\n}\n\nfunction extractLookup(attrs: AttrsStore, etype: string, eid: string) {\n const lookupPair = lookupPairOfEid(eid);\n\n if (lookupPair === null) {\n return eid;\n }\n\n const [identName, value] = lookupPair;\n const attr = lookupIdentToAttr(attrs, etype, identName);\n if (!attr || !attr['unique?']) {\n throw new Error(`${identName} is not a unique attribute.`);\n }\n return [attr.id, value];\n}\n\nfunction withIdAttrForLookup(\n attrs: AttrsStore,\n etype: string,\n eidA: string,\n txSteps: TXStep[],\n) {\n const lookup = extractLookup(attrs, etype, eidA);\n if (!Array.isArray(lookup)) {\n return txSteps;\n }\n const idTuple = [\n 'add-triple',\n lookup,\n getAttrByFwdIdentName(attrs, etype, 'id')?.id,\n lookup,\n ];\n return [idTuple].concat(txSteps);\n}\n\nfunction expandLink({ attrsStore }: Ctx, [etype, eidA, obj]) {\n const addTriples = Object.entries(obj).flatMap(([label, eidOrEids]) => {\n const eids = Array.isArray(eidOrEids) ? eidOrEids : [eidOrEids];\n const fwdAttr = getAttrByFwdIdentName(attrsStore, etype, label);\n const revAttr = getAttrByReverseIdentName(attrsStore, etype, label);\n return eids.map((eidB) => {\n const txStep = fwdAttr\n ? [\n 'add-triple',\n extractLookup(attrsStore, etype, eidA),\n fwdAttr.id,\n // XXX: Better error here\n extractLookup(attrsStore, fwdAttr!['reverse-identity']![1], eidB),\n ]\n : [\n 'add-triple',\n // XXX: Better error here\n extractLookup(attrsStore, revAttr!['forward-identity']![1], eidB),\n revAttr?.id,\n extractLookup(attrsStore, etype, eidA),\n ];\n return txStep;\n });\n });\n return withIdAttrForLookup(attrsStore, etype, eidA, addTriples);\n}\n\nfunction expandUnlink({ attrsStore }: Ctx, [etype, eidA, obj]) {\n const retractTriples = Object.entries(obj).flatMap(([label, eidOrEids]) => {\n const eids = Array.isArray(eidOrEids) ? eidOrEids : [eidOrEids];\n const fwdAttr = getAttrByFwdIdentName(attrsStore, etype, label);\n const revAttr = getAttrByReverseIdentName(attrsStore, etype, label);\n return eids.map((eidB) => {\n const txStep = fwdAttr\n ? [\n 'retract-triple',\n extractLookup(attrsStore, etype, eidA),\n fwdAttr.id,\n // XXX: Better error here\n extractLookup(attrsStore, fwdAttr!['reverse-identity']![1], eidB),\n ]\n : [\n 'retract-triple',\n // XXX: Better error here\n extractLookup(attrsStore, revAttr!['forward-identity'][1], eidB),\n revAttr!.id,\n extractLookup(attrsStore, etype, eidA),\n ];\n return txStep;\n });\n });\n return withIdAttrForLookup(attrsStore, etype, eidA, retractTriples);\n}\n\nfunction checkEntityExists(\n stores: (Store | undefined)[],\n attrsStore: AttrsStore,\n etype: string,\n eid: string,\n) {\n if (Array.isArray(eid)) {\n // lookup ref\n const [entity_a, entity_v] = eid;\n for (const store of stores || []) {\n const ev = store?.aev.get(entity_a);\n if (ev) {\n // This would be a lot more efficient with a ave index\n for (const [e_, a_, v] of allMapValues(ev, 2)) {\n if (v === entity_v) {\n return true;\n }\n }\n }\n }\n } else {\n // eid\n for (const store of stores || []) {\n const av = store?.eav.get(eid);\n if (av) {\n for (const attr_id of av.keys()) {\n if (attrsStore.getAttr(attr_id)?.['forward-identity'][1] == etype) {\n return true;\n }\n }\n }\n }\n }\n return false;\n}\n\ntype Ctx = {\n stores: (Store | undefined)[];\n attrsStore: AttrsStore;\n schema: Schema;\n useDateObjects: boolean | null;\n};\n\nfunction convertOpts({ stores, attrsStore }: Ctx, [etype, eid, obj_, opts]) {\n return opts?.upsert === false\n ? { mode: 'update' }\n : opts?.upsert === true\n ? null\n : checkEntityExists(stores, attrsStore, etype, eid)\n ? { mode: 'update' }\n : null; // auto mode chooses between update and upsert, not update and create, just in case\n}\n\nfunction expandCreate(ctx: Ctx, step) {\n const { attrsStore } = ctx;\n const [etype, eid, obj_, opts] = step;\n const obj = immutableRemoveUndefined(obj_);\n const lookup = extractLookup(attrsStore, etype, eid);\n // id first so that we don't clobber updates on the lookup field\n const attrTuples = [['id', lookup]]\n .concat(Object.entries(obj))\n .map(([identName, value]: [string, any]) => {\n // XXX: missing attr?\n const attr = getAttrByFwdIdentName(attrsStore, etype, identName)!;\n\n if (attr['checked-data-type'] === 'date' && ctx.useDateObjects) {\n value = coerceToDate(value);\n }\n\n return ['add-triple', lookup, attr.id, value, { mode: 'create' }];\n });\n return attrTuples;\n}\n\nfunction expandUpdate(ctx: Ctx, step) {\n const { attrsStore } = ctx;\n const [etype, eid, obj_, opts] = step;\n const obj = immutableRemoveUndefined(obj_);\n const lookup = extractLookup(attrsStore, etype, eid);\n const serverOpts = convertOpts(ctx, [etype, lookup, obj_, opts]);\n // id first so that we don't clobber updates on the lookup field\n const attrTuples = [['id', lookup]]\n .concat(Object.entries(obj))\n .map(([identName, value]: [string, any]) => {\n const attr = getAttrByFwdIdentName(attrsStore, etype, identName)!;\n\n if (attr['checked-data-type'] === 'date' && ctx.useDateObjects) {\n value = coerceToDate(value);\n }\n\n return [\n 'add-triple',\n lookup,\n attr.id,\n value,\n ...(serverOpts ? [serverOpts] : []),\n ];\n });\n return attrTuples;\n}\n\nfunction expandDelete({ attrsStore }: Ctx, [etype, eid]) {\n const lookup = extractLookup(attrsStore, etype, eid);\n return [['delete-entity', lookup, etype]];\n}\n\nfunction expandDeepMerge(ctx: Ctx, step) {\n const { attrsStore } = ctx;\n const [etype, eid, obj_, opts] = step;\n const obj = immutableRemoveUndefined(obj_);\n const lookup = extractLookup(attrsStore, etype, eid);\n const serverOpts = convertOpts(ctx, [etype, lookup, obj_, opts]);\n const attrTuples = Object.entries(obj).map(([identName, value]) => {\n const attr = getAttrByFwdIdentName(attrsStore, etype, identName)!;\n return [\n 'deep-merge-triple',\n lookup,\n attr.id,\n value,\n ...(serverOpts ? [serverOpts] : []),\n ];\n });\n\n const idTuple = [\n 'add-triple',\n lookup,\n getAttrByFwdIdentName(attrsStore, etype, 'id')!.id,\n lookup,\n ...(serverOpts ? [serverOpts] : []),\n ];\n\n // id first so that we don't clobber updates on the lookup field\n return [idTuple].concat(attrTuples);\n}\n\nfunction expandRuleParams({ attrsStore }: Ctx, [etype, eid, ruleParams]) {\n const lookup = extractLookup(attrsStore, etype, eid);\n return [['rule-params', lookup, etype, ruleParams]];\n}\n\nfunction removeIdFromArgs(step) {\n const [op, etype, eid, obj, opts] = step;\n if (!obj) {\n return step;\n }\n const newObj = { ...obj };\n delete newObj.id;\n return [op, etype, eid, newObj, ...(opts ? [opts] : [])];\n}\n\nfunction toTxSteps(ctx: Ctx, step) {\n const [action, ...args] = removeIdFromArgs(step);\n switch (action) {\n case 'merge':\n return expandDeepMerge(ctx, args);\n case 'create':\n return expandCreate(ctx, args);\n case 'update':\n return expandUpdate(ctx, args);\n case 'link':\n return expandLink(ctx, args);\n case 'unlink':\n return expandUnlink(ctx, args);\n case 'delete':\n return expandDelete(ctx, args);\n case 'ruleParams':\n return expandRuleParams(ctx, args);\n default:\n throw new Error(`unsupported action ${action}`);\n }\n}\n\n// ---------\n// transform\n\nfunction checkedDataTypeOfValueType(valueType) {\n switch (valueType) {\n case 'string':\n case 'date':\n case 'boolean':\n case 'number':\n return valueType;\n default:\n return undefined;\n }\n}\n\nfunction objectPropsFromSchema(schema, etype, label) {\n const attr = schema.entities[etype]?.attrs?.[label];\n if (label === 'id') return null;\n if (!attr) {\n throw new Error(`${etype}.${label} does not exist in your schema`);\n }\n const { unique, indexed } = attr?.config;\n const checkedDataType = checkedDataTypeOfValueType(attr?.valueType);\n\n return {\n 'index?': indexed,\n 'unique?': unique,\n 'checked-data-type': checkedDataType,\n };\n}\n\nfunction createObjectAttr(schema, etype, label, props) {\n const schemaObjectProps = schema\n ? objectPropsFromSchema(schema, etype, label)\n : null;\n const attrId = uuid();\n const fwdIdentId = uuid();\n const fwdIdent = [fwdIdentId, etype, label];\n return {\n id: attrId,\n 'forward-identity': fwdIdent,\n 'value-type': 'blob',\n cardinality: 'one',\n 'unique?': false,\n 'index?': false,\n isUnsynced: true,\n ...(schemaObjectProps || {}),\n ...(props || {}),\n };\n}\n\ntype Link = LinkDef<any, any, any, any, any, any, any>;\ntype Schema = IContainEntitiesAndLinks<any, any>;\n\nfunction findSchemaLink(schema: Schema, etype, label): Link | undefined {\n const links: Link[] = Object.values(schema.links);\n const found = links.find((x: Link) => {\n return (\n (x.forward.on === etype && x.forward.label === label) ||\n (x.reverse.on === etype && x.reverse.label === label)\n );\n });\n return found;\n}\n\nfunction refPropsFromSchema(schema: Schema, etype, label) {\n const found = findSchemaLink(schema, etype, label);\n if (!found) {\n throw new Error(`Couldn't find the link ${etype}.${label} in your schema`);\n }\n const { forward, reverse } = found;\n return {\n 'forward-identity': [uuid(), forward.on, forward.label],\n 'reverse-identity': [uuid(), reverse.on, reverse.label],\n cardinality: forward.has === 'one' ? 'one' : 'many',\n 'unique?': reverse.has === 'one',\n 'on-delete': forward.onDelete,\n 'on-delete-reverse': reverse.onDelete,\n };\n}\n\nfunction createRefAttr(\n schema: Schema,\n etype: string,\n label: string,\n props?: Partial<InstantDBAttr> | undefined,\n): InstantDBAttr {\n const schemaRefProps = schema\n ? refPropsFromSchema(schema, etype, label)\n : null;\n const attrId = uuid();\n const fwdIdent: InstantDBIdent = [uuid(), etype, label];\n const revIdent: InstantDBIdent = [uuid(), label, etype];\n return {\n id: attrId,\n // @ts-ignore: ts thinks it's any[]\n 'forward-identity': fwdIdent,\n // @ts-ignore: ts thinks it's any[]\n 'reverse-identity': revIdent,\n 'value-type': 'ref',\n // @ts-ignore: ts thinks it's type string\n cardinality: 'many',\n 'unique?': false,\n 'index?': false,\n isUnsynced: true,\n ...(schemaRefProps || {}),\n ...(props || {}),\n };\n}\n\n// Actions that have an object, e.g. not delete\nconst OBJ_ACTIONS = new Set(['create', 'update', 'merge', 'link', 'unlink']);\nconst REF_ACTIONS = new Set(['link', 'unlink']);\nconst UPDATE_ACTIONS = new Set(['create', 'update', 'merge']);\nconst SUPPORTS_LOOKUP_ACTIONS = new Set([\n 'link',\n 'unlink',\n 'create',\n 'update',\n 'merge',\n 'delete',\n 'ruleParams',\n]);\n\nconst lookupProps: Partial<InstantDBAttr> = { 'unique?': true, 'index?': true };\nconst refLookupProps: Partial<InstantDBAttr> = {\n ...lookupProps,\n cardinality: 'one',\n};\n\nfunction lookupPairsOfOp(op) {\n const res: { etype: string; lookupPair: any; linkLabel?: string }[] = [];\n const [action, etype, eid, obj] = op;\n if (!SUPPORTS_LOOKUP_ACTIONS.has(action)) {\n return res;\n }\n\n const eidLookupPair = lookupPairOfEid(eid);\n if (eidLookupPair) {\n res.push({ etype: etype, lookupPair: eidLookupPair });\n }\n if (action === 'link') {\n for (const [label, eidOrEids] of Object.entries(obj)) {\n const eids = Array.isArray(eidOrEids) ? eidOrEids : [eidOrEids];\n for (const linkEid of eids) {\n const linkEidLookupPair = lookupPairOfEid(linkEid);\n if (linkEidLookupPair) {\n res.push({\n etype: etype,\n lookupPair: linkEidLookupPair,\n linkLabel: label,\n });\n }\n }\n }\n }\n return res;\n}\n\nfunction createMissingAttrs(\n { attrsStore, schema }: Ctx,\n ops,\n): [AttrsStore, TXStep[]] {\n const addedIds = new Set();\n const localAttrs: InstantDBAttr[] = [];\n const addOps: TXStep[] = [];\n\n function attrByFwdIdent(etype, label): InstantDBAttr | undefined {\n return (\n getAttrByFwdIdentName(attrsStore, etype, label) ||\n localAttrs.find(\n (x) =>\n x['forward-identity'][1] === etype &&\n x['forward-identity'][2] === label,\n )\n );\n }\n\n function attrByRevIdent(etype, label): InstantDBAttr | undefined {\n return (\n getAttrByReverseIdentName(attrsStore, etype, label) ||\n localAttrs.find(\n (x) =>\n x['reverse-identity']?.[1] === etype &&\n x['reverse-identity']?.[2] === label,\n )\n );\n }\n\n function addAttr(attr: InstantDBAttr) {\n localAttrs.push(attr);\n addOps.push(['add-attr', attr]);\n addedIds.add(attr.id);\n }\n function addUnsynced(\n attr:\n | (InstantDBAttr & { isUnsynced?: boolean })\n | InstantDBAttr\n | undefined,\n ) {\n if (\n attr &&\n 'isUnsynced' in attr &&\n attr.isUnsynced &&\n !addedIds.has(attr.id)\n ) {\n localAttrs.push(attr);\n addOps.push(['add-attr', attr]);\n addedIds.add(attr.id);\n }\n }\n\n function isRefLookupIdentLocal(etype: string, identName: string) {\n return (\n identName.indexOf('.') !== -1 &&\n // attr names can have `.` in them, so use the attr we find with a `.`\n // before assuming it's a ref lookup.\n !attrByRevIdent(etype, identName)\n );\n }\n\n // Adds attrs needed for a ref lookup\n function addForRef(etype, label) {\n const fwdAttr = attrByFwdIdent(etype, label);\n const revAttr = attrByRevIdent(etype, label);\n addUnsynced(fwdAttr);\n addUnsynced(revAttr);\n if (!fwdAttr && !revAttr) {\n addAttr(createRefAttr(schema, etype, label, refLookupProps));\n }\n }\n\n // Create attrs for lookups if we need to\n // Do these first because otherwise we might add a non-unique attr\n // before we get to it\n for (const op of ops) {\n for (const { etype, lookupPair, linkLabel } of lookupPairsOfOp(op)) {\n const identName = lookupPair[0];\n // We got a link eid that's a lookup, linkLabel is the label of the ident,\n // e.g. `posts` in `link({posts: postIds})`\n if (linkLabel) {\n // Add our ref attr, e.g. users.posts\n addForRef(etype, linkLabel);\n\n // Figure out the link etype so we can make sure we have the attrs\n // for the link lookup\n const fwdAttr = attrByFwdIdent(etype, linkLabel);\n const revAttr = attrByRevIdent(etype, linkLabel);\n addUnsynced(fwdAttr);\n addUnsynced(revAttr);\n const linkEtype =\n fwdAttr?.['reverse-identity']?.[1] ||\n revAttr?.['forward-identity']?.[1] ||\n linkLabel;\n if (isRefLookupIdentLocal(linkEtype, identName)) {\n addForRef(linkEtype, extractRefLookupFwdName(identName));\n } else {\n const attr = attrByFwdIdent(linkEtype, identName);\n if (!attr) {\n addAttr(\n createObjectAttr(schema, linkEtype, identName, lookupProps),\n );\n }\n addUnsynced(attr);\n }\n } else if (isRefLookupIdentLocal(etype, identName)) {\n addForRef(etype, extractRefLookupFwdName(identName));\n } else {\n const attr = attrByFwdIdent(etype, identName);\n if (!attr) {\n addAttr(createObjectAttr(schema, etype, identName, lookupProps));\n }\n addUnsynced(attr);\n }\n }\n }\n\n // Create object and ref attrs\n for (const op of ops) {\n const [action, etype, eid, obj] = op;\n if (OBJ_ACTIONS.has(action)) {\n const idAttr = attrByFwdIdent(etype, 'id');\n addUnsynced(idAttr);\n if (!idAttr) {\n addAttr(createObjectAttr(schema, etype, 'id', { 'unique?': true }));\n }\n\n for (const label of Object.keys(obj)) {\n const fwdAttr = attrByFwdIdent(etype, label);\n addUnsynced(fwdAttr);\n if (UPDATE_ACTIONS.has(action)) {\n if (!fwdAttr) {\n addAttr(\n createObjectAttr(\n schema,\n etype,\n label,\n label === 'id' ? { 'unique?': true } : null,\n ),\n );\n }\n }\n if (REF_ACTIONS.has(action)) {\n const revAttr = attrByRevIdent(etype, label);\n if (!fwdAttr && !revAttr) {\n addAttr(createRefAttr(schema, etype, label));\n }\n addUnsynced(revAttr);\n }\n }\n }\n }\n\n if (localAttrs.length) {\n const nextAttrs = { ...attrsStore.attrs };\n for (const attr of localAttrs) {\n nextAttrs[attr.id] = attr;\n }\n return [new AttrsStore(nextAttrs, attrsStore.linkIndex), addOps];\n }\n return [attrsStore, addOps];\n}\n\nexport function transform(ctx: Ctx, inputChunks) {\n const chunks = Array.isArray(inputChunks) ? inputChunks : [inputChunks];\n const ops = chunks.flatMap((tx) => getOps(tx));\n const [newAttrs, addAttrTxSteps] = createMissingAttrs(ctx, ops);\n const newCtx = { ...ctx, attrsStore: newAttrs };\n const txSteps = ops.flatMap((op) => toTxSteps(newCtx, op));\n return [...addAttrTxSteps, ...txSteps];\n}\n"]}
1
+ {"version":3,"file":"instaml.js","sourceRoot":"","sources":["../../src/instaml.js"],"names":[],"mappings":"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","sourcesContent":["import { allMapValues } from './store.ts';\nimport { getOps, isLookup, parseLookup } from './instatx.ts';\nimport { immutableRemoveUndefined } from './utils/object.js';\nimport { coerceToDate } from './utils/dates.ts';\nimport uuid from './utils/uuid.ts';\n\n// Rewrites optimistic attrs with the attrs we get back from the server.\nexport function rewriteStep(attrMapping, txStep) {\n const { attrIdMap, refSwapAttrIds } = attrMapping;\n const rewritten = [];\n for (const part of txStep) {\n const newValue = attrIdMap[part];\n\n if (newValue) {\n // Rewrites attr id\n rewritten.push(newValue);\n } else if (Array.isArray(part) && part.length == 2 && attrIdMap[part[0]]) {\n // Rewrites attr id in lookups\n const [aid, value] = part;\n rewritten.push([attrIdMap[aid], value]);\n } else {\n rewritten.push(part);\n }\n }\n const [action] = txStep;\n if (\n (action === 'add-triple' || action === 'retract-triple') &&\n refSwapAttrIds.has(txStep[2])\n ) {\n // Reverse links if the optimistic link attr is backwards\n const tmp = rewritten[1];\n rewritten[1] = rewritten[3];\n rewritten[3] = tmp;\n }\n return rewritten;\n}\n\nexport function getAttrByFwdIdentName(attrs, inputEtype, inputIdentName) {\n return Object.values(attrs).find((attr) => {\n const [_id, etype, label] = attr['forward-identity'];\n return etype === inputEtype && label === inputIdentName;\n });\n}\n\nexport function getAttrByReverseIdentName(attrs, inputEtype, inputIdentName) {\n return Object.values(attrs).find((attr) => {\n const revIdent = attr['reverse-identity'];\n if (!revIdent) return false;\n const [_id, etype, label] = revIdent;\n return etype === inputEtype && label === inputIdentName;\n });\n}\n\nfunction explodeLookupRef(eid) {\n if (Array.isArray(eid)) {\n return eid;\n }\n const entries = Object.entries(eid);\n if (entries.length !== 1) {\n throw new Error(\n 'lookup must be an object with a single unique attr and value.',\n );\n }\n return entries[0];\n}\n\nfunction isRefLookupIdent(attrs, etype, identName) {\n return (\n identName.indexOf('.') !== -1 &&\n // attr names can have `.` in them, so use the attr we find with a `.`\n // before assuming it's a ref lookup.\n !getAttrByFwdIdentName(attrs, etype, identName)\n );\n}\n\nfunction extractRefLookupFwdName(identName) {\n const [fwdName, idIdent, ...rest] = identName.split('.');\n if (rest.length > 0 || idIdent !== 'id') {\n throw new Error(`${identName} is not a valid lookup attribute.`);\n }\n\n return fwdName;\n}\n\nfunction lookupIdentToAttr(attrs, etype, identName) {\n if (!isRefLookupIdent(attrs, etype, identName)) {\n return getAttrByFwdIdentName(attrs, etype, identName);\n }\n\n const fwdName = extractRefLookupFwdName(identName);\n\n const refAttr =\n getAttrByFwdIdentName(attrs, etype, fwdName) ||\n getAttrByReverseIdentName(attrs, etype, fwdName);\n if (refAttr && refAttr['value-type'] !== 'ref') {\n throw new Error(`${identName} does not reference a valid link attribute.`);\n }\n return refAttr;\n}\n\n// Returns [attr, value] for the eid if the eid is a lookup.\n// If it's a regular eid, returns null\nfunction lookupPairOfEid(eid) {\n if (typeof eid === 'string' && !isLookup(eid)) {\n return null;\n }\n return typeof eid === 'string' && isLookup(eid)\n ? parseLookup(eid)\n : explodeLookupRef(eid);\n}\n\nfunction extractLookup(attrs, etype, eid) {\n const lookupPair = lookupPairOfEid(eid);\n\n if (lookupPair === null) {\n return eid;\n }\n\n const [identName, value] = lookupPair;\n const attr = lookupIdentToAttr(attrs, etype, identName);\n if (!attr || !attr['unique?']) {\n throw new Error(`${identName} is not a unique attribute.`);\n }\n return [attr.id, value];\n}\n\nfunction withIdAttrForLookup(attrs, etype, eidA, txSteps) {\n const lookup = extractLookup(attrs, etype, eidA);\n if (!Array.isArray(lookup)) {\n return txSteps;\n }\n const idTuple = [\n 'add-triple',\n lookup,\n getAttrByFwdIdentName(attrs, etype, 'id').id,\n lookup,\n ];\n return [idTuple].concat(txSteps);\n}\n\nfunction expandLink({ attrs }, [etype, eidA, obj]) {\n const addTriples = Object.entries(obj).flatMap(([label, eidOrEids]) => {\n const eids = Array.isArray(eidOrEids) ? eidOrEids : [eidOrEids];\n const fwdAttr = getAttrByFwdIdentName(attrs, etype, label);\n const revAttr = getAttrByReverseIdentName(attrs, etype, label);\n return eids.map((eidB) => {\n const txStep = fwdAttr\n ? [\n 'add-triple',\n extractLookup(attrs, etype, eidA),\n fwdAttr.id,\n extractLookup(attrs, fwdAttr['reverse-identity'][1], eidB),\n ]\n : [\n 'add-triple',\n extractLookup(attrs, revAttr['forward-identity'][1], eidB),\n revAttr.id,\n extractLookup(attrs, etype, eidA),\n ];\n return txStep;\n });\n });\n return withIdAttrForLookup(attrs, etype, eidA, addTriples);\n}\n\nfunction expandUnlink({ attrs }, [etype, eidA, obj]) {\n const retractTriples = Object.entries(obj).flatMap(([label, eidOrEids]) => {\n const eids = Array.isArray(eidOrEids) ? eidOrEids : [eidOrEids];\n const fwdAttr = getAttrByFwdIdentName(attrs, etype, label);\n const revAttr = getAttrByReverseIdentName(attrs, etype, label);\n return eids.map((eidB) => {\n const txStep = fwdAttr\n ? [\n 'retract-triple',\n extractLookup(attrs, etype, eidA),\n fwdAttr.id,\n extractLookup(attrs, fwdAttr['reverse-identity'][1], eidB),\n ]\n : [\n 'retract-triple',\n extractLookup(attrs, revAttr['forward-identity'][1], eidB),\n revAttr.id,\n extractLookup(attrs, etype, eidA),\n ];\n return txStep;\n });\n });\n return withIdAttrForLookup(attrs, etype, eidA, retractTriples);\n}\n\nfunction checkEntityExists(stores, etype, eid) {\n if (Array.isArray(eid)) {\n // lookup ref\n const [entity_a, entity_v] = eid;\n for (const store of stores || []) {\n const ev = store?.aev.get(entity_a);\n if (ev) {\n // This would be a lot more efficient with a ave index\n for (const [e_, a_, v] of allMapValues(ev, 2)) {\n if (v === entity_v) {\n return true;\n }\n }\n }\n }\n } else {\n // eid\n for (const store of stores || []) {\n const av = store?.eav.get(eid);\n if (av) {\n for (const attr_id of av.keys()) {\n if (store.attrs[attr_id]['forward-identity'][1] == etype) {\n return true;\n }\n }\n }\n }\n }\n return false;\n}\n\nfunction convertOpts({ stores, attrs }, [etype, eid, obj_, opts]) {\n return opts?.upsert === false\n ? { mode: 'update' }\n : opts?.upsert === true\n ? null\n : checkEntityExists(stores, etype, eid)\n ? { mode: 'update' }\n : null; // auto mode chooses between update and upsert, not update and create, just in case\n}\n\nfunction expandCreate(ctx, step) {\n const { stores, attrs } = ctx;\n const [etype, eid, obj_, opts] = step;\n const obj = immutableRemoveUndefined(obj_);\n const lookup = extractLookup(attrs, etype, eid);\n // id first so that we don't clobber updates on the lookup field\n const attrTuples = [['id', lookup]]\n .concat(Object.entries(obj))\n .map(([identName, value]) => {\n const attr = getAttrByFwdIdentName(attrs, etype, identName);\n\n if (attr['checked-data-type'] === 'date' && ctx.useDateObjects) {\n value = coerceToDate(value);\n }\n\n return ['add-triple', lookup, attr.id, value, { mode: 'create' }];\n });\n return attrTuples;\n}\n\nfunction expandUpdate(ctx, step) {\n const { stores, attrs } = ctx;\n const [etype, eid, obj_, opts] = step;\n const obj = immutableRemoveUndefined(obj_);\n const lookup = extractLookup(attrs, etype, eid);\n const serverOpts = convertOpts(ctx, [etype, lookup, obj_, opts]);\n // id first so that we don't clobber updates on the lookup field\n const attrTuples = [['id', lookup]]\n .concat(Object.entries(obj))\n .map(([identName, value]) => {\n const attr = getAttrByFwdIdentName(attrs, etype, identName);\n\n if (attr['checked-data-type'] === 'date' && ctx.useDateObjects) {\n value = coerceToDate(value);\n }\n\n return [\n 'add-triple',\n lookup,\n attr.id,\n value,\n ...(serverOpts ? [serverOpts] : []),\n ];\n });\n return attrTuples;\n}\n\nfunction expandDelete({ attrs }, [etype, eid]) {\n const lookup = extractLookup(attrs, etype, eid);\n return [['delete-entity', lookup, etype]];\n}\n\nfunction expandDeepMerge(ctx, step) {\n const { stores, attrs } = ctx;\n const [etype, eid, obj_, opts] = step;\n const obj = immutableRemoveUndefined(obj_);\n const lookup = extractLookup(attrs, etype, eid);\n const serverOpts = convertOpts(ctx, [etype, lookup, obj_, opts]);\n const attrTuples = Object.entries(obj).map(([identName, value]) => {\n const attr = getAttrByFwdIdentName(attrs, etype, identName);\n return [\n 'deep-merge-triple',\n lookup,\n attr.id,\n value,\n ...(serverOpts ? [serverOpts] : []),\n ];\n });\n\n const idTuple = [\n 'add-triple',\n lookup,\n getAttrByFwdIdentName(attrs, etype, 'id').id,\n lookup,\n ...(serverOpts ? [serverOpts] : []),\n ];\n\n // id first so that we don't clobber updates on the lookup field\n return [idTuple].concat(attrTuples);\n}\n\nfunction expandRuleParams({ attrs }, [etype, eid, ruleParams]) {\n const lookup = extractLookup(attrs, etype, eid);\n return [['rule-params', lookup, etype, ruleParams]];\n}\n\nfunction removeIdFromArgs(step) {\n const [op, etype, eid, obj, opts] = step;\n if (!obj) {\n return step;\n }\n const newObj = { ...obj };\n delete newObj.id;\n return [op, etype, eid, newObj, ...(opts ? [opts] : [])];\n}\n\nfunction toTxSteps(ctx, step) {\n const [action, ...args] = removeIdFromArgs(step);\n switch (action) {\n case 'merge':\n return expandDeepMerge(ctx, args);\n case 'create':\n return expandCreate(ctx, args);\n case 'update':\n return expandUpdate(ctx, args);\n case 'link':\n return expandLink(ctx, args);\n case 'unlink':\n return expandUnlink(ctx, args);\n case 'delete':\n return expandDelete(ctx, args);\n case 'ruleParams':\n return expandRuleParams(ctx, args);\n default:\n throw new Error(`unsupported action ${action}`);\n }\n}\n\n// ---------\n// transform\n\nfunction checkedDataTypeOfValueType(valueType) {\n switch (valueType) {\n case 'string':\n case 'date':\n case 'boolean':\n case 'number':\n return valueType;\n default:\n return undefined;\n }\n}\n\nfunction objectPropsFromSchema(schema, etype, label) {\n const attr = schema.entities[etype]?.attrs?.[label];\n if (label === 'id') return null;\n if (!attr) {\n throw new Error(`${etype}.${label} does not exist in your schema`);\n }\n const { unique, indexed } = attr?.config;\n const checkedDataType = checkedDataTypeOfValueType(attr?.valueType);\n\n return {\n 'index?': indexed,\n 'unique?': unique,\n 'checked-data-type': checkedDataType,\n };\n}\n\nfunction createObjectAttr(schema, etype, label, props) {\n const schemaObjectProps = schema\n ? objectPropsFromSchema(schema, etype, label)\n : null;\n const attrId = uuid();\n const fwdIdentId = uuid();\n const fwdIdent = [fwdIdentId, etype, label];\n return {\n id: attrId,\n 'forward-identity': fwdIdent,\n 'value-type': 'blob',\n cardinality: 'one',\n 'unique?': false,\n 'index?': false,\n isUnsynced: true,\n ...(schemaObjectProps || {}),\n ...(props || {}),\n };\n}\n\nfunction findSchemaLink(schema, etype, label) {\n const found = Object.values(schema.links).find((x) => {\n return (\n (x.forward.on === etype && x.forward.label === label) ||\n (x.reverse.on === etype && x.reverse.label === label)\n );\n });\n return found;\n}\n\nfunction refPropsFromSchema(schema, etype, label) {\n const found = findSchemaLink(schema, etype, label);\n if (!found) {\n throw new Error(`Couldn't find the link ${etype}.${label} in your schema`);\n }\n const { forward, reverse } = found;\n return {\n 'forward-identity': [uuid(), forward.on, forward.label],\n 'reverse-identity': [uuid(), reverse.on, reverse.label],\n cardinality: forward.has === 'one' ? 'one' : 'many',\n 'unique?': reverse.has === 'one',\n 'on-delete': forward.onDelete,\n 'on-delete-reverse': reverse.onDelete,\n };\n}\n\nfunction createRefAttr(schema, etype, label, props) {\n const schemaRefProps = schema\n ? refPropsFromSchema(schema, etype, label)\n : null;\n const attrId = uuid();\n const fwdIdent = [uuid(), etype, label];\n const revIdent = [uuid(), label, etype];\n return {\n id: attrId,\n 'forward-identity': fwdIdent,\n 'reverse-identity': revIdent,\n 'value-type': 'ref',\n cardinality: 'many',\n 'unique?': false,\n 'index?': false,\n isUnsynced: true,\n ...(schemaRefProps || {}),\n ...(props || {}),\n };\n}\n\n// Actions that have an object, e.g. not delete\nconst OBJ_ACTIONS = new Set(['create', 'update', 'merge', 'link', 'unlink']);\nconst REF_ACTIONS = new Set(['link', 'unlink']);\nconst UPDATE_ACTIONS = new Set(['create', 'update', 'merge']);\nconst SUPPORTS_LOOKUP_ACTIONS = new Set([\n 'link',\n 'unlink',\n 'create',\n 'update',\n 'merge',\n 'delete',\n 'ruleParams',\n]);\n\nconst lookupProps = { 'unique?': true, 'index?': true };\nconst refLookupProps = { ...lookupProps, cardinality: 'one' };\n\nfunction lookupPairsOfOp(op) {\n const res = [];\n const [action, etype, eid, obj] = op;\n if (!SUPPORTS_LOOKUP_ACTIONS.has(action)) {\n return res;\n }\n\n const eidLookupPair = lookupPairOfEid(eid);\n if (eidLookupPair) {\n res.push({ etype: etype, lookupPair: eidLookupPair });\n }\n if (action === 'link') {\n for (const [label, eidOrEids] of Object.entries(obj)) {\n const eids = Array.isArray(eidOrEids) ? eidOrEids : [eidOrEids];\n for (const linkEid of eids) {\n const linkEidLookupPair = lookupPairOfEid(linkEid);\n if (linkEidLookupPair) {\n res.push({\n etype: etype,\n lookupPair: linkEidLookupPair,\n linkLabel: label,\n });\n }\n }\n }\n }\n return res;\n}\n\nfunction createMissingAttrs({ attrs: existingAttrs, schema }, ops) {\n const [addedIds, attrs, addOps] = [new Set(), { ...existingAttrs }, []];\n function addAttr(attr) {\n attrs[attr.id] = attr;\n addOps.push(['add-attr', attr]);\n addedIds.add(attr.id);\n }\n function addUnsynced(attr) {\n if (attr?.isUnsynced && !addedIds.has(attr.id)) {\n addOps.push(['add-attr', attr]);\n addedIds.add(attr.id);\n }\n }\n\n // Adds attrs needed for a ref lookup\n function addForRef(etype, label) {\n const fwdAttr = getAttrByFwdIdentName(attrs, etype, label);\n const revAttr = getAttrByReverseIdentName(attrs, etype, label);\n addUnsynced(fwdAttr);\n addUnsynced(revAttr);\n if (!fwdAttr && !revAttr) {\n addAttr(createRefAttr(schema, etype, label, refLookupProps));\n }\n }\n\n // Create attrs for lookups if we need to\n // Do these first because otherwise we might add a non-unique attr\n // before we get to it\n for (const op of ops) {\n for (const { etype, lookupPair, linkLabel } of lookupPairsOfOp(op)) {\n const identName = lookupPair[0];\n // We got a link eid that's a lookup, linkLabel is the label of the ident,\n // e.g. `posts` in `link({posts: postIds})`\n if (linkLabel) {\n // Add our ref attr, e.g. users.posts\n addForRef(etype, linkLabel);\n\n // Figure out the link etype so we can make sure we have the attrs\n // for the link lookup\n const fwdAttr = getAttrByFwdIdentName(attrs, etype, linkLabel);\n const revAttr = getAttrByReverseIdentName(attrs, etype, linkLabel);\n addUnsynced(fwdAttr);\n addUnsynced(revAttr);\n const linkEtype =\n fwdAttr?.['reverse-identity']?.[1] ||\n revAttr?.['forward-identity']?.[1] ||\n linkLabel;\n if (isRefLookupIdent(attrs, linkEtype, identName)) {\n addForRef(linkEtype, extractRefLookupFwdName(identName));\n } else {\n const attr = getAttrByFwdIdentName(attrs, linkEtype, identName);\n if (!attr) {\n addAttr(\n createObjectAttr(schema, linkEtype, identName, lookupProps),\n );\n }\n addUnsynced(attr);\n }\n } else if (isRefLookupIdent(attrs, etype, identName)) {\n addForRef(etype, extractRefLookupFwdName(identName));\n } else {\n const attr = getAttrByFwdIdentName(attrs, etype, identName);\n if (!attr) {\n addAttr(createObjectAttr(schema, etype, identName, lookupProps));\n }\n addUnsynced(attr);\n }\n }\n }\n\n // Create object and ref attrs\n for (const op of ops) {\n const [action, etype, eid, obj] = op;\n if (OBJ_ACTIONS.has(action)) {\n const idAttr = getAttrByFwdIdentName(attrs, etype, 'id');\n addUnsynced(idAttr);\n if (!idAttr) {\n addAttr(createObjectAttr(schema, etype, 'id', { 'unique?': true }));\n }\n\n for (const label of Object.keys(obj)) {\n const fwdAttr = getAttrByFwdIdentName(attrs, etype, label);\n addUnsynced(fwdAttr);\n if (UPDATE_ACTIONS.has(action)) {\n if (!fwdAttr) {\n addAttr(\n createObjectAttr(\n schema,\n etype,\n label,\n label === 'id' ? { 'unique?': true } : null,\n ),\n );\n }\n }\n if (REF_ACTIONS.has(action)) {\n const revAttr = getAttrByReverseIdentName(attrs, etype, label);\n if (!fwdAttr && !revAttr) {\n addAttr(createRefAttr(schema, etype, label));\n }\n addUnsynced(revAttr);\n }\n }\n }\n }\n return [attrs, addOps];\n}\n\nexport function transform(ctx, inputChunks) {\n const chunks = Array.isArray(inputChunks) ? inputChunks : [inputChunks];\n const ops = chunks.flatMap((tx) => getOps(tx));\n const [newAttrs, addAttrTxSteps] = createMissingAttrs(ctx, ops);\n const newCtx = { ...ctx, attrs: newAttrs };\n const txSteps = ops.flatMap((op) => toTxSteps(newCtx, op));\n return [...addAttrTxSteps, ...txSteps];\n}\n"]}
@@ -1,8 +1,7 @@
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, attrsStore, pageInfo, aggregate, }: {
3
+ export default function query({ store, pageInfo, aggregate, }: {
4
4
  store: s.Store;
5
- attrsStore: s.AttrsStore;
6
5
  pageInfo: any;
7
6
  aggregate: any;
8
7
  }, q: any): {
@@ -1 +1 @@
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,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;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"}