@instantdb/core 0.22.83 → 0.22.84

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 (47) hide show
  1. package/__tests__/src/utils/PersistedObject.test.ts +1 -1
  2. package/dist/commonjs/Reactor.d.ts.map +1 -1
  3. package/dist/commonjs/Reactor.js.map +1 -1
  4. package/dist/commonjs/SyncTable.d.ts.map +1 -1
  5. package/dist/commonjs/SyncTable.js +1 -0
  6. package/dist/commonjs/SyncTable.js.map +1 -1
  7. package/dist/commonjs/attrTypes.d.ts +1 -1
  8. package/dist/commonjs/attrTypes.d.ts.map +1 -1
  9. package/dist/commonjs/attrTypes.js.map +1 -1
  10. package/dist/commonjs/datalog.js +2 -2
  11. package/dist/commonjs/datalog.js.map +1 -1
  12. package/dist/commonjs/instaml.js +2 -2
  13. package/dist/commonjs/instaml.js.map +1 -1
  14. package/dist/commonjs/instaql.js.map +1 -1
  15. package/dist/commonjs/store.d.ts +44 -29
  16. package/dist/commonjs/store.d.ts.map +1 -1
  17. package/dist/commonjs/store.js +9 -5
  18. package/dist/commonjs/store.js.map +1 -1
  19. package/dist/esm/Reactor.d.ts.map +1 -1
  20. package/dist/esm/Reactor.js +1 -1
  21. package/dist/esm/Reactor.js.map +1 -1
  22. package/dist/esm/SyncTable.d.ts.map +1 -1
  23. package/dist/esm/SyncTable.js +2 -1
  24. package/dist/esm/SyncTable.js.map +1 -1
  25. package/dist/esm/attrTypes.d.ts +1 -1
  26. package/dist/esm/attrTypes.d.ts.map +1 -1
  27. package/dist/esm/attrTypes.js.map +1 -1
  28. package/dist/esm/datalog.js +1 -1
  29. package/dist/esm/datalog.js.map +1 -1
  30. package/dist/esm/instaml.js +1 -1
  31. package/dist/esm/instaml.js.map +1 -1
  32. package/dist/esm/instaql.js +1 -1
  33. package/dist/esm/instaql.js.map +1 -1
  34. package/dist/esm/store.d.ts +44 -29
  35. package/dist/esm/store.d.ts.map +1 -1
  36. package/dist/esm/store.js +9 -5
  37. package/dist/esm/store.js.map +1 -1
  38. package/dist/standalone/index.js +95 -87
  39. package/dist/standalone/index.umd.cjs +3 -3
  40. package/package.json +2 -2
  41. package/src/Reactor.js +1 -1
  42. package/src/SyncTable.ts +4 -3
  43. package/src/attrTypes.ts +1 -6
  44. package/src/datalog.js +1 -1
  45. package/src/instaml.js +1 -1
  46. package/src/instaql.js +1 -1
  47. package/src/{store.js → store.ts} +127 -59
@@ -1 +1 @@
1
- {"version":3,"file":"SyncTable.d.ts","sourceRoot":"","sources":["../../src/SyncTable.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SyncTable.d.ts","sourceRoot":"","sources":["../../src/SyncTable.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAmC9C,KAAK,QAAQ,GAAG;IACd,EAAE,EAAE,YAAY,CAAC;IACjB,CAAC,EAAE,MAAM,CAAC;CACX,CAAC;AAEF,KAAK,MAAM,GAAG;IACZ,EAAE,EAAE,aAAa,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,mBAAmB,EAAE,OAAO,CAAC;CAC9B,CAAC;AAEF,KAAK,SAAS,GAAG;IACf,EAAE,EAAE,cAAc,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,KAAK,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAC;AAE7C,KAAK,cAAc,GAAG;IACpB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,KAAK,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;AAE5C,KAAK,gBAAgB,GAAG;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;CAC9B,CAAC;AAEF,KAAK,iBAAiB,GAAG;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,KAAK,oBAAoB,GAAG;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,IAAI,EAAE;QACJ,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE;YAAE,MAAM,EAAE,OAAO,GAAG,SAAS,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,EAAE,CAAC;KAC5D,EAAE,CAAC;CACL,CAAC;AAEF,KAAK,OAAO,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;AAEvD,KAAK,MAAM,GAAG;IAAE,cAAc,EAAE,OAAO,CAAA;CAAE,CAAC;AAiN1C,oBAAY,iBAAiB;IAC3B,gBAAgB,qBAAqB;IACrC,mBAAmB,wBAAwB;IAC3C,eAAe,oBAAoB;IACnC,eAAe,oBAAoB;IACnC,KAAK,UAAU;CAChB;AAED,KAAK,aAAa,CAChB,MAAM,SAAS,wBAAwB,CAAC,WAAW,EAAE,GAAG,CAAC,EACzD,CAAC,SAAS,UAAU,CAAC,CAAC,EAAE,MAAM,CAAC,EAC/B,QAAQ,SAAS,OAAO,IACtB,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,MAAM,eAAe,CAC5D,MAAM,EACN,CAAC,EACD,QAAQ,CACT,CAAC,CAAC;AAEH,KAAK,WAAW,CACd,MAAM,SAAS,wBAAwB,CAAC,WAAW,EAAE,GAAG,CAAC,EACzD,CAAC,SAAS,UAAU,CAAC,CAAC,EAAE,MAAM,CAAC,EAC/B,QAAQ,SAAS,OAAO,IACtB,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC;AAEvE,KAAK,aAAa,CAAC,MAAM,IAAI;KAC1B,CAAC,IAAI,MAAM,MAAM,CAAC,CAAC,EAAE;QACpB,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;KACrB;CACF,CAAC;AAEF,MAAM,WAAW,iBAAiB,CAChC,MAAM,SAAS,wBAAwB,CAAC,WAAW,EAAE,GAAG,CAAC,EACzD,CAAC,SAAS,UAAU,CAAC,CAAC,EAAE,MAAM,CAAC,EAC/B,QAAQ,SAAS,OAAO;IAExB,IAAI,EAAE,iBAAiB,CAAC;IACxB,IAAI,EAAE,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;CAC5C;AAED,MAAM,WAAW,gBAAgB,CAC/B,MAAM,SAAS,wBAAwB,CAAC,WAAW,EAAE,GAAG,CAAC,EACzD,CAAC,SAAS,UAAU,CAAC,CAAC,EAAE,MAAM,CAAC,EAC/B,QAAQ,SAAS,OAAO,CACxB,SAAQ,iBAAiB,CAAC,MAAM,EAAE,CAAC,EAAE,QAAQ,CAAC;IAC9C,IAAI,EAAE,iBAAiB,CAAC,gBAAgB,CAAC;IACzC,KAAK,EAAE,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;CAC3C;AAED,MAAM,WAAW,mBAAmB,CAClC,MAAM,SAAS,wBAAwB,CAAC,WAAW,EAAE,GAAG,CAAC,EACzD,CAAC,SAAS,UAAU,CAAC,CAAC,EAAE,MAAM,CAAC,EAC/B,QAAQ,SAAS,OAAO,CACxB,SAAQ,iBAAiB,CAAC,MAAM,EAAE,CAAC,EAAE,QAAQ,CAAC;IAC9C,IAAI,EAAE,iBAAiB,CAAC,mBAAmB,CAAC;CAC7C;AAED,MAAM,WAAW,eAAe,CAC9B,MAAM,SAAS,wBAAwB,CAAC,WAAW,EAAE,GAAG,CAAC,EACzD,CAAC,SAAS,UAAU,CAAC,CAAC,EAAE,MAAM,CAAC,EAC/B,QAAQ,SAAS,OAAO,CACxB,SAAQ,iBAAiB,CAAC,MAAM,EAAE,CAAC,EAAE,QAAQ,CAAC;IAC9C,IAAI,EAAE,iBAAiB,CAAC,eAAe,CAAC;IACxC,KAAK,EAAE,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;IAC1C,OAAO,EAAE,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;IAC5C,OAAO,EAAE;QACP,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;QAC5C,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;QAC5C,aAAa,EAAE,aAAa,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;KAChE,EAAE,CAAC;CACL;AAED,MAAM,WAAW,eAAe,CAC9B,MAAM,SAAS,wBAAwB,CAAC,WAAW,EAAE,GAAG,CAAC,EACzD,CAAC,SAAS,UAAU,CAAC,CAAC,EAAE,MAAM,CAAC,EAC/B,QAAQ,SAAS,OAAO,CACxB,SAAQ,iBAAiB,CAAC,MAAM,EAAE,CAAC,EAAE,QAAQ,CAAC;IAC9C,IAAI,EAAE,iBAAiB,CAAC,eAAe,CAAC;CACzC;AAED,MAAM,WAAW,UAAU,CACzB,MAAM,SAAS,wBAAwB,CAAC,WAAW,EAAE,GAAG,CAAC,EACzD,CAAC,SAAS,UAAU,CAAC,CAAC,EAAE,MAAM,CAAC,EAC/B,QAAQ,SAAS,OAAO,CACxB,SAAQ,iBAAiB,CAAC,MAAM,EAAE,CAAC,EAAE,QAAQ,CAAC;IAC9C,IAAI,EAAE,iBAAiB,CAAC,KAAK,CAAC;IAC9B,KAAK,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,GAAG,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;CACtE;AAED,MAAM,MAAM,aAAa,CACvB,MAAM,SAAS,wBAAwB,CAAC,WAAW,EAAE,GAAG,CAAC,EACzD,CAAC,SAAS,UAAU,CAAC,CAAC,EAAE,MAAM,CAAC,EAC/B,QAAQ,SAAS,OAAO,IAEtB,gBAAgB,CAAC,MAAM,EAAE,CAAC,EAAE,QAAQ,CAAC,GACrC,mBAAmB,CAAC,MAAM,EAAE,CAAC,EAAE,QAAQ,CAAC,GACxC,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE,QAAQ,CAAC,GACpC,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE,QAAQ,CAAC,GACpC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;AAEpC,MAAM,MAAM,iBAAiB,CAC3B,MAAM,SAAS,wBAAwB,CAAC,WAAW,EAAE,GAAG,CAAC,EACzD,CAAC,SAAS,UAAU,CAAC,CAAC,EAAE,MAAM,CAAC,EAC/B,QAAQ,SAAS,OAAO,IACtB,CAAC,KAAK,EAAE,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,QAAQ,CAAC,KAAK,IAAI,CAAC;AAExD,qBAAa,SAAS;IACpB,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,IAAI,CAA6C;IAEzD,OAAO,CAAC,SAAS,CACZ;IACL,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAA4C;IAC5D,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,WAAW,CAA6B;gBAG9C,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,gBAAgB,EACzB,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,GAAG;IAuBlC,YAAY;IAIZ,SAAS,CACd,CAAC,EAAE,GAAG,EACN,EAAE,EAAE,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GACnC,CACD,IAAI,CAAC,EAAE;QAAE,gBAAgB,CAAC,EAAE,OAAO,GAAG,IAAI,GAAG,SAAS,CAAA;KAAE,GAAG,IAAI,GAAG,SAAS,KACxE,IAAI;IAYT,OAAO,CAAC,WAAW;IAyBnB,OAAO,CAAC,SAAS;IAOjB,OAAO,CAAC,UAAU;IAWlB,OAAO,CAAC,UAAU;YAQJ,gBAAgB;IA4CjB,YAAY;IAYlB,aAAa,CAAC,GAAG,EAAE,cAAc;IA4BxC,OAAO,CAAC,SAAS;IAMV,eAAe,CAAC,GAAG,EAAE,gBAAgB;IAmDrC,gBAAgB,CAAC,GAAG,EAAE,iBAAiB;IAgCvC,mBAAmB,CAAC,GAAG,EAAE,oBAAoB;IAuHpD,OAAO,CAAC,qBAAqB;IAwBtB,gBAAgB,CAAC,GAAG,EAAE;QAC3B,EAAE,EAAE,OAAO,CAAC;QACZ,gBAAgB,EAAE,QAAQ,CAAC;QAC3B,iBAAiB,EAAE,MAAM,CAAC;QAC1B,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,IAAI,CAAC,EAAE,GAAG,CAAC;KACZ;IAiBM,aAAa,CAAC,GAAG,EAAE;QACxB,EAAE,EAAE,OAAO,CAAC;QACZ,gBAAgB,EAAE,SAAS,CAAC;QAC5B,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;KACd;CAUF"}
@@ -71,6 +71,7 @@ function syncSubToStorage(_k, sub) {
71
71
  const store = s.toJSON(e.store);
72
72
  // We'll store the attrs once on values, and put the
73
73
  // attrs back into the store on hydration
74
+ // @ts-ignore: ts doesn't want us to delete a non-optional
74
75
  delete store['attrs'];
75
76
  entities.push(Object.assign(Object.assign({}, e), { store }));
76
77
  }
@@ -1 +1 @@
1
- {"version":3,"file":"SyncTable.js","sourceRoot":"","sources":["../../src/SyncTable.ts"],"names":[],"mappings":"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","sourcesContent":["import { PersistedObject } from './utils/PersistedObject.ts';\nimport * as s from './store.js';\nimport weakHash from './utils/weakHash.ts';\nimport uuid from './utils/uuid.ts';\nimport { Logger } from './Reactor.js';\nimport instaql, { compareOrder } from './instaql.js';\nimport { InstaQLResponse, ValidQuery } from './queryTypes.ts';\nimport { EntitiesDef, IContainEntitiesAndLinks } from './schemaTypes.ts';\nimport { StorageInterface } from './index.ts';\n\ntype SubState = {\n txId?: number;\n subscriptionId: string;\n token: string;\n};\n\ntype SubEntity = {\n entity: any;\n store: any;\n serverCreatedAt: number;\n};\n\ntype SubValues = {\n attrs: Record<string, any>;\n entities: Array<SubEntity>;\n};\n\ntype Sub = {\n query: any;\n hash: string;\n table: string;\n orderField: string;\n orderDirection: 'asc' | 'desc';\n orderFieldType?: 'string' | 'number' | 'date' | 'boolean';\n state?: SubState;\n values?: SubValues;\n createdAt: number;\n updatedAt: number;\n};\n\n// We could make a better type for this if we had a return type for s.toJSON\ntype SubInStorage = Sub;\n\ntype StartMsg = {\n op: 'start-sync';\n q: string;\n};\n\ntype EndMsg = {\n op: 'remove-sync';\n 'subscription-id': string;\n 'keep-subscription': boolean;\n};\n\ntype ResyncMsg = {\n op: 'resync-table';\n 'subscription-id': string;\n 'tx-id': number;\n token: string;\n};\n\ntype SendMsg = StartMsg | EndMsg | ResyncMsg;\n\ntype StartSyncOkMsg = {\n 'subscription-id': string;\n 'client-event-id': string;\n q: string;\n token: string;\n};\n\ntype Triple = [string, string, any, number];\n\ntype SyncLoadBatchMsg = {\n 'subscription-id': string;\n 'join-rows': Array<Triple[]>;\n};\n\ntype SyncInitFinishMsg = {\n 'subscription-id': string;\n 'tx-id': number;\n};\n\ntype SyncUpdateTriplesMsg = {\n 'subscription-id': string;\n txes: {\n 'tx-id': number;\n changes: { action: 'added' | 'removed'; triple: Triple }[];\n }[];\n};\n\ntype TrySend = (eventId: string, msg: SendMsg) => void;\n\ntype Config = { useDateObjects: boolean };\n\n// Modifies the data in place because it comes directly from storage\nfunction syncSubFromStorage(sub: SubInStorage, useDateObjects: boolean): Sub {\n const values = sub.values;\n if (values) {\n for (const e of values.entities || []) {\n e.store.useDateObjects = useDateObjects;\n e.store.attrs = values.attrs;\n e.store = s.fromJSON(e.store);\n }\n }\n\n return sub;\n}\n\nfunction syncSubToStorage(_k: string, sub: Sub): SubInStorage {\n if (sub.values?.entities) {\n const entities: SubEntity[] = [];\n for (const e of sub.values?.entities) {\n const store = s.toJSON(e.store);\n // We'll store the attrs once on values, and put the\n // attrs back into the store on hydration\n delete store['attrs'];\n entities.push({ ...e, store });\n }\n return { ...sub, values: { ...sub.values, entities } };\n } else {\n return sub;\n }\n}\n\nfunction onMergeSub(\n _key: string,\n storageSub: SubInStorage,\n inMemorySub: Sub | null,\n): Sub {\n const storageTxId = storageSub?.state?.txId;\n const memoryTxId = inMemorySub?.state?.txId;\n\n if (storageTxId && (!memoryTxId || storageTxId > memoryTxId)) {\n return storageSub;\n }\n\n if (memoryTxId && (!storageTxId || memoryTxId > storageTxId)) {\n return inMemorySub;\n }\n\n return storageSub || inMemorySub;\n}\n\nfunction queryEntity(sub: Sub, store: any) {\n const res = instaql({ store, pageInfo: null, aggregate: null }, sub.query);\n return res.data[sub.table][0];\n}\n\nfunction getServerCreatedAt(sub: Sub, store: any, entityId: string): number {\n const aid = s.getAttrByFwdIdentName(store, sub.table, 'id')?.id;\n if (!aid) {\n return -1;\n }\n const t = s.getInMap(store.eav, [entityId, aid, entityId]);\n if (!t) {\n return -1;\n }\n return t[3];\n}\n\nfunction applyChangesToStore(\n store: any,\n changes: SyncUpdateTriplesMsg['txes'][number]['changes'],\n): void {\n for (const { action, triple } of changes) {\n switch (action) {\n case 'added':\n s.addTriple(store, triple);\n break;\n case 'removed':\n s.retractTriple(store, triple);\n break;\n }\n }\n}\n\nfunction changedFieldsOfChanges(\n store: any,\n changes: SyncUpdateTriplesMsg['txes'][number]['changes'],\n): {\n [eid: string]: SyncTransaction<\n any,\n any,\n any\n >['updated'][number]['changedFields'];\n} {\n // This will be more complicated when we include links, we can either add a\n // changedLinks field or we can have something like 'bookshelves.title`\n const changedFields = {};\n for (const { action, triple } of changes) {\n const [e, a, v] = triple;\n const field = store.attrs[a]?.['forward-identity']?.[2];\n if (!field) continue;\n\n const fields = changedFields[e] ?? {};\n changedFields[e] = fields;\n\n const oldNew = fields[field] ?? {};\n fields[field] = oldNew;\n\n switch (action) {\n case 'added':\n oldNew.newValue = v;\n break;\n case 'removed':\n // Only take the first thing that was removed, in case we modified things in the middle\n if (oldNew.oldValue === undefined) {\n oldNew.oldValue = v;\n }\n break;\n }\n }\n\n for (const k of Object.keys(changedFields)) {\n const { oldValue, newValue } = changedFields[k];\n if (oldValue === newValue) {\n delete changedFields[k];\n }\n }\n return changedFields;\n}\n\nfunction subData(sub: Sub, entities: NonNullable<Sub['values']>['entities']) {\n return { [sub.table]: entities.map((e) => e.entity) };\n}\n\n// Updates the sub order field type if it hasn't been set\n// and returns the type. We have to wait until the attrs\n// are loaded before we can determine the type.\nfunction orderFieldTypeMutative(sub: Sub, createStore) {\n if (sub.orderFieldType) {\n return sub.orderFieldType;\n }\n const orderFieldType =\n sub.orderField === 'serverCreatedAt'\n ? 'number'\n : s.getAttrByFwdIdentName(createStore([]), sub.table, sub.orderField)?.[\n 'checked-data-type'\n ];\n\n sub.orderFieldType = orderFieldType;\n return orderFieldType;\n}\n\nfunction sortEntitiesInPlace(\n sub: Sub,\n orderFieldType: NonNullable<Sub['orderFieldType']>,\n entities: NonNullable<Sub['values']>['entities'],\n) {\n const dataType = orderFieldType;\n if (sub.orderField === 'serverCreatedAt') {\n entities.sort(\n sub.orderDirection === 'asc'\n ? function compareEntities(a, b) {\n return compareOrder(\n a.entity.id,\n a.serverCreatedAt,\n b.entity.id,\n b.serverCreatedAt,\n dataType,\n );\n }\n : function compareEntities(b, a) {\n return compareOrder(\n a.entity.id,\n a.serverCreatedAt,\n b.entity.id,\n b.serverCreatedAt,\n dataType,\n );\n },\n );\n return;\n }\n\n const field = sub.orderField;\n\n entities.sort(\n sub.orderDirection === 'asc'\n ? function compareEntities(a, b) {\n return compareOrder(\n a.entity.id,\n a.entity[field],\n b.entity.id,\n b.entity[field],\n dataType,\n );\n }\n : function compareEntities(b, a) {\n return compareOrder(\n a.entity.id,\n a.entity[field],\n b.entity.id,\n b.entity[field],\n dataType,\n );\n },\n );\n}\n\nexport enum CallbackEventType {\n InitialSyncBatch = 'InitialSyncBatch',\n InitialSyncComplete = 'InitialSyncComplete',\n LoadFromStorage = 'LoadFromStorage',\n SyncTransaction = 'SyncTransaction',\n Error = 'Error',\n}\n\ntype QueryEntities<\n Schema extends IContainEntitiesAndLinks<EntitiesDef, any>,\n Q extends ValidQuery<Q, Schema>,\n UseDates extends boolean,\n> = InstaQLResponse<Schema, Q, UseDates>[keyof InstaQLResponse<\n Schema,\n Q,\n UseDates\n>];\n\ntype QueryEntity<\n Schema extends IContainEntitiesAndLinks<EntitiesDef, any>,\n Q extends ValidQuery<Q, Schema>,\n UseDates extends boolean,\n> = QueryEntities<Schema, Q, UseDates> extends (infer E)[] ? E : never;\n\ntype ChangedFields<Entity> = {\n [K in keyof Entity]?: {\n oldValue: Entity[K];\n newValue: Entity[K];\n };\n};\n\nexport interface BaseCallbackEvent<\n Schema extends IContainEntitiesAndLinks<EntitiesDef, any>,\n Q extends ValidQuery<Q, Schema>,\n UseDates extends boolean,\n> {\n type: CallbackEventType;\n data: InstaQLResponse<Schema, Q, UseDates>;\n}\n\nexport interface InitialSyncBatch<\n Schema extends IContainEntitiesAndLinks<EntitiesDef, any>,\n Q extends ValidQuery<Q, Schema>,\n UseDates extends boolean,\n> extends BaseCallbackEvent<Schema, Q, UseDates> {\n type: CallbackEventType.InitialSyncBatch;\n batch: QueryEntities<Schema, Q, UseDates>;\n}\n\nexport interface InitialSyncComplete<\n Schema extends IContainEntitiesAndLinks<EntitiesDef, any>,\n Q extends ValidQuery<Q, Schema>,\n UseDates extends boolean,\n> extends BaseCallbackEvent<Schema, Q, UseDates> {\n type: CallbackEventType.InitialSyncComplete;\n}\n\nexport interface SyncTransaction<\n Schema extends IContainEntitiesAndLinks<EntitiesDef, any>,\n Q extends ValidQuery<Q, Schema>,\n UseDates extends boolean,\n> extends BaseCallbackEvent<Schema, Q, UseDates> {\n type: CallbackEventType.SyncTransaction;\n added: QueryEntities<Schema, Q, UseDates>;\n removed: QueryEntities<Schema, Q, UseDates>;\n updated: {\n oldEntity: QueryEntity<Schema, Q, UseDates>;\n newEntity: QueryEntity<Schema, Q, UseDates>;\n changedFields: ChangedFields<QueryEntity<Schema, Q, UseDates>>;\n }[];\n}\n\nexport interface LoadFromStorage<\n Schema extends IContainEntitiesAndLinks<EntitiesDef, any>,\n Q extends ValidQuery<Q, Schema>,\n UseDates extends boolean,\n> extends BaseCallbackEvent<Schema, Q, UseDates> {\n type: CallbackEventType.LoadFromStorage;\n}\n\nexport interface SetupError<\n Schema extends IContainEntitiesAndLinks<EntitiesDef, any>,\n Q extends ValidQuery<Q, Schema>,\n UseDates extends boolean,\n> extends BaseCallbackEvent<Schema, Q, UseDates> {\n type: CallbackEventType.Error;\n error: { message: string; hint?: any; type: string; status: number };\n}\n\nexport type CallbackEvent<\n Schema extends IContainEntitiesAndLinks<EntitiesDef, any>,\n Q extends ValidQuery<Q, Schema>,\n UseDates extends boolean,\n> =\n | InitialSyncBatch<Schema, Q, UseDates>\n | InitialSyncComplete<Schema, Q, UseDates>\n | SyncTransaction<Schema, Q, UseDates>\n | LoadFromStorage<Schema, Q, UseDates>\n | SetupError<Schema, Q, UseDates>;\n\nexport type SyncTableCallback<\n Schema extends IContainEntitiesAndLinks<EntitiesDef, any>,\n Q extends ValidQuery<Q, Schema>,\n UseDates extends boolean,\n> = (event: CallbackEvent<Schema, Q, UseDates>) => void;\n\nexport class SyncTable {\n private trySend: TrySend;\n private subs: PersistedObject<string, Sub, SubInStorage>;\n // Using any for the SyncCallback because we'd need Reactor to be typed\n private callbacks: { [hash: string]: SyncTableCallback<any, any, any>[] } =\n {};\n private config: Config;\n private idToHash: { [subscriptionId: string]: string } = {};\n private log: Logger;\n private createStore: (triples: Triple[]) => any;\n\n constructor(\n trySend: TrySend,\n storage: StorageInterface,\n config: Config,\n log: Logger,\n createStore: (triples: Triple[]) => any,\n ) {\n this.trySend = trySend;\n this.config = config;\n this.log = log;\n this.createStore = createStore;\n\n this.subs = new PersistedObject<string, Sub, SubInStorage>({\n persister: storage,\n merge: onMergeSub,\n serialize: syncSubToStorage,\n parse: (_key, x) => syncSubFromStorage(x, this.config.useDateObjects),\n objectSize: (sub) => sub.values?.entities.length || 0,\n logger: log,\n gc: {\n maxAgeMs: 1000 * 60 * 60 * 24 * 7 * 52, // 1 year\n maxEntries: 1000,\n // Size of each sub is the number of entity\n maxSize: 1_000_000, // 1 million entities\n },\n });\n }\n\n public beforeUnload() {\n this.subs.flush();\n }\n\n public subscribe(\n q: any,\n cb: SyncTableCallback<any, any, any>,\n ): (\n opts?: { keepSubscription?: boolean | null | undefined } | null | undefined,\n ) => void {\n const hash = weakHash(q);\n this.callbacks[hash] = this.callbacks[hash] || [];\n this.callbacks[hash].push(cb);\n\n this.initSubscription(q, hash, cb);\n\n return (opts?: { keepSubscription?: boolean | null | undefined }) => {\n this.unsubscribe(hash, cb, opts?.keepSubscription);\n };\n }\n\n private unsubscribe(\n hash: string,\n cb: SyncTableCallback<any, any, any>,\n keepSubscription: boolean | null | undefined,\n ) {\n const cbs = (this.callbacks[hash] || []).filter((x) => x !== cb);\n this.callbacks[hash] = cbs;\n\n if (!cbs.length) {\n delete this.callbacks[hash];\n const sub = this.subs.currentValue[hash];\n if (sub?.state) {\n this.clearSubscriptionData(\n sub.state.subscriptionId,\n !!keepSubscription,\n );\n }\n if (!keepSubscription) {\n this.subs.updateInPlace((prev) => {\n delete prev[hash];\n });\n }\n }\n }\n\n private sendStart(query: string) {\n this.trySend(uuid(), {\n op: 'start-sync',\n q: query,\n });\n }\n\n private sendResync(sub: Sub, state: SubState, txId: number) {\n // Make sure we can find the hash from the subscriptionId\n this.idToHash[state.subscriptionId] = sub.hash;\n this.trySend(state.subscriptionId, {\n op: 'resync-table',\n 'subscription-id': state.subscriptionId,\n 'tx-id': txId,\n token: state.token,\n });\n }\n\n private sendRemove(state: SubState, keepSubscription: boolean) {\n this.trySend(uuid(), {\n op: 'remove-sync',\n 'subscription-id': state.subscriptionId,\n 'keep-subscription': keepSubscription,\n });\n }\n\n private async initSubscription(\n query: any,\n hash: string,\n cb?: SyncTableCallback<any, any, any>,\n ) {\n // Wait for storage to load so that we know if we already have an existing subscription\n await this.subs.waitForKeyToLoad(hash);\n const existingSub = this.subs.currentValue[hash];\n\n if (existingSub && existingSub.state && existingSub.state.txId) {\n this.sendResync(existingSub, existingSub.state, existingSub.state.txId);\n\n if (existingSub.values?.entities && cb) {\n cb({\n type: CallbackEventType.LoadFromStorage,\n data: subData(existingSub, existingSub.values?.entities),\n });\n }\n\n return;\n }\n\n const table = Object.keys(query)[0];\n const orderBy = query[table]?.$?.order || { serverCreatedAt: 'asc' };\n const [orderField, orderDirection] = Object.entries(orderBy)[0] as [\n string,\n 'asc' | 'desc',\n ];\n\n this.subs.updateInPlace((prev) => {\n prev[hash] = {\n query,\n hash: hash,\n table,\n orderDirection,\n orderField,\n createdAt: Date.now(),\n updatedAt: Date.now(),\n };\n });\n\n this.sendStart(query);\n }\n\n public async flushPending() {\n for (const hash of Object.keys(this.callbacks)) {\n await this.subs.waitForKeyToLoad(hash);\n const sub = this.subs.currentValue[hash];\n if (sub) {\n await this.initSubscription(sub.query, sub.hash);\n } else {\n this.log.error('Missing sub for hash in flushPending', hash);\n }\n }\n }\n\n public onStartSyncOk(msg: StartSyncOkMsg) {\n const subscriptionId = msg['subscription-id'];\n const q = msg.q;\n const hash = weakHash(q);\n\n this.idToHash[subscriptionId] = hash;\n\n this.subs.updateInPlace((prev) => {\n const sub = prev[hash];\n if (!sub) {\n this.log.error(\n 'Missing sub for hash',\n hash,\n 'subscription-id',\n subscriptionId,\n 'query',\n q,\n );\n return prev;\n }\n\n sub.state = {\n subscriptionId: subscriptionId,\n token: msg.token,\n };\n });\n }\n\n private notifyCbs(hash: string, event: CallbackEvent<any, any, any>) {\n for (const cb of this.callbacks[hash] || []) {\n cb(event);\n }\n }\n\n public onSyncLoadBatch(msg: SyncLoadBatchMsg) {\n const subscriptionId = msg['subscription-id'];\n const joinRows = msg['join-rows'];\n const hash = this.idToHash[subscriptionId];\n if (!hash) {\n this.log.error('Missing hash for subscription', msg);\n return;\n }\n\n const batch: any[] = [];\n const sub = this.subs.currentValue[hash];\n if (!sub) {\n this.log.error('Missing sub for hash', hash, msg);\n return;\n }\n\n const values: SubValues = sub.values ?? {\n entities: [],\n attrs: this.createStore([]).attrs,\n };\n sub.values = values;\n const entities = values.entities;\n\n for (const entRows of joinRows) {\n const store = this.createStore(entRows);\n values.attrs = store.attrs;\n const entity = queryEntity(sub, store);\n entities.push({\n store,\n entity,\n serverCreatedAt: getServerCreatedAt(sub, store, entity.id),\n });\n batch.push(entity);\n }\n\n this.subs.updateInPlace((prev) => {\n prev[hash] = sub;\n // Make sure we write a field or mutative won't\n // see the change because sub === prev[hash]\n prev[hash].updatedAt = Date.now();\n });\n\n if (sub.values) {\n this.notifyCbs(hash, {\n type: CallbackEventType.InitialSyncBatch,\n data: subData(sub, sub.values.entities),\n batch,\n });\n }\n }\n\n public onSyncInitFinish(msg: SyncInitFinishMsg) {\n const subscriptionId = msg['subscription-id'];\n const hash = this.idToHash[subscriptionId];\n if (!hash) {\n this.log.error('Missing hash for subscription', msg);\n return;\n }\n this.subs.updateInPlace((prev) => {\n const sub = prev[hash];\n if (!sub) {\n this.log.error('Missing sub for hash', hash, msg);\n return;\n }\n const state = sub.state;\n if (!state) {\n this.log.error('Sub never set init, missing result', sub, msg);\n return prev;\n }\n state.txId = msg['tx-id'];\n sub.updatedAt = Date.now();\n });\n\n const sub = this.subs.currentValue[hash];\n\n if (sub) {\n this.notifyCbs(hash, {\n type: CallbackEventType.InitialSyncComplete,\n data: subData(sub, sub.values?.entities || []),\n });\n }\n }\n\n public onSyncUpdateTriples(msg: SyncUpdateTriplesMsg) {\n const subscriptionId = msg['subscription-id'];\n const hash = this.idToHash[subscriptionId];\n if (!hash) {\n this.log.error('Missing hash for subscription', msg);\n return;\n }\n\n const sub = this.subs.currentValue[hash];\n if (!sub) {\n this.log.error('Missing sub for hash', hash, msg);\n return;\n }\n\n const state = sub.state;\n if (!state) {\n this.log.error('Missing state for sub', sub, msg);\n return;\n }\n\n for (const tx of msg.txes) {\n if (state.txId && state.txId >= tx['tx-id']) {\n continue;\n }\n state.txId = tx['tx-id'];\n const idxesToDelete: number[] = [];\n // Note: this won't work as well when links are involved\n const byEid: {\n [eid: string]: SyncUpdateTriplesMsg['txes'][number]['changes'];\n } = {};\n for (const change of tx.changes) {\n const eidChanges = byEid[change.triple[0]] ?? [];\n byEid[change.triple[0]] = eidChanges;\n eidChanges.push(change);\n }\n\n const values: SubValues = sub.values ?? {\n entities: [],\n attrs: this.createStore([]).attrs,\n };\n const entities = values.entities;\n sub.values = values;\n\n const updated: SyncTransaction<any, any, any>['updated'] = [];\n // Update the existing stores, if we already know about this entity\n eidLoop: for (const [eid, changes] of Object.entries(byEid)) {\n for (let i = 0; i < entities.length; i++) {\n const ent = entities[i];\n if (s.hasEntity(ent.store, eid)) {\n applyChangesToStore(ent.store, changes);\n const entity = queryEntity(sub, ent.store);\n const changedFields = changedFieldsOfChanges(ent.store, changes)[\n eid\n ];\n if (entity) {\n updated.push({\n oldEntity: ent.entity,\n newEntity: entity,\n changedFields: changedFields || {},\n });\n ent.entity = entity;\n } else {\n idxesToDelete.push(i);\n }\n delete byEid[eid];\n continue eidLoop;\n }\n }\n }\n\n const added: any[] = [];\n // If we have anything left in byEid, then this must be a new entity we don't know about\n for (const [_eid, changes] of Object.entries(byEid)) {\n const store = this.createStore([]);\n values.attrs = store.attrs;\n applyChangesToStore(store, changes);\n const entity = queryEntity(sub, store);\n if (!entity) {\n this.log.error('No entity found after applying change', {\n sub,\n changes,\n store,\n });\n continue;\n }\n entities.push({\n store,\n entity,\n serverCreatedAt: getServerCreatedAt(sub, store, entity.id),\n });\n added.push(entity);\n }\n\n const removed: any[] = [];\n\n for (const idx of idxesToDelete.sort().reverse()) {\n removed.push(entities[idx].entity);\n entities.splice(idx, 1);\n }\n\n const orderFieldType = orderFieldTypeMutative(sub, this.createStore);\n\n sortEntitiesInPlace(sub, orderFieldType, entities);\n this.notifyCbs(hash, {\n type: CallbackEventType.SyncTransaction,\n data: subData(sub, sub.values?.entities),\n added,\n removed,\n updated,\n });\n }\n this.subs.updateInPlace((prev) => {\n prev[hash] = sub;\n // Make sure we write a field or mutative won't\n // see the change because sub === prev[hash]\n prev[hash].updatedAt = Date.now();\n });\n }\n\n private clearSubscriptionData(\n subscriptionId: string,\n keepSubscription: boolean,\n ) {\n const hash = this.idToHash[subscriptionId];\n if (hash) {\n delete this.idToHash[subscriptionId];\n const sub = this.subs.currentValue[hash];\n if (sub.state) {\n this.sendRemove(sub.state, keepSubscription);\n }\n if (keepSubscription) {\n this.subs.unloadKey(hash);\n } else {\n this.subs.updateInPlace((prev) => {\n delete prev[hash];\n });\n }\n if (sub) {\n return sub;\n }\n }\n }\n\n public onStartSyncError(msg: {\n op: 'error';\n 'original-event': StartMsg;\n 'client-event-id': string;\n status: number;\n type: string;\n message?: string;\n hint?: any;\n }) {\n const hash = weakHash(msg['original-event']['q']);\n const error = {\n message: msg.message || 'Uh-oh, something went wrong. Ping Joe & Stopa.',\n status: msg.status,\n type: msg.type,\n hint: msg.hint,\n };\n\n const k = Object.keys(msg['original-event']['q'])[0];\n this.notifyCbs(hash, {\n type: CallbackEventType.Error,\n data: { [k]: [] },\n error,\n });\n }\n\n public onResyncError(msg: {\n op: 'error';\n 'original-event': ResyncMsg;\n status: number;\n type: string;\n }) {\n // Clear the subscription and start from scrath on any resync error\n // This can happen if the auth changed and we need to refetch with the\n // new auth or if the subscription is too far behind.\n const subscriptionId = msg['original-event']['subscription-id'];\n const removedSub = this.clearSubscriptionData(subscriptionId, false);\n if (removedSub) {\n this.initSubscription(removedSub.query, removedSub.hash);\n }\n }\n}\n"]}
1
+ {"version":3,"file":"SyncTable.js","sourceRoot":"","sources":["../../src/SyncTable.ts"],"names":[],"mappings":"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","sourcesContent":["import { PersistedObject } from './utils/PersistedObject.ts';\nimport * as s from './store.ts';\nimport weakHash from './utils/weakHash.ts';\nimport uuid from './utils/uuid.ts';\nimport { Logger } from './Reactor.js';\nimport instaql, { compareOrder } from './instaql.js';\nimport { InstaQLResponse, ValidQuery } from './queryTypes.ts';\nimport { EntitiesDef, IContainEntitiesAndLinks } from './schemaTypes.ts';\nimport { StorageInterface } from './index.ts';\n\ntype SubState = {\n txId?: number;\n subscriptionId: string;\n token: string;\n};\n\ntype SubEntity = {\n entity: any;\n store: any;\n serverCreatedAt: number;\n};\n\ntype SubValues = {\n attrs: Record<string, any>;\n entities: Array<SubEntity>;\n};\n\ntype Sub = {\n query: any;\n hash: string;\n table: string;\n orderField: string;\n orderDirection: 'asc' | 'desc';\n orderFieldType?: 'string' | 'number' | 'date' | 'boolean' | null;\n state?: SubState;\n values?: SubValues;\n createdAt: number;\n updatedAt: number;\n};\n\n// We could make a better type for this if we had a return type for s.toJSON\ntype SubInStorage = Sub;\n\ntype StartMsg = {\n op: 'start-sync';\n q: string;\n};\n\ntype EndMsg = {\n op: 'remove-sync';\n 'subscription-id': string;\n 'keep-subscription': boolean;\n};\n\ntype ResyncMsg = {\n op: 'resync-table';\n 'subscription-id': string;\n 'tx-id': number;\n token: string;\n};\n\ntype SendMsg = StartMsg | EndMsg | ResyncMsg;\n\ntype StartSyncOkMsg = {\n 'subscription-id': string;\n 'client-event-id': string;\n q: string;\n token: string;\n};\n\ntype Triple = [string, string, any, number];\n\ntype SyncLoadBatchMsg = {\n 'subscription-id': string;\n 'join-rows': Array<Triple[]>;\n};\n\ntype SyncInitFinishMsg = {\n 'subscription-id': string;\n 'tx-id': number;\n};\n\ntype SyncUpdateTriplesMsg = {\n 'subscription-id': string;\n txes: {\n 'tx-id': number;\n changes: { action: 'added' | 'removed'; triple: Triple }[];\n }[];\n};\n\ntype TrySend = (eventId: string, msg: SendMsg) => void;\n\ntype Config = { useDateObjects: boolean };\n\n// Modifies the data in place because it comes directly from storage\nfunction syncSubFromStorage(sub: SubInStorage, useDateObjects: boolean): Sub {\n const values = sub.values;\n if (values) {\n for (const e of values.entities || []) {\n e.store.useDateObjects = useDateObjects;\n e.store.attrs = values.attrs;\n e.store = s.fromJSON(e.store);\n }\n }\n\n return sub;\n}\n\nfunction syncSubToStorage(_k: string, sub: Sub): SubInStorage {\n if (sub.values?.entities) {\n const entities: SubEntity[] = [];\n for (const e of sub.values?.entities) {\n const store = s.toJSON(e.store);\n // We'll store the attrs once on values, and put the\n // attrs back into the store on hydration\n // @ts-ignore: ts doesn't want us to delete a non-optional\n delete store['attrs'];\n entities.push({ ...e, store });\n }\n return { ...sub, values: { ...sub.values, entities } };\n } else {\n return sub;\n }\n}\n\nfunction onMergeSub(\n _key: string,\n storageSub: SubInStorage,\n inMemorySub: Sub | null,\n): Sub {\n const storageTxId = storageSub?.state?.txId;\n const memoryTxId = inMemorySub?.state?.txId;\n\n if (storageTxId && (!memoryTxId || storageTxId > memoryTxId)) {\n return storageSub;\n }\n\n if (memoryTxId && (!storageTxId || memoryTxId > storageTxId)) {\n return inMemorySub;\n }\n\n return storageSub || inMemorySub;\n}\n\nfunction queryEntity(sub: Sub, store: any) {\n const res = instaql({ store, pageInfo: null, aggregate: null }, sub.query);\n return res.data[sub.table][0];\n}\n\nfunction getServerCreatedAt(sub: Sub, store: any, entityId: string): number {\n const aid = s.getAttrByFwdIdentName(store, sub.table, 'id')?.id;\n if (!aid) {\n return -1;\n }\n const t = s.getInMap(store.eav, [entityId, aid, entityId]);\n if (!t) {\n return -1;\n }\n return t[3];\n}\n\nfunction applyChangesToStore(\n store: any,\n changes: SyncUpdateTriplesMsg['txes'][number]['changes'],\n): void {\n for (const { action, triple } of changes) {\n switch (action) {\n case 'added':\n s.addTriple(store, triple);\n break;\n case 'removed':\n s.retractTriple(store, triple);\n break;\n }\n }\n}\n\nfunction changedFieldsOfChanges(\n store: any,\n changes: SyncUpdateTriplesMsg['txes'][number]['changes'],\n): {\n [eid: string]: SyncTransaction<\n any,\n any,\n any\n >['updated'][number]['changedFields'];\n} {\n // This will be more complicated when we include links, we can either add a\n // changedLinks field or we can have something like 'bookshelves.title`\n const changedFields = {};\n for (const { action, triple } of changes) {\n const [e, a, v] = triple;\n const field = store.attrs[a]?.['forward-identity']?.[2];\n if (!field) continue;\n\n const fields = changedFields[e] ?? {};\n changedFields[e] = fields;\n\n const oldNew = fields[field] ?? {};\n fields[field] = oldNew;\n\n switch (action) {\n case 'added':\n oldNew.newValue = v;\n break;\n case 'removed':\n // Only take the first thing that was removed, in case we modified things in the middle\n if (oldNew.oldValue === undefined) {\n oldNew.oldValue = v;\n }\n break;\n }\n }\n\n for (const k of Object.keys(changedFields)) {\n const { oldValue, newValue } = changedFields[k];\n if (oldValue === newValue) {\n delete changedFields[k];\n }\n }\n return changedFields;\n}\n\nfunction subData(sub: Sub, entities: NonNullable<Sub['values']>['entities']) {\n return { [sub.table]: entities.map((e) => e.entity) };\n}\n\n// Updates the sub order field type if it hasn't been set\n// and returns the type. We have to wait until the attrs\n// are loaded before we can determine the type.\nfunction orderFieldTypeMutative(sub: Sub, createStore) {\n if (sub.orderFieldType) {\n return sub.orderFieldType;\n }\n const orderFieldType =\n sub.orderField === 'serverCreatedAt'\n ? 'number'\n : s.getAttrByFwdIdentName(createStore([]), sub.table, sub.orderField)?.[\n 'checked-data-type'\n ];\n\n sub.orderFieldType = orderFieldType;\n return orderFieldType;\n}\n\nfunction sortEntitiesInPlace(\n sub: Sub,\n orderFieldType: NonNullable<Sub['orderFieldType']>,\n entities: NonNullable<Sub['values']>['entities'],\n) {\n const dataType = orderFieldType;\n if (sub.orderField === 'serverCreatedAt') {\n entities.sort(\n sub.orderDirection === 'asc'\n ? function compareEntities(a, b) {\n return compareOrder(\n a.entity.id,\n a.serverCreatedAt,\n b.entity.id,\n b.serverCreatedAt,\n dataType,\n );\n }\n : function compareEntities(b, a) {\n return compareOrder(\n a.entity.id,\n a.serverCreatedAt,\n b.entity.id,\n b.serverCreatedAt,\n dataType,\n );\n },\n );\n return;\n }\n\n const field = sub.orderField;\n\n entities.sort(\n sub.orderDirection === 'asc'\n ? function compareEntities(a, b) {\n return compareOrder(\n a.entity.id,\n a.entity[field],\n b.entity.id,\n b.entity[field],\n dataType,\n );\n }\n : function compareEntities(b, a) {\n return compareOrder(\n a.entity.id,\n a.entity[field],\n b.entity.id,\n b.entity[field],\n dataType,\n );\n },\n );\n}\n\nexport enum CallbackEventType {\n InitialSyncBatch = 'InitialSyncBatch',\n InitialSyncComplete = 'InitialSyncComplete',\n LoadFromStorage = 'LoadFromStorage',\n SyncTransaction = 'SyncTransaction',\n Error = 'Error',\n}\n\ntype QueryEntities<\n Schema extends IContainEntitiesAndLinks<EntitiesDef, any>,\n Q extends ValidQuery<Q, Schema>,\n UseDates extends boolean,\n> = InstaQLResponse<Schema, Q, UseDates>[keyof InstaQLResponse<\n Schema,\n Q,\n UseDates\n>];\n\ntype QueryEntity<\n Schema extends IContainEntitiesAndLinks<EntitiesDef, any>,\n Q extends ValidQuery<Q, Schema>,\n UseDates extends boolean,\n> = QueryEntities<Schema, Q, UseDates> extends (infer E)[] ? E : never;\n\ntype ChangedFields<Entity> = {\n [K in keyof Entity]?: {\n oldValue: Entity[K];\n newValue: Entity[K];\n };\n};\n\nexport interface BaseCallbackEvent<\n Schema extends IContainEntitiesAndLinks<EntitiesDef, any>,\n Q extends ValidQuery<Q, Schema>,\n UseDates extends boolean,\n> {\n type: CallbackEventType;\n data: InstaQLResponse<Schema, Q, UseDates>;\n}\n\nexport interface InitialSyncBatch<\n Schema extends IContainEntitiesAndLinks<EntitiesDef, any>,\n Q extends ValidQuery<Q, Schema>,\n UseDates extends boolean,\n> extends BaseCallbackEvent<Schema, Q, UseDates> {\n type: CallbackEventType.InitialSyncBatch;\n batch: QueryEntities<Schema, Q, UseDates>;\n}\n\nexport interface InitialSyncComplete<\n Schema extends IContainEntitiesAndLinks<EntitiesDef, any>,\n Q extends ValidQuery<Q, Schema>,\n UseDates extends boolean,\n> extends BaseCallbackEvent<Schema, Q, UseDates> {\n type: CallbackEventType.InitialSyncComplete;\n}\n\nexport interface SyncTransaction<\n Schema extends IContainEntitiesAndLinks<EntitiesDef, any>,\n Q extends ValidQuery<Q, Schema>,\n UseDates extends boolean,\n> extends BaseCallbackEvent<Schema, Q, UseDates> {\n type: CallbackEventType.SyncTransaction;\n added: QueryEntities<Schema, Q, UseDates>;\n removed: QueryEntities<Schema, Q, UseDates>;\n updated: {\n oldEntity: QueryEntity<Schema, Q, UseDates>;\n newEntity: QueryEntity<Schema, Q, UseDates>;\n changedFields: ChangedFields<QueryEntity<Schema, Q, UseDates>>;\n }[];\n}\n\nexport interface LoadFromStorage<\n Schema extends IContainEntitiesAndLinks<EntitiesDef, any>,\n Q extends ValidQuery<Q, Schema>,\n UseDates extends boolean,\n> extends BaseCallbackEvent<Schema, Q, UseDates> {\n type: CallbackEventType.LoadFromStorage;\n}\n\nexport interface SetupError<\n Schema extends IContainEntitiesAndLinks<EntitiesDef, any>,\n Q extends ValidQuery<Q, Schema>,\n UseDates extends boolean,\n> extends BaseCallbackEvent<Schema, Q, UseDates> {\n type: CallbackEventType.Error;\n error: { message: string; hint?: any; type: string; status: number };\n}\n\nexport type CallbackEvent<\n Schema extends IContainEntitiesAndLinks<EntitiesDef, any>,\n Q extends ValidQuery<Q, Schema>,\n UseDates extends boolean,\n> =\n | InitialSyncBatch<Schema, Q, UseDates>\n | InitialSyncComplete<Schema, Q, UseDates>\n | SyncTransaction<Schema, Q, UseDates>\n | LoadFromStorage<Schema, Q, UseDates>\n | SetupError<Schema, Q, UseDates>;\n\nexport type SyncTableCallback<\n Schema extends IContainEntitiesAndLinks<EntitiesDef, any>,\n Q extends ValidQuery<Q, Schema>,\n UseDates extends boolean,\n> = (event: CallbackEvent<Schema, Q, UseDates>) => void;\n\nexport class SyncTable {\n private trySend: TrySend;\n private subs: PersistedObject<string, Sub, SubInStorage>;\n // Using any for the SyncCallback because we'd need Reactor to be typed\n private callbacks: { [hash: string]: SyncTableCallback<any, any, any>[] } =\n {};\n private config: Config;\n private idToHash: { [subscriptionId: string]: string } = {};\n private log: Logger;\n private createStore: (triples: Triple[]) => any;\n\n constructor(\n trySend: TrySend,\n storage: StorageInterface,\n config: Config,\n log: Logger,\n createStore: (triples: Triple[]) => any,\n ) {\n this.trySend = trySend;\n this.config = config;\n this.log = log;\n this.createStore = createStore;\n\n this.subs = new PersistedObject<string, Sub, SubInStorage>({\n persister: storage,\n merge: onMergeSub,\n serialize: syncSubToStorage,\n parse: (_key, x) => syncSubFromStorage(x, this.config.useDateObjects),\n objectSize: (sub) => sub.values?.entities.length || 0,\n logger: log,\n gc: {\n maxAgeMs: 1000 * 60 * 60 * 24 * 7 * 52, // 1 year\n maxEntries: 1000,\n // Size of each sub is the number of entity\n maxSize: 1_000_000, // 1 million entities\n },\n });\n }\n\n public beforeUnload() {\n this.subs.flush();\n }\n\n public subscribe(\n q: any,\n cb: SyncTableCallback<any, any, any>,\n ): (\n opts?: { keepSubscription?: boolean | null | undefined } | null | undefined,\n ) => void {\n const hash = weakHash(q);\n this.callbacks[hash] = this.callbacks[hash] || [];\n this.callbacks[hash].push(cb);\n\n this.initSubscription(q, hash, cb);\n\n return (opts?: { keepSubscription?: boolean | null | undefined }) => {\n this.unsubscribe(hash, cb, opts?.keepSubscription);\n };\n }\n\n private unsubscribe(\n hash: string,\n cb: SyncTableCallback<any, any, any>,\n keepSubscription: boolean | null | undefined,\n ) {\n const cbs = (this.callbacks[hash] || []).filter((x) => x !== cb);\n this.callbacks[hash] = cbs;\n\n if (!cbs.length) {\n delete this.callbacks[hash];\n const sub = this.subs.currentValue[hash];\n if (sub?.state) {\n this.clearSubscriptionData(\n sub.state.subscriptionId,\n !!keepSubscription,\n );\n }\n if (!keepSubscription) {\n this.subs.updateInPlace((prev) => {\n delete prev[hash];\n });\n }\n }\n }\n\n private sendStart(query: string) {\n this.trySend(uuid(), {\n op: 'start-sync',\n q: query,\n });\n }\n\n private sendResync(sub: Sub, state: SubState, txId: number) {\n // Make sure we can find the hash from the subscriptionId\n this.idToHash[state.subscriptionId] = sub.hash;\n this.trySend(state.subscriptionId, {\n op: 'resync-table',\n 'subscription-id': state.subscriptionId,\n 'tx-id': txId,\n token: state.token,\n });\n }\n\n private sendRemove(state: SubState, keepSubscription: boolean) {\n this.trySend(uuid(), {\n op: 'remove-sync',\n 'subscription-id': state.subscriptionId,\n 'keep-subscription': keepSubscription,\n });\n }\n\n private async initSubscription(\n query: any,\n hash: string,\n cb?: SyncTableCallback<any, any, any>,\n ) {\n // Wait for storage to load so that we know if we already have an existing subscription\n await this.subs.waitForKeyToLoad(hash);\n const existingSub = this.subs.currentValue[hash];\n\n if (existingSub && existingSub.state && existingSub.state.txId) {\n this.sendResync(existingSub, existingSub.state, existingSub.state.txId);\n\n if (existingSub.values?.entities && cb) {\n cb({\n type: CallbackEventType.LoadFromStorage,\n data: subData(existingSub, existingSub.values?.entities),\n });\n }\n\n return;\n }\n\n const table = Object.keys(query)[0];\n const orderBy = query[table]?.$?.order || { serverCreatedAt: 'asc' };\n const [orderField, orderDirection] = Object.entries(orderBy)[0] as [\n string,\n 'asc' | 'desc',\n ];\n\n this.subs.updateInPlace((prev) => {\n prev[hash] = {\n query,\n hash: hash,\n table,\n orderDirection,\n orderField,\n createdAt: Date.now(),\n updatedAt: Date.now(),\n };\n });\n\n this.sendStart(query);\n }\n\n public async flushPending() {\n for (const hash of Object.keys(this.callbacks)) {\n await this.subs.waitForKeyToLoad(hash);\n const sub = this.subs.currentValue[hash];\n if (sub) {\n await this.initSubscription(sub.query, sub.hash);\n } else {\n this.log.error('Missing sub for hash in flushPending', hash);\n }\n }\n }\n\n public onStartSyncOk(msg: StartSyncOkMsg) {\n const subscriptionId = msg['subscription-id'];\n const q = msg.q;\n const hash = weakHash(q);\n\n this.idToHash[subscriptionId] = hash;\n\n this.subs.updateInPlace((prev) => {\n const sub = prev[hash];\n if (!sub) {\n this.log.error(\n 'Missing sub for hash',\n hash,\n 'subscription-id',\n subscriptionId,\n 'query',\n q,\n );\n return prev;\n }\n\n sub.state = {\n subscriptionId: subscriptionId,\n token: msg.token,\n };\n });\n }\n\n private notifyCbs(hash: string, event: CallbackEvent<any, any, any>) {\n for (const cb of this.callbacks[hash] || []) {\n cb(event);\n }\n }\n\n public onSyncLoadBatch(msg: SyncLoadBatchMsg) {\n const subscriptionId = msg['subscription-id'];\n const joinRows = msg['join-rows'];\n const hash = this.idToHash[subscriptionId];\n if (!hash) {\n this.log.error('Missing hash for subscription', msg);\n return;\n }\n\n const batch: any[] = [];\n const sub = this.subs.currentValue[hash];\n if (!sub) {\n this.log.error('Missing sub for hash', hash, msg);\n return;\n }\n\n const values: SubValues = sub.values ?? {\n entities: [],\n attrs: this.createStore([]).attrs,\n };\n sub.values = values;\n const entities = values.entities;\n\n for (const entRows of joinRows) {\n const store = this.createStore(entRows);\n values.attrs = store.attrs;\n const entity = queryEntity(sub, store);\n entities.push({\n store,\n entity,\n serverCreatedAt: getServerCreatedAt(sub, store, entity.id),\n });\n batch.push(entity);\n }\n\n this.subs.updateInPlace((prev) => {\n prev[hash] = sub;\n // Make sure we write a field or mutative won't\n // see the change because sub === prev[hash]\n prev[hash].updatedAt = Date.now();\n });\n\n if (sub.values) {\n this.notifyCbs(hash, {\n type: CallbackEventType.InitialSyncBatch,\n data: subData(sub, sub.values.entities),\n batch,\n });\n }\n }\n\n public onSyncInitFinish(msg: SyncInitFinishMsg) {\n const subscriptionId = msg['subscription-id'];\n const hash = this.idToHash[subscriptionId];\n if (!hash) {\n this.log.error('Missing hash for subscription', msg);\n return;\n }\n this.subs.updateInPlace((prev) => {\n const sub = prev[hash];\n if (!sub) {\n this.log.error('Missing sub for hash', hash, msg);\n return;\n }\n const state = sub.state;\n if (!state) {\n this.log.error('Sub never set init, missing result', sub, msg);\n return prev;\n }\n state.txId = msg['tx-id'];\n sub.updatedAt = Date.now();\n });\n\n const sub = this.subs.currentValue[hash];\n\n if (sub) {\n this.notifyCbs(hash, {\n type: CallbackEventType.InitialSyncComplete,\n data: subData(sub, sub.values?.entities || []),\n });\n }\n }\n\n public onSyncUpdateTriples(msg: SyncUpdateTriplesMsg) {\n const subscriptionId = msg['subscription-id'];\n const hash = this.idToHash[subscriptionId];\n if (!hash) {\n this.log.error('Missing hash for subscription', msg);\n return;\n }\n\n const sub = this.subs.currentValue[hash];\n if (!sub) {\n this.log.error('Missing sub for hash', hash, msg);\n return;\n }\n\n const state = sub.state;\n if (!state) {\n this.log.error('Missing state for sub', sub, msg);\n return;\n }\n\n for (const tx of msg.txes) {\n if (state.txId && state.txId >= tx['tx-id']) {\n continue;\n }\n state.txId = tx['tx-id'];\n const idxesToDelete: number[] = [];\n // Note: this won't work as well when links are involved\n const byEid: {\n [eid: string]: SyncUpdateTriplesMsg['txes'][number]['changes'];\n } = {};\n for (const change of tx.changes) {\n const eidChanges = byEid[change.triple[0]] ?? [];\n byEid[change.triple[0]] = eidChanges;\n eidChanges.push(change);\n }\n\n const values: SubValues = sub.values ?? {\n entities: [],\n attrs: this.createStore([]).attrs,\n };\n const entities = values.entities;\n sub.values = values;\n\n const updated: SyncTransaction<any, any, any>['updated'] = [];\n // Update the existing stores, if we already know about this entity\n eidLoop: for (const [eid, changes] of Object.entries(byEid)) {\n for (let i = 0; i < entities.length; i++) {\n const ent = entities[i];\n if (s.hasEntity(ent.store, eid)) {\n applyChangesToStore(ent.store, changes);\n const entity = queryEntity(sub, ent.store);\n const changedFields = changedFieldsOfChanges(ent.store, changes)[\n eid\n ];\n if (entity) {\n updated.push({\n oldEntity: ent.entity,\n newEntity: entity,\n changedFields: changedFields || {},\n });\n ent.entity = entity;\n } else {\n idxesToDelete.push(i);\n }\n delete byEid[eid];\n continue eidLoop;\n }\n }\n }\n\n const added: any[] = [];\n // If we have anything left in byEid, then this must be a new entity we don't know about\n for (const [_eid, changes] of Object.entries(byEid)) {\n const store = this.createStore([]);\n values.attrs = store.attrs;\n applyChangesToStore(store, changes);\n const entity = queryEntity(sub, store);\n if (!entity) {\n this.log.error('No entity found after applying change', {\n sub,\n changes,\n store,\n });\n continue;\n }\n entities.push({\n store,\n entity,\n serverCreatedAt: getServerCreatedAt(sub, store, entity.id),\n });\n added.push(entity);\n }\n\n const removed: any[] = [];\n\n for (const idx of idxesToDelete.sort().reverse()) {\n removed.push(entities[idx].entity);\n entities.splice(idx, 1);\n }\n\n const orderFieldType = orderFieldTypeMutative(sub, this.createStore);\n\n sortEntitiesInPlace(sub, orderFieldType!, entities);\n this.notifyCbs(hash, {\n type: CallbackEventType.SyncTransaction,\n data: subData(sub, sub.values?.entities),\n added,\n removed,\n updated,\n });\n }\n this.subs.updateInPlace((prev) => {\n prev[hash] = sub;\n // Make sure we write a field or mutative won't\n // see the change because sub === prev[hash]\n prev[hash].updatedAt = Date.now();\n });\n }\n\n private clearSubscriptionData(\n subscriptionId: string,\n keepSubscription: boolean,\n ) {\n const hash = this.idToHash[subscriptionId];\n if (hash) {\n delete this.idToHash[subscriptionId];\n const sub = this.subs.currentValue[hash];\n if (sub.state) {\n this.sendRemove(sub.state, keepSubscription);\n }\n if (keepSubscription) {\n this.subs.unloadKey(hash);\n } else {\n this.subs.updateInPlace((prev) => {\n delete prev[hash];\n });\n }\n if (sub) {\n return sub;\n }\n }\n }\n\n public onStartSyncError(msg: {\n op: 'error';\n 'original-event': StartMsg;\n 'client-event-id': string;\n status: number;\n type: string;\n message?: string;\n hint?: any;\n }) {\n const hash = weakHash(msg['original-event']['q']);\n const error = {\n message: msg.message || 'Uh-oh, something went wrong. Ping Joe & Stopa.',\n status: msg.status,\n type: msg.type,\n hint: msg.hint,\n };\n\n const k = Object.keys(msg['original-event']['q'])[0];\n this.notifyCbs(hash, {\n type: CallbackEventType.Error,\n data: { [k]: [] },\n error,\n });\n }\n\n public onResyncError(msg: {\n op: 'error';\n 'original-event': ResyncMsg;\n status: number;\n type: string;\n }) {\n // Clear the subscription and start from scrath on any resync error\n // This can happen if the auth changed and we need to refetch with the\n // new auth or if the subscription is too far behind.\n const subscriptionId = msg['original-event']['subscription-id'];\n const removedSub = this.clearSubscriptionData(subscriptionId, false);\n if (removedSub) {\n this.initSubscription(removedSub.query, removedSub.hash);\n }\n }\n}\n"]}
@@ -3,7 +3,7 @@ type etype = string;
3
3
  type label = string;
4
4
  export type InstantDBIdent = [id, etype, label];
5
5
  export type InstantDBInferredType = 'number' | 'string' | 'boolean' | 'json';
6
- export type InstantDBCheckedDataType = 'number' | 'string' | 'boolean' | 'date' | 'json';
6
+ export type InstantDBCheckedDataType = 'number' | 'string' | 'boolean' | 'date';
7
7
  export type InstantDBAttrOnDelete = 'cascade';
8
8
  export type InstantDBAttr = {
9
9
  id: string;
@@ -1 +1 @@
1
- {"version":3,"file":"attrTypes.d.ts","sourceRoot":"","sources":["../../src/attrTypes.ts"],"names":[],"mappings":"AAAA,KAAK,EAAE,GAAG,MAAM,CAAC;AACjB,KAAK,KAAK,GAAG,MAAM,CAAC;AACpB,KAAK,KAAK,GAAG,MAAM,CAAC;AAEpB,MAAM,MAAM,cAAc,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AAEhD,MAAM,MAAM,qBAAqB,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC;AAE7E,MAAM,MAAM,wBAAwB,GAChC,QAAQ,GACR,QAAQ,GACR,SAAS,GACT,MAAM,GACN,MAAM,CAAC;AAEX,MAAM,MAAM,qBAAqB,GAAG,SAAS,CAAC;AAE9C,MAAM,MAAM,aAAa,GAAG;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,MAAM,GAAG,KAAK,CAAC;IAC7B,WAAW,EAAE,MAAM,GAAG,KAAK,CAAC;IAC5B,kBAAkB,EAAE,cAAc,CAAC;IACnC,kBAAkB,CAAC,EAAE,cAAc,GAAG,IAAI,GAAG,SAAS,CAAC;IACvD,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,OAAO,CAAC;IACrB,gBAAgB,EAAE,qBAAqB,EAAE,GAAG,IAAI,CAAC;IACjD,OAAO,EAAE,QAAQ,GAAG,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,qBAAqB,GAAG,IAAI,GAAG,SAAS,CAAC;IACvD,mBAAmB,CAAC,EAAE,qBAAqB,GAAG,IAAI,GAAG,SAAS,CAAC;IAC/D,mBAAmB,CAAC,EAAE,wBAAwB,GAAG,IAAI,GAAG,SAAS,CAAC;IAClE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B,CAAC"}
1
+ {"version":3,"file":"attrTypes.d.ts","sourceRoot":"","sources":["../../src/attrTypes.ts"],"names":[],"mappings":"AAAA,KAAK,EAAE,GAAG,MAAM,CAAC;AACjB,KAAK,KAAK,GAAG,MAAM,CAAC;AACpB,KAAK,KAAK,GAAG,MAAM,CAAC;AAEpB,MAAM,MAAM,cAAc,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AAEhD,MAAM,MAAM,qBAAqB,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC;AAE7E,MAAM,MAAM,wBAAwB,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC;AAEhF,MAAM,MAAM,qBAAqB,GAAG,SAAS,CAAC;AAE9C,MAAM,MAAM,aAAa,GAAG;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,MAAM,GAAG,KAAK,CAAC;IAC7B,WAAW,EAAE,MAAM,GAAG,KAAK,CAAC;IAC5B,kBAAkB,EAAE,cAAc,CAAC;IACnC,kBAAkB,CAAC,EAAE,cAAc,GAAG,IAAI,GAAG,SAAS,CAAC;IACvD,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,OAAO,CAAC;IACrB,gBAAgB,EAAE,qBAAqB,EAAE,GAAG,IAAI,CAAC;IACjD,OAAO,EAAE,QAAQ,GAAG,MAAM,CAAC;IAC3B,WAAW,CAAC,EAAE,qBAAqB,GAAG,IAAI,GAAG,SAAS,CAAC;IACvD,mBAAmB,CAAC,EAAE,qBAAqB,GAAG,IAAI,GAAG,SAAS,CAAC;IAC/D,mBAAmB,CAAC,EAAE,wBAAwB,GAAG,IAAI,GAAG,SAAS,CAAC;IAClE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"attrTypes.js","sourceRoot":"","sources":["../../src/attrTypes.ts"],"names":[],"mappings":"","sourcesContent":["type id = string;\ntype etype = string;\ntype label = string;\n\nexport type InstantDBIdent = [id, etype, label];\n\nexport type InstantDBInferredType = 'number' | 'string' | 'boolean' | 'json';\n\nexport type InstantDBCheckedDataType =\n | 'number'\n | 'string'\n | 'boolean'\n | 'date'\n | 'json';\n\nexport type InstantDBAttrOnDelete = 'cascade';\n\nexport type InstantDBAttr = {\n id: string;\n 'value-type': 'blob' | 'ref';\n cardinality: 'many' | 'one';\n 'forward-identity': InstantDBIdent;\n 'reverse-identity'?: InstantDBIdent | null | undefined;\n 'unique?': boolean;\n 'index?': boolean;\n 'required?': boolean;\n 'inferred-types': InstantDBInferredType[] | null;\n catalog: 'system' | 'user';\n 'on-delete'?: InstantDBAttrOnDelete | null | undefined;\n 'on-delete-reverse'?: InstantDBAttrOnDelete | null | undefined;\n 'checked-data-type'?: InstantDBCheckedDataType | null | undefined;\n 'indexing?'?: boolean;\n 'setting-unique?'?: boolean;\n};\n"]}
1
+ {"version":3,"file":"attrTypes.js","sourceRoot":"","sources":["../../src/attrTypes.ts"],"names":[],"mappings":"","sourcesContent":["type id = string;\ntype etype = string;\ntype label = string;\n\nexport type InstantDBIdent = [id, etype, label];\n\nexport type InstantDBInferredType = 'number' | 'string' | 'boolean' | 'json';\n\nexport type InstantDBCheckedDataType = 'number' | 'string' | 'boolean' | 'date';\n\nexport type InstantDBAttrOnDelete = 'cascade';\n\nexport type InstantDBAttr = {\n id: string;\n 'value-type': 'blob' | 'ref';\n cardinality: 'many' | 'one';\n 'forward-identity': InstantDBIdent;\n 'reverse-identity'?: InstantDBIdent | null | undefined;\n 'unique?': boolean;\n 'index?': boolean;\n 'required?': boolean;\n 'inferred-types': InstantDBInferredType[] | null;\n catalog: 'system' | 'user';\n 'on-delete'?: InstantDBAttrOnDelete | null | undefined;\n 'on-delete-reverse'?: InstantDBAttrOnDelete | null | undefined;\n 'checked-data-type'?: InstantDBCheckedDataType | null | undefined;\n 'indexing?'?: boolean;\n 'setting-unique?'?: boolean;\n};\n"]}
@@ -5,7 +5,7 @@ exports.querySingle = querySingle;
5
5
  exports.queryWhere = queryWhere;
6
6
  exports.query = query;
7
7
  // 1. patternMatch
8
- const store_js_1 = require("./store.js");
8
+ const store_ts_1 = require("./store.js");
9
9
  function isVariable(x) {
10
10
  return typeof x === 'string' && x.startsWith('?');
11
11
  }
@@ -101,6 +101,6 @@ function query(store, { find, where }) {
101
101
  }
102
102
  // 5. Index
103
103
  function relevantTriples(store, pattern, context) {
104
- return (0, store_js_1.getTriples)(store, actualize(context, pattern));
104
+ return (0, store_ts_1.getTriples)(store, actualize(context, pattern));
105
105
  }
106
106
  //# sourceMappingURL=datalog.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"datalog.js","sourceRoot":"","sources":["../../src/datalog.js"],"names":[],"mappings":"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","sourcesContent":["// 1. patternMatch\nimport { getTriples } from './store.js';\n\nfunction isVariable(x) {\n return typeof x === 'string' && x.startsWith('?');\n}\n\nfunction matchVariable(variable, triplePart, context) {\n if (context.hasOwnProperty(variable)) {\n const bound = context[variable];\n return matchPart(bound, triplePart, context);\n }\n return { ...context, [variable]: triplePart };\n}\n\nfunction matchExact(patternPart, triplePart, context) {\n return patternPart === triplePart ? context : null;\n}\n\nfunction matcherForPatternPart(patternPart) {\n switch (typeof patternPart) {\n case 'string':\n return patternPart.startsWith('?') ? matchVariable : matchExact;\n default:\n return matchExact;\n }\n}\n\nconst validArgMapProps = [\n 'in',\n '$in',\n '$not',\n '$isNull',\n '$comparator', // covers all of $gt, $lt, etc.\n];\n\n// Checks if an object is an args map\nfunction isArgsMap(patternPart) {\n for (const prop of validArgMapProps) {\n if (patternPart.hasOwnProperty(prop)) {\n return true;\n }\n }\n return false;\n}\n\nfunction matchPart(patternPart, triplePart, context) {\n if (!context) return null;\n if (typeof patternPart === 'object') {\n // This is an args map, so we'll have already fitered the triples\n // in `getRelevantTriples`\n if (isArgsMap(patternPart)) {\n return context;\n }\n return null;\n }\n const matcher = matcherForPatternPart(patternPart);\n return matcher(patternPart, triplePart, context);\n}\n\nexport function matchPattern(pattern, triple, context) {\n return pattern.reduce((context, patternPart, idx) => {\n const triplePart = triple[idx];\n return matchPart(patternPart, triplePart, context);\n }, context);\n}\n\n// 2. querySingle\n\nexport function querySingle(store, pattern, context) {\n return relevantTriples(store, pattern, context)\n .map((triple) => matchPattern(pattern, triple, context))\n .filter((x) => x);\n}\n\n// 3. queryWhere\n\nfunction queryPattern(store, pattern, contexts) {\n if (pattern.or) {\n return pattern.or.patterns.flatMap((patterns) => {\n return queryWhere(store, patterns, contexts);\n });\n }\n if (pattern.and) {\n return pattern.and.patterns.reduce((contexts, patterns) => {\n return queryWhere(store, patterns, contexts);\n }, contexts);\n }\n return contexts.flatMap((context) => querySingle(store, pattern, context));\n}\n\nexport function queryWhere(store, patterns, contexts = [{}]) {\n return patterns.reduce((contexts, pattern) => {\n return queryPattern(store, pattern, contexts);\n }, contexts);\n}\n\n// 4. query\n\nfunction actualize(context, find) {\n if (Array.isArray(find)) {\n return find.map((findPart) => actualize(context, findPart));\n }\n return isVariable(find) ? context[find] : find;\n}\n\nexport function query(store, { find, where }) {\n const contexts = queryWhere(store, where);\n return contexts.map((context) => actualize(context, find));\n}\n\n// 5. Index\n\nfunction relevantTriples(store, pattern, context) {\n return getTriples(store, actualize(context, pattern));\n}\n"]}
1
+ {"version":3,"file":"datalog.js","sourceRoot":"","sources":["../../src/datalog.js"],"names":[],"mappings":"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","sourcesContent":["// 1. patternMatch\nimport { getTriples } from './store.ts';\n\nfunction isVariable(x) {\n return typeof x === 'string' && x.startsWith('?');\n}\n\nfunction matchVariable(variable, triplePart, context) {\n if (context.hasOwnProperty(variable)) {\n const bound = context[variable];\n return matchPart(bound, triplePart, context);\n }\n return { ...context, [variable]: triplePart };\n}\n\nfunction matchExact(patternPart, triplePart, context) {\n return patternPart === triplePart ? context : null;\n}\n\nfunction matcherForPatternPart(patternPart) {\n switch (typeof patternPart) {\n case 'string':\n return patternPart.startsWith('?') ? matchVariable : matchExact;\n default:\n return matchExact;\n }\n}\n\nconst validArgMapProps = [\n 'in',\n '$in',\n '$not',\n '$isNull',\n '$comparator', // covers all of $gt, $lt, etc.\n];\n\n// Checks if an object is an args map\nfunction isArgsMap(patternPart) {\n for (const prop of validArgMapProps) {\n if (patternPart.hasOwnProperty(prop)) {\n return true;\n }\n }\n return false;\n}\n\nfunction matchPart(patternPart, triplePart, context) {\n if (!context) return null;\n if (typeof patternPart === 'object') {\n // This is an args map, so we'll have already fitered the triples\n // in `getRelevantTriples`\n if (isArgsMap(patternPart)) {\n return context;\n }\n return null;\n }\n const matcher = matcherForPatternPart(patternPart);\n return matcher(patternPart, triplePart, context);\n}\n\nexport function matchPattern(pattern, triple, context) {\n return pattern.reduce((context, patternPart, idx) => {\n const triplePart = triple[idx];\n return matchPart(patternPart, triplePart, context);\n }, context);\n}\n\n// 2. querySingle\n\nexport function querySingle(store, pattern, context) {\n return relevantTriples(store, pattern, context)\n .map((triple) => matchPattern(pattern, triple, context))\n .filter((x) => x);\n}\n\n// 3. queryWhere\n\nfunction queryPattern(store, pattern, contexts) {\n if (pattern.or) {\n return pattern.or.patterns.flatMap((patterns) => {\n return queryWhere(store, patterns, contexts);\n });\n }\n if (pattern.and) {\n return pattern.and.patterns.reduce((contexts, patterns) => {\n return queryWhere(store, patterns, contexts);\n }, contexts);\n }\n return contexts.flatMap((context) => querySingle(store, pattern, context));\n}\n\nexport function queryWhere(store, patterns, contexts = [{}]) {\n return patterns.reduce((contexts, pattern) => {\n return queryPattern(store, pattern, contexts);\n }, contexts);\n}\n\n// 4. query\n\nfunction actualize(context, find) {\n if (Array.isArray(find)) {\n return find.map((findPart) => actualize(context, findPart));\n }\n return isVariable(find) ? context[find] : find;\n}\n\nexport function query(store, { find, where }) {\n const contexts = queryWhere(store, where);\n return contexts.map((context) => actualize(context, find));\n}\n\n// 5. Index\n\nfunction relevantTriples(store, pattern, context) {\n return getTriples(store, actualize(context, pattern));\n}\n"]}
@@ -7,7 +7,7 @@ exports.rewriteStep = rewriteStep;
7
7
  exports.getAttrByFwdIdentName = getAttrByFwdIdentName;
8
8
  exports.getAttrByReverseIdentName = getAttrByReverseIdentName;
9
9
  exports.transform = transform;
10
- const store_js_1 = require("./store.js");
10
+ const store_ts_1 = require("./store.js");
11
11
  const instatx_ts_1 = require("./instatx.js");
12
12
  const object_js_1 = require("./utils/object.js");
13
13
  const dates_ts_1 = require("./utils/dates.js");
@@ -182,7 +182,7 @@ function checkEntityExists(stores, etype, eid) {
182
182
  const ev = store === null || store === void 0 ? void 0 : store.aev.get(entity_a);
183
183
  if (ev) {
184
184
  // This would be a lot more efficient with a ave index
185
- for (const [e_, a_, v] of (0, store_js_1.allMapValues)(ev, 2)) {
185
+ for (const [e_, a_, v] of (0, store_ts_1.allMapValues)(ev, 2)) {
186
186
  if (v === entity_v) {
187
187
  return true;
188
188
  }
@@ -1 +1 @@
1
- {"version":3,"file":"instaml.js","sourceRoot":"","sources":["../../src/instaml.js"],"names":[],"mappings":"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","sourcesContent":["import { allMapValues } from './store.js';\nimport { getOps, isLookup, parseLookup } from './instatx.ts';\nimport { immutableRemoveUndefined } from './utils/object.js';\nimport { coerceToDate } from './utils/dates.ts';\nimport uuid from './utils/uuid.ts';\n\n// Rewrites optimistic attrs with the attrs we get back from the server.\nexport function rewriteStep(attrMapping, txStep) {\n const { attrIdMap, refSwapAttrIds } = attrMapping;\n const rewritten = [];\n for (const part of txStep) {\n const newValue = attrIdMap[part];\n\n if (newValue) {\n // Rewrites attr id\n rewritten.push(newValue);\n } else if (Array.isArray(part) && part.length == 2 && attrIdMap[part[0]]) {\n // Rewrites attr id in lookups\n const [aid, value] = part;\n rewritten.push([attrIdMap[aid], value]);\n } else {\n rewritten.push(part);\n }\n }\n const [action] = txStep;\n if (\n (action === 'add-triple' || action === 'retract-triple') &&\n refSwapAttrIds.has(txStep[2])\n ) {\n // Reverse links if the optimistic link attr is backwards\n const tmp = rewritten[1];\n rewritten[1] = rewritten[3];\n rewritten[3] = tmp;\n }\n return rewritten;\n}\n\nexport function getAttrByFwdIdentName(attrs, inputEtype, inputIdentName) {\n return Object.values(attrs).find((attr) => {\n const [_id, etype, label] = attr['forward-identity'];\n return etype === inputEtype && label === inputIdentName;\n });\n}\n\nexport function getAttrByReverseIdentName(attrs, inputEtype, inputIdentName) {\n return Object.values(attrs).find((attr) => {\n const revIdent = attr['reverse-identity'];\n if (!revIdent) return false;\n const [_id, etype, label] = revIdent;\n return etype === inputEtype && label === inputIdentName;\n });\n}\n\nfunction explodeLookupRef(eid) {\n if (Array.isArray(eid)) {\n return eid;\n }\n const entries = Object.entries(eid);\n if (entries.length !== 1) {\n throw new Error(\n 'lookup must be an object with a single unique attr and value.',\n );\n }\n return entries[0];\n}\n\nfunction isRefLookupIdent(attrs, etype, identName) {\n return (\n identName.indexOf('.') !== -1 &&\n // attr names can have `.` in them, so use the attr we find with a `.`\n // before assuming it's a ref lookup.\n !getAttrByFwdIdentName(attrs, etype, identName)\n );\n}\n\nfunction extractRefLookupFwdName(identName) {\n const [fwdName, idIdent, ...rest] = identName.split('.');\n if (rest.length > 0 || idIdent !== 'id') {\n throw new Error(`${identName} is not a valid lookup attribute.`);\n }\n\n return fwdName;\n}\n\nfunction lookupIdentToAttr(attrs, etype, identName) {\n if (!isRefLookupIdent(attrs, etype, identName)) {\n return getAttrByFwdIdentName(attrs, etype, identName);\n }\n\n const fwdName = extractRefLookupFwdName(identName);\n\n const refAttr =\n getAttrByFwdIdentName(attrs, etype, fwdName) ||\n getAttrByReverseIdentName(attrs, etype, fwdName);\n if (refAttr && refAttr['value-type'] !== 'ref') {\n throw new Error(`${identName} does not reference a valid link attribute.`);\n }\n return refAttr;\n}\n\n// Returns [attr, value] for the eid if the eid is a lookup.\n// If it's a regular eid, returns null\nfunction lookupPairOfEid(eid) {\n if (typeof eid === 'string' && !isLookup(eid)) {\n return null;\n }\n return typeof eid === 'string' && isLookup(eid)\n ? parseLookup(eid)\n : explodeLookupRef(eid);\n}\n\nfunction extractLookup(attrs, etype, eid) {\n const lookupPair = lookupPairOfEid(eid);\n\n if (lookupPair === null) {\n return eid;\n }\n\n const [identName, value] = lookupPair;\n const attr = lookupIdentToAttr(attrs, etype, identName);\n if (!attr || !attr['unique?']) {\n throw new Error(`${identName} is not a unique attribute.`);\n }\n return [attr.id, value];\n}\n\nfunction withIdAttrForLookup(attrs, etype, eidA, txSteps) {\n const lookup = extractLookup(attrs, etype, eidA);\n if (!Array.isArray(lookup)) {\n return txSteps;\n }\n const idTuple = [\n 'add-triple',\n lookup,\n getAttrByFwdIdentName(attrs, etype, 'id').id,\n lookup,\n ];\n return [idTuple].concat(txSteps);\n}\n\nfunction expandLink({ attrs }, [etype, eidA, obj]) {\n const addTriples = Object.entries(obj).flatMap(([label, eidOrEids]) => {\n const eids = Array.isArray(eidOrEids) ? eidOrEids : [eidOrEids];\n const fwdAttr = getAttrByFwdIdentName(attrs, etype, label);\n const revAttr = getAttrByReverseIdentName(attrs, etype, label);\n return eids.map((eidB) => {\n const txStep = fwdAttr\n ? [\n 'add-triple',\n extractLookup(attrs, etype, eidA),\n fwdAttr.id,\n extractLookup(attrs, fwdAttr['reverse-identity'][1], eidB),\n ]\n : [\n 'add-triple',\n extractLookup(attrs, revAttr['forward-identity'][1], eidB),\n revAttr.id,\n extractLookup(attrs, etype, eidA),\n ];\n return txStep;\n });\n });\n return withIdAttrForLookup(attrs, etype, eidA, addTriples);\n}\n\nfunction expandUnlink({ attrs }, [etype, eidA, obj]) {\n const retractTriples = Object.entries(obj).flatMap(([label, eidOrEids]) => {\n const eids = Array.isArray(eidOrEids) ? eidOrEids : [eidOrEids];\n const fwdAttr = getAttrByFwdIdentName(attrs, etype, label);\n const revAttr = getAttrByReverseIdentName(attrs, etype, label);\n return eids.map((eidB) => {\n const txStep = fwdAttr\n ? [\n 'retract-triple',\n extractLookup(attrs, etype, eidA),\n fwdAttr.id,\n extractLookup(attrs, fwdAttr['reverse-identity'][1], eidB),\n ]\n : [\n 'retract-triple',\n extractLookup(attrs, revAttr['forward-identity'][1], eidB),\n revAttr.id,\n extractLookup(attrs, etype, eidA),\n ];\n return txStep;\n });\n });\n return withIdAttrForLookup(attrs, etype, eidA, retractTriples);\n}\n\nfunction checkEntityExists(stores, etype, eid) {\n if (Array.isArray(eid)) {\n // lookup ref\n const [entity_a, entity_v] = eid;\n for (const store of stores || []) {\n const ev = store?.aev.get(entity_a);\n if (ev) {\n // This would be a lot more efficient with a ave index\n for (const [e_, a_, v] of allMapValues(ev, 2)) {\n if (v === entity_v) {\n return true;\n }\n }\n }\n }\n } else {\n // eid\n for (const store of stores || []) {\n const av = store?.eav.get(eid);\n if (av) {\n for (const attr_id of av.keys()) {\n if (store.attrs[attr_id]['forward-identity'][1] == etype) {\n return true;\n }\n }\n }\n }\n }\n return false;\n}\n\nfunction convertOpts({ stores, attrs }, [etype, eid, obj_, opts]) {\n return opts?.upsert === false\n ? { mode: 'update' }\n : opts?.upsert === true\n ? null\n : checkEntityExists(stores, etype, eid)\n ? { mode: 'update' }\n : null; // auto mode chooses between update and upsert, not update and create, just in case\n}\n\nfunction expandCreate(ctx, step) {\n const { stores, attrs } = ctx;\n const [etype, eid, obj_, opts] = step;\n const obj = immutableRemoveUndefined(obj_);\n const lookup = extractLookup(attrs, etype, eid);\n // id first so that we don't clobber updates on the lookup field\n const attrTuples = [['id', lookup]]\n .concat(Object.entries(obj))\n .map(([identName, value]) => {\n const attr = getAttrByFwdIdentName(attrs, etype, identName);\n\n if (attr['checked-data-type'] === 'date' && ctx.useDateObjects) {\n value = coerceToDate(value);\n }\n\n return ['add-triple', lookup, attr.id, value, { mode: 'create' }];\n });\n return attrTuples;\n}\n\nfunction expandUpdate(ctx, step) {\n const { stores, attrs } = ctx;\n const [etype, eid, obj_, opts] = step;\n const obj = immutableRemoveUndefined(obj_);\n const lookup = extractLookup(attrs, etype, eid);\n const serverOpts = convertOpts(ctx, [etype, lookup, obj_, opts]);\n // id first so that we don't clobber updates on the lookup field\n const attrTuples = [['id', lookup]]\n .concat(Object.entries(obj))\n .map(([identName, value]) => {\n const attr = getAttrByFwdIdentName(attrs, etype, identName);\n\n if (attr['checked-data-type'] === 'date' && ctx.useDateObjects) {\n value = coerceToDate(value);\n }\n\n return [\n 'add-triple',\n lookup,\n attr.id,\n value,\n ...(serverOpts ? [serverOpts] : []),\n ];\n });\n return attrTuples;\n}\n\nfunction expandDelete({ attrs }, [etype, eid]) {\n const lookup = extractLookup(attrs, etype, eid);\n return [['delete-entity', lookup, etype]];\n}\n\nfunction expandDeepMerge(ctx, step) {\n const { stores, attrs } = ctx;\n const [etype, eid, obj_, opts] = step;\n const obj = immutableRemoveUndefined(obj_);\n const lookup = extractLookup(attrs, etype, eid);\n const serverOpts = convertOpts(ctx, [etype, lookup, obj_, opts]);\n const attrTuples = Object.entries(obj).map(([identName, value]) => {\n const attr = getAttrByFwdIdentName(attrs, etype, identName);\n return [\n 'deep-merge-triple',\n lookup,\n attr.id,\n value,\n ...(serverOpts ? [serverOpts] : []),\n ];\n });\n\n const idTuple = [\n 'add-triple',\n lookup,\n getAttrByFwdIdentName(attrs, etype, 'id').id,\n lookup,\n ...(serverOpts ? [serverOpts] : []),\n ];\n\n // id first so that we don't clobber updates on the lookup field\n return [idTuple].concat(attrTuples);\n}\n\nfunction expandRuleParams({ attrs }, [etype, eid, ruleParams]) {\n const lookup = extractLookup(attrs, etype, eid);\n return [['rule-params', lookup, etype, ruleParams]];\n}\n\nfunction removeIdFromArgs(step) {\n const [op, etype, eid, obj, opts] = step;\n if (!obj) {\n return step;\n }\n const newObj = { ...obj };\n delete newObj.id;\n return [op, etype, eid, newObj, ...(opts ? [opts] : [])];\n}\n\nfunction toTxSteps(ctx, step) {\n const [action, ...args] = removeIdFromArgs(step);\n switch (action) {\n case 'merge':\n return expandDeepMerge(ctx, args);\n case 'create':\n return expandCreate(ctx, args);\n case 'update':\n return expandUpdate(ctx, args);\n case 'link':\n return expandLink(ctx, args);\n case 'unlink':\n return expandUnlink(ctx, args);\n case 'delete':\n return expandDelete(ctx, args);\n case 'ruleParams':\n return expandRuleParams(ctx, args);\n default:\n throw new Error(`unsupported action ${action}`);\n }\n}\n\n// ---------\n// transform\n\nfunction checkedDataTypeOfValueType(valueType) {\n switch (valueType) {\n case 'string':\n case 'date':\n case 'boolean':\n case 'number':\n return valueType;\n default:\n return undefined;\n }\n}\n\nfunction objectPropsFromSchema(schema, etype, label) {\n const attr = schema.entities[etype]?.attrs?.[label];\n if (label === 'id') return null;\n if (!attr) {\n throw new Error(`${etype}.${label} does not exist in your schema`);\n }\n const { unique, indexed } = attr?.config;\n const checkedDataType = checkedDataTypeOfValueType(attr?.valueType);\n\n return {\n 'index?': indexed,\n 'unique?': unique,\n 'checked-data-type': checkedDataType,\n };\n}\n\nfunction createObjectAttr(schema, etype, label, props) {\n const schemaObjectProps = schema\n ? objectPropsFromSchema(schema, etype, label)\n : null;\n const attrId = uuid();\n const fwdIdentId = uuid();\n const fwdIdent = [fwdIdentId, etype, label];\n return {\n id: attrId,\n 'forward-identity': fwdIdent,\n 'value-type': 'blob',\n cardinality: 'one',\n 'unique?': false,\n 'index?': false,\n isUnsynced: true,\n ...(schemaObjectProps || {}),\n ...(props || {}),\n };\n}\n\nfunction findSchemaLink(schema, etype, label) {\n const found = Object.values(schema.links).find((x) => {\n return (\n (x.forward.on === etype && x.forward.label === label) ||\n (x.reverse.on === etype && x.reverse.label === label)\n );\n });\n return found;\n}\n\nfunction refPropsFromSchema(schema, etype, label) {\n const found = findSchemaLink(schema, etype, label);\n if (!found) {\n throw new Error(`Couldn't find the link ${etype}.${label} in your schema`);\n }\n const { forward, reverse } = found;\n return {\n 'forward-identity': [uuid(), forward.on, forward.label],\n 'reverse-identity': [uuid(), reverse.on, reverse.label],\n cardinality: forward.has === 'one' ? 'one' : 'many',\n 'unique?': reverse.has === 'one',\n 'on-delete': forward.onDelete,\n 'on-delete-reverse': reverse.onDelete,\n };\n}\n\nfunction createRefAttr(schema, etype, label, props) {\n const schemaRefProps = schema\n ? refPropsFromSchema(schema, etype, label)\n : null;\n const attrId = uuid();\n const fwdIdent = [uuid(), etype, label];\n const revIdent = [uuid(), label, etype];\n return {\n id: attrId,\n 'forward-identity': fwdIdent,\n 'reverse-identity': revIdent,\n 'value-type': 'ref',\n cardinality: 'many',\n 'unique?': false,\n 'index?': false,\n isUnsynced: true,\n ...(schemaRefProps || {}),\n ...(props || {}),\n };\n}\n\n// Actions that have an object, e.g. not delete\nconst OBJ_ACTIONS = new Set(['create', 'update', 'merge', 'link', 'unlink']);\nconst REF_ACTIONS = new Set(['link', 'unlink']);\nconst UPDATE_ACTIONS = new Set(['create', 'update', 'merge']);\nconst SUPPORTS_LOOKUP_ACTIONS = new Set([\n 'link',\n 'unlink',\n 'create',\n 'update',\n 'merge',\n 'delete',\n 'ruleParams',\n]);\n\nconst lookupProps = { 'unique?': true, 'index?': true };\nconst refLookupProps = { ...lookupProps, cardinality: 'one' };\n\nfunction lookupPairsOfOp(op) {\n const res = [];\n const [action, etype, eid, obj] = op;\n if (!SUPPORTS_LOOKUP_ACTIONS.has(action)) {\n return res;\n }\n\n const eidLookupPair = lookupPairOfEid(eid);\n if (eidLookupPair) {\n res.push({ etype: etype, lookupPair: eidLookupPair });\n }\n if (action === 'link') {\n for (const [label, eidOrEids] of Object.entries(obj)) {\n const eids = Array.isArray(eidOrEids) ? eidOrEids : [eidOrEids];\n for (const linkEid of eids) {\n const linkEidLookupPair = lookupPairOfEid(linkEid);\n if (linkEidLookupPair) {\n res.push({\n etype: etype,\n lookupPair: linkEidLookupPair,\n linkLabel: label,\n });\n }\n }\n }\n }\n return res;\n}\n\nfunction createMissingAttrs({ attrs: existingAttrs, schema }, ops) {\n const [addedIds, attrs, addOps] = [new Set(), { ...existingAttrs }, []];\n function addAttr(attr) {\n attrs[attr.id] = attr;\n addOps.push(['add-attr', attr]);\n addedIds.add(attr.id);\n }\n function addUnsynced(attr) {\n if (attr?.isUnsynced && !addedIds.has(attr.id)) {\n addOps.push(['add-attr', attr]);\n addedIds.add(attr.id);\n }\n }\n\n // Adds attrs needed for a ref lookup\n function addForRef(etype, label) {\n const fwdAttr = getAttrByFwdIdentName(attrs, etype, label);\n const revAttr = getAttrByReverseIdentName(attrs, etype, label);\n addUnsynced(fwdAttr);\n addUnsynced(revAttr);\n if (!fwdAttr && !revAttr) {\n addAttr(createRefAttr(schema, etype, label, refLookupProps));\n }\n }\n\n // Create attrs for lookups if we need to\n // Do these first because otherwise we might add a non-unique attr\n // before we get to it\n for (const op of ops) {\n for (const { etype, lookupPair, linkLabel } of lookupPairsOfOp(op)) {\n const identName = lookupPair[0];\n // We got a link eid that's a lookup, linkLabel is the label of the ident,\n // e.g. `posts` in `link({posts: postIds})`\n if (linkLabel) {\n // Add our ref attr, e.g. users.posts\n addForRef(etype, linkLabel);\n\n // Figure out the link etype so we can make sure we have the attrs\n // for the link lookup\n const fwdAttr = getAttrByFwdIdentName(attrs, etype, linkLabel);\n const revAttr = getAttrByReverseIdentName(attrs, etype, linkLabel);\n addUnsynced(fwdAttr);\n addUnsynced(revAttr);\n const linkEtype =\n fwdAttr?.['reverse-identity']?.[1] ||\n revAttr?.['forward-identity']?.[1] ||\n linkLabel;\n if (isRefLookupIdent(attrs, linkEtype, identName)) {\n addForRef(linkEtype, extractRefLookupFwdName(identName));\n } else {\n const attr = getAttrByFwdIdentName(attrs, linkEtype, identName);\n if (!attr) {\n addAttr(\n createObjectAttr(schema, linkEtype, identName, lookupProps),\n );\n }\n addUnsynced(attr);\n }\n } else if (isRefLookupIdent(attrs, etype, identName)) {\n addForRef(etype, extractRefLookupFwdName(identName));\n } else {\n const attr = getAttrByFwdIdentName(attrs, etype, identName);\n if (!attr) {\n addAttr(createObjectAttr(schema, etype, identName, lookupProps));\n }\n addUnsynced(attr);\n }\n }\n }\n\n // Create object and ref attrs\n for (const op of ops) {\n const [action, etype, eid, obj] = op;\n if (OBJ_ACTIONS.has(action)) {\n const idAttr = getAttrByFwdIdentName(attrs, etype, 'id');\n addUnsynced(idAttr);\n if (!idAttr) {\n addAttr(createObjectAttr(schema, etype, 'id', { 'unique?': true }));\n }\n\n for (const label of Object.keys(obj)) {\n const fwdAttr = getAttrByFwdIdentName(attrs, etype, label);\n addUnsynced(fwdAttr);\n if (UPDATE_ACTIONS.has(action)) {\n if (!fwdAttr) {\n addAttr(\n createObjectAttr(\n schema,\n etype,\n label,\n label === 'id' ? { 'unique?': true } : null,\n ),\n );\n }\n }\n if (REF_ACTIONS.has(action)) {\n const revAttr = getAttrByReverseIdentName(attrs, etype, label);\n if (!fwdAttr && !revAttr) {\n addAttr(createRefAttr(schema, etype, label));\n }\n addUnsynced(revAttr);\n }\n }\n }\n }\n return [attrs, addOps];\n}\n\nexport function transform(ctx, inputChunks) {\n const chunks = Array.isArray(inputChunks) ? inputChunks : [inputChunks];\n const ops = chunks.flatMap((tx) => getOps(tx));\n const [newAttrs, addAttrTxSteps] = createMissingAttrs(ctx, ops);\n const newCtx = { ...ctx, attrs: newAttrs };\n const txSteps = ops.flatMap((op) => toTxSteps(newCtx, op));\n return [...addAttrTxSteps, ...txSteps];\n}\n"]}
1
+ {"version":3,"file":"instaml.js","sourceRoot":"","sources":["../../src/instaml.js"],"names":[],"mappings":"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","sourcesContent":["import { allMapValues } from './store.ts';\nimport { getOps, isLookup, parseLookup } from './instatx.ts';\nimport { immutableRemoveUndefined } from './utils/object.js';\nimport { coerceToDate } from './utils/dates.ts';\nimport uuid from './utils/uuid.ts';\n\n// Rewrites optimistic attrs with the attrs we get back from the server.\nexport function rewriteStep(attrMapping, txStep) {\n const { attrIdMap, refSwapAttrIds } = attrMapping;\n const rewritten = [];\n for (const part of txStep) {\n const newValue = attrIdMap[part];\n\n if (newValue) {\n // Rewrites attr id\n rewritten.push(newValue);\n } else if (Array.isArray(part) && part.length == 2 && attrIdMap[part[0]]) {\n // Rewrites attr id in lookups\n const [aid, value] = part;\n rewritten.push([attrIdMap[aid], value]);\n } else {\n rewritten.push(part);\n }\n }\n const [action] = txStep;\n if (\n (action === 'add-triple' || action === 'retract-triple') &&\n refSwapAttrIds.has(txStep[2])\n ) {\n // Reverse links if the optimistic link attr is backwards\n const tmp = rewritten[1];\n rewritten[1] = rewritten[3];\n rewritten[3] = tmp;\n }\n return rewritten;\n}\n\nexport function getAttrByFwdIdentName(attrs, inputEtype, inputIdentName) {\n return Object.values(attrs).find((attr) => {\n const [_id, etype, label] = attr['forward-identity'];\n return etype === inputEtype && label === inputIdentName;\n });\n}\n\nexport function getAttrByReverseIdentName(attrs, inputEtype, inputIdentName) {\n return Object.values(attrs).find((attr) => {\n const revIdent = attr['reverse-identity'];\n if (!revIdent) return false;\n const [_id, etype, label] = revIdent;\n return etype === inputEtype && label === inputIdentName;\n });\n}\n\nfunction explodeLookupRef(eid) {\n if (Array.isArray(eid)) {\n return eid;\n }\n const entries = Object.entries(eid);\n if (entries.length !== 1) {\n throw new Error(\n 'lookup must be an object with a single unique attr and value.',\n );\n }\n return entries[0];\n}\n\nfunction isRefLookupIdent(attrs, etype, identName) {\n return (\n identName.indexOf('.') !== -1 &&\n // attr names can have `.` in them, so use the attr we find with a `.`\n // before assuming it's a ref lookup.\n !getAttrByFwdIdentName(attrs, etype, identName)\n );\n}\n\nfunction extractRefLookupFwdName(identName) {\n const [fwdName, idIdent, ...rest] = identName.split('.');\n if (rest.length > 0 || idIdent !== 'id') {\n throw new Error(`${identName} is not a valid lookup attribute.`);\n }\n\n return fwdName;\n}\n\nfunction lookupIdentToAttr(attrs, etype, identName) {\n if (!isRefLookupIdent(attrs, etype, identName)) {\n return getAttrByFwdIdentName(attrs, etype, identName);\n }\n\n const fwdName = extractRefLookupFwdName(identName);\n\n const refAttr =\n getAttrByFwdIdentName(attrs, etype, fwdName) ||\n getAttrByReverseIdentName(attrs, etype, fwdName);\n if (refAttr && refAttr['value-type'] !== 'ref') {\n throw new Error(`${identName} does not reference a valid link attribute.`);\n }\n return refAttr;\n}\n\n// Returns [attr, value] for the eid if the eid is a lookup.\n// If it's a regular eid, returns null\nfunction lookupPairOfEid(eid) {\n if (typeof eid === 'string' && !isLookup(eid)) {\n return null;\n }\n return typeof eid === 'string' && isLookup(eid)\n ? parseLookup(eid)\n : explodeLookupRef(eid);\n}\n\nfunction extractLookup(attrs, etype, eid) {\n const lookupPair = lookupPairOfEid(eid);\n\n if (lookupPair === null) {\n return eid;\n }\n\n const [identName, value] = lookupPair;\n const attr = lookupIdentToAttr(attrs, etype, identName);\n if (!attr || !attr['unique?']) {\n throw new Error(`${identName} is not a unique attribute.`);\n }\n return [attr.id, value];\n}\n\nfunction withIdAttrForLookup(attrs, etype, eidA, txSteps) {\n const lookup = extractLookup(attrs, etype, eidA);\n if (!Array.isArray(lookup)) {\n return txSteps;\n }\n const idTuple = [\n 'add-triple',\n lookup,\n getAttrByFwdIdentName(attrs, etype, 'id').id,\n lookup,\n ];\n return [idTuple].concat(txSteps);\n}\n\nfunction expandLink({ attrs }, [etype, eidA, obj]) {\n const addTriples = Object.entries(obj).flatMap(([label, eidOrEids]) => {\n const eids = Array.isArray(eidOrEids) ? eidOrEids : [eidOrEids];\n const fwdAttr = getAttrByFwdIdentName(attrs, etype, label);\n const revAttr = getAttrByReverseIdentName(attrs, etype, label);\n return eids.map((eidB) => {\n const txStep = fwdAttr\n ? [\n 'add-triple',\n extractLookup(attrs, etype, eidA),\n fwdAttr.id,\n extractLookup(attrs, fwdAttr['reverse-identity'][1], eidB),\n ]\n : [\n 'add-triple',\n extractLookup(attrs, revAttr['forward-identity'][1], eidB),\n revAttr.id,\n extractLookup(attrs, etype, eidA),\n ];\n return txStep;\n });\n });\n return withIdAttrForLookup(attrs, etype, eidA, addTriples);\n}\n\nfunction expandUnlink({ attrs }, [etype, eidA, obj]) {\n const retractTriples = Object.entries(obj).flatMap(([label, eidOrEids]) => {\n const eids = Array.isArray(eidOrEids) ? eidOrEids : [eidOrEids];\n const fwdAttr = getAttrByFwdIdentName(attrs, etype, label);\n const revAttr = getAttrByReverseIdentName(attrs, etype, label);\n return eids.map((eidB) => {\n const txStep = fwdAttr\n ? [\n 'retract-triple',\n extractLookup(attrs, etype, eidA),\n fwdAttr.id,\n extractLookup(attrs, fwdAttr['reverse-identity'][1], eidB),\n ]\n : [\n 'retract-triple',\n extractLookup(attrs, revAttr['forward-identity'][1], eidB),\n revAttr.id,\n extractLookup(attrs, etype, eidA),\n ];\n return txStep;\n });\n });\n return withIdAttrForLookup(attrs, etype, eidA, retractTriples);\n}\n\nfunction checkEntityExists(stores, etype, eid) {\n if (Array.isArray(eid)) {\n // lookup ref\n const [entity_a, entity_v] = eid;\n for (const store of stores || []) {\n const ev = store?.aev.get(entity_a);\n if (ev) {\n // This would be a lot more efficient with a ave index\n for (const [e_, a_, v] of allMapValues(ev, 2)) {\n if (v === entity_v) {\n return true;\n }\n }\n }\n }\n } else {\n // eid\n for (const store of stores || []) {\n const av = store?.eav.get(eid);\n if (av) {\n for (const attr_id of av.keys()) {\n if (store.attrs[attr_id]['forward-identity'][1] == etype) {\n return true;\n }\n }\n }\n }\n }\n return false;\n}\n\nfunction convertOpts({ stores, attrs }, [etype, eid, obj_, opts]) {\n return opts?.upsert === false\n ? { mode: 'update' }\n : opts?.upsert === true\n ? null\n : checkEntityExists(stores, etype, eid)\n ? { mode: 'update' }\n : null; // auto mode chooses between update and upsert, not update and create, just in case\n}\n\nfunction expandCreate(ctx, step) {\n const { stores, attrs } = ctx;\n const [etype, eid, obj_, opts] = step;\n const obj = immutableRemoveUndefined(obj_);\n const lookup = extractLookup(attrs, etype, eid);\n // id first so that we don't clobber updates on the lookup field\n const attrTuples = [['id', lookup]]\n .concat(Object.entries(obj))\n .map(([identName, value]) => {\n const attr = getAttrByFwdIdentName(attrs, etype, identName);\n\n if (attr['checked-data-type'] === 'date' && ctx.useDateObjects) {\n value = coerceToDate(value);\n }\n\n return ['add-triple', lookup, attr.id, value, { mode: 'create' }];\n });\n return attrTuples;\n}\n\nfunction expandUpdate(ctx, step) {\n const { stores, attrs } = ctx;\n const [etype, eid, obj_, opts] = step;\n const obj = immutableRemoveUndefined(obj_);\n const lookup = extractLookup(attrs, etype, eid);\n const serverOpts = convertOpts(ctx, [etype, lookup, obj_, opts]);\n // id first so that we don't clobber updates on the lookup field\n const attrTuples = [['id', lookup]]\n .concat(Object.entries(obj))\n .map(([identName, value]) => {\n const attr = getAttrByFwdIdentName(attrs, etype, identName);\n\n if (attr['checked-data-type'] === 'date' && ctx.useDateObjects) {\n value = coerceToDate(value);\n }\n\n return [\n 'add-triple',\n lookup,\n attr.id,\n value,\n ...(serverOpts ? [serverOpts] : []),\n ];\n });\n return attrTuples;\n}\n\nfunction expandDelete({ attrs }, [etype, eid]) {\n const lookup = extractLookup(attrs, etype, eid);\n return [['delete-entity', lookup, etype]];\n}\n\nfunction expandDeepMerge(ctx, step) {\n const { stores, attrs } = ctx;\n const [etype, eid, obj_, opts] = step;\n const obj = immutableRemoveUndefined(obj_);\n const lookup = extractLookup(attrs, etype, eid);\n const serverOpts = convertOpts(ctx, [etype, lookup, obj_, opts]);\n const attrTuples = Object.entries(obj).map(([identName, value]) => {\n const attr = getAttrByFwdIdentName(attrs, etype, identName);\n return [\n 'deep-merge-triple',\n lookup,\n attr.id,\n value,\n ...(serverOpts ? [serverOpts] : []),\n ];\n });\n\n const idTuple = [\n 'add-triple',\n lookup,\n getAttrByFwdIdentName(attrs, etype, 'id').id,\n lookup,\n ...(serverOpts ? [serverOpts] : []),\n ];\n\n // id first so that we don't clobber updates on the lookup field\n return [idTuple].concat(attrTuples);\n}\n\nfunction expandRuleParams({ attrs }, [etype, eid, ruleParams]) {\n const lookup = extractLookup(attrs, etype, eid);\n return [['rule-params', lookup, etype, ruleParams]];\n}\n\nfunction removeIdFromArgs(step) {\n const [op, etype, eid, obj, opts] = step;\n if (!obj) {\n return step;\n }\n const newObj = { ...obj };\n delete newObj.id;\n return [op, etype, eid, newObj, ...(opts ? [opts] : [])];\n}\n\nfunction toTxSteps(ctx, step) {\n const [action, ...args] = removeIdFromArgs(step);\n switch (action) {\n case 'merge':\n return expandDeepMerge(ctx, args);\n case 'create':\n return expandCreate(ctx, args);\n case 'update':\n return expandUpdate(ctx, args);\n case 'link':\n return expandLink(ctx, args);\n case 'unlink':\n return expandUnlink(ctx, args);\n case 'delete':\n return expandDelete(ctx, args);\n case 'ruleParams':\n return expandRuleParams(ctx, args);\n default:\n throw new Error(`unsupported action ${action}`);\n }\n}\n\n// ---------\n// transform\n\nfunction checkedDataTypeOfValueType(valueType) {\n switch (valueType) {\n case 'string':\n case 'date':\n case 'boolean':\n case 'number':\n return valueType;\n default:\n return undefined;\n }\n}\n\nfunction objectPropsFromSchema(schema, etype, label) {\n const attr = schema.entities[etype]?.attrs?.[label];\n if (label === 'id') return null;\n if (!attr) {\n throw new Error(`${etype}.${label} does not exist in your schema`);\n }\n const { unique, indexed } = attr?.config;\n const checkedDataType = checkedDataTypeOfValueType(attr?.valueType);\n\n return {\n 'index?': indexed,\n 'unique?': unique,\n 'checked-data-type': checkedDataType,\n };\n}\n\nfunction createObjectAttr(schema, etype, label, props) {\n const schemaObjectProps = schema\n ? objectPropsFromSchema(schema, etype, label)\n : null;\n const attrId = uuid();\n const fwdIdentId = uuid();\n const fwdIdent = [fwdIdentId, etype, label];\n return {\n id: attrId,\n 'forward-identity': fwdIdent,\n 'value-type': 'blob',\n cardinality: 'one',\n 'unique?': false,\n 'index?': false,\n isUnsynced: true,\n ...(schemaObjectProps || {}),\n ...(props || {}),\n };\n}\n\nfunction findSchemaLink(schema, etype, label) {\n const found = Object.values(schema.links).find((x) => {\n return (\n (x.forward.on === etype && x.forward.label === label) ||\n (x.reverse.on === etype && x.reverse.label === label)\n );\n });\n return found;\n}\n\nfunction refPropsFromSchema(schema, etype, label) {\n const found = findSchemaLink(schema, etype, label);\n if (!found) {\n throw new Error(`Couldn't find the link ${etype}.${label} in your schema`);\n }\n const { forward, reverse } = found;\n return {\n 'forward-identity': [uuid(), forward.on, forward.label],\n 'reverse-identity': [uuid(), reverse.on, reverse.label],\n cardinality: forward.has === 'one' ? 'one' : 'many',\n 'unique?': reverse.has === 'one',\n 'on-delete': forward.onDelete,\n 'on-delete-reverse': reverse.onDelete,\n };\n}\n\nfunction createRefAttr(schema, etype, label, props) {\n const schemaRefProps = schema\n ? refPropsFromSchema(schema, etype, label)\n : null;\n const attrId = uuid();\n const fwdIdent = [uuid(), etype, label];\n const revIdent = [uuid(), label, etype];\n return {\n id: attrId,\n 'forward-identity': fwdIdent,\n 'reverse-identity': revIdent,\n 'value-type': 'ref',\n cardinality: 'many',\n 'unique?': false,\n 'index?': false,\n isUnsynced: true,\n ...(schemaRefProps || {}),\n ...(props || {}),\n };\n}\n\n// Actions that have an object, e.g. not delete\nconst OBJ_ACTIONS = new Set(['create', 'update', 'merge', 'link', 'unlink']);\nconst REF_ACTIONS = new Set(['link', 'unlink']);\nconst UPDATE_ACTIONS = new Set(['create', 'update', 'merge']);\nconst SUPPORTS_LOOKUP_ACTIONS = new Set([\n 'link',\n 'unlink',\n 'create',\n 'update',\n 'merge',\n 'delete',\n 'ruleParams',\n]);\n\nconst lookupProps = { 'unique?': true, 'index?': true };\nconst refLookupProps = { ...lookupProps, cardinality: 'one' };\n\nfunction lookupPairsOfOp(op) {\n const res = [];\n const [action, etype, eid, obj] = op;\n if (!SUPPORTS_LOOKUP_ACTIONS.has(action)) {\n return res;\n }\n\n const eidLookupPair = lookupPairOfEid(eid);\n if (eidLookupPair) {\n res.push({ etype: etype, lookupPair: eidLookupPair });\n }\n if (action === 'link') {\n for (const [label, eidOrEids] of Object.entries(obj)) {\n const eids = Array.isArray(eidOrEids) ? eidOrEids : [eidOrEids];\n for (const linkEid of eids) {\n const linkEidLookupPair = lookupPairOfEid(linkEid);\n if (linkEidLookupPair) {\n res.push({\n etype: etype,\n lookupPair: linkEidLookupPair,\n linkLabel: label,\n });\n }\n }\n }\n }\n return res;\n}\n\nfunction createMissingAttrs({ attrs: existingAttrs, schema }, ops) {\n const [addedIds, attrs, addOps] = [new Set(), { ...existingAttrs }, []];\n function addAttr(attr) {\n attrs[attr.id] = attr;\n addOps.push(['add-attr', attr]);\n addedIds.add(attr.id);\n }\n function addUnsynced(attr) {\n if (attr?.isUnsynced && !addedIds.has(attr.id)) {\n addOps.push(['add-attr', attr]);\n addedIds.add(attr.id);\n }\n }\n\n // Adds attrs needed for a ref lookup\n function addForRef(etype, label) {\n const fwdAttr = getAttrByFwdIdentName(attrs, etype, label);\n const revAttr = getAttrByReverseIdentName(attrs, etype, label);\n addUnsynced(fwdAttr);\n addUnsynced(revAttr);\n if (!fwdAttr && !revAttr) {\n addAttr(createRefAttr(schema, etype, label, refLookupProps));\n }\n }\n\n // Create attrs for lookups if we need to\n // Do these first because otherwise we might add a non-unique attr\n // before we get to it\n for (const op of ops) {\n for (const { etype, lookupPair, linkLabel } of lookupPairsOfOp(op)) {\n const identName = lookupPair[0];\n // We got a link eid that's a lookup, linkLabel is the label of the ident,\n // e.g. `posts` in `link({posts: postIds})`\n if (linkLabel) {\n // Add our ref attr, e.g. users.posts\n addForRef(etype, linkLabel);\n\n // Figure out the link etype so we can make sure we have the attrs\n // for the link lookup\n const fwdAttr = getAttrByFwdIdentName(attrs, etype, linkLabel);\n const revAttr = getAttrByReverseIdentName(attrs, etype, linkLabel);\n addUnsynced(fwdAttr);\n addUnsynced(revAttr);\n const linkEtype =\n fwdAttr?.['reverse-identity']?.[1] ||\n revAttr?.['forward-identity']?.[1] ||\n linkLabel;\n if (isRefLookupIdent(attrs, linkEtype, identName)) {\n addForRef(linkEtype, extractRefLookupFwdName(identName));\n } else {\n const attr = getAttrByFwdIdentName(attrs, linkEtype, identName);\n if (!attr) {\n addAttr(\n createObjectAttr(schema, linkEtype, identName, lookupProps),\n );\n }\n addUnsynced(attr);\n }\n } else if (isRefLookupIdent(attrs, etype, identName)) {\n addForRef(etype, extractRefLookupFwdName(identName));\n } else {\n const attr = getAttrByFwdIdentName(attrs, etype, identName);\n if (!attr) {\n addAttr(createObjectAttr(schema, etype, identName, lookupProps));\n }\n addUnsynced(attr);\n }\n }\n }\n\n // Create object and ref attrs\n for (const op of ops) {\n const [action, etype, eid, obj] = op;\n if (OBJ_ACTIONS.has(action)) {\n const idAttr = getAttrByFwdIdentName(attrs, etype, 'id');\n addUnsynced(idAttr);\n if (!idAttr) {\n addAttr(createObjectAttr(schema, etype, 'id', { 'unique?': true }));\n }\n\n for (const label of Object.keys(obj)) {\n const fwdAttr = getAttrByFwdIdentName(attrs, etype, label);\n addUnsynced(fwdAttr);\n if (UPDATE_ACTIONS.has(action)) {\n if (!fwdAttr) {\n addAttr(\n createObjectAttr(\n schema,\n etype,\n label,\n label === 'id' ? { 'unique?': true } : null,\n ),\n );\n }\n }\n if (REF_ACTIONS.has(action)) {\n const revAttr = getAttrByReverseIdentName(attrs, etype, label);\n if (!fwdAttr && !revAttr) {\n addAttr(createRefAttr(schema, etype, label));\n }\n addUnsynced(revAttr);\n }\n }\n }\n }\n return [attrs, addOps];\n}\n\nexport function transform(ctx, inputChunks) {\n const chunks = Array.isArray(inputChunks) ? inputChunks : [inputChunks];\n const ops = chunks.flatMap((tx) => getOps(tx));\n const [newAttrs, addAttrTxSteps] = createMissingAttrs(ctx, ops);\n const newCtx = { ...ctx, attrs: newAttrs };\n const txSteps = ops.flatMap((op) => toTxSteps(newCtx, op));\n return [...addAttrTxSteps, ...txSteps];\n}\n"]}