@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.
- package/dist/commonjs/Reactor.d.ts +6 -20
- package/dist/commonjs/Reactor.d.ts.map +1 -1
- package/dist/commonjs/Reactor.js +42 -97
- package/dist/commonjs/Reactor.js.map +1 -1
- package/dist/commonjs/SyncTable.d.ts +1 -4
- package/dist/commonjs/SyncTable.d.ts.map +1 -1
- package/dist/commonjs/SyncTable.js +37 -35
- package/dist/commonjs/SyncTable.js.map +1 -1
- package/dist/commonjs/instaml.d.ts +4 -17
- package/dist/commonjs/instaml.d.ts.map +1 -1
- package/dist/commonjs/instaml.js +76 -105
- package/dist/commonjs/instaml.js.map +1 -1
- package/dist/commonjs/instaql.d.ts +1 -2
- package/dist/commonjs/instaql.d.ts.map +1 -1
- package/dist/commonjs/instaql.js +63 -65
- package/dist/commonjs/instaql.js.map +1 -1
- package/dist/commonjs/store.d.ts +21 -44
- package/dist/commonjs/store.d.ts.map +1 -1
- package/dist/commonjs/store.js +69 -164
- package/dist/commonjs/store.js.map +1 -1
- package/dist/esm/Reactor.d.ts +6 -20
- package/dist/esm/Reactor.d.ts.map +1 -1
- package/dist/esm/Reactor.js +43 -98
- package/dist/esm/Reactor.js.map +1 -1
- package/dist/esm/SyncTable.d.ts +1 -4
- package/dist/esm/SyncTable.d.ts.map +1 -1
- package/dist/esm/SyncTable.js +37 -35
- package/dist/esm/SyncTable.js.map +1 -1
- package/dist/esm/instaml.d.ts +4 -17
- package/dist/esm/instaml.d.ts.map +1 -1
- package/dist/esm/instaml.js +71 -102
- package/dist/esm/instaml.js.map +1 -1
- package/dist/esm/instaql.d.ts +1 -2
- package/dist/esm/instaql.d.ts.map +1 -1
- package/dist/esm/instaql.js +63 -65
- package/dist/esm/instaql.js.map +1 -1
- package/dist/esm/store.d.ts +21 -44
- package/dist/esm/store.d.ts.map +1 -1
- package/dist/esm/store.js +69 -161
- package/dist/esm/store.js.map +1 -1
- package/dist/standalone/index.js +1364 -1536
- package/dist/standalone/index.umd.cjs +3 -3
- package/package.json +2 -2
- package/src/Reactor.js +58 -126
- package/src/SyncTable.ts +45 -85
- package/src/{instaml.ts → instaml.js} +95 -195
- package/src/instaql.ts +60 -86
- package/src/store.ts +79 -209
- package/dist/commonjs/reactorTypes.d.ts +0 -29
- package/dist/commonjs/reactorTypes.d.ts.map +0 -1
- package/dist/commonjs/reactorTypes.js +0 -3
- package/dist/commonjs/reactorTypes.js.map +0 -1
- package/dist/esm/reactorTypes.d.ts +0 -29
- package/dist/esm/reactorTypes.d.ts.map +0 -1
- package/dist/esm/reactorTypes.js +0 -2
- package/dist/esm/reactorTypes.js.map +0 -1
- package/src/reactorTypes.ts +0 -32
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/store.ts"],"names":[],"mappings":"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","sourcesContent":["import { create } from 'mutative';\nimport { immutableDeepMerge } from './utils/object.js';\nimport { coerceToDate } from './utils/dates.ts';\nimport { InstantDBAttr } from './attrTypes.ts';\nimport { LinkIndex } from './utils/linkIndex.ts';\n\ntype Triple = [string, string, any, number];\ntype Attrs = Record<string, InstantDBAttr>;\n\ninterface AttrIndexes {\n blobAttrs: Map<string, Map<string, InstantDBAttr>>;\n primaryKeys: Map<string, InstantDBAttr>;\n forwardIdents: Map<string, Map<string, InstantDBAttr>>;\n revIdents: Map<string, Map<string, InstantDBAttr>>;\n}\n\nexport type Store = {\n eav: Map<string, Map<string, Map<any, Triple>>>;\n aev: Map<string, Map<string, Map<any, Triple>>>;\n vae: Map<any, Map<string, Map<string, Triple>>>;\n useDateObjects: boolean | null;\n cardinalityInference: boolean | null;\n};\n\ntype StoreJsonVersion0 = {\n __type: 'store';\n attrs: Attrs;\n triples: Triple[];\n cardinalityInference: boolean | null;\n linkIndex: LinkIndex | null;\n useDateObjects: boolean | null;\n};\n\ntype StoreJsonVersion1 = {\n triples: Triple[];\n cardinalityInference: boolean | null;\n useDateObjects: boolean | null;\n version: 1;\n};\n\nexport type StoreJson = StoreJsonVersion0 | StoreJsonVersion1;\n\nexport type AttrsStoreJson = {\n attrs: Attrs;\n linkIndex: LinkIndex | null;\n};\n\nexport class AttrsStore {\n public attrs: Attrs;\n public linkIndex: LinkIndex | null;\n private _blobAttrs: Map<string, Map<string, InstantDBAttr>> | null = null;\n private _primaryKeys: Map<string, InstantDBAttr> | null = null;\n private _forwardIdents: Map<string, Map<string, InstantDBAttr>> | null = null;\n private _revIdents: Map<string, Map<string, InstantDBAttr>> | null = null;\n constructor(attrs: Attrs, linkIndex: LinkIndex | null) {\n console.log('attrs init', new Error('trace'));\n this.attrs = attrs;\n this.linkIndex = linkIndex;\n }\n\n public resetAttrIndexes() {\n this._blobAttrs = null;\n this._primaryKeys = null;\n this._forwardIdents = null;\n this._revIdents = null;\n }\n\n public addAttr(attr: InstantDBAttr) {\n this.attrs[attr.id] = attr;\n this.resetAttrIndexes();\n }\n\n public deleteAttr(attrId: string) {\n delete this.attrs[attrId];\n this.resetAttrIndexes();\n }\n\n public updateAttr(partialAttr: Partial<InstantDBAttr> & { id: string }) {\n const attr = this.attrs[partialAttr.id];\n if (!attr) return;\n this.attrs[partialAttr.id] = { ...attr, ...partialAttr };\n this.resetAttrIndexes();\n }\n\n public getAttr(id: string): InstantDBAttr | undefined {\n return this.attrs[id];\n }\n\n // XXX: Might be better to create all of the indexes at once as soon as someone\n // requests one index\n get blobAttrs(): Map<string, Map<string, InstantDBAttr>> {\n if (this._blobAttrs) {\n return this._blobAttrs;\n }\n console.log('blobAttrs');\n this._blobAttrs = new Map();\n for (const attr of Object.values(this.attrs)) {\n if (isBlob(attr)) {\n const [_, fwdEtype, fwdLabel] = attr['forward-identity'];\n setInMap(this.blobAttrs, [fwdEtype, fwdLabel], attr);\n }\n }\n return this._blobAttrs;\n }\n\n get primaryKeys(): Map<string, InstantDBAttr> {\n if (this._primaryKeys) {\n return this._primaryKeys;\n }\n console.log('primayKeys');\n this._primaryKeys = new Map();\n\n for (const attr of Object.values(this.attrs)) {\n if (attr['primary?']) {\n const [_, fwdEtype] = attr['forward-identity'];\n setInMap(this._primaryKeys, [fwdEtype], attr);\n }\n }\n return this._primaryKeys;\n }\n\n get forwardIdents(): Map<string, Map<string, InstantDBAttr>> {\n if (this._forwardIdents) {\n return this._forwardIdents;\n }\n console.log('fwdIdents');\n this._forwardIdents = new Map();\n\n for (const attr of Object.values(this.attrs)) {\n const fwdIdent = attr['forward-identity'];\n const [_, fwdEtype, fwdLabel] = fwdIdent;\n setInMap(this._forwardIdents, [fwdEtype, fwdLabel], attr);\n }\n return this._forwardIdents;\n }\n\n get revIdents(): Map<string, Map<string, InstantDBAttr>> {\n if (this._revIdents) {\n return this._revIdents;\n }\n console.log('revIdents');\n this._revIdents = new Map();\n\n for (const attr of Object.values(this.attrs)) {\n const revIdent = attr['reverse-identity'];\n if (revIdent) {\n const [_, revEtype, revLabel] = revIdent;\n setInMap(this._revIdents, [revEtype, revLabel], attr);\n }\n }\n return this._revIdents;\n }\n\n public toJSON(): AttrsStoreJson {\n return { attrs: this.attrs, linkIndex: this.linkIndex };\n }\n}\n\nfunction hasEA(attr: InstantDBAttr) {\n return attr['cardinality'] === 'one';\n}\n\nfunction isRef(attr: InstantDBAttr) {\n return attr['value-type'] === 'ref';\n}\n\nexport function isBlob(attr: InstantDBAttr) {\n return attr['value-type'] === 'blob';\n}\n\nfunction getAttr(attrs: Attrs, attrId: string): InstantDBAttr | undefined {\n return attrs[attrId];\n}\n\nexport function getInMap(obj, path) {\n return path.reduce((acc, key) => acc && acc.get(key), obj);\n}\n\nfunction deleteInMap(m, path) {\n if (path.length === 0) throw new Error('path must have at least one element');\n if (path.length === 1) {\n m.delete(path[0]);\n return;\n }\n const [head, ...tail] = path;\n if (!m.has(head)) return;\n deleteInMap(m.get(head), tail);\n}\n\nfunction setInMap(m, path, value) {\n if (path.length === 0) throw new Error('path must have at least one element');\n if (path.length === 1) {\n m.set(path[0], value);\n return;\n }\n const [head, ...tail] = path;\n let nextM = m.get(head);\n if (!nextM) {\n nextM = new Map();\n m.set(head, nextM);\n }\n setInMap(nextM, tail, value);\n}\n\nfunction isDateAttr(attr: InstantDBAttr) {\n return attr['checked-data-type'] === 'date';\n}\n\nfunction createTripleIndexes(\n attrsStore: AttrsStore,\n triples: Triple[],\n useDateObjects: boolean | null,\n): Pick<Store, 'eav' | 'aev' | 'vae'> {\n const eav = new Map();\n const aev = new Map();\n const vae = new Map();\n for (const triple of triples) {\n let [eid, aid, v] = triple;\n const attr = attrsStore.getAttr(aid);\n if (!attr) {\n console.warn('no such attr', aid, eid);\n continue;\n }\n\n if (attr['checked-data-type'] === 'date' && useDateObjects) {\n v = coerceToDate(v);\n triple[2] = v;\n }\n\n if (isRef(attr)) {\n setInMap(vae, [v, aid, eid], triple);\n }\n\n setInMap(eav, [eid, aid, v], triple);\n setInMap(aev, [aid, eid, v], triple);\n }\n return { eav, aev, vae };\n}\n\nfunction createAttrIndexes(attrs: Record<string, InstantDBAttr>): AttrIndexes {\n const blobAttrs = new Map();\n const primaryKeys = new Map();\n const forwardIdents = new Map();\n const revIdents = new Map();\n for (const attr of Object.values(attrs)) {\n const fwdIdent = attr['forward-identity'];\n const [_, fwdEtype, fwdLabel] = fwdIdent;\n const revIdent = attr['reverse-identity'];\n\n setInMap(forwardIdents, [fwdEtype, fwdLabel], attr);\n if (isBlob(attr)) {\n setInMap(blobAttrs, [fwdEtype, fwdLabel], attr);\n }\n if (attr['primary?']) {\n setInMap(primaryKeys, [fwdEtype], attr);\n }\n if (revIdent) {\n const [_, revEtype, revLabel] = revIdent;\n setInMap(revIdents, [revEtype, revLabel], attr);\n }\n }\n\n return { blobAttrs, primaryKeys, forwardIdents, revIdents };\n}\n\nexport function toJSON(store: Store): StoreJsonVersion1 {\n return {\n triples: allMapValues(store.eav, 3),\n cardinalityInference: store.cardinalityInference,\n useDateObjects: store.useDateObjects,\n version: 1,\n };\n}\n\nexport function fromJSON(attrsStore: AttrsStore, storeJSON: StoreJson): Store {\n return createStore(\n attrsStore,\n storeJSON.triples,\n storeJSON.cardinalityInference,\n storeJSON.useDateObjects,\n );\n}\n\nexport function attrsStoreFromJSON(\n attrsStoreJSON: AttrsStoreJson | null,\n storeJSON: StoreJson | null,\n): AttrsStore | undefined {\n if (attrsStoreJSON) {\n return new AttrsStore(attrsStoreJSON.attrs, attrsStoreJSON.linkIndex);\n }\n if (storeJSON && '__type' in storeJSON) {\n return new AttrsStore(storeJSON.attrs, storeJSON.linkIndex);\n }\n}\n\nexport function hasTriple(store: Store, [e, a, v]: [string, string, any]) {\n return getInMap(store.eav, [e, a, v]) !== undefined;\n}\n\nexport function hasEntity(store: Store, e: string) {\n return getInMap(store.eav, [e]) !== undefined;\n}\n\nexport function createStore(\n attrsStore: AttrsStore,\n triples: Triple[],\n enableCardinalityInference: boolean | null,\n useDateObjects: boolean | null,\n): Store {\n const store = createTripleIndexes(\n attrsStore,\n triples,\n useDateObjects,\n ) as unknown as Store;\n store.cardinalityInference = enableCardinalityInference;\n store.useDateObjects = useDateObjects;\n return store;\n}\n\n// We may have local triples with lookup refs in them,\n// we need to convert those lookup refs to eids to insert them\n// into the store. If we can't find the lookup ref locally,\n// then we drop the triple and have to wait for the server response\n// to see the optimistic updates.\nfunction resolveLookupRefs(store: Store, triple: Triple): Triple | null {\n let eid;\n\n // Check if `e` is a lookup ref\n if (Array.isArray(triple[0])) {\n const [a, v] = triple[0];\n const eMaps = store.aev.get(a);\n if (!eMaps) {\n // We don't have the attr, so don't try to add the\n // triple to the store\n return null;\n }\n // This would be a lot more efficient with a ave index\n const triples = allMapValues(eMaps, 2);\n eid = triples.find((x) => x[2] === v)?.[0];\n } else {\n eid = triple[0];\n }\n\n if (!eid) {\n // We don't know the eid that the ref refers to, so\n // we can't add the triple to the store.\n return null;\n }\n\n // Check if v is a lookup ref\n const lookupV = triple[2];\n if (\n Array.isArray(lookupV) &&\n lookupV.length === 2 &&\n store.aev.get(lookupV[0])\n ) {\n const [a, v] = lookupV;\n const eMaps = store.aev.get(a);\n if (!eMaps) {\n // We don't have the attr, so don't try to add the\n // triple to the store\n return null;\n }\n const triples = allMapValues(eMaps, 2);\n const value = triples.find((x) => x[2] === v)?.[0];\n if (!value) {\n return null;\n }\n const [_e, aid, _v, ...rest] = triple;\n return [eid, aid, value, ...rest];\n } else {\n const [_, ...rest] = triple;\n return [eid, ...rest];\n }\n}\n\nexport function retractTriple(\n store: Store,\n attrsStore: AttrsStore,\n rawTriple: Triple,\n): void {\n const triple = resolveLookupRefs(store, rawTriple);\n if (!triple) {\n return;\n }\n const [eid, aid, v] = triple;\n const attr = attrsStore.getAttr(aid);\n if (!attr) {\n return;\n }\n\n deleteInMap(store.eav, [eid, aid, v]);\n deleteInMap(store.aev, [aid, eid, v]);\n if (isRef(attr)) {\n deleteInMap(store.vae, [v, aid, eid]);\n }\n}\n\nlet _seed = 0;\nfunction getCreatedAt(\n store: Store,\n attr: InstantDBAttr,\n triple: Triple,\n): Number {\n const [eid, aid, v] = triple;\n let createdAt;\n\n const t = getInMap(store.eav, [eid, aid, v]);\n if (t) {\n createdAt = t[3];\n }\n\n /**\n * (XXX)\n * Two hacks here, for generating a `createdAt`\n *\n * 1. We multiply Date.now() by 10, to make sure that\n * `createdAt` is always greater than anything the server\n * could return\n *\n * We do this because right now we know we _only_ insert\n * triples as optimistic updates.\n *\n * 2. We increment by `_seed`, to make sure there are no\n * two triples with the same `createdAt`. This is\n * done to make tests more predictable.\n *\n * We may need to rethink this. Because we * 10, we can't\n * use this value as an _actual_ `createdAt` timestamp.\n * Eventually we may want too though; For example, we could\n * use `createdAt` for each triple, to infer a `createdAt` and\n * `updatedAt` value for each object.\n */\n return createdAt || Date.now() * 10 + _seed++;\n}\n\nexport function addTriple(\n store: Store,\n attrsStore: AttrsStore,\n rawTriple: Triple,\n) {\n const triple = resolveLookupRefs(store, rawTriple);\n if (!triple) {\n return;\n }\n let [eid, aid, v] = triple;\n const attr = attrsStore.getAttr(aid);\n if (!attr) {\n // (XXX): Due to the way we're handling attrs, it's\n // possible to enter a state where we receive a triple without an attr.\n // See: https://github.com/jsventures/instant-local/pull/132 for details.\n // For now, if we receive a command without an attr, we no-op.\n return;\n }\n\n if (attr['checked-data-type'] === 'date' && store.useDateObjects) {\n v = coerceToDate(v);\n }\n\n const existingTriple = getInMap(store.eav, [eid, aid, v]);\n // Reuse the created_at for a triple if it's already in the store.\n // Prevents updates from temporarily pushing an entity to the top\n // while waiting for the server response.\n const t = existingTriple?.[3] ?? getCreatedAt(store, attr, triple);\n const enhancedTriple = [eid, aid, v, t];\n\n if (hasEA(attr)) {\n setInMap(store.eav, [eid, aid], new Map([[v, enhancedTriple]]));\n setInMap(store.aev, [aid, eid], new Map([[v, enhancedTriple]]));\n } else {\n setInMap(store.eav, [eid, aid, v], enhancedTriple);\n setInMap(store.aev, [aid, eid, v], enhancedTriple);\n }\n\n if (isRef(attr)) {\n setInMap(store.vae, [v, aid, eid], enhancedTriple);\n }\n}\n\nfunction mergeTriple(store: Store, attrsStore: AttrsStore, rawTriple: Triple) {\n const triple = resolveLookupRefs(store, rawTriple);\n if (!triple) {\n return;\n }\n\n const [eid, aid, update] = triple;\n const attr = attrsStore.getAttr(aid);\n\n if (!attr) return;\n\n if (!isBlob(attr))\n throw new Error('merge operation is not supported for links');\n\n const eavValuesMap = getInMap(store.eav, [eid, aid]);\n if (!eavValuesMap) return;\n\n const currentTriple = eavValuesMap.values().next()?.value;\n if (!currentTriple) return;\n\n const currentValue = currentTriple[2];\n\n const updatedValue = immutableDeepMerge(currentValue, update);\n const enhancedTriple = [\n eid,\n aid,\n updatedValue,\n getCreatedAt(store, attr, currentTriple),\n ];\n\n setInMap(store.eav, [eid, aid], new Map([[updatedValue, enhancedTriple]]));\n}\n\nfunction deleteEntity(store: Store, attrsStore: AttrsStore, args: any[]) {\n const [lookup, etype] = args;\n const triple = resolveLookupRefs(store, [lookup] as unknown as Triple);\n\n if (!triple) {\n return;\n }\n const [id] = triple;\n\n // delete forward links and attributes + cardinality one links\n const eMap = store.eav.get(id);\n if (eMap) {\n for (const a of eMap.keys()) {\n const attr = attrsStore.getAttr(a);\n\n // delete cascade refs\n if (attr && attr['on-delete-reverse'] === 'cascade') {\n allMapValues(eMap.get(a), 1).forEach(\n ([e, a, v]: [string, string, any]) =>\n deleteEntity(store, attrsStore, [v, attr['reverse-identity']?.[1]]),\n );\n }\n\n if (\n // Fall back to deleting everything if we've rehydrated tx-steps from\n // the store that didn't set `etype` in deleteEntity\n !etype ||\n // If we don't know about the attr, let's just get rid of it\n !attr ||\n // Make sure it matches the etype\n attr['forward-identity']?.[1] === etype\n ) {\n deleteInMap(store.aev, [a, id]);\n deleteInMap(store.eav, [id, a]);\n }\n }\n // Clear out the eav index for `id` if we deleted all of the attributes\n if (eMap.size === 0) {\n deleteInMap(store.eav, [id]);\n }\n }\n\n // delete reverse links\n const vaeTriples = store.vae.get(id) && allMapValues(store.vae.get(id), 2);\n\n if (vaeTriples) {\n vaeTriples.forEach((triple: Triple) => {\n const [e, a, v] = triple;\n const attr = attrsStore.getAttr(a);\n if (!etype || !attr || attr['reverse-identity']?.[1] === etype) {\n deleteInMap(store.eav, [e, a, v]);\n deleteInMap(store.aev, [a, e, v]);\n deleteInMap(store.vae, [v, a, e]);\n }\n if (\n attr &&\n attr['on-delete'] === 'cascade' &&\n attr['reverse-identity']?.[1] === etype\n ) {\n deleteEntity(store, attrsStore, [e, attr['forward-identity']?.[1]]);\n }\n });\n }\n // Clear out vae index for `id` if we deleted all the reverse attributes\n if (store.vae.get(id)?.size === 0) {\n deleteInMap(store.vae, [id]);\n }\n}\n\n// (XXX): Whenever we change/delete attrs,\n// We indiscriminately reset the index map.\n// There are lots of opportunities for optimization:\n// * We _only_ need to run this indexes change. We could detect that\n// * We could batch this reset at the end\n// * We could add an ave index for all triples, so removing the\n// right triples is easy and fast.\nfunction resetIndexMap(store: Store, attrsStore, newTriples: Triple[]) {\n const newIndexMap = createTripleIndexes(\n attrsStore,\n newTriples,\n store.useDateObjects,\n );\n Object.keys(newIndexMap).forEach((key) => {\n store[key] = newIndexMap[key];\n });\n}\n\nfunction addAttr(attrsStore: AttrsStore, [attr]: [InstantDBAttr]) {\n attrsStore.addAttr(attr);\n}\n\nfunction getAllTriples(store: Store): Triple[] {\n return allMapValues(store.eav, 3);\n}\n\nfunction deleteAttr(store: Store, attrsStore: AttrsStore, [id]: [string]) {\n if (!attrsStore.getAttr(id)) return;\n const newTriples = getAllTriples(store).filter(([_, aid]) => aid !== id);\n attrsStore.deleteAttr(id);\n resetIndexMap(store, attrsStore, newTriples);\n}\n\nfunction updateAttr(\n store: Store,\n attrsStore: AttrsStore,\n [partialAttr]: [Partial<InstantDBAttr> & { id: string }],\n) {\n const attr = attrsStore.getAttr(partialAttr.id);\n if (!attr) return;\n attrsStore.updateAttr(partialAttr);\n resetIndexMap(store, attrsStore, getAllTriples(store));\n}\n\nfunction applyTxStep(store: Store, attrsStore: AttrsStore, txStep) {\n const [action, ...args] = txStep;\n switch (action) {\n case 'add-triple':\n addTriple(store, attrsStore, args);\n break;\n case 'deep-merge-triple':\n mergeTriple(store, attrsStore, args);\n break;\n case 'retract-triple':\n retractTriple(store, attrsStore, args);\n break;\n case 'delete-entity':\n deleteEntity(store, attrsStore, args);\n break;\n case 'add-attr':\n addAttr(attrsStore, args);\n break;\n case 'delete-attr':\n deleteAttr(store, attrsStore, args);\n break;\n case 'update-attr':\n updateAttr(store, attrsStore, args);\n break;\n case 'restore-attr':\n break;\n case 'rule-params':\n break;\n default:\n throw new Error(`unhandled transaction action: ${action}`);\n }\n}\n\nexport function allMapValues(m, level, res: any[] = []) {\n if (!m) {\n return res;\n }\n if (level === 0) {\n return res;\n }\n if (level === 1) {\n for (const v of m.values()) {\n res.push(v);\n }\n return res;\n }\n for (const v of m.values()) {\n allMapValues(v, level - 1, res);\n }\n\n return res;\n}\n\nfunction triplesByValue(store: Store, m: Map<any, Triple>, v: any) {\n const res: Triple[] = [];\n if (v?.hasOwnProperty('$not')) {\n for (const candidate of m.keys()) {\n if (v.$not !== candidate) {\n res.push(m.get(candidate) as Triple);\n }\n }\n return res;\n }\n\n if (v?.hasOwnProperty('$isNull')) {\n const { attrId, isNull, reverse } = v.$isNull;\n\n if (reverse) {\n for (const candidate of m.keys()) {\n const vMap = store.vae.get(candidate);\n const isValNull = !vMap || !vMap.get(attrId);\n if (isNull ? isValNull : !isValNull) {\n res.push(m.get(candidate) as Triple);\n }\n }\n } else {\n const aMap = store.aev.get(attrId);\n for (const candidate of m.keys()) {\n const isValNull =\n !aMap || aMap.get(candidate)?.get(null) || !aMap.get(candidate);\n if (isNull ? isValNull : !isValNull) {\n res.push(m.get(candidate) as Triple);\n }\n }\n }\n return res;\n }\n\n if (v?.$comparator) {\n // TODO: A sorted index would be nice here\n return allMapValues(m, 1).filter(v.$op);\n }\n\n const values = v.in || v.$in || [v];\n\n for (const value of values) {\n const triple = m.get(value);\n if (triple) {\n res.push(triple);\n }\n }\n\n return res;\n}\n\n// A poor man's pattern matching\n// Returns either eav, ea, ev, av, v, or ''\nfunction whichIdx(e, a, v): 'eav' | 'ea' | 'ev' | 'av' | 'e' | 'a' | 'v' | '' {\n let res = '';\n if (e !== undefined) {\n res += 'e';\n }\n if (a !== undefined) {\n res += 'a';\n }\n if (v !== undefined) {\n res += 'v';\n }\n return res as 'eav' | 'ea' | 'ev' | 'av' | 'e' | 'a' | 'v' | '';\n}\n\nexport function getTriples(store, [e, a, v]) {\n const idx = whichIdx(e, a, v);\n switch (idx) {\n case 'e': {\n const eMap = store.eav.get(e);\n return allMapValues(eMap, 2);\n }\n case 'ea': {\n const aMap = store.eav.get(e)?.get(a);\n return allMapValues(aMap, 1);\n }\n case 'eav': {\n const aMap = store.eav.get(e)?.get(a);\n if (!aMap) {\n return [];\n }\n return triplesByValue(store, aMap, v);\n }\n case 'ev': {\n const eMap = store.eav.get(e);\n if (!eMap) {\n return [];\n }\n const res: Triple[] = [];\n for (const aMap of eMap.values()) {\n res.push(...triplesByValue(store, aMap, v));\n }\n return res;\n }\n case 'a': {\n const aMap = store.aev.get(a);\n return allMapValues(aMap, 2);\n }\n case 'av': {\n const aMap = store.aev.get(a);\n if (!aMap) {\n return [];\n }\n const res: Triple[] = [];\n for (const eMap of aMap.values()) {\n res.push(...triplesByValue(store, eMap, v));\n }\n return res;\n }\n case 'v': {\n const res: Triple[] = [];\n for (const eMap of store.eav.values()) {\n for (const aMap of eMap.values()) {\n res.push(...triplesByValue(store, aMap, v));\n }\n }\n return res;\n }\n default: {\n return allMapValues(store.eav, 3);\n }\n }\n}\n\nexport function getAsObject(\n store: Store,\n attrs: Map<string, InstantDBAttr> | undefined,\n e: string,\n) {\n const obj = {};\n\n if (!attrs) {\n return obj;\n }\n\n for (const [label, attr] of attrs.entries()) {\n const aMap = store.eav.get(e)?.get(attr.id);\n const triples = allMapValues(aMap, 1);\n for (const triple of triples) {\n obj[label] = triple[2];\n }\n }\n\n return obj;\n}\n\nexport function getAttrByFwdIdentName(\n attrsStore: AttrsStore,\n inputEtype: string,\n inputLabel: string,\n) {\n return attrsStore.forwardIdents.get(inputEtype)?.get(inputLabel);\n}\n\nexport function getAttrByReverseIdentName(\n attrsStore: AttrsStore,\n inputEtype: string,\n inputLabel: string,\n) {\n return attrsStore.revIdents.get(inputEtype)?.get(inputLabel);\n}\n\nexport function getBlobAttrs(attrsStore: AttrsStore, etype: string) {\n return attrsStore.blobAttrs.get(etype);\n}\n\nexport function getPrimaryKeyAttr(attrsStore: AttrsStore, etype: string) {\n const fromPrimary = attrsStore.primaryKeys.get(etype);\n if (fromPrimary) {\n return fromPrimary;\n }\n return attrsStore.forwardIdents.get(etype)?.get('id');\n}\n\nfunction findTriple(\n store: Store,\n attrsStore: AttrsStore,\n rawTriple: [string, string, any] | Triple,\n): Triple | undefined {\n const triple = resolveLookupRefs(store, rawTriple as Triple);\n if (!triple) {\n return;\n }\n\n const [eid, aid, v] = triple;\n const attr = attrsStore.getAttr(aid);\n if (!attr) {\n // (XXX): Due to the way we're handling attrs, it's\n // possible to enter a state where we receive a triple without an attr.\n // See: https://github.com/jsventures/instant-local/pull/132 for details.\n // For now, if we receive a command without an attr, we no-op.\n return;\n }\n\n return getInMap(store.eav, [eid, aid]);\n}\n\nexport function transact(store: Store, attrsStore: AttrsStore, txSteps) {\n const txStepsFiltered = txSteps.filter(\n ([action, eid, attrId, value, opts]) => {\n if (action !== 'add-triple' && action !== 'deep-merge-triple') {\n return true;\n }\n\n const mode = opts?.mode;\n if (mode !== 'create' && mode !== 'update') {\n return true;\n }\n\n let exists = false;\n\n const attr = attrsStore.getAttr(attrId);\n if (attr) {\n const idAttr = getPrimaryKeyAttr(\n attrsStore,\n attr['forward-identity'][1],\n );\n exists = !!findTriple(store, attrsStore, [\n eid as string,\n idAttr?.id as string,\n eid,\n ]);\n }\n\n if (mode === 'create' && exists) {\n return false;\n }\n\n if (mode === 'update' && !exists) {\n return false;\n }\n\n return true;\n },\n );\n\n return create(store, (draft) => {\n txStepsFiltered.forEach((txStep) => {\n applyTxStep(draft, attrsStore, txStep);\n });\n });\n}\n"]}
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/store.ts"],"names":[],"mappings":"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","sourcesContent":["import { create } from 'mutative';\nimport { immutableDeepMerge } from './utils/object.js';\nimport { coerceToDate } from './utils/dates.ts';\nimport { InstantDBAttr } from './attrTypes.ts';\nimport { LinkIndex } from './utils/linkIndex.ts';\n\ntype Triple = [string, string, any, number];\ntype Attrs = Record<string, InstantDBAttr>;\n\ntype AttrIndexes = {\n blobAttrs: Map<string, Map<string, InstantDBAttr>>;\n primaryKeys: Map<string, InstantDBAttr>;\n forwardIdents: Map<string, Map<string, InstantDBAttr>>;\n revIdents: Map<string, Map<string, InstantDBAttr>>;\n};\n\nexport type Store = {\n eav: Map<string, Map<string, Map<any, Triple>>>;\n aev: Map<string, Map<string, Map<any, Triple>>>;\n vae: Map<any, Map<string, Map<string, Triple>>>;\n useDateObjects: boolean | null;\n attrs: Attrs;\n attrIndexes: AttrIndexes;\n cardinalityInference: boolean | null;\n linkIndex: LinkIndex | null;\n __type: 'store';\n};\n\nexport type StoreJson = {\n __type: 'store';\n attrs: Attrs;\n triples: Triple[];\n cardinalityInference: boolean | null;\n linkIndex: LinkIndex | null;\n useDateObjects: boolean | null;\n};\n\nfunction hasEA(attr: InstantDBAttr) {\n return attr['cardinality'] === 'one';\n}\n\nfunction isRef(attr: InstantDBAttr) {\n return attr['value-type'] === 'ref';\n}\n\nexport function isBlob(attr: InstantDBAttr) {\n return attr['value-type'] === 'blob';\n}\n\nfunction getAttr(attrs: Attrs, attrId: string): InstantDBAttr | undefined {\n return attrs[attrId];\n}\n\nexport function getInMap(obj, path) {\n return path.reduce((acc, key) => acc && acc.get(key), obj);\n}\n\nfunction deleteInMap(m, path) {\n if (path.length === 0) throw new Error('path must have at least one element');\n if (path.length === 1) {\n m.delete(path[0]);\n return;\n }\n const [head, ...tail] = path;\n if (!m.has(head)) return;\n deleteInMap(m.get(head), tail);\n}\n\nfunction setInMap(m, path, value) {\n if (path.length === 0) throw new Error('path must have at least one element');\n if (path.length === 1) {\n m.set(path[0], value);\n return;\n }\n const [head, ...tail] = path;\n let nextM = m.get(head);\n if (!nextM) {\n nextM = new Map();\n m.set(head, nextM);\n }\n setInMap(nextM, tail, value);\n}\n\nfunction isDateAttr(attr: InstantDBAttr) {\n return attr['checked-data-type'] === 'date';\n}\n\nfunction createTripleIndexes(\n attrs: Record<string, InstantDBAttr>,\n triples: Triple[],\n useDateObjects: boolean | null,\n): Pick<Store, 'eav' | 'aev' | 'vae'> {\n const eav = new Map();\n const aev = new Map();\n const vae = new Map();\n for (const triple of triples) {\n let [eid, aid, v, t] = triple;\n const attr = getAttr(attrs, aid);\n if (!attr) {\n console.warn('no such attr', eid, attrs);\n continue;\n }\n\n if (attr['checked-data-type'] === 'date' && useDateObjects) {\n v = coerceToDate(v);\n triple[2] = v;\n }\n\n if (isRef(attr)) {\n setInMap(vae, [v, aid, eid], triple);\n }\n\n setInMap(eav, [eid, aid, v], triple);\n setInMap(aev, [aid, eid, v], triple);\n }\n return { eav, aev, vae };\n}\n\nfunction createAttrIndexes(attrs: Record<string, InstantDBAttr>): AttrIndexes {\n const blobAttrs = new Map();\n const primaryKeys = new Map();\n const forwardIdents = new Map();\n const revIdents = new Map();\n for (const attr of Object.values(attrs)) {\n const fwdIdent = attr['forward-identity'];\n const [_, fwdEtype, fwdLabel] = fwdIdent;\n const revIdent = attr['reverse-identity'];\n\n setInMap(forwardIdents, [fwdEtype, fwdLabel], attr);\n if (isBlob(attr)) {\n setInMap(blobAttrs, [fwdEtype, fwdLabel], attr);\n }\n if (attr['primary?']) {\n setInMap(primaryKeys, [fwdEtype], attr);\n }\n if (revIdent) {\n const [_, revEtype, revLabel] = revIdent;\n setInMap(revIdents, [revEtype, revLabel], attr);\n }\n }\n\n return { blobAttrs, primaryKeys, forwardIdents, revIdents };\n}\n\nexport function toJSON(store: Store): StoreJson {\n return {\n __type: store.__type,\n attrs: store.attrs,\n triples: allMapValues(store.eav, 3),\n cardinalityInference: store.cardinalityInference,\n linkIndex: store.linkIndex,\n useDateObjects: store.useDateObjects,\n };\n}\n\nexport function fromJSON(storeJSON: StoreJson): Store {\n return createStore(\n storeJSON.attrs,\n storeJSON.triples,\n storeJSON.cardinalityInference,\n storeJSON.linkIndex,\n storeJSON.useDateObjects,\n );\n}\n\nexport function hasTriple(store: Store, [e, a, v]: [string, string, any]) {\n return getInMap(store.eav, [e, a, v]) !== undefined;\n}\n\nexport function hasEntity(store: Store, e: string) {\n return getInMap(store.eav, [e]) !== undefined;\n}\n\nfunction resetAttrIndexes(store: Store) {\n store.attrIndexes = createAttrIndexes(store.attrs);\n}\n\nexport function createStore(\n attrs: Record<string, InstantDBAttr>,\n triples: Triple[],\n enableCardinalityInference: boolean | null,\n linkIndex: LinkIndex | null,\n useDateObjects: boolean | null,\n): Store {\n const store = createTripleIndexes(\n attrs,\n triples,\n useDateObjects,\n ) as unknown as Store;\n store.useDateObjects = useDateObjects;\n store.attrs = attrs;\n store.attrIndexes = createAttrIndexes(attrs);\n store.cardinalityInference = enableCardinalityInference;\n store.linkIndex = linkIndex;\n store.__type = 'store';\n\n return store;\n}\n\n// We may have local triples with lookup refs in them,\n// we need to convert those lookup refs to eids to insert them\n// into the store. If we can't find the lookup ref locally,\n// then we drop the triple and have to wait for the server response\n// to see the optimistic updates.\nfunction resolveLookupRefs(store: Store, triple: Triple): Triple | null {\n let eid;\n\n // Check if `e` is a lookup ref\n if (Array.isArray(triple[0])) {\n const [a, v] = triple[0];\n const eMaps = store.aev.get(a);\n if (!eMaps) {\n // We don't have the attr, so don't try to add the\n // triple to the store\n return null;\n }\n // This would be a lot more efficient with a ave index\n const triples = allMapValues(eMaps, 2);\n eid = triples.find((x) => x[2] === v)?.[0];\n } else {\n eid = triple[0];\n }\n\n if (!eid) {\n // We don't know the eid that the ref refers to, so\n // we can't add the triple to the store.\n return null;\n }\n\n // Check if v is a lookup ref\n const lookupV = triple[2];\n if (\n Array.isArray(lookupV) &&\n lookupV.length === 2 &&\n store.aev.get(lookupV[0])\n ) {\n const [a, v] = lookupV;\n const eMaps = store.aev.get(a);\n if (!eMaps) {\n // We don't have the attr, so don't try to add the\n // triple to the store\n return null;\n }\n const triples = allMapValues(eMaps, 2);\n const value = triples.find((x) => x[2] === v)?.[0];\n if (!value) {\n return null;\n }\n const [_e, aid, _v, ...rest] = triple;\n return [eid, aid, value, ...rest];\n } else {\n const [_, ...rest] = triple;\n return [eid, ...rest];\n }\n}\n\nexport function retractTriple(store: Store, rawTriple: Triple): void {\n const triple = resolveLookupRefs(store, rawTriple);\n if (!triple) {\n return;\n }\n const [eid, aid, v] = triple;\n const attr = getAttr(store.attrs, aid);\n if (!attr) {\n return;\n }\n\n deleteInMap(store.eav, [eid, aid, v]);\n deleteInMap(store.aev, [aid, eid, v]);\n if (isRef(attr)) {\n deleteInMap(store.vae, [v, aid, eid]);\n }\n}\n\nlet _seed = 0;\nfunction getCreatedAt(\n store: Store,\n attr: InstantDBAttr,\n triple: Triple,\n): Number {\n const [eid, aid, v] = triple;\n let createdAt;\n\n const t = getInMap(store.eav, [eid, aid, v]);\n if (t) {\n createdAt = t[3];\n }\n\n /**\n * (XXX)\n * Two hacks here, for generating a `createdAt`\n *\n * 1. We multiply Date.now() by 10, to make sure that\n * `createdAt` is always greater than anything the server\n * could return\n *\n * We do this because right now we know we _only_ insert\n * triples as optimistic updates.\n *\n * 2. We increment by `_seed`, to make sure there are no\n * two triples with the same `createdAt`. This is\n * done to make tests more predictable.\n *\n * We may need to rethink this. Because we * 10, we can't\n * use this value as an _actual_ `createdAt` timestamp.\n * Eventually we may want too though; For example, we could\n * use `createdAt` for each triple, to infer a `createdAt` and\n * `updatedAt` value for each object.\n */\n return createdAt || Date.now() * 10 + _seed++;\n}\n\nexport function addTriple(store: Store, rawTriple: Triple) {\n const triple = resolveLookupRefs(store, rawTriple);\n if (!triple) {\n return;\n }\n let [eid, aid, v] = triple;\n const attr = getAttr(store.attrs, aid);\n if (!attr) {\n // (XXX): Due to the way we're handling attrs, it's\n // possible to enter a state where we receive a triple without an attr.\n // See: https://github.com/jsventures/instant-local/pull/132 for details.\n // For now, if we receive a command without an attr, we no-op.\n return;\n }\n\n if (attr['checked-data-type'] === 'date' && store.useDateObjects) {\n v = coerceToDate(v);\n }\n\n const existingTriple = getInMap(store.eav, [eid, aid, v]);\n // Reuse the created_at for a triple if it's already in the store.\n // Prevents updates from temporarily pushing an entity to the top\n // while waiting for the server response.\n const t = existingTriple?.[3] ?? getCreatedAt(store, attr, triple);\n const enhancedTriple = [eid, aid, v, t];\n\n if (hasEA(attr)) {\n setInMap(store.eav, [eid, aid], new Map([[v, enhancedTriple]]));\n setInMap(store.aev, [aid, eid], new Map([[v, enhancedTriple]]));\n } else {\n setInMap(store.eav, [eid, aid, v], enhancedTriple);\n setInMap(store.aev, [aid, eid, v], enhancedTriple);\n }\n\n if (isRef(attr)) {\n setInMap(store.vae, [v, aid, eid], enhancedTriple);\n }\n}\n\nfunction mergeTriple(store: Store, rawTriple: Triple) {\n const triple = resolveLookupRefs(store, rawTriple);\n if (!triple) {\n return;\n }\n\n const [eid, aid, update] = triple;\n const attr = getAttr(store.attrs, aid);\n\n if (!attr) return;\n\n if (!isBlob(attr))\n throw new Error('merge operation is not supported for links');\n\n const eavValuesMap = getInMap(store.eav, [eid, aid]);\n if (!eavValuesMap) return;\n\n const currentTriple = eavValuesMap.values().next()?.value;\n if (!currentTriple) return;\n\n const currentValue = currentTriple[2];\n\n const updatedValue = immutableDeepMerge(currentValue, update);\n const enhancedTriple = [\n eid,\n aid,\n updatedValue,\n getCreatedAt(store, attr, currentTriple),\n ];\n\n setInMap(store.eav, [eid, aid], new Map([[updatedValue, enhancedTriple]]));\n}\n\nfunction deleteEntity(store: Store, args: any[]) {\n const [lookup, etype] = args;\n const triple = resolveLookupRefs(store, [lookup] as unknown as Triple);\n\n if (!triple) {\n return;\n }\n const [id] = triple;\n\n // delete forward links and attributes + cardinality one links\n const eMap = store.eav.get(id);\n if (eMap) {\n for (const a of eMap.keys()) {\n const attr = store.attrs[a];\n\n // delete cascade refs\n if (attr && attr['on-delete-reverse'] === 'cascade') {\n allMapValues(eMap.get(a), 1).forEach(\n ([e, a, v]: [string, string, any]) =>\n deleteEntity(store, [v, attr['reverse-identity']?.[1]]),\n );\n }\n\n if (\n // Fall back to deleting everything if we've rehydrated tx-steps from\n // the store that didn't set `etype` in deleteEntity\n !etype ||\n // If we don't know about the attr, let's just get rid of it\n !attr ||\n // Make sure it matches the etype\n attr['forward-identity']?.[1] === etype\n ) {\n deleteInMap(store.aev, [a, id]);\n deleteInMap(store.eav, [id, a]);\n }\n }\n // Clear out the eav index for `id` if we deleted all of the attributes\n if (eMap.size === 0) {\n deleteInMap(store.eav, [id]);\n }\n }\n\n // delete reverse links\n const vaeTriples = store.vae.get(id) && allMapValues(store.vae.get(id), 2);\n\n if (vaeTriples) {\n vaeTriples.forEach((triple: Triple) => {\n const [e, a, v] = triple;\n const attr = store.attrs[a];\n if (!etype || !attr || attr['reverse-identity']?.[1] === etype) {\n deleteInMap(store.eav, [e, a, v]);\n deleteInMap(store.aev, [a, e, v]);\n deleteInMap(store.vae, [v, a, e]);\n }\n if (\n attr &&\n attr['on-delete'] === 'cascade' &&\n attr['reverse-identity']?.[1] === etype\n ) {\n deleteEntity(store, [e, attr['forward-identity']?.[1]]);\n }\n });\n }\n // Clear out vae index for `id` if we deleted all the reverse attributes\n if (store.vae.get(id)?.size === 0) {\n deleteInMap(store.vae, [id]);\n }\n}\n\n// (XXX): Whenever we change/delete attrs,\n// We indiscriminately reset the index map.\n// There are lots of opportunities for optimization:\n// * We _only_ need to run this indexes change. We could detect that\n// * We could batch this reset at the end\n// * We could add an ave index for all triples, so removing the\n// right triples is easy and fast.\nfunction resetIndexMap(store: Store, newTriples: Triple[]) {\n const newIndexMap = createTripleIndexes(\n store.attrs,\n newTriples,\n store.useDateObjects,\n );\n Object.keys(newIndexMap).forEach((key) => {\n store[key] = newIndexMap[key];\n });\n}\n\nfunction addAttr(store: Store, [attr]: [InstantDBAttr]) {\n store.attrs[attr.id] = attr;\n resetAttrIndexes(store);\n}\n\nfunction getAllTriples(store: Store): Triple[] {\n return allMapValues(store.eav, 3);\n}\n\nfunction deleteAttr(store: Store, [id]: [string]) {\n if (!store.attrs[id]) return;\n const newTriples = getAllTriples(store).filter(([_, aid]) => aid !== id);\n delete store.attrs[id];\n resetAttrIndexes(store);\n resetIndexMap(store, newTriples);\n}\n\nfunction updateAttr(\n store: Store,\n [partialAttr]: [Partial<InstantDBAttr> & { id: string }],\n) {\n const attr = store.attrs[partialAttr.id];\n if (!attr) return;\n store.attrs[partialAttr.id] = { ...attr, ...partialAttr };\n resetAttrIndexes(store);\n resetIndexMap(store, getAllTriples(store));\n}\n\nfunction applyTxStep(store: Store, txStep) {\n const [action, ...args] = txStep;\n switch (action) {\n case 'add-triple':\n addTriple(store, args);\n break;\n case 'deep-merge-triple':\n mergeTriple(store, args);\n break;\n case 'retract-triple':\n retractTriple(store, args);\n break;\n case 'delete-entity':\n deleteEntity(store, args);\n break;\n case 'add-attr':\n addAttr(store, args);\n break;\n case 'delete-attr':\n deleteAttr(store, args);\n break;\n case 'update-attr':\n updateAttr(store, args);\n break;\n case 'restore-attr':\n break;\n case 'rule-params':\n break;\n default:\n throw new Error(`unhandled transaction action: ${action}`);\n }\n}\n\nexport function allMapValues(m, level, res: any[] = []) {\n if (!m) {\n return res;\n }\n if (level === 0) {\n return res;\n }\n if (level === 1) {\n for (const v of m.values()) {\n res.push(v);\n }\n return res;\n }\n for (const v of m.values()) {\n allMapValues(v, level - 1, res);\n }\n\n return res;\n}\n\nfunction triplesByValue(store: Store, m: Map<any, Triple>, v: any) {\n const res: Triple[] = [];\n if (v?.hasOwnProperty('$not')) {\n for (const candidate of m.keys()) {\n if (v.$not !== candidate) {\n res.push(m.get(candidate) as Triple);\n }\n }\n return res;\n }\n\n if (v?.hasOwnProperty('$isNull')) {\n const { attrId, isNull, reverse } = v.$isNull;\n\n if (reverse) {\n for (const candidate of m.keys()) {\n const vMap = store.vae.get(candidate);\n const isValNull = !vMap || !vMap.get(attrId);\n if (isNull ? isValNull : !isValNull) {\n res.push(m.get(candidate) as Triple);\n }\n }\n } else {\n const aMap = store.aev.get(attrId);\n for (const candidate of m.keys()) {\n const isValNull =\n !aMap || aMap.get(candidate)?.get(null) || !aMap.get(candidate);\n if (isNull ? isValNull : !isValNull) {\n res.push(m.get(candidate) as Triple);\n }\n }\n }\n return res;\n }\n\n if (v?.$comparator) {\n // TODO: A sorted index would be nice here\n return allMapValues(m, 1).filter(v.$op);\n }\n\n const values = v.in || v.$in || [v];\n\n for (const value of values) {\n const triple = m.get(value);\n if (triple) {\n res.push(triple);\n }\n }\n\n return res;\n}\n\n// A poor man's pattern matching\n// Returns either eav, ea, ev, av, v, or ''\nfunction whichIdx(e, a, v): 'eav' | 'ea' | 'ev' | 'av' | 'e' | 'a' | 'v' | '' {\n let res = '';\n if (e !== undefined) {\n res += 'e';\n }\n if (a !== undefined) {\n res += 'a';\n }\n if (v !== undefined) {\n res += 'v';\n }\n return res as 'eav' | 'ea' | 'ev' | 'av' | 'e' | 'a' | 'v' | '';\n}\n\nexport function getTriples(store, [e, a, v]) {\n const idx = whichIdx(e, a, v);\n switch (idx) {\n case 'e': {\n const eMap = store.eav.get(e);\n return allMapValues(eMap, 2);\n }\n case 'ea': {\n const aMap = store.eav.get(e)?.get(a);\n return allMapValues(aMap, 1);\n }\n case 'eav': {\n const aMap = store.eav.get(e)?.get(a);\n if (!aMap) {\n return [];\n }\n return triplesByValue(store, aMap, v);\n }\n case 'ev': {\n const eMap = store.eav.get(e);\n if (!eMap) {\n return [];\n }\n const res: Triple[] = [];\n for (const aMap of eMap.values()) {\n res.push(...triplesByValue(store, aMap, v));\n }\n return res;\n }\n case 'a': {\n const aMap = store.aev.get(a);\n return allMapValues(aMap, 2);\n }\n case 'av': {\n const aMap = store.aev.get(a);\n if (!aMap) {\n return [];\n }\n const res: Triple[] = [];\n for (const eMap of aMap.values()) {\n res.push(...triplesByValue(store, eMap, v));\n }\n return res;\n }\n case 'v': {\n const res: Triple[] = [];\n for (const eMap of store.eav.values()) {\n for (const aMap of eMap.values()) {\n res.push(...triplesByValue(store, aMap, v));\n }\n }\n return res;\n }\n default: {\n return allMapValues(store.eav, 3);\n }\n }\n}\n\nexport function getAsObject(\n store: Store,\n attrs: Map<string, InstantDBAttr> | undefined,\n e: string,\n) {\n const obj = {};\n\n if (!attrs) {\n return obj;\n }\n\n for (const [label, attr] of attrs.entries()) {\n const aMap = store.eav.get(e)?.get(attr.id);\n const triples = allMapValues(aMap, 1);\n for (const triple of triples) {\n obj[label] = triple[2];\n }\n }\n\n return obj;\n}\n\nexport function getAttrByFwdIdentName(\n store: Store,\n inputEtype: string,\n inputLabel: string,\n) {\n return store.attrIndexes.forwardIdents.get(inputEtype)?.get(inputLabel);\n}\n\nexport function getAttrByReverseIdentName(\n store: Store,\n inputEtype: string,\n inputLabel: string,\n) {\n return store.attrIndexes.revIdents.get(inputEtype)?.get(inputLabel);\n}\n\nexport function getBlobAttrs(store: Store, etype: string) {\n return store.attrIndexes.blobAttrs.get(etype);\n}\n\nexport function getPrimaryKeyAttr(store: Store, etype: string) {\n const fromPrimary = store.attrIndexes.primaryKeys.get(etype);\n if (fromPrimary) {\n return fromPrimary;\n }\n return store.attrIndexes.forwardIdents.get(etype)?.get('id');\n}\n\nfunction findTriple(\n store: Store,\n rawTriple: [string, string, any] | Triple,\n): Triple | undefined {\n const triple = resolveLookupRefs(store, rawTriple as Triple);\n if (!triple) {\n return;\n }\n\n const [eid, aid, v] = triple;\n const attr = getAttr(store.attrs, aid);\n if (!attr) {\n // (XXX): Due to the way we're handling attrs, it's\n // possible to enter a state where we receive a triple without an attr.\n // See: https://github.com/jsventures/instant-local/pull/132 for details.\n // For now, if we receive a command without an attr, we no-op.\n return;\n }\n\n return getInMap(store.eav, [eid, aid]);\n}\n\nexport function transact(store: Store, txSteps) {\n const txStepsFiltered = txSteps.filter(\n ([action, eid, attrId, value, opts]) => {\n if (action !== 'add-triple' && action !== 'deep-merge-triple') {\n return true;\n }\n\n const mode = opts?.mode;\n if (mode !== 'create' && mode !== 'update') {\n return true;\n }\n\n let exists = false;\n\n const attr = getAttr(store.attrs, attrId);\n if (attr) {\n const idAttr = getPrimaryKeyAttr(store, attr['forward-identity'][1]);\n exists = !!findTriple(store, [\n eid as string,\n idAttr?.id as string,\n eid,\n ]);\n }\n\n if (mode === 'create' && exists) {\n return false;\n }\n\n if (mode === 'update' && !exists) {\n return false;\n }\n\n return true;\n },\n );\n\n return create(store, (draft) => {\n txStepsFiltered.forEach((txStep) => {\n applyTxStep(draft, txStep);\n });\n });\n}\n"]}
|
package/dist/esm/Reactor.d.ts
CHANGED
|
@@ -3,13 +3,12 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export default class Reactor<RoomSchema extends import("./presence.ts").RoomSchemaShape = {}> {
|
|
5
5
|
constructor(config: any, Storage: typeof IndexedDBStorage | undefined, NetworkListener: typeof WindowNetworkListener | undefined, versions: any, EventSourceConstructor: any);
|
|
6
|
-
|
|
7
|
-
attrs: sts.AttrsStore | undefined;
|
|
6
|
+
attrs: any;
|
|
8
7
|
_isOnline: boolean;
|
|
9
8
|
_isShutdown: boolean;
|
|
10
9
|
status: string;
|
|
11
|
-
/** @type {PersistedObject
|
|
12
|
-
querySubs: PersistedObject<
|
|
10
|
+
/** @type {PersistedObject} */
|
|
11
|
+
querySubs: PersistedObject<any, any, any>;
|
|
13
12
|
/** @type {PersistedObject} */
|
|
14
13
|
kv: PersistedObject<any, any, any>;
|
|
15
14
|
/** @type {SyncTable} */
|
|
@@ -79,7 +78,6 @@ export default class Reactor<RoomSchema extends import("./presence.ts").RoomSche
|
|
|
79
78
|
queryCacheLimit: any;
|
|
80
79
|
versions: any;
|
|
81
80
|
_beforeUnload(): void;
|
|
82
|
-
ensureAttrs(): sts.AttrsStore;
|
|
83
81
|
updateSchema(schema: any): void;
|
|
84
82
|
_reactorStats(): {
|
|
85
83
|
inFlightMutationCount: number;
|
|
@@ -141,21 +139,12 @@ export default class Reactor<RoomSchema extends import("./presence.ts").RoomSche
|
|
|
141
139
|
_unsubQuery(q: any, hash: any, cb: any): void;
|
|
142
140
|
_hasQueryListeners(hash: any): boolean;
|
|
143
141
|
_cleanupQuery(q: any, hash: any): void;
|
|
144
|
-
|
|
145
|
-
*
|
|
146
|
-
* @param {sts.AttrsStore} attrs
|
|
147
|
-
* @param {any} muts
|
|
148
|
-
* @param {number} [processedTxId]
|
|
149
|
-
*/
|
|
150
|
-
_rewriteMutations(attrs: sts.AttrsStore, muts: any, processedTxId?: number): any;
|
|
142
|
+
_rewriteMutations(attrs: any, muts: any, processedTxId: any): any;
|
|
151
143
|
_rewriteMutationsSorted(attrs: any, muts: any): any[];
|
|
152
|
-
|
|
153
|
-
* @returns {sts.AttrsStore}
|
|
154
|
-
*/
|
|
155
|
-
optimisticAttrs(): sts.AttrsStore;
|
|
144
|
+
optimisticAttrs(): any;
|
|
156
145
|
/** Runs instaql on a query and a store */
|
|
157
146
|
dataForQuery(hash: any): any;
|
|
158
|
-
_applyOptimisticUpdates(store: any,
|
|
147
|
+
_applyOptimisticUpdates(store: any, mutations: any, processedTxId: any): any;
|
|
159
148
|
/** Re-run instaql and call all callbacks with new data */
|
|
160
149
|
notifyOne: (hash: any) => void;
|
|
161
150
|
notifyOneQueryOnce: (hash: any) => void;
|
|
@@ -349,9 +338,6 @@ export type Logger = import("./utils/log.ts").Logger;
|
|
|
349
338
|
export type Connection = import("./Connection.ts").Connection<any>;
|
|
350
339
|
export type TransportType = import("./Connection.ts").TransportType;
|
|
351
340
|
export type EventSourceConstructor = import("./Connection.ts").EventSourceConstructor;
|
|
352
|
-
export type QuerySub = import("./reactorTypes.ts").QuerySub;
|
|
353
|
-
export type QuerySubInStorage = import("./reactorTypes.ts").QuerySubInStorage;
|
|
354
|
-
import * as sts from './store.ts';
|
|
355
341
|
import { PersistedObject } from './utils/PersistedObject.ts';
|
|
356
342
|
import { SyncTable } from './SyncTable.ts';
|
|
357
343
|
import { Deferred } from './utils/Deferred.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Reactor.d.ts","sourceRoot":"","sources":["../../src/Reactor.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Reactor.d.ts","sourceRoot":"","sources":["../../src/Reactor.js"],"names":[],"mappings":"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"}
|
package/dist/esm/Reactor.js
CHANGED
|
@@ -21,8 +21,8 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
21
21
|
// @ts-check
|
|
22
22
|
import weakHash from "./utils/weakHash.js";
|
|
23
23
|
import instaql from "./instaql.js";
|
|
24
|
-
import * as instaml from
|
|
25
|
-
import * as
|
|
24
|
+
import * as instaml from './instaml.js';
|
|
25
|
+
import * as s from "./store.js";
|
|
26
26
|
import uuid from "./utils/uuid.js";
|
|
27
27
|
import IndexedDBStorage from "./IndexedDBStorage.js";
|
|
28
28
|
import WindowNetworkListener from './WindowNetworkListener.js';
|
|
@@ -49,8 +49,6 @@ import { SyncTable } from "./SyncTable.js";
|
|
|
49
49
|
/** @typedef {import('./Connection.ts').Connection} Connection */
|
|
50
50
|
/** @typedef {import('./Connection.ts').TransportType} TransportType */
|
|
51
51
|
/** @typedef {import('./Connection.ts').EventSourceConstructor} EventSourceConstructor */
|
|
52
|
-
/** @typedef {import('./reactorTypes.ts').QuerySub} QuerySub */
|
|
53
|
-
/** @typedef {import('./reactorTypes.ts').QuerySubInStorage} QuerySubInStorage */
|
|
54
52
|
const STATUS = {
|
|
55
53
|
CONNECTING: 'connecting',
|
|
56
54
|
OPENED: 'opened',
|
|
@@ -103,37 +101,20 @@ const ignoreLogging = {
|
|
|
103
101
|
'refresh-presence': true,
|
|
104
102
|
'patch-presence': true,
|
|
105
103
|
};
|
|
106
|
-
/**
|
|
107
|
-
* @param {QuerySubInStorage} x
|
|
108
|
-
* @param {boolean | null} useDateObjects
|
|
109
|
-
* @returns {QuerySub}
|
|
110
|
-
*/
|
|
111
104
|
function querySubFromStorage(x, useDateObjects) {
|
|
112
105
|
var _a;
|
|
113
106
|
const v = typeof x === 'string' ? JSON.parse(x) : x;
|
|
114
107
|
if ((_a = v === null || v === void 0 ? void 0 : v.result) === null || _a === void 0 ? void 0 : _a.store) {
|
|
115
|
-
const
|
|
116
|
-
|
|
117
|
-
const storeJSON = v.result.store;
|
|
118
|
-
v.result.store = sts.fromJSON(attrsStore, Object.assign(Object.assign({}, storeJSON), { useDateObjects: useDateObjects }));
|
|
119
|
-
v.result.attrsStore = attrsStore;
|
|
120
|
-
}
|
|
108
|
+
const storeJSON = v.result.store;
|
|
109
|
+
v.result.store = s.fromJSON(Object.assign(Object.assign({}, storeJSON), { useDateObjects: useDateObjects }));
|
|
121
110
|
}
|
|
122
111
|
return v;
|
|
123
112
|
}
|
|
124
|
-
/**
|
|
125
|
-
*
|
|
126
|
-
* @param {string} _key
|
|
127
|
-
* @param {QuerySub} sub
|
|
128
|
-
* @returns QuerySubInStorage
|
|
129
|
-
*/
|
|
130
113
|
function querySubToStorage(_key, sub) {
|
|
131
|
-
|
|
132
|
-
const jsonSub =
|
|
133
|
-
if (result) {
|
|
134
|
-
|
|
135
|
-
const jsonResult = Object.assign(Object.assign({}, result), { store: sts.toJSON(result.store), attrsStore: result.attrsStore.toJSON() });
|
|
136
|
-
jsonSub.result = jsonResult;
|
|
114
|
+
var _a;
|
|
115
|
+
const jsonSub = Object.assign({}, sub);
|
|
116
|
+
if ((_a = sub.result) === null || _a === void 0 ? void 0 : _a.store) {
|
|
117
|
+
jsonSub.result = Object.assign(Object.assign({}, sub.result), { store: s.toJSON(sub.result.store) });
|
|
137
118
|
}
|
|
138
119
|
return jsonSub;
|
|
139
120
|
}
|
|
@@ -278,7 +259,7 @@ export default class Reactor {
|
|
|
278
259
|
}
|
|
279
260
|
try {
|
|
280
261
|
const txSteps = instaml.transform({
|
|
281
|
-
|
|
262
|
+
attrs: this.optimisticAttrs(),
|
|
282
263
|
schema: this.config.schema,
|
|
283
264
|
stores: Object.values(this.querySubs.currentValue).map((sub) => { var _a; return (_a = sub === null || sub === void 0 ? void 0 : sub.result) === null || _a === void 0 ? void 0 : _a.store; }),
|
|
284
265
|
useDateObjects: this.config.useDateObjects,
|
|
@@ -444,9 +425,7 @@ export default class Reactor {
|
|
|
444
425
|
this._initStorage(Storage);
|
|
445
426
|
this._syncTable = new SyncTable(this._trySendAuthed.bind(this), new Storage(this.config.appId, 'syncSubs'), {
|
|
446
427
|
useDateObjects: this.config.useDateObjects,
|
|
447
|
-
}, this._log, (triples) =>
|
|
448
|
-
return sts.createStore(this.ensureAttrs(), triples, this.config.enableCardinalityInference, this.config.useDateObjects);
|
|
449
|
-
}, () => this.ensureAttrs());
|
|
428
|
+
}, this._log, (triples) => s.createStore(this.attrs, triples, this.config.enableCardinalityInference, this._linkIndex, this.config.useDateObjects));
|
|
450
429
|
this._oauthCallbackResponse = this._oauthLoginInit();
|
|
451
430
|
// kick off a request to cache it
|
|
452
431
|
this.getCurrentUser();
|
|
@@ -476,12 +455,6 @@ export default class Reactor {
|
|
|
476
455
|
addEventListener('beforeunload', this._beforeUnload);
|
|
477
456
|
}
|
|
478
457
|
}
|
|
479
|
-
ensureAttrs() {
|
|
480
|
-
if (!this.attrs) {
|
|
481
|
-
throw new Error('attrs have not loaded.');
|
|
482
|
-
}
|
|
483
|
-
return this.attrs;
|
|
484
|
-
}
|
|
485
458
|
updateSchema(schema) {
|
|
486
459
|
this.config = Object.assign(Object.assign({}, this.config), { schema: schema, cardinalityInference: Boolean(schema) });
|
|
487
460
|
this._linkIndex = schema ? createLinkIndex(this.config.schema) : null;
|
|
@@ -505,7 +478,7 @@ export default class Reactor {
|
|
|
505
478
|
serialize: querySubToStorage,
|
|
506
479
|
parse: (_key, x) => querySubFromStorage(x, this.config.useDateObjects),
|
|
507
480
|
// objectSize
|
|
508
|
-
objectSize: (x) => { var _a, _b, _c, _d; return (_d = (_c = (_b = (_a = x
|
|
481
|
+
objectSize: (x) => { var _a, _b, _c, _d; return (_d = (_c = (_b = (_a = x.result) === null || _a === void 0 ? void 0 : _a.store) === null || _b === void 0 ? void 0 : _b.triples) === null || _c === void 0 ? void 0 : _c.length) !== null && _d !== void 0 ? _d : 0; },
|
|
509
482
|
logger: this._log,
|
|
510
483
|
preloadEntryCount: 10,
|
|
511
484
|
gc: {
|
|
@@ -639,7 +612,7 @@ export default class Reactor {
|
|
|
639
612
|
const pageInfo = (_d = (_c = result === null || result === void 0 ? void 0 : result[0]) === null || _c === void 0 ? void 0 : _c.data) === null || _d === void 0 ? void 0 : _d['page-info'];
|
|
640
613
|
const aggregate = (_f = (_e = result === null || result === void 0 ? void 0 : result[0]) === null || _e === void 0 ? void 0 : _e.data) === null || _f === void 0 ? void 0 : _f['aggregate'];
|
|
641
614
|
const triples = extractTriples(result);
|
|
642
|
-
const store =
|
|
615
|
+
const store = s.createStore(this.attrs, triples, enableCardinalityInference, this._linkIndex, this.config.useDateObjects);
|
|
643
616
|
this.querySubs.updateInPlace((prev) => {
|
|
644
617
|
if (!prev[hash]) {
|
|
645
618
|
this._log.info('Missing value in querySubs', { hash, q });
|
|
@@ -647,7 +620,6 @@ export default class Reactor {
|
|
|
647
620
|
}
|
|
648
621
|
prev[hash].result = {
|
|
649
622
|
store,
|
|
650
|
-
attrsStore: this.ensureAttrs(),
|
|
651
623
|
pageInfo,
|
|
652
624
|
aggregate,
|
|
653
625
|
processedTxId: msg['processed-tx-id'],
|
|
@@ -682,7 +654,7 @@ export default class Reactor {
|
|
|
682
654
|
this._setAttrs(attrs);
|
|
683
655
|
}
|
|
684
656
|
this._cleanupPendingMutationsTimeout();
|
|
685
|
-
const rewrittenMutations = this._rewriteMutations(this.
|
|
657
|
+
const rewrittenMutations = this._rewriteMutations(this.attrs, this._pendingMutations(), processedTxId);
|
|
686
658
|
if (rewrittenMutations !== this._pendingMutations()) {
|
|
687
659
|
// We know we've changed the mutations to fix the attr ids and removed
|
|
688
660
|
// processed attrs, so we'll persist those changes to prevent optimisticAttrs
|
|
@@ -698,8 +670,8 @@ export default class Reactor {
|
|
|
698
670
|
const result = x['instaql-result'];
|
|
699
671
|
const hash = weakHash(q);
|
|
700
672
|
const triples = extractTriples(result);
|
|
701
|
-
const store =
|
|
702
|
-
const newStore = this._applyOptimisticUpdates(store,
|
|
673
|
+
const store = s.createStore(this.attrs, triples, enableCardinalityInference, this._linkIndex, this.config.useDateObjects);
|
|
674
|
+
const newStore = this._applyOptimisticUpdates(store, mutations, processedTxId);
|
|
703
675
|
const pageInfo = (_b = (_a = result === null || result === void 0 ? void 0 : result[0]) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b['page-info'];
|
|
704
676
|
const aggregate = (_d = (_c = result === null || result === void 0 ? void 0 : result[0]) === null || _c === void 0 ? void 0 : _c.data) === null || _d === void 0 ? void 0 : _d['aggregate'];
|
|
705
677
|
return { q, hash, store: newStore, pageInfo, aggregate };
|
|
@@ -710,13 +682,7 @@ export default class Reactor {
|
|
|
710
682
|
this._log.error('Missing value in querySubs', { hash, q });
|
|
711
683
|
return;
|
|
712
684
|
}
|
|
713
|
-
prev[hash].result = {
|
|
714
|
-
store,
|
|
715
|
-
attrsStore: this.ensureAttrs(),
|
|
716
|
-
pageInfo,
|
|
717
|
-
aggregate,
|
|
718
|
-
processedTxId,
|
|
719
|
-
};
|
|
685
|
+
prev[hash].result = { store, pageInfo, aggregate, processedTxId };
|
|
720
686
|
});
|
|
721
687
|
});
|
|
722
688
|
this._cleanupPendingMutationsQueries();
|
|
@@ -728,7 +694,7 @@ export default class Reactor {
|
|
|
728
694
|
case 'transact-ok': {
|
|
729
695
|
const { 'client-event-id': eventId, 'tx-id': txId } = msg;
|
|
730
696
|
this._inFlightMutationEventIds.delete(eventId);
|
|
731
|
-
const muts = this._rewriteMutations(this.
|
|
697
|
+
const muts = this._rewriteMutations(this.attrs, this._pendingMutations());
|
|
732
698
|
const prevMutation = muts.get(eventId);
|
|
733
699
|
if (!prevMutation) {
|
|
734
700
|
break;
|
|
@@ -737,18 +703,11 @@ export default class Reactor {
|
|
|
737
703
|
this._updatePendingMutations((prev) => {
|
|
738
704
|
prev.set(eventId, Object.assign(Object.assign({}, prev.get(eventId)), { 'tx-id': txId, confirmed: Date.now() }));
|
|
739
705
|
});
|
|
740
|
-
const newAttrs = []
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
}
|
|
746
|
-
}
|
|
747
|
-
if (newAttrs.length) {
|
|
748
|
-
const existingAttrs = Object.values(this.ensureAttrs());
|
|
749
|
-
this._setAttrs([...existingAttrs, ...newAttrs]);
|
|
750
|
-
this._setAttrs(newAttrs);
|
|
751
|
-
}
|
|
706
|
+
const newAttrs = prevMutation['tx-steps']
|
|
707
|
+
.filter(([action, ..._args]) => action === 'add-attr')
|
|
708
|
+
.map(([_action, attr]) => attr)
|
|
709
|
+
.concat(Object.values(this.attrs));
|
|
710
|
+
this._setAttrs(newAttrs);
|
|
752
711
|
this._finishTransaction('synced', eventId);
|
|
753
712
|
this._cleanupPendingMutationsTimeout();
|
|
754
713
|
break;
|
|
@@ -909,10 +868,10 @@ export default class Reactor {
|
|
|
909
868
|
this._completeQueryOnce(q, hash, r.dfd);
|
|
910
869
|
}
|
|
911
870
|
_setAttrs(attrs) {
|
|
912
|
-
this.attrs =
|
|
871
|
+
this.attrs = attrs.reduce((acc, attr) => {
|
|
913
872
|
acc[attr.id] = attr;
|
|
914
873
|
return acc;
|
|
915
|
-
}, {})
|
|
874
|
+
}, {});
|
|
916
875
|
this.notifyAttrsSubs();
|
|
917
876
|
}
|
|
918
877
|
_startQuerySub(q, hash) {
|
|
@@ -1018,12 +977,6 @@ export default class Reactor {
|
|
|
1018
977
|
// We remove `add-attr` commands for attrs that already exist.
|
|
1019
978
|
// We update `add-triple` and `retract-triple` commands to use the
|
|
1020
979
|
// server attr-ids.
|
|
1021
|
-
/**
|
|
1022
|
-
*
|
|
1023
|
-
* @param {sts.AttrsStore} attrs
|
|
1024
|
-
* @param {any} muts
|
|
1025
|
-
* @param {number} [processedTxId]
|
|
1026
|
-
*/
|
|
1027
980
|
_rewriteMutations(attrs, muts, processedTxId) {
|
|
1028
981
|
if (!attrs)
|
|
1029
982
|
return muts;
|
|
@@ -1031,12 +984,12 @@ export default class Reactor {
|
|
|
1031
984
|
return new Map();
|
|
1032
985
|
const findExistingAttr = (attr) => {
|
|
1033
986
|
const [_, etype, label] = attr['forward-identity'];
|
|
1034
|
-
const existing =
|
|
987
|
+
const existing = instaml.getAttrByFwdIdentName(attrs, etype, label);
|
|
1035
988
|
return existing;
|
|
1036
989
|
};
|
|
1037
990
|
const findReverseAttr = (attr) => {
|
|
1038
991
|
const [_, etype, label] = attr['forward-identity'];
|
|
1039
|
-
const revAttr =
|
|
992
|
+
const revAttr = instaml.getAttrByReverseIdentName(attrs, etype, label);
|
|
1040
993
|
return revAttr;
|
|
1041
994
|
};
|
|
1042
995
|
const mapping = { attrIdMap: {}, refSwapAttrIds: new Set() };
|
|
@@ -1099,11 +1052,8 @@ export default class Reactor {
|
|
|
1099
1052
|
}
|
|
1100
1053
|
// ---------------------------
|
|
1101
1054
|
// Transact
|
|
1102
|
-
/**
|
|
1103
|
-
* @returns {sts.AttrsStore}
|
|
1104
|
-
*/
|
|
1105
1055
|
optimisticAttrs() {
|
|
1106
|
-
var _a
|
|
1056
|
+
var _a;
|
|
1107
1057
|
const pendingMutationSteps = [...this._pendingMutations().values()] // hack due to Map()
|
|
1108
1058
|
.flatMap((x) => x['tx-steps']);
|
|
1109
1059
|
const deletedAttrIds = new Set(pendingMutationSteps
|
|
@@ -1116,22 +1066,17 @@ export default class Reactor {
|
|
|
1116
1066
|
}
|
|
1117
1067
|
else if (_action === 'update-attr' &&
|
|
1118
1068
|
attr.id &&
|
|
1119
|
-
((_a = this.attrs) === null || _a === void 0 ? void 0 : _a
|
|
1120
|
-
const fullAttr = Object.assign(Object.assign({}, this.attrs
|
|
1069
|
+
((_a = this.attrs) === null || _a === void 0 ? void 0 : _a[attr.id])) {
|
|
1070
|
+
const fullAttr = Object.assign(Object.assign({}, this.attrs[attr.id]), attr);
|
|
1121
1071
|
pendingAttrs.push(fullAttr);
|
|
1122
1072
|
}
|
|
1123
1073
|
}
|
|
1124
|
-
|
|
1125
|
-
|
|
1126
|
-
|
|
1127
|
-
|
|
1128
|
-
|
|
1129
|
-
|
|
1130
|
-
}
|
|
1131
|
-
for (const id of deletedAttrIds) {
|
|
1132
|
-
delete attrs[id];
|
|
1133
|
-
}
|
|
1134
|
-
return new sts.AttrsStore(attrs, this._linkIndex);
|
|
1074
|
+
const attrsWithoutDeleted = [
|
|
1075
|
+
...Object.values(this.attrs || {}),
|
|
1076
|
+
...pendingAttrs,
|
|
1077
|
+
].filter((a) => !deletedAttrIds.has(a.id));
|
|
1078
|
+
const attrsRecord = Object.fromEntries(attrsWithoutDeleted.map((a) => [a.id, a]));
|
|
1079
|
+
return attrsRecord;
|
|
1135
1080
|
}
|
|
1136
1081
|
/** Runs instaql on a query and a store */
|
|
1137
1082
|
dataForQuery(hash) {
|
|
@@ -1156,16 +1101,16 @@ export default class Reactor {
|
|
|
1156
1101
|
pendingMutationsVersion === cached.pendingMutationsVersion) {
|
|
1157
1102
|
return cached;
|
|
1158
1103
|
}
|
|
1159
|
-
const { store,
|
|
1160
|
-
const mutations = this._rewriteMutationsSorted(
|
|
1161
|
-
const newStore = this._applyOptimisticUpdates(store,
|
|
1162
|
-
const resp = instaql({ store: newStore,
|
|
1104
|
+
const { store, pageInfo, aggregate, processedTxId } = result;
|
|
1105
|
+
const mutations = this._rewriteMutationsSorted(store.attrs, pendingMutations);
|
|
1106
|
+
const newStore = this._applyOptimisticUpdates(store, mutations, processedTxId);
|
|
1107
|
+
const resp = instaql({ store: newStore, pageInfo, aggregate }, q);
|
|
1163
1108
|
return { data: resp, querySubVersion, pendingMutationsVersion };
|
|
1164
1109
|
}
|
|
1165
|
-
_applyOptimisticUpdates(store,
|
|
1110
|
+
_applyOptimisticUpdates(store, mutations, processedTxId) {
|
|
1166
1111
|
for (const [_, mut] of mutations) {
|
|
1167
1112
|
if (!mut['tx-id'] || (processedTxId && mut['tx-id'] > processedTxId)) {
|
|
1168
|
-
store =
|
|
1113
|
+
store = s.transact(store, mut['tx-steps']);
|
|
1169
1114
|
}
|
|
1170
1115
|
}
|
|
1171
1116
|
return store;
|
|
@@ -1248,7 +1193,7 @@ export default class Reactor {
|
|
|
1248
1193
|
.forEach(({ eventId, q }) => {
|
|
1249
1194
|
this._trySendAuthed(eventId, { op: 'add-query', q });
|
|
1250
1195
|
});
|
|
1251
|
-
const muts = this._rewriteMutationsSorted(this.
|
|
1196
|
+
const muts = this._rewriteMutationsSorted(this.attrs, this._pendingMutations());
|
|
1252
1197
|
muts.forEach(([eventId, mut]) => {
|
|
1253
1198
|
if (!mut['tx-id']) {
|
|
1254
1199
|
this._sendMutation(eventId, mut);
|
|
@@ -1535,7 +1480,7 @@ export default class Reactor {
|
|
|
1535
1480
|
subscribeAttrs(cb) {
|
|
1536
1481
|
this.attrsCbs.push(cb);
|
|
1537
1482
|
if (this.attrs) {
|
|
1538
|
-
cb(this.attrs
|
|
1483
|
+
cb(this.attrs);
|
|
1539
1484
|
}
|
|
1540
1485
|
return () => {
|
|
1541
1486
|
this.attrsCbs = this.attrsCbs.filter((x) => x !== cb);
|