@instantdb/core 0.22.86-experimental.drewh-explorer-component.20178667850.1 → 0.22.86-experimental.split-store.20178922132.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/dist/commonjs/Reactor.d.ts +20 -6
  2. package/dist/commonjs/Reactor.d.ts.map +1 -1
  3. package/dist/commonjs/Reactor.js +97 -42
  4. package/dist/commonjs/Reactor.js.map +1 -1
  5. package/dist/commonjs/SyncTable.d.ts +4 -1
  6. package/dist/commonjs/SyncTable.d.ts.map +1 -1
  7. package/dist/commonjs/SyncTable.js +35 -37
  8. package/dist/commonjs/SyncTable.js.map +1 -1
  9. package/dist/commonjs/instaml.d.ts +17 -4
  10. package/dist/commonjs/instaml.d.ts.map +1 -1
  11. package/dist/commonjs/instaml.js +105 -76
  12. package/dist/commonjs/instaml.js.map +1 -1
  13. package/dist/commonjs/instaql.d.ts +2 -1
  14. package/dist/commonjs/instaql.d.ts.map +1 -1
  15. package/dist/commonjs/instaql.js +65 -63
  16. package/dist/commonjs/instaql.js.map +1 -1
  17. package/dist/commonjs/reactorTypes.d.ts +29 -0
  18. package/dist/commonjs/reactorTypes.d.ts.map +1 -0
  19. package/dist/commonjs/reactorTypes.js +3 -0
  20. package/dist/commonjs/reactorTypes.js.map +1 -0
  21. package/dist/commonjs/store.d.ts +44 -21
  22. package/dist/commonjs/store.d.ts.map +1 -1
  23. package/dist/commonjs/store.js +164 -69
  24. package/dist/commonjs/store.js.map +1 -1
  25. package/dist/esm/Reactor.d.ts +20 -6
  26. package/dist/esm/Reactor.d.ts.map +1 -1
  27. package/dist/esm/Reactor.js +98 -43
  28. package/dist/esm/Reactor.js.map +1 -1
  29. package/dist/esm/SyncTable.d.ts +4 -1
  30. package/dist/esm/SyncTable.d.ts.map +1 -1
  31. package/dist/esm/SyncTable.js +35 -37
  32. package/dist/esm/SyncTable.js.map +1 -1
  33. package/dist/esm/instaml.d.ts +17 -4
  34. package/dist/esm/instaml.d.ts.map +1 -1
  35. package/dist/esm/instaml.js +102 -71
  36. package/dist/esm/instaml.js.map +1 -1
  37. package/dist/esm/instaql.d.ts +2 -1
  38. package/dist/esm/instaql.d.ts.map +1 -1
  39. package/dist/esm/instaql.js +65 -63
  40. package/dist/esm/instaql.js.map +1 -1
  41. package/dist/esm/reactorTypes.d.ts +29 -0
  42. package/dist/esm/reactorTypes.d.ts.map +1 -0
  43. package/dist/esm/reactorTypes.js +2 -0
  44. package/dist/esm/reactorTypes.js.map +1 -0
  45. package/dist/esm/store.d.ts +44 -21
  46. package/dist/esm/store.d.ts.map +1 -1
  47. package/dist/esm/store.js +161 -69
  48. package/dist/esm/store.js.map +1 -1
  49. package/dist/standalone/index.js +1536 -1364
  50. package/dist/standalone/index.umd.cjs +3 -3
  51. package/package.json +2 -2
  52. package/src/Reactor.js +126 -58
  53. package/src/SyncTable.ts +85 -45
  54. package/src/{instaml.js → instaml.ts} +195 -95
  55. package/src/instaql.ts +86 -60
  56. package/src/reactorTypes.ts +32 -0
  57. package/src/store.ts +209 -79
@@ -2,24 +2,14 @@ import { InstantDBAttr } from './attrTypes.ts';
2
2
  import { LinkIndex } from './utils/linkIndex.ts';
3
3
  type Triple = [string, string, any, number];
4
4
  type Attrs = Record<string, InstantDBAttr>;
5
- type AttrIndexes = {
6
- blobAttrs: Map<string, Map<string, InstantDBAttr>>;
7
- primaryKeys: Map<string, InstantDBAttr>;
8
- forwardIdents: Map<string, Map<string, InstantDBAttr>>;
9
- revIdents: Map<string, Map<string, InstantDBAttr>>;
10
- };
11
5
  export type Store = {
12
6
  eav: Map<string, Map<string, Map<any, Triple>>>;
13
7
  aev: Map<string, Map<string, Map<any, Triple>>>;
14
8
  vae: Map<any, Map<string, Map<string, Triple>>>;
15
9
  useDateObjects: boolean | null;
16
- attrs: Attrs;
17
- attrIndexes: AttrIndexes;
18
10
  cardinalityInference: boolean | null;
19
- linkIndex: LinkIndex | null;
20
- __type: 'store';
21
11
  };
22
- export type StoreJson = {
12
+ type StoreJsonVersion0 = {
23
13
  __type: 'store';
24
14
  attrs: Attrs;
25
15
  triples: Triple[];
@@ -27,22 +17,55 @@ export type StoreJson = {
27
17
  linkIndex: LinkIndex | null;
28
18
  useDateObjects: boolean | null;
29
19
  };
20
+ type StoreJsonVersion1 = {
21
+ triples: Triple[];
22
+ cardinalityInference: boolean | null;
23
+ useDateObjects: boolean | null;
24
+ version: 1;
25
+ };
26
+ export type StoreJson = StoreJsonVersion0 | StoreJsonVersion1;
27
+ export type AttrsStoreJson = {
28
+ attrs: Attrs;
29
+ linkIndex: LinkIndex | null;
30
+ };
31
+ export declare class AttrsStore {
32
+ attrs: Attrs;
33
+ linkIndex: LinkIndex | null;
34
+ private _blobAttrs;
35
+ private _primaryKeys;
36
+ private _forwardIdents;
37
+ private _revIdents;
38
+ constructor(attrs: Attrs, linkIndex: LinkIndex | null);
39
+ resetAttrIndexes(): void;
40
+ addAttr(attr: InstantDBAttr): void;
41
+ deleteAttr(attrId: string): void;
42
+ updateAttr(partialAttr: Partial<InstantDBAttr> & {
43
+ id: string;
44
+ }): void;
45
+ getAttr(id: string): InstantDBAttr | undefined;
46
+ get blobAttrs(): Map<string, Map<string, InstantDBAttr>>;
47
+ get primaryKeys(): Map<string, InstantDBAttr>;
48
+ get forwardIdents(): Map<string, Map<string, InstantDBAttr>>;
49
+ get revIdents(): Map<string, Map<string, InstantDBAttr>>;
50
+ toJSON(): AttrsStoreJson;
51
+ }
30
52
  export declare function isBlob(attr: InstantDBAttr): boolean;
31
53
  export declare function getInMap(obj: any, path: any): any;
32
- export declare function toJSON(store: Store): StoreJson;
33
- export declare function fromJSON(storeJSON: StoreJson): Store;
54
+ export declare function toJSON(store: Store): StoreJsonVersion1;
55
+ export declare function fromJSON(attrsStore: AttrsStore, storeJSON: StoreJson): Store;
56
+ export declare function attrsStoreFromJSON(attrsStoreJSON: AttrsStoreJson | null, storeJSON: StoreJson | null): AttrsStore | undefined;
34
57
  export declare function hasTriple(store: Store, [e, a, v]: [string, string, any]): boolean;
35
58
  export declare function hasEntity(store: Store, e: string): boolean;
36
- export declare function createStore(attrs: Record<string, InstantDBAttr>, triples: Triple[], enableCardinalityInference: boolean | null, linkIndex: LinkIndex | null, useDateObjects: boolean | null): Store;
37
- export declare function retractTriple(store: Store, rawTriple: Triple): void;
38
- export declare function addTriple(store: Store, rawTriple: Triple): void;
59
+ export declare function createStore(attrsStore: AttrsStore, triples: Triple[], enableCardinalityInference: boolean | null, useDateObjects: boolean | null): Store;
60
+ export declare function retractTriple(store: Store, attrsStore: AttrsStore, rawTriple: Triple): void;
61
+ export declare function addTriple(store: Store, attrsStore: AttrsStore, rawTriple: Triple): void;
39
62
  export declare function allMapValues(m: any, level: any, res?: any[]): any[];
40
63
  export declare function getTriples(store: any, [e, a, v]: [any, any, any]): any[];
41
64
  export declare function getAsObject(store: Store, attrs: Map<string, InstantDBAttr> | undefined, e: string): {};
42
- export declare function getAttrByFwdIdentName(store: Store, inputEtype: string, inputLabel: string): InstantDBAttr | undefined;
43
- export declare function getAttrByReverseIdentName(store: Store, inputEtype: string, inputLabel: string): InstantDBAttr | undefined;
44
- export declare function getBlobAttrs(store: Store, etype: string): Map<string, InstantDBAttr> | undefined;
45
- export declare function getPrimaryKeyAttr(store: Store, etype: string): InstantDBAttr | undefined;
46
- export declare function transact(store: Store, txSteps: any): Store;
65
+ export declare function getAttrByFwdIdentName(attrsStore: AttrsStore, inputEtype: string, inputLabel: string): InstantDBAttr | undefined;
66
+ export declare function getAttrByReverseIdentName(attrsStore: AttrsStore, inputEtype: string, inputLabel: string): InstantDBAttr | undefined;
67
+ export declare function getBlobAttrs(attrsStore: AttrsStore, etype: string): Map<string, InstantDBAttr> | undefined;
68
+ export declare function getPrimaryKeyAttr(attrsStore: AttrsStore, etype: string): InstantDBAttr | undefined;
69
+ export declare function transact(store: Store, attrsStore: AttrsStore, txSteps: any): Store;
47
70
  export {};
48
71
  //# sourceMappingURL=store.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/store.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,KAAK,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;AAC5C,KAAK,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;AAS3C,MAAM,MAAM,KAAK,GAAG;IAClB,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAChD,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAChD,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAChD,cAAc,EAAE,OAAO,GAAG,IAAI,CAAC;IAC/B,oBAAoB,EAAE,OAAO,GAAG,IAAI,CAAC;CACtC,CAAC;AAEF,KAAK,iBAAiB,GAAG;IACvB,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,KAAK,CAAC;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,oBAAoB,EAAE,OAAO,GAAG,IAAI,CAAC;IACrC,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;IAC5B,cAAc,EAAE,OAAO,GAAG,IAAI,CAAC;CAChC,CAAC;AAEF,KAAK,iBAAiB,GAAG;IACvB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,oBAAoB,EAAE,OAAO,GAAG,IAAI,CAAC;IACrC,cAAc,EAAE,OAAO,GAAG,IAAI,CAAC;IAC/B,OAAO,EAAE,CAAC,CAAC;CACZ,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG,iBAAiB,GAAG,iBAAiB,CAAC;AAE9D,MAAM,MAAM,cAAc,GAAG;IAC3B,KAAK,EAAE,KAAK,CAAC;IACb,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;CAC7B,CAAC;AAEF,qBAAa,UAAU;IACd,KAAK,EAAE,KAAK,CAAC;IACb,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;IACnC,OAAO,CAAC,UAAU,CAAwD;IAC1E,OAAO,CAAC,YAAY,CAA2C;IAC/D,OAAO,CAAC,cAAc,CAAwD;IAC9E,OAAO,CAAC,UAAU,CAAwD;gBAC9D,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI;IAM9C,gBAAgB;IAOhB,OAAO,CAAC,IAAI,EAAE,aAAa;IAK3B,UAAU,CAAC,MAAM,EAAE,MAAM;IAKzB,UAAU,CAAC,WAAW,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE;IAO/D,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAMrD,IAAI,SAAS,IAAI,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAavD;IAED,IAAI,WAAW,IAAI,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAc5C;IAED,IAAI,aAAa,IAAI,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAa3D;IAED,IAAI,SAAS,IAAI,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAevD;IAEM,MAAM,IAAI,cAAc;CAGhC;AAUD,wBAAgB,MAAM,CAAC,IAAI,EAAE,aAAa,WAEzC;AAMD,wBAAgB,QAAQ,CAAC,GAAG,KAAA,EAAE,IAAI,KAAA,OAEjC;AAyFD,wBAAgB,MAAM,CAAC,KAAK,EAAE,KAAK,GAAG,iBAAiB,CAOtD;AAED,wBAAgB,QAAQ,CAAC,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,GAAG,KAAK,CAO5E;AAED,wBAAgB,kBAAkB,CAChC,cAAc,EAAE,cAAc,GAAG,IAAI,EACrC,SAAS,EAAE,SAAS,GAAG,IAAI,GAC1B,UAAU,GAAG,SAAS,CAOxB;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,WAEvE;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,WAEhD;AAED,wBAAgB,WAAW,CACzB,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,MAAM,EAAE,EACjB,0BAA0B,EAAE,OAAO,GAAG,IAAI,EAC1C,cAAc,EAAE,OAAO,GAAG,IAAI,GAC7B,KAAK,CASP;AA2DD,wBAAgB,aAAa,CAC3B,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,MAAM,GAChB,IAAI,CAgBN;AAwCD,wBAAgB,SAAS,CACvB,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,MAAM,QAsClB;AAqLD,wBAAgB,YAAY,CAAC,CAAC,KAAA,EAAE,KAAK,KAAA,EAAE,GAAG,GAAE,GAAG,EAAO,SAkBrD;AAsED,wBAAgB,UAAU,CAAC,KAAK,KAAA,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,iBAAA,SAyD1C;AAED,wBAAgB,WAAW,CACzB,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,SAAS,EAC7C,CAAC,EAAE,MAAM,MAiBV;AAED,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,6BAGnB;AAED,wBAAgB,yBAAyB,CACvC,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,6BAGnB;AAED,wBAAgB,YAAY,CAAC,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,0CAEjE;AAED,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,6BAMtE;AAyBD,wBAAgB,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,KAAA,SA4CrE"}
package/dist/esm/store.js CHANGED
@@ -1,6 +1,102 @@
1
1
  import { create } from 'mutative';
2
2
  import { immutableDeepMerge } from './utils/object.js';
3
3
  import { coerceToDate } from "./utils/dates.js";
4
+ export class AttrsStore {
5
+ constructor(attrs, linkIndex) {
6
+ this._blobAttrs = null;
7
+ this._primaryKeys = null;
8
+ this._forwardIdents = null;
9
+ this._revIdents = null;
10
+ console.log('attrs init', new Error('trace'));
11
+ this.attrs = attrs;
12
+ this.linkIndex = linkIndex;
13
+ }
14
+ resetAttrIndexes() {
15
+ this._blobAttrs = null;
16
+ this._primaryKeys = null;
17
+ this._forwardIdents = null;
18
+ this._revIdents = null;
19
+ }
20
+ addAttr(attr) {
21
+ this.attrs[attr.id] = attr;
22
+ this.resetAttrIndexes();
23
+ }
24
+ deleteAttr(attrId) {
25
+ delete this.attrs[attrId];
26
+ this.resetAttrIndexes();
27
+ }
28
+ updateAttr(partialAttr) {
29
+ const attr = this.attrs[partialAttr.id];
30
+ if (!attr)
31
+ return;
32
+ this.attrs[partialAttr.id] = Object.assign(Object.assign({}, attr), partialAttr);
33
+ this.resetAttrIndexes();
34
+ }
35
+ getAttr(id) {
36
+ return this.attrs[id];
37
+ }
38
+ // XXX: Might be better to create all of the indexes at once as soon as someone
39
+ // requests one index
40
+ get blobAttrs() {
41
+ if (this._blobAttrs) {
42
+ return this._blobAttrs;
43
+ }
44
+ console.log('blobAttrs');
45
+ this._blobAttrs = new Map();
46
+ for (const attr of Object.values(this.attrs)) {
47
+ if (isBlob(attr)) {
48
+ const [_, fwdEtype, fwdLabel] = attr['forward-identity'];
49
+ setInMap(this.blobAttrs, [fwdEtype, fwdLabel], attr);
50
+ }
51
+ }
52
+ return this._blobAttrs;
53
+ }
54
+ get primaryKeys() {
55
+ if (this._primaryKeys) {
56
+ return this._primaryKeys;
57
+ }
58
+ console.log('primayKeys');
59
+ this._primaryKeys = new Map();
60
+ for (const attr of Object.values(this.attrs)) {
61
+ if (attr['primary?']) {
62
+ const [_, fwdEtype] = attr['forward-identity'];
63
+ setInMap(this._primaryKeys, [fwdEtype], attr);
64
+ }
65
+ }
66
+ return this._primaryKeys;
67
+ }
68
+ get forwardIdents() {
69
+ if (this._forwardIdents) {
70
+ return this._forwardIdents;
71
+ }
72
+ console.log('fwdIdents');
73
+ this._forwardIdents = new Map();
74
+ for (const attr of Object.values(this.attrs)) {
75
+ const fwdIdent = attr['forward-identity'];
76
+ const [_, fwdEtype, fwdLabel] = fwdIdent;
77
+ setInMap(this._forwardIdents, [fwdEtype, fwdLabel], attr);
78
+ }
79
+ return this._forwardIdents;
80
+ }
81
+ get revIdents() {
82
+ if (this._revIdents) {
83
+ return this._revIdents;
84
+ }
85
+ console.log('revIdents');
86
+ this._revIdents = new Map();
87
+ for (const attr of Object.values(this.attrs)) {
88
+ const revIdent = attr['reverse-identity'];
89
+ if (revIdent) {
90
+ const [_, revEtype, revLabel] = revIdent;
91
+ setInMap(this._revIdents, [revEtype, revLabel], attr);
92
+ }
93
+ }
94
+ return this._revIdents;
95
+ }
96
+ toJSON() {
97
+ return { attrs: this.attrs, linkIndex: this.linkIndex };
98
+ }
99
+ }
4
100
  function hasEA(attr) {
5
101
  return attr['cardinality'] === 'one';
6
102
  }
@@ -46,15 +142,15 @@ function setInMap(m, path, value) {
46
142
  function isDateAttr(attr) {
47
143
  return attr['checked-data-type'] === 'date';
48
144
  }
49
- function createTripleIndexes(attrs, triples, useDateObjects) {
145
+ function createTripleIndexes(attrsStore, triples, useDateObjects) {
50
146
  const eav = new Map();
51
147
  const aev = new Map();
52
148
  const vae = new Map();
53
149
  for (const triple of triples) {
54
- let [eid, aid, v, t] = triple;
55
- const attr = getAttr(attrs, aid);
150
+ let [eid, aid, v] = triple;
151
+ const attr = attrsStore.getAttr(aid);
56
152
  if (!attr) {
57
- console.warn('no such attr', eid, attrs);
153
+ console.warn('no such attr', aid, eid);
58
154
  continue;
59
155
  }
60
156
  if (attr['checked-data-type'] === 'date' && useDateObjects) {
@@ -94,16 +190,22 @@ function createAttrIndexes(attrs) {
94
190
  }
95
191
  export function toJSON(store) {
96
192
  return {
97
- __type: store.__type,
98
- attrs: store.attrs,
99
193
  triples: allMapValues(store.eav, 3),
100
194
  cardinalityInference: store.cardinalityInference,
101
- linkIndex: store.linkIndex,
102
195
  useDateObjects: store.useDateObjects,
196
+ version: 1,
103
197
  };
104
198
  }
105
- export function fromJSON(storeJSON) {
106
- return createStore(storeJSON.attrs, storeJSON.triples, storeJSON.cardinalityInference, storeJSON.linkIndex, storeJSON.useDateObjects);
199
+ export function fromJSON(attrsStore, storeJSON) {
200
+ return createStore(attrsStore, storeJSON.triples, storeJSON.cardinalityInference, storeJSON.useDateObjects);
201
+ }
202
+ export function attrsStoreFromJSON(attrsStoreJSON, storeJSON) {
203
+ if (attrsStoreJSON) {
204
+ return new AttrsStore(attrsStoreJSON.attrs, attrsStoreJSON.linkIndex);
205
+ }
206
+ if (storeJSON && '__type' in storeJSON) {
207
+ return new AttrsStore(storeJSON.attrs, storeJSON.linkIndex);
208
+ }
107
209
  }
108
210
  export function hasTriple(store, [e, a, v]) {
109
211
  return getInMap(store.eav, [e, a, v]) !== undefined;
@@ -111,17 +213,10 @@ export function hasTriple(store, [e, a, v]) {
111
213
  export function hasEntity(store, e) {
112
214
  return getInMap(store.eav, [e]) !== undefined;
113
215
  }
114
- function resetAttrIndexes(store) {
115
- store.attrIndexes = createAttrIndexes(store.attrs);
116
- }
117
- export function createStore(attrs, triples, enableCardinalityInference, linkIndex, useDateObjects) {
118
- const store = createTripleIndexes(attrs, triples, useDateObjects);
119
- store.useDateObjects = useDateObjects;
120
- store.attrs = attrs;
121
- store.attrIndexes = createAttrIndexes(attrs);
216
+ export function createStore(attrsStore, triples, enableCardinalityInference, useDateObjects) {
217
+ const store = createTripleIndexes(attrsStore, triples, useDateObjects);
122
218
  store.cardinalityInference = enableCardinalityInference;
123
- store.linkIndex = linkIndex;
124
- store.__type = 'store';
219
+ store.useDateObjects = useDateObjects;
125
220
  return store;
126
221
  }
127
222
  // We may have local triples with lookup refs in them,
@@ -178,13 +273,13 @@ function resolveLookupRefs(store, triple) {
178
273
  return [eid, ...rest];
179
274
  }
180
275
  }
181
- export function retractTriple(store, rawTriple) {
276
+ export function retractTriple(store, attrsStore, rawTriple) {
182
277
  const triple = resolveLookupRefs(store, rawTriple);
183
278
  if (!triple) {
184
279
  return;
185
280
  }
186
281
  const [eid, aid, v] = triple;
187
- const attr = getAttr(store.attrs, aid);
282
+ const attr = attrsStore.getAttr(aid);
188
283
  if (!attr) {
189
284
  return;
190
285
  }
@@ -225,14 +320,14 @@ function getCreatedAt(store, attr, triple) {
225
320
  */
226
321
  return createdAt || Date.now() * 10 + _seed++;
227
322
  }
228
- export function addTriple(store, rawTriple) {
323
+ export function addTriple(store, attrsStore, rawTriple) {
229
324
  var _a;
230
325
  const triple = resolveLookupRefs(store, rawTriple);
231
326
  if (!triple) {
232
327
  return;
233
328
  }
234
329
  let [eid, aid, v] = triple;
235
- const attr = getAttr(store.attrs, aid);
330
+ const attr = attrsStore.getAttr(aid);
236
331
  if (!attr) {
237
332
  // (XXX): Due to the way we're handling attrs, it's
238
333
  // possible to enter a state where we receive a triple without an attr.
@@ -261,14 +356,14 @@ export function addTriple(store, rawTriple) {
261
356
  setInMap(store.vae, [v, aid, eid], enhancedTriple);
262
357
  }
263
358
  }
264
- function mergeTriple(store, rawTriple) {
359
+ function mergeTriple(store, attrsStore, rawTriple) {
265
360
  var _a;
266
361
  const triple = resolveLookupRefs(store, rawTriple);
267
362
  if (!triple) {
268
363
  return;
269
364
  }
270
365
  const [eid, aid, update] = triple;
271
- const attr = getAttr(store.attrs, aid);
366
+ const attr = attrsStore.getAttr(aid);
272
367
  if (!attr)
273
368
  return;
274
369
  if (!isBlob(attr))
@@ -289,7 +384,7 @@ function mergeTriple(store, rawTriple) {
289
384
  ];
290
385
  setInMap(store.eav, [eid, aid], new Map([[updatedValue, enhancedTriple]]));
291
386
  }
292
- function deleteEntity(store, args) {
387
+ function deleteEntity(store, attrsStore, args) {
293
388
  var _a, _b;
294
389
  const [lookup, etype] = args;
295
390
  const triple = resolveLookupRefs(store, [lookup]);
@@ -301,10 +396,10 @@ function deleteEntity(store, args) {
301
396
  const eMap = store.eav.get(id);
302
397
  if (eMap) {
303
398
  for (const a of eMap.keys()) {
304
- const attr = store.attrs[a];
399
+ const attr = attrsStore.getAttr(a);
305
400
  // delete cascade refs
306
401
  if (attr && attr['on-delete-reverse'] === 'cascade') {
307
- allMapValues(eMap.get(a), 1).forEach(([e, a, v]) => { var _a; return deleteEntity(store, [v, (_a = attr['reverse-identity']) === null || _a === void 0 ? void 0 : _a[1]]); });
402
+ allMapValues(eMap.get(a), 1).forEach(([e, a, v]) => { var _a; return deleteEntity(store, attrsStore, [v, (_a = attr['reverse-identity']) === null || _a === void 0 ? void 0 : _a[1]]); });
308
403
  }
309
404
  if (
310
405
  // Fall back to deleting everything if we've rehydrated tx-steps from
@@ -329,7 +424,7 @@ function deleteEntity(store, args) {
329
424
  vaeTriples.forEach((triple) => {
330
425
  var _a, _b, _c;
331
426
  const [e, a, v] = triple;
332
- const attr = store.attrs[a];
427
+ const attr = attrsStore.getAttr(a);
333
428
  if (!etype || !attr || ((_a = attr['reverse-identity']) === null || _a === void 0 ? void 0 : _a[1]) === etype) {
334
429
  deleteInMap(store.eav, [e, a, v]);
335
430
  deleteInMap(store.aev, [a, e, v]);
@@ -338,7 +433,7 @@ function deleteEntity(store, args) {
338
433
  if (attr &&
339
434
  attr['on-delete'] === 'cascade' &&
340
435
  ((_b = attr['reverse-identity']) === null || _b === void 0 ? void 0 : _b[1]) === etype) {
341
- deleteEntity(store, [e, (_c = attr['forward-identity']) === null || _c === void 0 ? void 0 : _c[1]]);
436
+ deleteEntity(store, attrsStore, [e, (_c = attr['forward-identity']) === null || _c === void 0 ? void 0 : _c[1]]);
342
437
  }
343
438
  });
344
439
  }
@@ -354,58 +449,55 @@ function deleteEntity(store, args) {
354
449
  // * We could batch this reset at the end
355
450
  // * We could add an ave index for all triples, so removing the
356
451
  // right triples is easy and fast.
357
- function resetIndexMap(store, newTriples) {
358
- const newIndexMap = createTripleIndexes(store.attrs, newTriples, store.useDateObjects);
452
+ function resetIndexMap(store, attrsStore, newTriples) {
453
+ const newIndexMap = createTripleIndexes(attrsStore, newTriples, store.useDateObjects);
359
454
  Object.keys(newIndexMap).forEach((key) => {
360
455
  store[key] = newIndexMap[key];
361
456
  });
362
457
  }
363
- function addAttr(store, [attr]) {
364
- store.attrs[attr.id] = attr;
365
- resetAttrIndexes(store);
458
+ function addAttr(attrsStore, [attr]) {
459
+ attrsStore.addAttr(attr);
366
460
  }
367
461
  function getAllTriples(store) {
368
462
  return allMapValues(store.eav, 3);
369
463
  }
370
- function deleteAttr(store, [id]) {
371
- if (!store.attrs[id])
464
+ function deleteAttr(store, attrsStore, [id]) {
465
+ if (!attrsStore.getAttr(id))
372
466
  return;
373
467
  const newTriples = getAllTriples(store).filter(([_, aid]) => aid !== id);
374
- delete store.attrs[id];
375
- resetAttrIndexes(store);
376
- resetIndexMap(store, newTriples);
468
+ attrsStore.deleteAttr(id);
469
+ resetIndexMap(store, attrsStore, newTriples);
377
470
  }
378
- function updateAttr(store, [partialAttr]) {
379
- const attr = store.attrs[partialAttr.id];
471
+ function updateAttr(store, attrsStore, [partialAttr]) {
472
+ const attr = attrsStore.getAttr(partialAttr.id);
380
473
  if (!attr)
381
474
  return;
382
- store.attrs[partialAttr.id] = Object.assign(Object.assign({}, attr), partialAttr);
383
- resetAttrIndexes(store);
384
- resetIndexMap(store, getAllTriples(store));
475
+ attrsStore.updateAttr(partialAttr);
476
+ resetIndexMap(store, attrsStore, getAllTriples(store));
385
477
  }
386
- function applyTxStep(store, txStep) {
478
+ function applyTxStep(store, attrsStore, txStep) {
387
479
  const [action, ...args] = txStep;
388
480
  switch (action) {
389
481
  case 'add-triple':
390
- addTriple(store, args);
482
+ addTriple(store, attrsStore, args);
391
483
  break;
392
484
  case 'deep-merge-triple':
393
- mergeTriple(store, args);
485
+ mergeTriple(store, attrsStore, args);
394
486
  break;
395
487
  case 'retract-triple':
396
- retractTriple(store, args);
488
+ retractTriple(store, attrsStore, args);
397
489
  break;
398
490
  case 'delete-entity':
399
- deleteEntity(store, args);
491
+ deleteEntity(store, attrsStore, args);
400
492
  break;
401
493
  case 'add-attr':
402
- addAttr(store, args);
494
+ addAttr(attrsStore, args);
403
495
  break;
404
496
  case 'delete-attr':
405
- deleteAttr(store, args);
497
+ deleteAttr(store, attrsStore, args);
406
498
  break;
407
499
  case 'update-attr':
408
- updateAttr(store, args);
500
+ updateAttr(store, attrsStore, args);
409
501
  break;
410
502
  case 'restore-attr':
411
503
  break;
@@ -568,32 +660,32 @@ export function getAsObject(store, attrs, e) {
568
660
  }
569
661
  return obj;
570
662
  }
571
- export function getAttrByFwdIdentName(store, inputEtype, inputLabel) {
663
+ export function getAttrByFwdIdentName(attrsStore, inputEtype, inputLabel) {
572
664
  var _a;
573
- return (_a = store.attrIndexes.forwardIdents.get(inputEtype)) === null || _a === void 0 ? void 0 : _a.get(inputLabel);
665
+ return (_a = attrsStore.forwardIdents.get(inputEtype)) === null || _a === void 0 ? void 0 : _a.get(inputLabel);
574
666
  }
575
- export function getAttrByReverseIdentName(store, inputEtype, inputLabel) {
667
+ export function getAttrByReverseIdentName(attrsStore, inputEtype, inputLabel) {
576
668
  var _a;
577
- return (_a = store.attrIndexes.revIdents.get(inputEtype)) === null || _a === void 0 ? void 0 : _a.get(inputLabel);
669
+ return (_a = attrsStore.revIdents.get(inputEtype)) === null || _a === void 0 ? void 0 : _a.get(inputLabel);
578
670
  }
579
- export function getBlobAttrs(store, etype) {
580
- return store.attrIndexes.blobAttrs.get(etype);
671
+ export function getBlobAttrs(attrsStore, etype) {
672
+ return attrsStore.blobAttrs.get(etype);
581
673
  }
582
- export function getPrimaryKeyAttr(store, etype) {
674
+ export function getPrimaryKeyAttr(attrsStore, etype) {
583
675
  var _a;
584
- const fromPrimary = store.attrIndexes.primaryKeys.get(etype);
676
+ const fromPrimary = attrsStore.primaryKeys.get(etype);
585
677
  if (fromPrimary) {
586
678
  return fromPrimary;
587
679
  }
588
- return (_a = store.attrIndexes.forwardIdents.get(etype)) === null || _a === void 0 ? void 0 : _a.get('id');
680
+ return (_a = attrsStore.forwardIdents.get(etype)) === null || _a === void 0 ? void 0 : _a.get('id');
589
681
  }
590
- function findTriple(store, rawTriple) {
682
+ function findTriple(store, attrsStore, rawTriple) {
591
683
  const triple = resolveLookupRefs(store, rawTriple);
592
684
  if (!triple) {
593
685
  return;
594
686
  }
595
687
  const [eid, aid, v] = triple;
596
- const attr = getAttr(store.attrs, aid);
688
+ const attr = attrsStore.getAttr(aid);
597
689
  if (!attr) {
598
690
  // (XXX): Due to the way we're handling attrs, it's
599
691
  // possible to enter a state where we receive a triple without an attr.
@@ -603,7 +695,7 @@ function findTriple(store, rawTriple) {
603
695
  }
604
696
  return getInMap(store.eav, [eid, aid]);
605
697
  }
606
- export function transact(store, txSteps) {
698
+ export function transact(store, attrsStore, txSteps) {
607
699
  const txStepsFiltered = txSteps.filter(([action, eid, attrId, value, opts]) => {
608
700
  if (action !== 'add-triple' && action !== 'deep-merge-triple') {
609
701
  return true;
@@ -613,10 +705,10 @@ export function transact(store, txSteps) {
613
705
  return true;
614
706
  }
615
707
  let exists = false;
616
- const attr = getAttr(store.attrs, attrId);
708
+ const attr = attrsStore.getAttr(attrId);
617
709
  if (attr) {
618
- const idAttr = getPrimaryKeyAttr(store, attr['forward-identity'][1]);
619
- exists = !!findTriple(store, [
710
+ const idAttr = getPrimaryKeyAttr(attrsStore, attr['forward-identity'][1]);
711
+ exists = !!findTriple(store, attrsStore, [
620
712
  eid,
621
713
  idAttr === null || idAttr === void 0 ? void 0 : idAttr.id,
622
714
  eid,
@@ -632,7 +724,7 @@ export function transact(store, txSteps) {
632
724
  });
633
725
  return create(store, (draft) => {
634
726
  txStepsFiltered.forEach((txStep) => {
635
- applyTxStep(draft, txStep);
727
+ applyTxStep(draft, attrsStore, txStep);
636
728
  });
637
729
  });
638
730
  }