@instantdb/core 0.22.61 → 0.22.62-experimental.codex-mcp.19585792766.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/__tests__/src/utils/PersistedObject.test.ts +2 -0
  2. package/dist/commonjs/IndexedDBStorage.js +2 -1
  3. package/dist/commonjs/IndexedDBStorage.js.map +1 -1
  4. package/dist/commonjs/Reactor.d.ts +12 -10
  5. package/dist/commonjs/Reactor.d.ts.map +1 -1
  6. package/dist/commonjs/Reactor.js +6 -5
  7. package/dist/commonjs/Reactor.js.map +1 -1
  8. package/dist/commonjs/SyncTable.d.ts.map +1 -1
  9. package/dist/commonjs/SyncTable.js +36 -23
  10. package/dist/commonjs/SyncTable.js.map +1 -1
  11. package/dist/commonjs/authAPI.d.ts +1 -1
  12. package/dist/commonjs/authAPI.d.ts.map +1 -1
  13. package/dist/commonjs/authAPI.js.map +1 -1
  14. package/dist/commonjs/schema.js.map +1 -1
  15. package/dist/commonjs/schemaTypes.d.ts +3 -3
  16. package/dist/commonjs/schemaTypes.d.ts.map +1 -1
  17. package/dist/commonjs/schemaTypes.js.map +1 -1
  18. package/dist/commonjs/utils/PersistedObject.d.ts.map +1 -1
  19. package/dist/commonjs/utils/PersistedObject.js +2 -0
  20. package/dist/commonjs/utils/PersistedObject.js.map +1 -1
  21. package/dist/commonjs/utils/uuid.js.map +1 -1
  22. package/dist/esm/IndexedDBStorage.js +2 -1
  23. package/dist/esm/IndexedDBStorage.js.map +1 -1
  24. package/dist/esm/Reactor.d.ts +12 -10
  25. package/dist/esm/Reactor.d.ts.map +1 -1
  26. package/dist/esm/Reactor.js +6 -5
  27. package/dist/esm/Reactor.js.map +1 -1
  28. package/dist/esm/SyncTable.d.ts.map +1 -1
  29. package/dist/esm/SyncTable.js +36 -23
  30. package/dist/esm/SyncTable.js.map +1 -1
  31. package/dist/esm/authAPI.d.ts +1 -1
  32. package/dist/esm/authAPI.d.ts.map +1 -1
  33. package/dist/esm/authAPI.js.map +1 -1
  34. package/dist/esm/schema.js.map +1 -1
  35. package/dist/esm/schemaTypes.d.ts +3 -3
  36. package/dist/esm/schemaTypes.d.ts.map +1 -1
  37. package/dist/esm/schemaTypes.js.map +1 -1
  38. package/dist/esm/utils/PersistedObject.d.ts.map +1 -1
  39. package/dist/esm/utils/PersistedObject.js +2 -0
  40. package/dist/esm/utils/PersistedObject.js.map +1 -1
  41. package/dist/esm/utils/uuid.js.map +1 -1
  42. package/dist/standalone/index.js +645 -621
  43. package/dist/standalone/index.umd.cjs +3 -3
  44. package/package.json +2 -2
  45. package/src/IndexedDBStorage.ts +2 -2
  46. package/src/Reactor.js +14 -5
  47. package/src/SyncTable.ts +66 -42
  48. package/src/authAPI.ts +1 -1
  49. package/src/schema.ts +1 -1
  50. package/src/schemaTypes.ts +5 -3
  51. package/src/utils/PersistedObject.ts +10 -9
  52. package/src/utils/uuid.ts +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"schemaTypes.js","sourceRoot":"","sources":["../../src/schemaTypes.ts"],"names":[],"mappings":";;;AAGA,MAAa,WAAW;IAOtB,YACS,SAAqB,EACrB,QAAoB,EACpB,SAAoB,EAEpB,SAIH,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE;QAR9B,cAAS,GAAT,SAAS,CAAY;QACrB,aAAQ,GAAR,QAAQ,CAAY;QACpB,cAAS,GAAT,SAAS,CAAW;QAEpB,WAAM,GAAN,MAAM,CAIwB;QAXhC,aAAQ,GAA4B,EAAE,CAAC;IAY3C,CAAC;IAEJ;;;;OAIG;IACH,cAAc;QACZ,OAAO,IAAI,WAAW,CACpB,IAAI,CAAC,SAAS,EACd,KAAwB,EACxB,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,MAAM,CACZ,CAAC;IACJ,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,WAAW,CACpB,IAAI,CAAC,SAAS,EACd,KAAK,EACL,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,MAAM,CACZ,CAAC;IACJ,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,WAAW,CACpB,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,SAAS,kCAET,IAAI,CAAC,MAAM,KACd,MAAM,EAAE,IAAI,IAEf,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO,IAAI,WAAW,CACpB,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,QAAQ,EACb,IAAI,kCAEC,IAAI,CAAC,MAAM,KACd,OAAO,EAAE,IAAI,IAEhB,CAAC;IACJ,CAAC;CAQF;AAxED,kCAwEC;AAED,MAAa,WAAW;IAItB,YACS,WAAwB,EACxB,UAAsB;QADtB,gBAAW,GAAX,WAAW,CAAa;QACxB,eAAU,GAAV,UAAU,CAAY;IAC5B,CAAC;CACL;AARD,kCAQC;AAuBD,MAAa,SAAS;IAKpB,YACS,KAAY,EACZ,KAAY;QADZ,UAAK,GAAL,KAAK,CAAO;QACZ,UAAK,GAAL,KAAK,CAAO;IAClB,CAAC;IAEJ,MAAM;QACJ,OAAO,IAAI,SAAS,CAAwB,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IACtE,CAAC;CACF;AAbD,8BAaC;AAmQD,MAAa,gBAAgB;IAM3B,YACS,QAAkB,EAClB,KAAY,EACZ,KAAY;QAFZ,aAAQ,GAAR,QAAQ,CAAU;QAClB,UAAK,GAAL,KAAK,CAAO;QACZ,UAAK,GAAL,KAAK,CAAO;IAClB,CAAC;IAEJ;;;;;;;;;;;;;;;;;;OAkBG;IACH,cAAc;QAEZ,OAAO,IAAI,gBAAgB,CACzB,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,KAAK,EACV,EAAU,CACX,CAAC;IACJ,CAAC;CACF;AAvCD,4CAuCC;AAED;;;;;GAKG;AACH,MAAa,YAAY;IAMvB,YACS,QAAkB,EAClB,KAAY;QADZ,aAAQ,GAAR,QAAQ,CAAU;QAClB,UAAK,GAAL,KAAK,CAAO;IAClB,CAAC;IAEJ,cAAc;QACZ,OAAO,IAAI,YAAY,CACrB,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,KAAK,CACX,CAAC;IACJ,CAAC;CACF;AAjBD,oCAiBC;AAmGD,MAAa,uBAAwB,SAAQ,gBAI5C;CAAG;AAJJ,0DAII","sourcesContent":["import type { RoomSchemaShape } from './presence.ts';\nimport { Expand } from './queryTypes.ts';\n\nexport class DataAttrDef<\n ValueType,\n IsRequired extends RequirementKind,\n IsIndexed extends boolean,\n> {\n public metadata: Record<string, unknown> = {};\n\n constructor(\n public valueType: ValueTypes,\n public required: IsRequired,\n public isIndexed: IsIndexed,\n\n public config: {\n indexed: boolean;\n unique: boolean;\n // clientValidator?: (value: ValueType) => boolean;\n } = { indexed: false, unique: false },\n ) {}\n\n /**\n * @deprecated Only use this temporarily for attributes that you want\n * to treat as required in frontend code but can’t yet mark as required\n * and enforced for backend\n */\n clientRequired() {\n return new DataAttrDef<ValueType, true, IsIndexed>(\n this.valueType,\n false as unknown as true,\n this.isIndexed,\n this.config,\n );\n }\n\n optional() {\n return new DataAttrDef<ValueType, false, IsIndexed>(\n this.valueType,\n false,\n this.isIndexed,\n this.config,\n );\n }\n\n unique() {\n return new DataAttrDef<ValueType, IsRequired, IsIndexed>(\n this.valueType,\n this.required,\n this.isIndexed,\n {\n ...this.config,\n unique: true,\n },\n );\n }\n\n indexed() {\n return new DataAttrDef<ValueType, IsRequired, true>(\n this.valueType,\n this.required,\n true,\n {\n ...this.config,\n indexed: true,\n },\n );\n }\n\n // clientValidate(clientValidator: (value: ValueType) => boolean) {\n // return new DataAttrDef(this.valueType, this.required, {\n // ...this.config,\n // clientValidator,\n // });\n // }\n}\n\nexport class LinkAttrDef<\n Cardinality extends CardinalityKind,\n EntityName extends string,\n> {\n constructor(\n public cardinality: Cardinality,\n public entityName: EntityName,\n ) {}\n}\n\nexport interface IContainEntitiesAndLinks<\n Entities extends EntitiesDef,\n Links extends LinksDef<Entities>,\n> {\n entities: Entities;\n links: Links;\n}\n\n// ==========\n// base types\n\nexport type ValueTypes = 'string' | 'number' | 'boolean' | 'date' | 'json';\n\nexport type CardinalityKind = 'one' | 'many';\n\n// true - force required\n// false - optional, not required\nexport type RequirementKind = true | false;\n\nexport type AttrsDefs = Record<string, DataAttrDef<any, any, any>>;\n\nexport class EntityDef<\n Attrs extends AttrsDefs,\n Links extends Record<string, LinkAttrDef<any, any>>,\n AsType,\n> {\n constructor(\n public attrs: Attrs,\n public links: Links,\n ) {}\n\n asType<_AsType extends Partial<MappedAttrs<Attrs, boolean>>>() {\n return new EntityDef<Attrs, Links, _AsType>(this.attrs, this.links);\n }\n}\n\nexport type EntityDefFromSchema<\n S extends IContainEntitiesAndLinks<any, any>,\n K extends keyof S['entities'],\n> = {\n [k in keyof S['entities'][K]['attrs']]: S['entities'][K] extends EntityDef<\n any,\n any,\n any\n >\n ? S['entities'][K]['attrs'][k]\n : never;\n};\n\nexport type EntitiesDef = Record<string, EntityDef<any, any, any>>;\n\nexport type LinksDef<Entities extends EntitiesDef> = Record<\n string,\n LinkDef<\n Entities,\n keyof Entities,\n string,\n CardinalityKind,\n keyof Entities,\n string,\n CardinalityKind\n >\n>;\n\nexport type LinkDef<\n Entities extends EntitiesDef,\n FwdEntity extends keyof Entities,\n FwdAttr extends string,\n FwdCardinality extends CardinalityKind,\n RevEntity extends keyof Entities,\n RevAttr extends string,\n RevCardinality extends CardinalityKind,\n> = {\n forward: {\n on: FwdEntity;\n label: FwdAttr;\n has: FwdCardinality;\n required?: RequirementKind;\n onDelete?: 'cascade';\n };\n reverse: {\n on: RevEntity;\n label: RevAttr;\n has: RevCardinality;\n onDelete?: 'cascade';\n };\n};\n\n// ==========\n// derived types\ntype IsEmptyOrIndexSignature<T> = keyof T extends never\n ? true\n : string extends keyof T\n ? true\n : false;\n\nexport type EntitiesWithLinks<\n Entities extends EntitiesDef,\n Links extends LinksDef<Entities>,\n> = {\n [EntityName in keyof Entities]: EntityDef<\n Entities[EntityName]['attrs'],\n EntityForwardLinksMap<EntityName, Entities, Links> &\n EntityReverseLinksMap<EntityName, Entities, Links>,\n Entities[EntityName] extends EntityDef<any, any, infer O>\n ? O extends void\n ? void\n : O\n : void\n >;\n};\n\ntype EntityForwardLinksMap<\n EntityName extends keyof Entities,\n Entities extends EntitiesDef,\n Links extends LinksDef<Entities>,\n LinkIndexFwd = LinksIndexedByEntity<Entities, Links, 'reverse'>,\n> =\n IsEmptyOrIndexSignature<Links> extends true\n ? {}\n : EntityName extends keyof LinkIndexFwd\n ? {\n [LinkName in keyof LinkIndexFwd[EntityName]]: LinkIndexFwd[EntityName][LinkName] extends LinkDef<\n Entities,\n infer RelatedEntityName,\n any,\n any,\n any,\n any,\n infer Cardinality\n >\n ? {\n entityName: RelatedEntityName;\n cardinality: Cardinality;\n }\n : never;\n }\n : {};\n\ntype EntityReverseLinksMap<\n EntityName extends keyof Entities,\n Entities extends EntitiesDef,\n Links extends LinksDef<Entities>,\n RevLinkIndex = LinksIndexedByEntity<Entities, Links, 'forward'>,\n> =\n IsEmptyOrIndexSignature<Links> extends true\n ? {}\n : EntityName extends keyof RevLinkIndex\n ? {\n [LinkName in keyof RevLinkIndex[EntityName]]: RevLinkIndex[EntityName][LinkName] extends LinkDef<\n Entities,\n any,\n any,\n infer Cardinality,\n infer RelatedEntityName,\n any,\n any\n >\n ? {\n entityName: RelatedEntityName;\n cardinality: Cardinality;\n }\n : never;\n }\n : {};\n\ntype LinksIndexedByEntity<\n Entities extends EntitiesDef,\n Links extends LinksDef<Entities>,\n Direction extends 'forward' | 'reverse',\n> = {\n [FwdEntity in keyof Entities]: {\n [LinkName in keyof Links as Links[LinkName][Direction]['on'] extends FwdEntity\n ? Links[LinkName][Direction]['label']\n : never]: Links[LinkName] extends LinkDef<\n Entities,\n infer FwdEntity,\n infer FwdAttr,\n infer FwdCardinality,\n infer RevEntity,\n infer RevAttr,\n infer RevCardinality\n >\n ? LinkDef<\n Entities,\n FwdEntity,\n FwdAttr,\n FwdCardinality,\n RevEntity,\n RevAttr,\n RevCardinality\n >\n : never;\n };\n};\n\ntype RequiredKeys<Attrs extends AttrsDefs> = {\n [K in keyof Attrs]: Attrs[K] extends DataAttrDef<any, infer R, any>\n ? R extends true\n ? K\n : never\n : never;\n}[keyof Attrs];\n\ntype OptionalKeys<Attrs extends AttrsDefs> = {\n [K in keyof Attrs]: Attrs[K] extends DataAttrDef<any, infer R, any>\n ? R extends false\n ? K\n : never\n : never;\n}[keyof Attrs];\n\n/**\n * MappedAttrs:\n * - Required keys => `key: ValueType`\n * - Optional keys => `key?: ValueType`\n */\ntype MappedAttrs<Attrs extends AttrsDefs, UseDates extends boolean> = {\n [K in RequiredKeys<Attrs>]: Attrs[K] extends DataAttrDef<infer V, any, any>\n ? V extends Date\n ? UseDates extends true\n ? V\n : string | number\n : V\n : never;\n} & {\n [K in OptionalKeys<Attrs>]?: Attrs[K] extends DataAttrDef<infer V, any, any>\n ? V extends Date\n ? UseDates extends true\n ? V\n : string | number\n : V\n : never;\n};\n\nexport type ResolveEntityAttrs<\n EDef extends EntityDef<any, any, any>,\n UseDates extends boolean = false,\n ResolvedAttrs = MappedAttrs<EDef['attrs'], UseDates>,\n> =\n EDef extends EntityDef<any, any, infer AsType>\n ? AsType extends void\n ? ResolvedAttrs\n : Omit<ResolvedAttrs, keyof AsType> & AsType\n : ResolvedAttrs;\n\nexport type ResolveAttrs<\n Entities extends EntitiesDef,\n EntityName extends keyof Entities,\n UseDates extends boolean,\n> = ResolveEntityAttrs<Entities[EntityName], UseDates>;\n\nexport type RoomsFromDef<RDef extends RoomsDef> = {\n [RoomName in keyof RDef]: {\n presence: Expand<ResolveEntityAttrs<RDef[RoomName]['presence']>>;\n topics: {\n [TopicName in keyof RDef[RoomName]['topics']]: Expand<\n ResolveEntityAttrs<RDef[RoomName]['topics'][TopicName]>\n >;\n };\n };\n};\n\nexport type RoomsOf<S> =\n S extends InstantSchemaDef<any, any, infer RDef> ? RoomsFromDef<RDef> : never;\n\nexport type PresenceOf<\n S,\n RoomType extends keyof RoomsOf<S>,\n> = RoomsOf<S>[RoomType] extends { presence: infer P } ? P : {};\n\nexport type TopicsOf<\n S,\n RoomType extends keyof RoomsOf<S>,\n> = RoomsOf<S>[RoomType] extends { topics: infer T } ? T : {};\n\nexport type TopicOf<\n S,\n RoomType extends keyof RoomsOf<S>,\n TopicType extends keyof TopicsOf<S, RoomType>,\n> = TopicsOf<S, RoomType>[TopicType];\n\ninterface RoomDef {\n presence: EntityDef<any, any, any>;\n topics?: {\n [TopicName: string]: EntityDef<any, any, any>;\n };\n}\n\nexport interface RoomsDef {\n [RoomType: string]: RoomDef;\n}\n\nexport class InstantSchemaDef<\n Entities extends EntitiesDef,\n Links extends LinksDef<Entities>,\n Rooms extends RoomsDef,\n> implements IContainEntitiesAndLinks<Entities, Links>\n{\n constructor(\n public entities: Entities,\n public links: Links,\n public rooms: Rooms,\n ) {}\n\n /**\n * @deprecated\n * `withRoomSchema` is deprecated. Define your schema in `rooms` directly:\n *\n * @example\n * // Before:\n * const schema = i.schema({\n * // ...\n * }).withRoomSchema<RoomSchema>()\n *\n * // After\n * const schema = i.schema({\n * rooms: {\n * // ...\n * }\n * })\n *\n * @see https://instantdb.com/docs/presence-and-topics#typesafety\n */\n withRoomSchema<_RoomSchema extends RoomSchemaShape>() {\n type RDef = RoomDefFromShape<_RoomSchema>;\n return new InstantSchemaDef<Entities, Links, RDef>(\n this.entities,\n this.links,\n {} as RDef,\n );\n }\n}\n\n/**\n * @deprecated\n * `i.graph` is deprecated. Use `i.schema` instead.\n *\n * @see https://instantdb.com/docs/modeling-data\n */\nexport class InstantGraph<\n Entities extends EntitiesDef,\n Links extends LinksDef<Entities>,\n RoomSchema extends RoomSchemaShape = {},\n> implements IContainEntitiesAndLinks<Entities, Links>\n{\n constructor(\n public entities: Entities,\n public links: Links,\n ) {}\n\n withRoomSchema<_RoomSchema extends RoomSchemaShape>() {\n return new InstantGraph<Entities, Links, _RoomSchema>(\n this.entities,\n this.links,\n );\n }\n}\n\ntype EntityDefFromRoomSlice<Shape extends { [k: string]: any }> = EntityDef<\n {\n [AttrName in keyof Shape]: DataAttrDef<\n Shape[AttrName],\n Shape[AttrName] extends undefined ? false : true,\n any\n >;\n },\n any,\n void\n>;\n\ntype RoomDefFromShape<RoomSchema extends RoomSchemaShape> = {\n [RoomName in keyof RoomSchema]: {\n presence: EntityDefFromRoomSlice<RoomSchema[RoomName]['presence']>;\n topics: {\n [TopicName in keyof RoomSchema[RoomName]['topics']]: EntityDefFromRoomSlice<\n RoomSchema[RoomName]['topics'][TopicName]\n >;\n };\n };\n};\n\ntype EntityDefFromShape<Shape, K extends keyof Shape> = EntityDef<\n {\n [AttrName in keyof Shape[K]]: DataAttrDef<\n Shape[K][AttrName],\n Shape[K][AttrName] extends undefined ? false : true,\n any\n >;\n },\n {\n [LinkName in keyof Shape]: LinkAttrDef<\n 'many',\n LinkName extends string ? LinkName : string\n >;\n },\n void\n>;\n\n/**\n * If you were using the old `schema` types, you can use this to help you\n * migrate.\n *\n * @example\n * // Before\n * const db = init<Schema, Rooms>({...})\n *\n * // After\n * const db = init<BackwardsCompatibleSchema<Schema, Rooms>>({...})\n */\nexport type BackwardsCompatibleSchema<\n Shape extends { [k: string]: any },\n RoomSchema extends RoomSchemaShape = {},\n> = InstantSchemaDef<\n { [K in keyof Shape]: EntityDefFromShape<Shape, K> },\n UnknownLinks<EntitiesDef>,\n RoomDefFromShape<RoomSchema>\n>;\n\n// ----------\n// InstantUnknownSchema\n\nexport type UnknownEntity = EntityDef<\n {\n id: DataAttrDef<string, true, true>;\n [AttrName: string]: DataAttrDef<any, boolean, boolean>;\n },\n { [LinkName: string]: LinkAttrDef<'many', string> },\n void\n>;\n\nexport type UnknownEntities = {\n [EntityName: string]: UnknownEntity;\n};\n\nexport interface UnknownLinks<Entities extends EntitiesDef> {\n [LinkName: string]: LinkDef<\n Entities,\n string,\n string,\n 'many',\n string,\n string,\n 'many'\n >;\n}\n\nexport interface UnknownRooms {\n [RoomName: string]: {\n presence: EntityDef<any, any, any>;\n topics: {\n [TopicName: string]: EntityDef<any, any, any>;\n };\n };\n}\n\nexport class InstantUnknownSchemaDef extends InstantSchemaDef<\n UnknownEntities,\n UnknownLinks<UnknownEntities>,\n UnknownRooms\n> {}\n\nexport type InstantUnknownSchema = InstantUnknownSchemaDef;\n\nexport type CreateParams<\n Schema extends IContainEntitiesAndLinks<any, any>,\n EntityName extends keyof Schema['entities'],\n> = {\n [AttrName in RequiredKeys<\n Schema['entities'][EntityName]['attrs']\n >]: Schema['entities'][EntityName]['attrs'][AttrName] extends DataAttrDef<\n infer ValueType,\n any,\n any\n >\n ? ValueType extends Date\n ? string | number | Date\n : ValueType\n : never;\n} & {\n [AttrName in OptionalKeys<\n Schema['entities'][EntityName]['attrs']\n >]?: Schema['entities'][EntityName]['attrs'][AttrName] extends DataAttrDef<\n infer ValueType,\n false,\n any\n >\n ? (ValueType extends Date ? string | number | Date : ValueType) | null\n : never;\n};\n\nexport type UpdateParams<\n Schema extends IContainEntitiesAndLinks<any, any>,\n EntityName extends keyof Schema['entities'],\n> = {\n [AttrName in keyof Schema['entities'][EntityName]['attrs']]?: Schema['entities'][EntityName]['attrs'][AttrName] extends DataAttrDef<\n infer ValueType,\n infer IsRequired,\n any\n >\n ? IsRequired extends true\n ? ValueType extends Date\n ? string | number | Date\n : ValueType\n : (ValueType extends Date ? string | number | Date : ValueType) | null\n : never;\n};\n\nexport type UpdateOpts = {\n upsert?: boolean | undefined;\n};\n\nexport type LinkParams<\n Schema extends IContainEntitiesAndLinks<any, any>,\n EntityName extends keyof Schema['entities'],\n> = {\n [LinkName in keyof Schema['entities'][EntityName]['links']]?: Schema['entities'][EntityName]['links'][LinkName] extends LinkAttrDef<\n infer Cardinality,\n any\n >\n ? Cardinality extends 'one'\n ? string\n : string | string[]\n : never;\n};\n\nexport type RuleParams = {\n [key: string]: any;\n};\n"]}
1
+ {"version":3,"file":"schemaTypes.js","sourceRoot":"","sources":["../../src/schemaTypes.ts"],"names":[],"mappings":";;;AAGA,MAAa,WAAW;IAOtB,YACS,SAAqB,EACrB,QAAoB,EACpB,SAAoB,EAEpB,SAIH,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE;QAR9B,cAAS,GAAT,SAAS,CAAY;QACrB,aAAQ,GAAR,QAAQ,CAAY;QACpB,cAAS,GAAT,SAAS,CAAW;QAEpB,WAAM,GAAN,MAAM,CAIwB;QAXhC,aAAQ,GAA4B,EAAE,CAAC;IAY3C,CAAC;IAEJ;;;;OAIG;IACH,cAAc;QACZ,OAAO,IAAI,WAAW,CACpB,IAAI,CAAC,SAAS,EACd,KAAwB,EACxB,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,MAAM,CACZ,CAAC;IACJ,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,WAAW,CACpB,IAAI,CAAC,SAAS,EACd,KAAK,EACL,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,MAAM,CACZ,CAAC;IACJ,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,WAAW,CACpB,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,SAAS,kCAET,IAAI,CAAC,MAAM,KACd,MAAM,EAAE,IAAI,IAEf,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO,IAAI,WAAW,CACpB,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,QAAQ,EACb,IAAI,kCAEC,IAAI,CAAC,MAAM,KACd,OAAO,EAAE,IAAI,IAEhB,CAAC;IACJ,CAAC;CAQF;AAxED,kCAwEC;AAED,MAAa,WAAW;IAItB,YACS,WAAwB,EACxB,UAAsB;QADtB,gBAAW,GAAX,WAAW,CAAa;QACxB,eAAU,GAAV,UAAU,CAAY;IAC5B,CAAC;CACL;AARD,kCAQC;AAuBD,MAAa,SAAS;IAKpB,YACS,KAAY,EACZ,KAAY;QADZ,UAAK,GAAL,KAAK,CAAO;QACZ,UAAK,GAAL,KAAK,CAAO;IAClB,CAAC;IAEJ,MAAM;QACJ,OAAO,IAAI,SAAS,CAAwB,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IACtE,CAAC;CACF;AAbD,8BAaC;AAmQD,MAAa,gBAAgB;IAM3B,YACS,QAAkB,EAClB,KAAY,EACZ,KAAY;QAFZ,aAAQ,GAAR,QAAQ,CAAU;QAClB,UAAK,GAAL,KAAK,CAAO;QACZ,UAAK,GAAL,KAAK,CAAO;IAClB,CAAC;IAEJ;;;;;;;;;;;;;;;;;;OAkBG;IACH,cAAc;QAEZ,OAAO,IAAI,gBAAgB,CACzB,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,KAAK,EACV,EAAU,CACX,CAAC;IACJ,CAAC;CACF;AAvCD,4CAuCC;AAED;;;;;GAKG;AACH,MAAa,YAAY;IAMvB,YACS,QAAkB,EAClB,KAAY;QADZ,aAAQ,GAAR,QAAQ,CAAU;QAClB,UAAK,GAAL,KAAK,CAAO;IAClB,CAAC;IAEJ,cAAc;QACZ,OAAO,IAAI,YAAY,CACrB,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,KAAK,CACX,CAAC;IACJ,CAAC;CACF;AAjBD,oCAiBC;AAqGD,MAAa,uBAAwB,SAAQ,gBAI5C;CAAG;AAJJ,0DAII","sourcesContent":["import type { RoomSchemaShape } from './presence.ts';\nimport { Expand } from './queryTypes.ts';\n\nexport class DataAttrDef<\n ValueType,\n IsRequired extends RequirementKind,\n IsIndexed extends boolean,\n> {\n public metadata: Record<string, unknown> = {};\n\n constructor(\n public valueType: ValueTypes,\n public required: IsRequired,\n public isIndexed: IsIndexed,\n\n public config: {\n indexed: boolean;\n unique: boolean;\n // clientValidator?: (value: ValueType) => boolean;\n } = { indexed: false, unique: false },\n ) {}\n\n /**\n * @deprecated Only use this temporarily for attributes that you want\n * to treat as required in frontend code but can’t yet mark as required\n * and enforced for backend\n */\n clientRequired() {\n return new DataAttrDef<ValueType, true, IsIndexed>(\n this.valueType,\n false as unknown as true,\n this.isIndexed,\n this.config,\n );\n }\n\n optional() {\n return new DataAttrDef<ValueType, false, IsIndexed>(\n this.valueType,\n false,\n this.isIndexed,\n this.config,\n );\n }\n\n unique() {\n return new DataAttrDef<ValueType, IsRequired, IsIndexed>(\n this.valueType,\n this.required,\n this.isIndexed,\n {\n ...this.config,\n unique: true,\n },\n );\n }\n\n indexed() {\n return new DataAttrDef<ValueType, IsRequired, true>(\n this.valueType,\n this.required,\n true,\n {\n ...this.config,\n indexed: true,\n },\n );\n }\n\n // clientValidate(clientValidator: (value: ValueType) => boolean) {\n // return new DataAttrDef(this.valueType, this.required, {\n // ...this.config,\n // clientValidator,\n // });\n // }\n}\n\nexport class LinkAttrDef<\n Cardinality extends CardinalityKind,\n EntityName extends string,\n> {\n constructor(\n public cardinality: Cardinality,\n public entityName: EntityName,\n ) {}\n}\n\nexport interface IContainEntitiesAndLinks<\n Entities extends EntitiesDef,\n Links extends LinksDef<Entities>,\n> {\n entities: Entities;\n links: Links;\n}\n\n// ==========\n// base types\n\nexport type ValueTypes = 'string' | 'number' | 'boolean' | 'date' | 'json';\n\nexport type CardinalityKind = 'one' | 'many';\n\n// true - force required\n// false - optional, not required\nexport type RequirementKind = true | false;\n\nexport type AttrsDefs = Record<string, DataAttrDef<any, any, any>>;\n\nexport class EntityDef<\n Attrs extends AttrsDefs,\n Links extends Record<string, LinkAttrDef<any, any>>,\n AsType,\n> {\n constructor(\n public attrs: Attrs,\n public links: Links,\n ) {}\n\n asType<_AsType extends Partial<MappedAttrs<Attrs, boolean>>>() {\n return new EntityDef<Attrs, Links, _AsType>(this.attrs, this.links);\n }\n}\n\nexport type EntityDefFromSchema<\n S extends IContainEntitiesAndLinks<any, any>,\n K extends keyof S['entities'],\n> = {\n [k in keyof S['entities'][K]['attrs']]: S['entities'][K] extends EntityDef<\n any,\n any,\n any\n >\n ? S['entities'][K]['attrs'][k]\n : never;\n};\n\nexport type EntitiesDef = Record<string, EntityDef<any, any, any>>;\n\nexport type LinksDef<Entities extends EntitiesDef> = Record<\n string,\n LinkDef<\n Entities,\n keyof Entities,\n string,\n CardinalityKind,\n keyof Entities,\n string,\n CardinalityKind\n >\n>;\n\nexport type LinkDef<\n Entities extends EntitiesDef,\n FwdEntity extends keyof Entities,\n FwdAttr extends string,\n FwdCardinality extends CardinalityKind,\n RevEntity extends keyof Entities,\n RevAttr extends string,\n RevCardinality extends CardinalityKind,\n> = {\n forward: {\n on: FwdEntity;\n label: FwdAttr;\n has: FwdCardinality;\n required?: RequirementKind;\n onDelete?: 'cascade';\n };\n reverse: {\n on: RevEntity;\n label: RevAttr;\n has: RevCardinality;\n onDelete?: 'cascade';\n };\n};\n\n// ==========\n// derived types\ntype IsEmptyOrIndexSignature<T> = keyof T extends never\n ? true\n : string extends keyof T\n ? true\n : false;\n\nexport type EntitiesWithLinks<\n Entities extends EntitiesDef,\n Links extends LinksDef<Entities>,\n> = {\n [EntityName in keyof Entities]: EntityDef<\n Entities[EntityName]['attrs'],\n EntityForwardLinksMap<EntityName, Entities, Links> &\n EntityReverseLinksMap<EntityName, Entities, Links>,\n Entities[EntityName] extends EntityDef<any, any, infer O>\n ? O extends void\n ? void\n : O\n : void\n >;\n};\n\ntype EntityForwardLinksMap<\n EntityName extends keyof Entities,\n Entities extends EntitiesDef,\n Links extends LinksDef<Entities>,\n LinkIndexFwd = LinksIndexedByEntity<Entities, Links, 'reverse'>,\n> =\n IsEmptyOrIndexSignature<Links> extends true\n ? {}\n : EntityName extends keyof LinkIndexFwd\n ? {\n [LinkName in keyof LinkIndexFwd[EntityName]]: LinkIndexFwd[EntityName][LinkName] extends LinkDef<\n Entities,\n infer RelatedEntityName,\n any,\n any,\n any,\n any,\n infer Cardinality\n >\n ? {\n entityName: RelatedEntityName;\n cardinality: Cardinality;\n }\n : never;\n }\n : {};\n\ntype EntityReverseLinksMap<\n EntityName extends keyof Entities,\n Entities extends EntitiesDef,\n Links extends LinksDef<Entities>,\n RevLinkIndex = LinksIndexedByEntity<Entities, Links, 'forward'>,\n> =\n IsEmptyOrIndexSignature<Links> extends true\n ? {}\n : EntityName extends keyof RevLinkIndex\n ? {\n [LinkName in keyof RevLinkIndex[EntityName]]: RevLinkIndex[EntityName][LinkName] extends LinkDef<\n Entities,\n any,\n any,\n infer Cardinality,\n infer RelatedEntityName,\n any,\n any\n >\n ? {\n entityName: RelatedEntityName;\n cardinality: Cardinality;\n }\n : never;\n }\n : {};\n\ntype LinksIndexedByEntity<\n Entities extends EntitiesDef,\n Links extends LinksDef<Entities>,\n Direction extends 'forward' | 'reverse',\n> = {\n [FwdEntity in keyof Entities]: {\n [LinkName in keyof Links as Links[LinkName][Direction]['on'] extends FwdEntity\n ? Links[LinkName][Direction]['label']\n : never]: Links[LinkName] extends LinkDef<\n Entities,\n infer FwdEntity,\n infer FwdAttr,\n infer FwdCardinality,\n infer RevEntity,\n infer RevAttr,\n infer RevCardinality\n >\n ? LinkDef<\n Entities,\n FwdEntity,\n FwdAttr,\n FwdCardinality,\n RevEntity,\n RevAttr,\n RevCardinality\n >\n : never;\n };\n};\n\ntype RequiredKeys<Attrs extends AttrsDefs> = {\n [K in keyof Attrs]: Attrs[K] extends DataAttrDef<any, infer R, any>\n ? R extends true\n ? K\n : never\n : never;\n}[keyof Attrs];\n\ntype OptionalKeys<Attrs extends AttrsDefs> = {\n [K in keyof Attrs]: Attrs[K] extends DataAttrDef<any, infer R, any>\n ? R extends false\n ? K\n : never\n : never;\n}[keyof Attrs];\n\n/**\n * MappedAttrs:\n * - Required keys => `key: ValueType`\n * - Optional keys => `key?: ValueType`\n */\ntype MappedAttrs<Attrs extends AttrsDefs, UseDates extends boolean> = {\n [K in RequiredKeys<Attrs>]: Attrs[K] extends DataAttrDef<infer V, any, any>\n ? V extends Date\n ? UseDates extends true\n ? V\n : string | number\n : V\n : never;\n} & {\n [K in OptionalKeys<Attrs>]?: Attrs[K] extends DataAttrDef<infer V, any, any>\n ? V extends Date\n ? UseDates extends true\n ? V\n : string | number\n : V\n : never;\n};\n\nexport type ResolveEntityAttrs<\n EDef extends EntityDef<any, any, any>,\n UseDates extends boolean = false,\n ResolvedAttrs = MappedAttrs<EDef['attrs'], UseDates>,\n> =\n EDef extends EntityDef<any, any, infer AsType>\n ? AsType extends void\n ? ResolvedAttrs\n : Omit<ResolvedAttrs, keyof AsType> & AsType\n : ResolvedAttrs;\n\nexport type ResolveAttrs<\n Entities extends EntitiesDef,\n EntityName extends keyof Entities,\n UseDates extends boolean,\n> = ResolveEntityAttrs<Entities[EntityName], UseDates>;\n\nexport type RoomsFromDef<RDef extends RoomsDef> = {\n [RoomName in keyof RDef]: {\n presence: Expand<ResolveEntityAttrs<RDef[RoomName]['presence']>>;\n topics: {\n [TopicName in keyof RDef[RoomName]['topics']]: Expand<\n ResolveEntityAttrs<NonNullable<RDef[RoomName]['topics']>[TopicName]>\n >;\n };\n };\n};\n\nexport type RoomsOf<S> =\n S extends InstantSchemaDef<any, any, infer RDef> ? RoomsFromDef<RDef> : never;\n\nexport type PresenceOf<\n S,\n RoomType extends keyof RoomsOf<S>,\n> = RoomsOf<S>[RoomType] extends { presence: infer P } ? P : {};\n\nexport type TopicsOf<\n S,\n RoomType extends keyof RoomsOf<S>,\n> = RoomsOf<S>[RoomType] extends { topics: infer T } ? T : {};\n\nexport type TopicOf<\n S,\n RoomType extends keyof RoomsOf<S>,\n TopicType extends keyof TopicsOf<S, RoomType>,\n> = TopicsOf<S, RoomType>[TopicType];\n\ninterface RoomDef {\n presence: EntityDef<any, any, any>;\n topics?: {\n [TopicName: string]: EntityDef<any, any, any>;\n };\n}\n\nexport interface RoomsDef {\n [RoomType: string]: RoomDef;\n}\n\nexport class InstantSchemaDef<\n Entities extends EntitiesDef,\n Links extends LinksDef<Entities>,\n Rooms extends RoomsDef,\n> implements IContainEntitiesAndLinks<Entities, Links>\n{\n constructor(\n public entities: Entities,\n public links: Links,\n public rooms: Rooms,\n ) {}\n\n /**\n * @deprecated\n * `withRoomSchema` is deprecated. Define your schema in `rooms` directly:\n *\n * @example\n * // Before:\n * const schema = i.schema({\n * // ...\n * }).withRoomSchema<RoomSchema>()\n *\n * // After\n * const schema = i.schema({\n * rooms: {\n * // ...\n * }\n * })\n *\n * @see https://instantdb.com/docs/presence-and-topics#typesafety\n */\n withRoomSchema<_RoomSchema extends RoomSchemaShape>() {\n type RDef = RoomDefFromShape<_RoomSchema>;\n return new InstantSchemaDef<Entities, Links, RDef>(\n this.entities,\n this.links,\n {} as RDef,\n );\n }\n}\n\n/**\n * @deprecated\n * `i.graph` is deprecated. Use `i.schema` instead.\n *\n * @see https://instantdb.com/docs/modeling-data\n */\nexport class InstantGraph<\n Entities extends EntitiesDef,\n Links extends LinksDef<Entities>,\n RoomSchema extends RoomSchemaShape = {},\n> implements IContainEntitiesAndLinks<Entities, Links>\n{\n constructor(\n public entities: Entities,\n public links: Links,\n ) {}\n\n withRoomSchema<_RoomSchema extends RoomSchemaShape>() {\n return new InstantGraph<Entities, Links, _RoomSchema>(\n this.entities,\n this.links,\n );\n }\n}\n\ntype EntityDefFromRoomSlice<Shape extends { [k: string]: any }> = EntityDef<\n {\n [AttrName in keyof Shape]: DataAttrDef<\n Shape[AttrName],\n Shape[AttrName] extends undefined ? false : true,\n any\n >;\n },\n any,\n void\n>;\n\ntype RoomDefFromShape<RoomSchema extends RoomSchemaShape> = {\n [RoomName in keyof RoomSchema]: {\n presence: EntityDefFromRoomSlice<\n NonNullable<RoomSchema[RoomName]['presence']>\n >;\n topics: {\n [TopicName in keyof RoomSchema[RoomName]['topics']]: EntityDefFromRoomSlice<\n NonNullable<RoomSchema[RoomName]['topics'][TopicName]>\n >;\n };\n };\n};\n\ntype EntityDefFromShape<Shape, K extends keyof Shape> = EntityDef<\n {\n [AttrName in keyof Shape[K]]: DataAttrDef<\n Shape[K][AttrName],\n Shape[K][AttrName] extends undefined ? false : true,\n any\n >;\n },\n {\n [LinkName in keyof Shape]: LinkAttrDef<\n 'many',\n LinkName extends string ? LinkName : string\n >;\n },\n void\n>;\n\n/**\n * If you were using the old `schema` types, you can use this to help you\n * migrate.\n *\n * @example\n * // Before\n * const db = init<Schema, Rooms>({...})\n *\n * // After\n * const db = init<BackwardsCompatibleSchema<Schema, Rooms>>({...})\n */\nexport type BackwardsCompatibleSchema<\n Shape extends { [k: string]: any },\n RoomSchema extends RoomSchemaShape = {},\n> = InstantSchemaDef<\n { [K in keyof Shape]: EntityDefFromShape<Shape, K> },\n UnknownLinks<EntitiesDef>,\n RoomDefFromShape<RoomSchema>\n>;\n\n// ----------\n// InstantUnknownSchema\n\nexport type UnknownEntity = EntityDef<\n {\n id: DataAttrDef<string, true, true>;\n [AttrName: string]: DataAttrDef<any, boolean, boolean>;\n },\n { [LinkName: string]: LinkAttrDef<'many', string> },\n void\n>;\n\nexport type UnknownEntities = {\n [EntityName: string]: UnknownEntity;\n};\n\nexport interface UnknownLinks<Entities extends EntitiesDef> {\n [LinkName: string]: LinkDef<\n Entities,\n string,\n string,\n 'many',\n string,\n string,\n 'many'\n >;\n}\n\nexport interface UnknownRooms {\n [RoomName: string]: {\n presence: EntityDef<any, any, any>;\n topics: {\n [TopicName: string]: EntityDef<any, any, any>;\n };\n };\n}\n\nexport class InstantUnknownSchemaDef extends InstantSchemaDef<\n UnknownEntities,\n UnknownLinks<UnknownEntities>,\n UnknownRooms\n> {}\n\nexport type InstantUnknownSchema = InstantUnknownSchemaDef;\n\nexport type CreateParams<\n Schema extends IContainEntitiesAndLinks<any, any>,\n EntityName extends keyof Schema['entities'],\n> = {\n [AttrName in RequiredKeys<\n Schema['entities'][EntityName]['attrs']\n >]: Schema['entities'][EntityName]['attrs'][AttrName] extends DataAttrDef<\n infer ValueType,\n any,\n any\n >\n ? ValueType extends Date\n ? string | number | Date\n : ValueType\n : never;\n} & {\n [AttrName in OptionalKeys<\n Schema['entities'][EntityName]['attrs']\n >]?: Schema['entities'][EntityName]['attrs'][AttrName] extends DataAttrDef<\n infer ValueType,\n false,\n any\n >\n ? (ValueType extends Date ? string | number | Date : ValueType) | null\n : never;\n};\n\nexport type UpdateParams<\n Schema extends IContainEntitiesAndLinks<any, any>,\n EntityName extends keyof Schema['entities'],\n> = {\n [AttrName in keyof Schema['entities'][EntityName]['attrs']]?: Schema['entities'][EntityName]['attrs'][AttrName] extends DataAttrDef<\n infer ValueType,\n infer IsRequired,\n any\n >\n ? IsRequired extends true\n ? ValueType extends Date\n ? string | number | Date\n : ValueType\n : (ValueType extends Date ? string | number | Date : ValueType) | null\n : never;\n};\n\nexport type UpdateOpts = {\n upsert?: boolean | undefined;\n};\n\nexport type LinkParams<\n Schema extends IContainEntitiesAndLinks<any, any>,\n EntityName extends keyof Schema['entities'],\n> = {\n [LinkName in keyof Schema['entities'][EntityName]['links']]?: Schema['entities'][EntityName]['links'][LinkName] extends LinkAttrDef<\n infer Cardinality,\n any\n >\n ? Cardinality extends 'one'\n ? string\n : string | string[]\n : never;\n};\n\nexport type RuleParams = {\n [key: string]: any;\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"PersistedObject.d.ts","sourceRoot":"","sources":["../../../src/utils/PersistedObject.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAUvC,eAAO,MAAM,QAAQ,WAAW,CAAC;AAEjC,MAAM,MAAM,UAAU,GAAG;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAEhF,MAAM,MAAM,IAAI,CAAC,CAAC,SAAS,MAAM,IAAI;IACnC,OAAO,EAAE,MAAM,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG,IAAI,GAAG,WAAW,GAAG,UAAU,CAAC;AAExE,8BAAsB,gBAAgB;gBACxB,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,yBAAyB;IAC/D,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAC3C,QAAQ,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAC/C,QAAQ,CAAC,QAAQ,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IACrE,QAAQ,CAAC,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;CACzC;AAED,MAAM,MAAM,MAAM,GAAG;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,WAAW,IAAI;IACpC,SAAS,EAAE,gBAAgB,CAAC;IAC5B;;;OAGG;IACH,KAAK,EAAE,CACL,GAAG,EAAE,CAAC,EACN,WAAW,EAAE,CAAC,GAAG,IAAI,GAAG,SAAS,EACjC,aAAa,EAAE,CAAC,GAAG,IAAI,GAAG,SAAS,KAChC,CAAC,CAAC;IACP,SAAS,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,WAAW,CAAC;IAC7C,KAAK,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,WAAW,KAAK,CAAC,CAAC;IACzC,UAAU,EAAE,CAAC,CAAC,EAAE,WAAW,KAAK,MAAM,CAAC;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC9B,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC3C,qBAAqB,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAClD,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;CAC/C,CAAC;AAEF,qBAAa,eAAe,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,WAAW;IAC3D,YAAY,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3B,OAAO,CAAC,KAAK,CAAM;IACnB,OAAO,CAAC,UAAU,CAAmB;IACrC,OAAO,CAAC,MAAM,CAAkD;IAChE,OAAO,CAAC,SAAS,CAAoC;IACrD,OAAO,CAAC,KAAK,CAAoC;IACjD,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,sBAAsB,CAAS;IACvC,OAAO,CAAC,SAAS,CAA+B;IAChD,OAAO,CAAC,OAAO,CAA+B;IAC9C,OAAO,CAAC,gBAAgB,CAAqB;IAC7C,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,YAAY,CAAwB;IAC5C,OAAO,CAAC,WAAW,CAA4C;IAC/D,OAAO,CAAC,IAAI,CAAS;IAErB,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,GAAG,SAAS,CAAC;IACtD,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,KAAK,CAaX;IACF,OAAO,CAAC,OAAO,CAAS;gBAEZ,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC;YAmB3B,SAAS;YA2BT,QAAQ;YAaR,YAAY;YAKZ,eAAe;YAWf,eAAe;IAchB,gBAAgB,CAAC,CAAC,EAAE,CAAC;IASrB,iBAAiB;IAMvB,SAAS,CAAC,CAAC,EAAE,CAAC;YAMP,QAAQ;IAqBtB,OAAO,CAAC,eAAe;IAkGjB,KAAK;YAUG,GAAG;IA6HjB,EAAE;IAgBF,OAAO,CAAC,eAAe;IAmBvB,OAAO;IAOA,aAAa,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,IAAI;IA6BlD,SAAS,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,IAAI;CAQnD"}
1
+ {"version":3,"file":"PersistedObject.d.ts","sourceRoot":"","sources":["../../../src/utils/PersistedObject.ts"],"names":[],"mappings":"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"}
@@ -123,6 +123,8 @@ class PersistedObject {
123
123
  _preloadEntries(n) {
124
124
  return __awaiter(this, void 0, void 0, function* () {
125
125
  const meta = yield this.waitForMetaToLoad();
126
+ if (!meta)
127
+ return;
126
128
  const entries = Object.entries(meta.objects);
127
129
  entries.sort(([_k_a, a_meta], [_k_b, b_meta]) => {
128
130
  return b_meta.updatedAt - a_meta.updatedAt;
@@ -1 +1 @@
1
- {"version":3,"file":"PersistedObject.js","sourceRoot":"","sources":["../../../src/utils/PersistedObject.ts"],"names":[],"mappings":"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","sourcesContent":["// PersistedObjects save data outside of memory.\n//\n// When we load a persisted object, it's possible we call `set`\n// before we finish loading. To address we handle set in two ways:\n//\n// 1. Before load\n// We simply update currentValue in memory\n//\n// 2. After load\n// We update currentValue in memory and in storage\n//\n// Each PersistedObject provides it's own `onMerge`\n// function to handle the merge of data from storage and memory\n// on load\n\n// Uses `requestIdleCallback` if available, otherwise calls the\n// callback immediately\n\nimport { create } from 'mutative';\nimport type { Logger } from './log.ts';\n\nfunction safeIdleCallback(cb, timeout: number) {\n if (typeof requestIdleCallback === 'undefined') {\n cb();\n } else {\n requestIdleCallback(cb, { timeout });\n }\n}\n\nexport const META_KEY = '__meta';\n\nexport type ObjectMeta = { createdAt: number; updatedAt: number; size: number };\n\nexport type Meta<K extends string> = {\n objects: Record<K, ObjectMeta>;\n};\n\nexport type StorageInterfaceStoreName = 'kv' | 'querySubs' | 'syncSubs';\n\nexport abstract class StorageInterface {\n constructor(appId: string, storeName: StorageInterfaceStoreName) {}\n abstract getItem(key: string): Promise<any>;\n abstract removeItem(key: string): Promise<void>;\n abstract multiSet(keyValuePairs: Array<[string, any]>): Promise<void>;\n abstract getAllKeys(): Promise<string[]>;\n}\n\nexport type GCOpts = {\n maxSize: number;\n maxAgeMs: number;\n maxEntries: number;\n};\n\nexport type Opts<K, T, SerializedT> = {\n persister: StorageInterface;\n /**\n * Merges data from storage with in-memory value on load.\n * The value returned from merge will become the current value.\n */\n merge: (\n key: K,\n fromStorage: T | null | undefined,\n inMemoryValue: T | null | undefined,\n ) => T;\n serialize: (key: K, input: T) => SerializedT;\n parse: (key: K, value: SerializedT) => T;\n objectSize: (x: SerializedT) => number;\n logger: Logger;\n gc: GCOpts | null | undefined;\n saveThrottleMs?: number | null | undefined;\n idleCallbackMaxWaitMs?: number | null | undefined;\n preloadEntryCount?: number | null | undefined;\n};\n\nexport class PersistedObject<K extends string, T, SerializedT> {\n currentValue: Record<K, T>;\n private _subs = [];\n private _persister: StorageInterface;\n private _merge: (key: K, fromStorage: T, inMemoryValue: T) => T;\n private serialize: (key: K, input: T) => SerializedT;\n private parse: (key: K, value: SerializedT) => T;\n private _saveThrottleMs: number;\n private _idleCallbackMaxWaitMs: number;\n private _nextSave: null | NodeJS.Timeout = null;\n private _nextGc: null | NodeJS.Timeout = null;\n private _pendingSaveKeys: Set<K> = new Set();\n private _loadedKeys: Set<K> = new Set();\n private _loadingKeys: Record<K, Promise<T>>;\n private _objectSize: (serializedObject: SerializedT) => number;\n private _log: Logger;\n\n onKeyLoaded: (key: string) => void | null | undefined;\n private _version = 0;\n private _meta: {\n isLoading: boolean;\n onLoadCbs: Array<() => void>;\n value: null | Meta<K>;\n error: null | Error;\n attempts: number;\n loadingPromise?: Promise<Meta<K>> | null | undefined;\n } = {\n isLoading: true,\n onLoadCbs: [],\n value: null,\n error: null,\n attempts: 0,\n };\n private _gcOpts: GCOpts;\n\n constructor(opts: Opts<K, T, SerializedT>) {\n this._persister = opts.persister;\n this._merge = opts.merge;\n this.serialize = opts.serialize;\n this.parse = opts.parse;\n this._objectSize = opts.objectSize;\n this._log = opts.logger;\n this._saveThrottleMs = opts.saveThrottleMs ?? 100;\n this._idleCallbackMaxWaitMs = opts.idleCallbackMaxWaitMs ?? 1000;\n this._gcOpts = opts.gc;\n this.currentValue = {} as Record<K, T>;\n this._loadedKeys = new Set();\n this._loadingKeys = {} as Record<K, Promise<T>>;\n this._initMeta();\n if (opts.preloadEntryCount) {\n this._preloadEntries(opts.preloadEntryCount);\n }\n }\n\n private async _initMeta() {\n if (this._meta.loadingPromise) {\n await this._meta.loadingPromise;\n }\n try {\n const p = this._persister.getItem(META_KEY);\n this._meta.loadingPromise = p;\n const v = await p;\n this._meta.isLoading = false;\n this._meta.error = null;\n this._meta.loadingPromise = null;\n this._meta.attempts = 0;\n const existingObjects = this._meta.value?.objects ?? {};\n const value = v ?? {};\n const objects = value.objects ?? {};\n // Merge the values from storage with in-memory values\n this._meta.value = {\n ...value,\n objects: { ...existingObjects, ...objects },\n } as Meta<K>;\n } catch (e) {\n this._meta.error = e;\n this._meta.attempts++;\n this._meta.loadingPromise = null;\n }\n }\n\n private async _getMeta(): Promise<Meta<K>> {\n if (this._meta.value) {\n return this._meta.value;\n }\n if (this._meta.loadingPromise) {\n await this._meta.loadingPromise;\n return this._meta.value;\n }\n this._initMeta();\n await this._meta.loadingPromise;\n return this._meta.value;\n }\n\n private async _refreshMeta(): Promise<Meta<K>> {\n await this._initMeta();\n return this._meta.value;\n }\n\n private async _preloadEntries(n: number) {\n const meta = await this.waitForMetaToLoad();\n const entries = Object.entries(meta.objects) as Array<[K, ObjectMeta]>;\n entries.sort(([_k_a, a_meta], [_k_b, b_meta]) => {\n return b_meta.updatedAt - a_meta.updatedAt;\n });\n for (const [k] of entries.slice(0, n)) {\n this._loadKey(k);\n }\n }\n\n private async _getFromStorage(key: K) {\n try {\n const data = await this._persister.getItem(key);\n if (!data) {\n return data;\n }\n const parsed = this.parse(key, data as SerializedT);\n return parsed;\n } catch (e) {\n console.error(`Unable to read from storage for key=${key}`, e);\n return null;\n }\n }\n\n public async waitForKeyToLoad(k: K) {\n if (this._loadedKeys.has(k)) {\n return this.currentValue[k];\n }\n await (this._loadingKeys[k] || this._loadKey(k));\n return this.currentValue[k];\n }\n\n // Used for tests\n public async waitForMetaToLoad() {\n return this._getMeta();\n }\n\n // Unloads the key so that it can be garbage collected, but does not\n // delete it. Removes the key from currentValue.\n public unloadKey(k: K) {\n this._loadedKeys.delete(k);\n delete this._loadingKeys[k];\n delete this.currentValue[k];\n }\n\n private async _loadKey(k: K) {\n if (this._loadedKeys.has(k) || k in this._loadingKeys) return;\n const p = this._getFromStorage(k);\n this._loadingKeys[k] = p;\n const value = await p;\n delete this._loadingKeys[k];\n this._loadedKeys.add(k);\n\n if (value) {\n const merged = this._merge(k, value, this.currentValue[k]);\n if (merged) {\n this.currentValue[k] = merged;\n }\n }\n this.onKeyLoaded && this.onKeyLoaded(k);\n }\n\n // Returns a promise with a number so that we can wait for flush\n // to finish in the tests. The number is the number of operations\n // it performed, but it's mostly there so that typescript will warn\n // us if we forget to retun the promise from the function.\n private _writeToStorage(opts?: {\n skipGc?: boolean | null | undefined;\n attempts?: number | null | undefined;\n }): Promise<number> {\n const promises: Promise<number>[] = [];\n const skipGc = opts?.skipGc;\n if (this._meta.isLoading) {\n // Wait for meta to load and try again, give it a delay so that\n // we don't spend too much time retrying\n const p: Promise<number> = new Promise((resolve, reject) => {\n setTimeout(\n () =>\n this._enqueuePersist(\n opts\n ? { ...opts, attempts: (opts.attempts || 0) + 1 }\n : { attempts: 1 },\n )\n .then(resolve)\n .catch(reject),\n 10 + (opts?.attempts ?? 0) * 1000,\n );\n });\n promises.push(p);\n return Promise.all(promises).then((vs) =>\n vs.reduce((acc, x) => acc + x, 0),\n );\n }\n const metaValue = this._meta.value;\n if (!metaValue) {\n // If it's not loading and we don't have the data, then there\n // must be an error and we're not going to be able to save until\n // the error is resolved elsewhere.\n return Promise.resolve(0);\n }\n const keysToDelete = [];\n const keysToUpdate = [];\n for (const k of this._pendingSaveKeys) {\n if (!(k in this.currentValue)) {\n keysToDelete.push(k);\n delete metaValue.objects[k];\n } else {\n keysToUpdate.push(k);\n }\n }\n\n for (const k of keysToDelete) {\n const p = this._persister.removeItem(k);\n promises.push(p.then(() => 1));\n this._loadedKeys.delete(k);\n this._pendingSaveKeys.delete(k);\n }\n\n const keysToLoad = [];\n\n const kvPairs: Array<[string, any]> = [[META_KEY, metaValue]];\n const metaObjects: Meta<K>['objects'] =\n metaValue.objects ?? ({} as Meta<K>['objects']);\n metaValue.objects = metaObjects;\n for (const k of keysToUpdate) {\n if (this._loadedKeys.has(k)) {\n const serializedV = this.serialize(k, this.currentValue[k]);\n kvPairs.push([k, serializedV]);\n const size = this._objectSize(serializedV);\n const m = metaObjects[k] ?? {\n createdAt: Date.now(),\n updatedAt: Date.now(),\n size,\n };\n m.updatedAt = Date.now();\n m.size = size;\n metaObjects[k] = m;\n this._pendingSaveKeys.delete(k);\n } else {\n keysToLoad.push(k);\n }\n }\n\n const p = this._persister.multiSet(kvPairs);\n promises.push(p.then(() => 1));\n\n // For the keys that haven't loaded, load the key then try\n // persisting again. We don't want to do any async work here\n // or else we might end up saving older copies of the data to\n // the store.\n for (const k of keysToLoad) {\n const p = this._loadKey(k).then(() => this._enqueuePersist(opts));\n promises.push(p);\n }\n\n if (!skipGc) {\n this.gc();\n }\n\n return Promise.all(promises).then((vs) => {\n return vs.reduce((acc, x) => acc + x, 0);\n });\n }\n\n async flush() {\n if (!this._nextSave) {\n return;\n }\n clearTimeout(this._nextSave);\n this._nextSave = null;\n const p = this._writeToStorage();\n return p;\n }\n\n private async _gc() {\n if (!this._gcOpts) {\n return;\n }\n const keys = new Set(await this._persister.getAllKeys());\n keys.delete(META_KEY);\n\n // Keys we can't delete\n const sacredKeys = new Set(Object.keys(this.currentValue));\n for (const k of Object.keys(this._loadingKeys)) {\n sacredKeys.add(k);\n }\n for (const k of this._loadedKeys) {\n sacredKeys.add(k);\n }\n\n // Refresh meta from the store so that we're less likely to\n // clobber data from other tabs\n const meta = await this._refreshMeta();\n if (!meta) {\n this._log.info('Could not gc because we were not able to load meta');\n return;\n }\n\n const promises = [];\n\n const deets = {\n gcOpts: this._gcOpts,\n keys,\n sacredKeys,\n removed: [],\n metaRemoved: [],\n removedMissingCount: 0,\n removedOldCount: 0,\n removedThresholdCount: 0,\n removedSizeCount: 0,\n };\n\n // First, remove all keys we don't know about\n for (const key of keys) {\n if (sacredKeys.has(key) || key in meta.objects) {\n continue;\n }\n this._log.info('Lost track of key in meta', key);\n promises.push(this._persister.removeItem(key));\n deets.removed.push(key);\n deets.removedMissingCount++;\n }\n\n // Remove anything over the max age\n const now = Date.now();\n for (const [k, m] of Object.entries(meta.objects)) {\n if (\n !sacredKeys.has(k) &&\n (m as ObjectMeta).updatedAt < now - this._gcOpts.maxAgeMs\n ) {\n promises.push(this._persister.removeItem(k));\n delete meta.objects[k];\n deets.removed.push(k);\n deets.removedOldCount++;\n }\n }\n\n // Keep queries under max queries\n const maxEntries = Object.entries(meta.objects) as Array<[K, ObjectMeta]>;\n maxEntries.sort(([_k_a, a_meta], [_k_b, b_meta]) => {\n return a_meta.updatedAt - b_meta.updatedAt;\n });\n\n const deletableMaxEntries = maxEntries.filter(([x]) => !sacredKeys.has(x));\n if (maxEntries.length > this._gcOpts.maxEntries) {\n for (const [k] of deletableMaxEntries.slice(\n 0,\n maxEntries.length - this._gcOpts.maxEntries,\n )) {\n promises.push(this._persister.removeItem(k));\n delete meta.objects[k];\n deets.removed.push(k);\n deets.removedThresholdCount++;\n }\n }\n\n // Remove oldest entries until we are under max size\n const delEntries = Object.entries(meta.objects) as Array<[K, ObjectMeta]>;\n delEntries.sort(([_k_a, a_meta], [_k_b, b_meta]) => {\n return a_meta.updatedAt - b_meta.updatedAt;\n });\n const deletableDelEntries = delEntries.filter(([x]) => !sacredKeys.has(x));\n\n let currentSize = delEntries.reduce((acc, [_k, m]) => {\n return acc + m.size;\n }, 0);\n\n while (\n currentSize > 0 &&\n currentSize > this._gcOpts.maxSize &&\n deletableDelEntries.length\n ) {\n const [[k, m]] = deletableDelEntries.splice(0, 1);\n currentSize -= m.size;\n promises.push(this._persister.removeItem(k));\n delete meta.objects[k];\n deets.removed.push(k);\n deets.removedSizeCount++;\n }\n\n // Update meta to remove keys that are no longer in the store\n for (const k of Object.keys(meta.objects)) {\n if (!keys.has(k) && !sacredKeys.has(k)) {\n delete meta.objects[k];\n }\n }\n\n if (deets.removed.length || deets.metaRemoved.length) {\n // Trigger a flush of the meta\n promises.push(this._enqueuePersist({ skipGc: true }));\n }\n\n this._log.info('Completed GC', deets);\n\n await Promise.all(promises);\n return deets;\n }\n\n // Schedules a GC to run in one minute (unless it is already scheduled)\n gc() {\n if (this._nextGc) {\n return;\n }\n this._nextGc = setTimeout(\n () => {\n safeIdleCallback(() => {\n this._nextGc = null;\n this._gc();\n }, 30 * 1000);\n },\n // 1 minute + some jitter to keep multiple tabs from running at same time\n 1000 * 60 + Math.random() * 500,\n );\n }\n\n private _enqueuePersist(opts?: {\n skipGc?: boolean | null | undefined;\n attempts?: number | null | undefined;\n }): Promise<number> {\n return new Promise((resolve, reject) => {\n if (this._nextSave) {\n resolve(0);\n return;\n }\n\n this._nextSave = setTimeout(() => {\n safeIdleCallback(() => {\n this._nextSave = null;\n this._writeToStorage(opts).then(resolve).catch(reject);\n }, this._idleCallbackMaxWaitMs);\n }, this._saveThrottleMs);\n });\n }\n\n version() {\n return this._version;\n }\n\n // Takes a function that updates the store in place.\n // Uses `mutative` to get a list of keys that were changed\n // so that we know which entries we need to persist to the store.\n public updateInPlace(f: (prev: Record<string, T>) => void) {\n this._version++;\n const [state, patches] = create(this.currentValue, f, {\n enablePatches: true,\n });\n for (const patch of patches) {\n const k = patch.path[0];\n if (k && typeof k === 'string') {\n this._pendingSaveKeys.add(k as K);\n if (!this._loadedKeys.has(k as K)) {\n this._loadKey(k as K);\n }\n }\n }\n\n for (const k of Object.keys(state)) {\n if (!state[k]) {\n debugger;\n }\n }\n\n this.currentValue = state;\n this._enqueuePersist();\n for (const cb of this._subs) {\n cb(this.currentValue);\n }\n return state;\n }\n\n public subscribe(cb: (value: Record<K, T>) => void) {\n this._subs.push(cb);\n cb(this.currentValue);\n\n return () => {\n this._subs = this._subs.filter((x) => x !== cb);\n };\n }\n}\n"]}
1
+ {"version":3,"file":"PersistedObject.js","sourceRoot":"","sources":["../../../src/utils/PersistedObject.ts"],"names":[],"mappings":"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","sourcesContent":["// PersistedObjects save data outside of memory.\n//\n// When we load a persisted object, it's possible we call `set`\n// before we finish loading. To address we handle set in two ways:\n//\n// 1. Before load\n// We simply update currentValue in memory\n//\n// 2. After load\n// We update currentValue in memory and in storage\n//\n// Each PersistedObject provides it's own `onMerge`\n// function to handle the merge of data from storage and memory\n// on load\n\n// Uses `requestIdleCallback` if available, otherwise calls the\n// callback immediately\n\nimport { create } from 'mutative';\nimport type { Logger } from './log.ts';\n\nfunction safeIdleCallback(cb, timeout: number) {\n if (typeof requestIdleCallback === 'undefined') {\n cb();\n } else {\n requestIdleCallback(cb, { timeout });\n }\n}\n\nexport const META_KEY = '__meta';\n\nexport type ObjectMeta = { createdAt: number; updatedAt: number; size: number };\n\nexport type Meta<K extends string> = {\n objects: Record<K, ObjectMeta>;\n};\n\nexport type StorageInterfaceStoreName = 'kv' | 'querySubs' | 'syncSubs';\n\nexport abstract class StorageInterface {\n constructor(appId: string, storeName: StorageInterfaceStoreName) {}\n abstract getItem(key: string): Promise<any>;\n abstract removeItem(key: string): Promise<void>;\n abstract multiSet(keyValuePairs: Array<[string, any]>): Promise<void>;\n abstract getAllKeys(): Promise<string[]>;\n}\n\nexport type GCOpts = {\n maxSize: number;\n maxAgeMs: number;\n maxEntries: number;\n};\n\nexport type Opts<K, T, SerializedT> = {\n persister: StorageInterface;\n /**\n * Merges data from storage with in-memory value on load.\n * The value returned from merge will become the current value.\n */\n merge: (\n key: K,\n fromStorage: T | null | undefined,\n inMemoryValue: T | null | undefined,\n ) => T;\n serialize: (key: K, input: T) => SerializedT;\n parse: (key: K, value: SerializedT) => T;\n objectSize: (x: SerializedT) => number;\n logger: Logger;\n gc: GCOpts | null | undefined;\n saveThrottleMs?: number | null | undefined;\n idleCallbackMaxWaitMs?: number | null | undefined;\n preloadEntryCount?: number | null | undefined;\n};\n\nexport class PersistedObject<K extends string, T, SerializedT> {\n currentValue: Record<K, T>;\n private _subs: ((value: Record<K, T>) => void)[] = [];\n private _persister: StorageInterface;\n private _merge: (key: K, fromStorage: T, inMemoryValue: T) => T;\n private serialize: (key: K, input: T) => SerializedT;\n private parse: (key: K, value: SerializedT) => T;\n private _saveThrottleMs: number;\n private _idleCallbackMaxWaitMs: number;\n private _nextSave: null | NodeJS.Timeout = null;\n private _nextGc: null | NodeJS.Timeout = null;\n private _pendingSaveKeys: Set<K> = new Set();\n private _loadedKeys: Set<K> = new Set();\n private _loadingKeys: Record<K, Promise<T>>;\n private _objectSize: (serializedObject: SerializedT) => number;\n private _log: Logger;\n\n onKeyLoaded: (key: string) => void | null | undefined;\n private _version = 0;\n private _meta: {\n isLoading: boolean;\n onLoadCbs: Array<() => void>;\n value: null | Meta<K>;\n error: null | Error;\n attempts: number;\n loadingPromise?: Promise<Meta<K>> | null | undefined;\n } = {\n isLoading: true,\n onLoadCbs: [],\n value: null,\n error: null,\n attempts: 0,\n };\n private _gcOpts: GCOpts | null | undefined;\n\n constructor(opts: Opts<K, T, SerializedT>) {\n this._persister = opts.persister;\n this._merge = opts.merge;\n this.serialize = opts.serialize;\n this.parse = opts.parse;\n this._objectSize = opts.objectSize;\n this._log = opts.logger;\n this._saveThrottleMs = opts.saveThrottleMs ?? 100;\n this._idleCallbackMaxWaitMs = opts.idleCallbackMaxWaitMs ?? 1000;\n this._gcOpts = opts.gc;\n this.currentValue = {} as Record<K, T>;\n this._loadedKeys = new Set();\n this._loadingKeys = {} as Record<K, Promise<T>>;\n this._initMeta();\n if (opts.preloadEntryCount) {\n this._preloadEntries(opts.preloadEntryCount);\n }\n }\n\n private async _initMeta() {\n if (this._meta.loadingPromise) {\n await this._meta.loadingPromise;\n }\n try {\n const p = this._persister.getItem(META_KEY);\n this._meta.loadingPromise = p;\n const v = await p;\n this._meta.isLoading = false;\n this._meta.error = null;\n this._meta.loadingPromise = null;\n this._meta.attempts = 0;\n const existingObjects = this._meta.value?.objects ?? {};\n const value = v ?? {};\n const objects = value.objects ?? {};\n // Merge the values from storage with in-memory values\n this._meta.value = {\n ...value,\n objects: { ...existingObjects, ...objects },\n } as Meta<K>;\n } catch (e) {\n this._meta.error = e;\n this._meta.attempts++;\n this._meta.loadingPromise = null;\n }\n }\n\n private async _getMeta(): Promise<Meta<K> | null> {\n if (this._meta.value) {\n return this._meta.value;\n }\n if (this._meta.loadingPromise) {\n await this._meta.loadingPromise;\n return this._meta.value;\n }\n this._initMeta();\n await this._meta.loadingPromise;\n return this._meta.value;\n }\n\n private async _refreshMeta(): Promise<Meta<K> | null> {\n await this._initMeta();\n return this._meta.value;\n }\n\n private async _preloadEntries(n: number) {\n const meta = await this.waitForMetaToLoad();\n if (!meta) return;\n const entries = Object.entries(meta.objects) as Array<[K, ObjectMeta]>;\n entries.sort(([_k_a, a_meta], [_k_b, b_meta]) => {\n return b_meta.updatedAt - a_meta.updatedAt;\n });\n for (const [k] of entries.slice(0, n)) {\n this._loadKey(k);\n }\n }\n\n private async _getFromStorage(key: K) {\n try {\n const data = await this._persister.getItem(key);\n if (!data) {\n return data;\n }\n const parsed = this.parse(key, data as SerializedT);\n return parsed;\n } catch (e) {\n console.error(`Unable to read from storage for key=${key}`, e);\n return null;\n }\n }\n\n public async waitForKeyToLoad(k: K) {\n if (this._loadedKeys.has(k)) {\n return this.currentValue[k];\n }\n await (this._loadingKeys[k] || this._loadKey(k));\n return this.currentValue[k];\n }\n\n // Used for tests\n public async waitForMetaToLoad() {\n return this._getMeta();\n }\n\n // Unloads the key so that it can be garbage collected, but does not\n // delete it. Removes the key from currentValue.\n public unloadKey(k: K) {\n this._loadedKeys.delete(k);\n delete this._loadingKeys[k];\n delete this.currentValue[k];\n }\n\n private async _loadKey(k: K) {\n if (this._loadedKeys.has(k) || k in this._loadingKeys) return;\n const p = this._getFromStorage(k);\n this._loadingKeys[k] = p;\n const value = await p;\n delete this._loadingKeys[k];\n this._loadedKeys.add(k);\n\n if (value) {\n const merged = this._merge(k, value, this.currentValue[k]);\n if (merged) {\n this.currentValue[k] = merged;\n }\n }\n this.onKeyLoaded && this.onKeyLoaded(k);\n }\n\n // Returns a promise with a number so that we can wait for flush\n // to finish in the tests. The number is the number of operations\n // it performed, but it's mostly there so that typescript will warn\n // us if we forget to retun the promise from the function.\n private _writeToStorage(opts?: {\n skipGc?: boolean | null | undefined;\n attempts?: number | null | undefined;\n }): Promise<number> {\n const promises: Promise<number>[] = [];\n const skipGc = opts?.skipGc;\n if (this._meta.isLoading) {\n // Wait for meta to load and try again, give it a delay so that\n // we don't spend too much time retrying\n const p: Promise<number> = new Promise((resolve, reject) => {\n setTimeout(\n () =>\n this._enqueuePersist(\n opts\n ? { ...opts, attempts: (opts.attempts || 0) + 1 }\n : { attempts: 1 },\n )\n .then(resolve)\n .catch(reject),\n 10 + (opts?.attempts ?? 0) * 1000,\n );\n });\n promises.push(p);\n return Promise.all(promises).then((vs) =>\n vs.reduce((acc, x) => acc + x, 0),\n );\n }\n const metaValue = this._meta.value;\n if (!metaValue) {\n // If it's not loading and we don't have the data, then there\n // must be an error and we're not going to be able to save until\n // the error is resolved elsewhere.\n return Promise.resolve(0);\n }\n const keysToDelete: K[] = [];\n const keysToUpdate: K[] = [];\n for (const k of this._pendingSaveKeys) {\n if (!(k in this.currentValue)) {\n keysToDelete.push(k);\n delete metaValue.objects[k];\n } else {\n keysToUpdate.push(k);\n }\n }\n\n for (const k of keysToDelete) {\n const p = this._persister.removeItem(k);\n promises.push(p.then(() => 1));\n this._loadedKeys.delete(k);\n this._pendingSaveKeys.delete(k);\n }\n\n const keysToLoad: K[] = [];\n\n const kvPairs: Array<[string, any]> = [[META_KEY, metaValue]];\n const metaObjects: Meta<K>['objects'] =\n metaValue.objects ?? ({} as Meta<K>['objects']);\n metaValue.objects = metaObjects;\n for (const k of keysToUpdate) {\n if (this._loadedKeys.has(k)) {\n const serializedV = this.serialize(k, this.currentValue[k]);\n kvPairs.push([k, serializedV]);\n const size = this._objectSize(serializedV);\n const m = metaObjects[k] ?? {\n createdAt: Date.now(),\n updatedAt: Date.now(),\n size,\n };\n m.updatedAt = Date.now();\n m.size = size;\n metaObjects[k] = m;\n this._pendingSaveKeys.delete(k);\n } else {\n keysToLoad.push(k);\n }\n }\n\n const p = this._persister.multiSet(kvPairs);\n promises.push(p.then(() => 1));\n\n // For the keys that haven't loaded, load the key then try\n // persisting again. We don't want to do any async work here\n // or else we might end up saving older copies of the data to\n // the store.\n for (const k of keysToLoad) {\n const p = this._loadKey(k).then(() => this._enqueuePersist(opts));\n promises.push(p);\n }\n\n if (!skipGc) {\n this.gc();\n }\n\n return Promise.all(promises).then((vs) => {\n return vs.reduce((acc, x) => acc + x, 0);\n });\n }\n\n async flush() {\n if (!this._nextSave) {\n return;\n }\n clearTimeout(this._nextSave);\n this._nextSave = null;\n const p = this._writeToStorage();\n return p;\n }\n\n private async _gc() {\n if (!this._gcOpts) {\n return;\n }\n const keys = new Set(await this._persister.getAllKeys());\n keys.delete(META_KEY);\n\n // Keys we can't delete\n const sacredKeys = new Set(Object.keys(this.currentValue));\n for (const k of Object.keys(this._loadingKeys)) {\n sacredKeys.add(k);\n }\n for (const k of this._loadedKeys) {\n sacredKeys.add(k);\n }\n\n // Refresh meta from the store so that we're less likely to\n // clobber data from other tabs\n const meta = await this._refreshMeta();\n if (!meta) {\n this._log.info('Could not gc because we were not able to load meta');\n return;\n }\n\n const promises: Promise<any>[] = [];\n\n const deets = {\n gcOpts: this._gcOpts,\n keys,\n sacredKeys,\n removed: [] as string[],\n metaRemoved: [],\n removedMissingCount: 0,\n removedOldCount: 0,\n removedThresholdCount: 0,\n removedSizeCount: 0,\n };\n\n // First, remove all keys we don't know about\n for (const key of keys) {\n if (sacredKeys.has(key) || key in meta.objects) {\n continue;\n }\n this._log.info('Lost track of key in meta', key);\n promises.push(this._persister.removeItem(key));\n deets.removed.push(key);\n deets.removedMissingCount++;\n }\n\n // Remove anything over the max age\n const now = Date.now();\n for (const [k, m] of Object.entries(meta.objects)) {\n if (\n !sacredKeys.has(k) &&\n (m as ObjectMeta).updatedAt < now - this._gcOpts.maxAgeMs\n ) {\n promises.push(this._persister.removeItem(k));\n delete meta.objects[k];\n deets.removed.push(k);\n deets.removedOldCount++;\n }\n }\n\n // Keep queries under max queries\n const maxEntries = Object.entries(meta.objects) as Array<[K, ObjectMeta]>;\n maxEntries.sort(([_k_a, a_meta], [_k_b, b_meta]) => {\n return a_meta.updatedAt - b_meta.updatedAt;\n });\n\n const deletableMaxEntries = maxEntries.filter(([x]) => !sacredKeys.has(x));\n if (maxEntries.length > this._gcOpts.maxEntries) {\n for (const [k] of deletableMaxEntries.slice(\n 0,\n maxEntries.length - this._gcOpts.maxEntries,\n )) {\n promises.push(this._persister.removeItem(k));\n delete meta.objects[k];\n deets.removed.push(k);\n deets.removedThresholdCount++;\n }\n }\n\n // Remove oldest entries until we are under max size\n const delEntries = Object.entries(meta.objects) as Array<[K, ObjectMeta]>;\n delEntries.sort(([_k_a, a_meta], [_k_b, b_meta]) => {\n return a_meta.updatedAt - b_meta.updatedAt;\n });\n const deletableDelEntries = delEntries.filter(([x]) => !sacredKeys.has(x));\n\n let currentSize = delEntries.reduce((acc, [_k, m]) => {\n return acc + m.size;\n }, 0);\n\n while (\n currentSize > 0 &&\n currentSize > this._gcOpts.maxSize &&\n deletableDelEntries.length\n ) {\n const [[k, m]] = deletableDelEntries.splice(0, 1);\n currentSize -= m.size;\n promises.push(this._persister.removeItem(k));\n delete meta.objects[k];\n deets.removed.push(k);\n deets.removedSizeCount++;\n }\n\n // Update meta to remove keys that are no longer in the store\n for (const k of Object.keys(meta.objects)) {\n if (!keys.has(k) && !sacredKeys.has(k)) {\n delete meta.objects[k];\n }\n }\n\n if (deets.removed.length || deets.metaRemoved.length) {\n // Trigger a flush of the meta\n promises.push(this._enqueuePersist({ skipGc: true }));\n }\n\n this._log.info('Completed GC', deets);\n\n await Promise.all(promises);\n return deets;\n }\n\n // Schedules a GC to run in one minute (unless it is already scheduled)\n gc() {\n if (this._nextGc) {\n return;\n }\n this._nextGc = setTimeout(\n () => {\n safeIdleCallback(() => {\n this._nextGc = null;\n this._gc();\n }, 30 * 1000);\n },\n // 1 minute + some jitter to keep multiple tabs from running at same time\n 1000 * 60 + Math.random() * 500,\n );\n }\n\n private _enqueuePersist(opts?: {\n skipGc?: boolean | null | undefined;\n attempts?: number | null | undefined;\n }): Promise<number> {\n return new Promise((resolve, reject) => {\n if (this._nextSave) {\n resolve(0);\n return;\n }\n\n this._nextSave = setTimeout(() => {\n safeIdleCallback(() => {\n this._nextSave = null;\n this._writeToStorage(opts).then(resolve).catch(reject);\n }, this._idleCallbackMaxWaitMs);\n }, this._saveThrottleMs);\n });\n }\n\n version() {\n return this._version;\n }\n\n // Takes a function that updates the store in place.\n // Uses `mutative` to get a list of keys that were changed\n // so that we know which entries we need to persist to the store.\n public updateInPlace(f: (prev: Record<string, T>) => void) {\n this._version++;\n const [state, patches] = create(this.currentValue, f, {\n enablePatches: true,\n });\n for (const patch of patches) {\n const k = patch.path[0];\n if (k && typeof k === 'string') {\n this._pendingSaveKeys.add(k as K);\n if (!this._loadedKeys.has(k as K)) {\n this._loadKey(k as K);\n }\n }\n }\n\n for (const k of Object.keys(state)) {\n if (!state[k]) {\n debugger;\n }\n }\n\n this.currentValue = state;\n this._enqueuePersist();\n for (const cb of this._subs) {\n cb(this.currentValue);\n }\n return state;\n }\n\n public subscribe(cb: (value: Record<K, T>) => void) {\n this._subs.push(cb);\n cb(this.currentValue);\n\n return () => {\n this._subs = this._subs.filter((x) => x !== cb);\n };\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"uuid.js","sourceRoot":"","sources":["../../../src/utils/uuid.ts"],"names":[],"mappings":";;AAmBA,kCAEC;AArBD,+BAA0B;AAE1B,SAAS,eAAe,CAAC,IAAY;IACnC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACnC,MAAM,KAAK,GAAG,EAAE,CAAC;IACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,iBAAiB,CAAC,CAAC,EAAE,CAAC;IAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC,CAAC;QAC3B,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC;IAC5B,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAgB,WAAW,CAAC,MAAc,EAAE,MAAc;IACxD,OAAO,iBAAiB,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;AAC7E,CAAC;AAED,SAAS,EAAE;IACT,OAAO,IAAA,SAAE,GAAE,CAAC;AACd,CAAC;AAED,kBAAe,EAAE,CAAC","sourcesContent":["import { v4 } from 'uuid';\n\nfunction uuidToByteArray(uuid: string) {\n const hex = uuid.replace(/-/g, '');\n const bytes = [];\n for (let i = 0; i < hex.length; i += 2) {\n bytes.push(parseInt(hex.substring(i, i + 2), 16));\n }\n return bytes;\n}\n\nfunction compareByteArrays(a, b) {\n for (let i = 0; i < a.length; i++) {\n if (a[i] < b[i]) return -1;\n if (a[i] > b[i]) return 1;\n }\n return 0;\n}\n\nexport function uuidCompare(uuid_a: string, uuid_b: string) {\n return compareByteArrays(uuidToByteArray(uuid_a), uuidToByteArray(uuid_b));\n}\n\nfunction id(): string {\n return v4();\n}\n\nexport default id;\n"]}
1
+ {"version":3,"file":"uuid.js","sourceRoot":"","sources":["../../../src/utils/uuid.ts"],"names":[],"mappings":";;AAmBA,kCAEC;AArBD,+BAA0B;AAE1B,SAAS,eAAe,CAAC,IAAY;IACnC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACnC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,iBAAiB,CAAC,CAAC,EAAE,CAAC;IAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC,CAAC;QAC3B,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC;IAC5B,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAgB,WAAW,CAAC,MAAc,EAAE,MAAc;IACxD,OAAO,iBAAiB,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;AAC7E,CAAC;AAED,SAAS,EAAE;IACT,OAAO,IAAA,SAAE,GAAE,CAAC;AACd,CAAC;AAED,kBAAe,EAAE,CAAC","sourcesContent":["import { v4 } from 'uuid';\n\nfunction uuidToByteArray(uuid: string) {\n const hex = uuid.replace(/-/g, '');\n const bytes: number[] = [];\n for (let i = 0; i < hex.length; i += 2) {\n bytes.push(parseInt(hex.substring(i, i + 2), 16));\n }\n return bytes;\n}\n\nfunction compareByteArrays(a, b) {\n for (let i = 0; i < a.length; i++) {\n if (a[i] < b[i]) return -1;\n if (a[i] > b[i]) return 1;\n }\n return 0;\n}\n\nexport function uuidCompare(uuid_a: string, uuid_b: string) {\n return compareByteArrays(uuidToByteArray(uuid_a), uuidToByteArray(uuid_b));\n}\n\nfunction id(): string {\n return v4();\n}\n\nexport default id;\n"]}
@@ -37,8 +37,9 @@ function existingDb(name) {
37
37
  resolve(db);
38
38
  };
39
39
  request.onupgradeneeded = (event) => {
40
+ var _a;
40
41
  const target = event.target;
41
- target.transaction.abort();
42
+ (_a = target.transaction) === null || _a === void 0 ? void 0 : _a.abort();
42
43
  resolve(null);
43
44
  };
44
45
  });
@@ -1 +1 @@
1
- {"version":3,"file":"IndexedDBStorage.js","sourceRoot":"","sources":["../../src/IndexedDBStorage.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Meta,\n META_KEY,\n ObjectMeta,\n StorageInterface,\n StorageInterfaceStoreName,\n} from './utils/PersistedObject.ts';\n\n// Any time these are updates to the data format or new stores are added,\n// the version must be updated.\n// onupgradeneeded will be called, which is where you can\n// move objects from one idb to another.\n// We create a new IDB for each version change instead of\n// using their built-in versioning because they have no ability\n// to roll back and if multiple tabs are active, then you'll just\n// be stuck.\nconst version = 6;\n\nconst storeNames = ['kv', 'querySubs', 'syncSubs'] as const;\n\n// Check that we're not missing a store name in storeNames\ntype MissingStoreNames = Exclude<\n StorageInterfaceStoreName,\n (typeof storeNames)[number]\n>;\nconst _exhaustiveCheck: never = null as MissingStoreNames;\n\nfunction logErrorCb(source: string) {\n return function logError(event) {\n console.error('Error in IndexedDB event', { source, event });\n };\n}\n\nasync function existingDb(name: string): Promise<IDBDatabase | null> {\n return new Promise((resolve) => {\n const request = indexedDB.open(name);\n\n request.onerror = (_event) => {\n resolve(null);\n };\n\n request.onsuccess = (event) => {\n const target = event.target as IDBOpenDBRequest;\n const db = target.result;\n resolve(db);\n };\n\n request.onupgradeneeded = (event) => {\n const target = event.target as IDBOpenDBRequest;\n target.transaction.abort();\n resolve(null);\n };\n });\n}\n\nasync function upgradeQuerySubs5To6(\n hash: string,\n value: any,\n querySubStore: IDBObjectStore,\n): Promise<void> {\n const subs =\n // Backwards compatibility for older versions where we JSON.stringified before storing\n typeof value === 'string' ? JSON.parse(value) : value;\n if (!subs) {\n return;\n }\n const putReqs: Set<IDBRequest<IDBValidKey>> = new Set();\n return new Promise((resolve, reject) => {\n const objects = {};\n for (const [hash, v] of Object.entries(subs)) {\n const value = typeof v === 'string' ? JSON.parse(v) : v;\n if (value.lastAccessed) {\n const objectMeta: ObjectMeta = {\n createdAt: value.lastAccessed,\n updatedAt: value.lastAccessed,\n size: value.result?.store?.triples?.length ?? 0,\n };\n objects[hash] = objectMeta;\n }\n const putReq = querySubStore.put(value, hash);\n putReqs.add(putReq);\n }\n const meta: Meta<string> = { objects };\n const metaPutReq = querySubStore.put(meta, META_KEY);\n putReqs.add(metaPutReq);\n for (const r of putReqs) {\n r.onsuccess = () => {\n putReqs.delete(r);\n if (putReqs.size === 0) {\n resolve();\n }\n };\n r.onerror = (event) => {\n logErrorCb(`Move ${hash} to querySubs store failed`);\n reject(event);\n };\n }\n });\n}\n\nasync function moveKvEntry5To6(\n k: string,\n value: any,\n kvStore: IDBObjectStore,\n): Promise<void> {\n const request = kvStore.put(value, k);\n return new Promise((resolve, reject) => {\n request.onsuccess = () => resolve();\n request.onerror = (event) => reject(event);\n });\n}\n\nasync function upgrade5To6(appId: string, v6Db: IDBDatabase): Promise<void> {\n const v5db = await existingDb(`instant_${appId}_5`);\n if (!v5db) {\n return;\n }\n\n const data: Array<[string, any]> = await new Promise((resolve, reject) => {\n const v5Tx = v5db.transaction(['kv'], 'readonly');\n const objectStore = v5Tx.objectStore('kv');\n const cursorReq = objectStore.openCursor();\n cursorReq.onerror = (event) => {\n reject(event);\n };\n const data: Array<[string, any]> = [];\n cursorReq.onsuccess = () => {\n const cursor = cursorReq.result;\n if (cursor) {\n const key = cursor.key as string;\n const value = cursor.value;\n data.push([key, value]);\n cursor.continue();\n } else {\n resolve(data);\n }\n };\n cursorReq.onerror = (event) => {\n reject(event);\n };\n });\n\n const v6Tx = v6Db.transaction(['kv', 'querySubs'], 'readwrite');\n\n const kvStore = v6Tx.objectStore('kv');\n const querySubStore = v6Tx.objectStore('querySubs');\n\n const promises = [];\n const kvMeta: Meta<string> = { objects: {} };\n for (const [key, value] of data) {\n switch (key) {\n case 'querySubs': {\n const p = upgradeQuerySubs5To6(key, value, querySubStore);\n promises.push(p);\n break;\n }\n default: {\n const p = moveKvEntry5To6(key as string, value, kvStore);\n promises.push(p);\n const objectMeta: ObjectMeta = {\n createdAt: Date.now(),\n updatedAt: Date.now(),\n size: 0,\n };\n kvMeta.objects[key] = objectMeta;\n break;\n }\n }\n }\n const p = moveKvEntry5To6(META_KEY, kvMeta, kvStore);\n promises.push(p);\n await Promise.all(promises);\n await new Promise((resolve, reject) => {\n v6Tx.oncomplete = (e) => resolve(e);\n v6Tx.onerror = (e) => reject(e);\n v6Tx.onabort = (e) => reject(e);\n });\n}\n\n// We create many IndexedDBStorage instances that talk to the same\n// underlying db, but we only get one `onupgradeneeded` event. This holds\n// the upgrade promises so that we wait until upgrade finishes before\n// we start writing.\nconst upgradePromises = new Map();\n\nexport default class IndexedDBStorage extends StorageInterface {\n dbName: string;\n _storeName: StorageInterfaceStoreName;\n _appId: string;\n _prefix: string;\n _dbPromise: Promise<IDBDatabase>;\n\n constructor(appId: string, storeName: StorageInterfaceStoreName) {\n super(appId, storeName);\n this.dbName = `instant_${appId}_${version}`;\n this._storeName = storeName;\n this._appId = appId;\n this._dbPromise = this._init();\n }\n\n _init(): Promise<IDBDatabase> {\n return new Promise((resolve, reject) => {\n let requiresUpgrade = false;\n const request = indexedDB.open(this.dbName, 1);\n\n request.onerror = (event) => {\n reject(event);\n };\n\n request.onsuccess = (event) => {\n const target = event.target as IDBOpenDBRequest;\n const db = target.result;\n if (!requiresUpgrade) {\n const p = upgradePromises.get(this.dbName);\n if (!p) {\n resolve(db);\n } else {\n p.then(() => resolve(db)).catch(() => resolve(db));\n }\n } else {\n const p = upgrade5To6(this._appId, db).catch((e) => {\n logErrorCb('Error upgrading store from version 5 to 6.')(e);\n });\n upgradePromises.set(this.dbName, p);\n p.then(() => resolve(db)).catch(() => resolve(db));\n }\n };\n\n request.onupgradeneeded = (event) => {\n requiresUpgrade = true;\n this._upgradeStore(event);\n };\n });\n }\n\n _upgradeStore(event: IDBVersionChangeEvent) {\n const target = event.target as IDBOpenDBRequest;\n const db = target.result;\n for (const storeName of storeNames) {\n if (!db.objectStoreNames.contains(storeName)) {\n db.createObjectStore(storeName);\n }\n }\n }\n\n async getItem(k: string): Promise<any> {\n const db = await this._dbPromise;\n return new Promise((resolve, reject) => {\n const transaction = db.transaction([this._storeName], 'readonly');\n const objectStore = transaction.objectStore(this._storeName);\n const request = objectStore.get(k);\n request.onerror = (event) => {\n reject(event);\n };\n request.onsuccess = (_event) => {\n if (request.result) {\n resolve(request.result);\n } else {\n resolve(null);\n }\n };\n });\n }\n\n async setItem(k: string, v: any): Promise<void> {\n const db = await this._dbPromise;\n return new Promise((resolve, reject) => {\n const transaction = db.transaction([this._storeName], 'readwrite');\n const objectStore = transaction.objectStore(this._storeName);\n const request = objectStore.put(v, k);\n\n request.onerror = (event) => {\n reject(event);\n };\n\n request.onsuccess = (_event) => {\n resolve();\n };\n });\n }\n\n // Performs all writes in a transaction so that all succeed or none succeed.\n async multiSet(keyValuePairs: Array<[string, any]>): Promise<void> {\n const db = await this._dbPromise;\n return new Promise((resolve, reject) => {\n const transaction = db.transaction([this._storeName], 'readwrite');\n const objectStore = transaction.objectStore(this._storeName);\n const requests: Set<IDBRequest<IDBValidKey>> = new Set();\n for (const [k, v] of keyValuePairs) {\n const request = objectStore.put(v, k);\n requests.add(request);\n }\n\n for (const request of requests) {\n request.onerror = (event) => {\n transaction.abort();\n reject(event);\n };\n request.onsuccess = (_event) => {\n requests.delete(request);\n // Last request to finish resolves the transaction\n if (requests.size === 0) {\n resolve();\n }\n };\n }\n });\n }\n\n async removeItem(k: string): Promise<void> {\n const db = await this._dbPromise;\n return new Promise((resolve, reject) => {\n const transaction = db.transaction([this._storeName], 'readwrite');\n const objectStore = transaction.objectStore(this._storeName);\n const request = objectStore.delete(k);\n request.onerror = (event) => {\n reject(event);\n };\n\n request.onsuccess = (_event) => {\n resolve();\n };\n });\n }\n\n async getAllKeys(): Promise<string[]> {\n const db = await this._dbPromise;\n return new Promise((resolve, reject) => {\n const transaction = db.transaction([this._storeName], 'readonly');\n const objectStore = transaction.objectStore(this._storeName);\n const request = objectStore.getAllKeys();\n request.onerror = (event) => {\n reject(event);\n };\n request.onsuccess = (_event) => {\n resolve(request.result.filter((x) => typeof x === 'string'));\n };\n });\n }\n}\n"]}
1
+ {"version":3,"file":"IndexedDBStorage.js","sourceRoot":"","sources":["../../src/IndexedDBStorage.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Meta,\n META_KEY,\n ObjectMeta,\n StorageInterface,\n StorageInterfaceStoreName,\n} from './utils/PersistedObject.ts';\n\n// Any time these are updates to the data format or new stores are added,\n// the version must be updated.\n// onupgradeneeded will be called, which is where you can\n// move objects from one idb to another.\n// We create a new IDB for each version change instead of\n// using their built-in versioning because they have no ability\n// to roll back and if multiple tabs are active, then you'll just\n// be stuck.\nconst version = 6;\n\nconst storeNames = ['kv', 'querySubs', 'syncSubs'] as const;\n\n// Check that we're not missing a store name in storeNames\ntype MissingStoreNames = Exclude<\n StorageInterfaceStoreName,\n (typeof storeNames)[number]\n>;\nconst _exhaustiveCheck: never = null as MissingStoreNames;\n\nfunction logErrorCb(source: string) {\n return function logError(event) {\n console.error('Error in IndexedDB event', { source, event });\n };\n}\n\nasync function existingDb(name: string): Promise<IDBDatabase | null> {\n return new Promise((resolve) => {\n const request = indexedDB.open(name);\n\n request.onerror = (_event) => {\n resolve(null);\n };\n\n request.onsuccess = (event) => {\n const target = event.target as IDBOpenDBRequest;\n const db = target.result;\n resolve(db);\n };\n\n request.onupgradeneeded = (event) => {\n const target = event.target as IDBOpenDBRequest;\n target.transaction?.abort();\n resolve(null);\n };\n });\n}\n\nasync function upgradeQuerySubs5To6(\n hash: string,\n value: any,\n querySubStore: IDBObjectStore,\n): Promise<void> {\n const subs =\n // Backwards compatibility for older versions where we JSON.stringified before storing\n typeof value === 'string' ? JSON.parse(value) : value;\n if (!subs) {\n return;\n }\n const putReqs: Set<IDBRequest<IDBValidKey>> = new Set();\n return new Promise((resolve, reject) => {\n const objects = {};\n for (const [hash, v] of Object.entries(subs)) {\n const value = typeof v === 'string' ? JSON.parse(v) : v;\n if (value.lastAccessed) {\n const objectMeta: ObjectMeta = {\n createdAt: value.lastAccessed,\n updatedAt: value.lastAccessed,\n size: value.result?.store?.triples?.length ?? 0,\n };\n objects[hash] = objectMeta;\n }\n const putReq = querySubStore.put(value, hash);\n putReqs.add(putReq);\n }\n const meta: Meta<string> = { objects };\n const metaPutReq = querySubStore.put(meta, META_KEY);\n putReqs.add(metaPutReq);\n for (const r of putReqs) {\n r.onsuccess = () => {\n putReqs.delete(r);\n if (putReqs.size === 0) {\n resolve();\n }\n };\n r.onerror = (event) => {\n logErrorCb(`Move ${hash} to querySubs store failed`);\n reject(event);\n };\n }\n });\n}\n\nasync function moveKvEntry5To6(\n k: string,\n value: any,\n kvStore: IDBObjectStore,\n): Promise<void> {\n const request = kvStore.put(value, k);\n return new Promise((resolve, reject) => {\n request.onsuccess = () => resolve();\n request.onerror = (event) => reject(event);\n });\n}\n\nasync function upgrade5To6(appId: string, v6Db: IDBDatabase): Promise<void> {\n const v5db = await existingDb(`instant_${appId}_5`);\n if (!v5db) {\n return;\n }\n\n const data: Array<[string, any]> = await new Promise((resolve, reject) => {\n const v5Tx = v5db.transaction(['kv'], 'readonly');\n const objectStore = v5Tx.objectStore('kv');\n const cursorReq = objectStore.openCursor();\n cursorReq.onerror = (event) => {\n reject(event);\n };\n const data: Array<[string, any]> = [];\n cursorReq.onsuccess = () => {\n const cursor = cursorReq.result;\n if (cursor) {\n const key = cursor.key as string;\n const value = cursor.value;\n data.push([key, value]);\n cursor.continue();\n } else {\n resolve(data);\n }\n };\n cursorReq.onerror = (event) => {\n reject(event);\n };\n });\n\n const v6Tx = v6Db.transaction(['kv', 'querySubs'], 'readwrite');\n\n const kvStore = v6Tx.objectStore('kv');\n const querySubStore = v6Tx.objectStore('querySubs');\n\n const promises: Promise<any>[] = [];\n const kvMeta: Meta<string> = { objects: {} };\n for (const [key, value] of data) {\n switch (key) {\n case 'querySubs': {\n const p = upgradeQuerySubs5To6(key, value, querySubStore);\n promises.push(p);\n break;\n }\n default: {\n const p = moveKvEntry5To6(key as string, value, kvStore);\n promises.push(p);\n const objectMeta: ObjectMeta = {\n createdAt: Date.now(),\n updatedAt: Date.now(),\n size: 0,\n };\n kvMeta.objects[key] = objectMeta;\n break;\n }\n }\n }\n const p = moveKvEntry5To6(META_KEY, kvMeta, kvStore);\n promises.push(p);\n await Promise.all(promises);\n await new Promise((resolve, reject) => {\n v6Tx.oncomplete = (e) => resolve(e);\n v6Tx.onerror = (e) => reject(e);\n v6Tx.onabort = (e) => reject(e);\n });\n}\n\n// We create many IndexedDBStorage instances that talk to the same\n// underlying db, but we only get one `onupgradeneeded` event. This holds\n// the upgrade promises so that we wait until upgrade finishes before\n// we start writing.\nconst upgradePromises = new Map();\n\nexport default class IndexedDBStorage extends StorageInterface {\n dbName: string;\n _storeName: StorageInterfaceStoreName;\n _appId: string;\n _prefix: string;\n _dbPromise: Promise<IDBDatabase>;\n\n constructor(appId: string, storeName: StorageInterfaceStoreName) {\n super(appId, storeName);\n this.dbName = `instant_${appId}_${version}`;\n this._storeName = storeName;\n this._appId = appId;\n this._dbPromise = this._init();\n }\n\n _init(): Promise<IDBDatabase> {\n return new Promise((resolve, reject) => {\n let requiresUpgrade = false;\n const request = indexedDB.open(this.dbName, 1);\n\n request.onerror = (event) => {\n reject(event);\n };\n\n request.onsuccess = (event) => {\n const target = event.target as IDBOpenDBRequest;\n const db = target.result;\n if (!requiresUpgrade) {\n const p = upgradePromises.get(this.dbName);\n if (!p) {\n resolve(db);\n } else {\n p.then(() => resolve(db)).catch(() => resolve(db));\n }\n } else {\n const p = upgrade5To6(this._appId, db).catch((e) => {\n logErrorCb('Error upgrading store from version 5 to 6.')(e);\n });\n upgradePromises.set(this.dbName, p);\n p.then(() => resolve(db)).catch(() => resolve(db));\n }\n };\n\n request.onupgradeneeded = (event) => {\n requiresUpgrade = true;\n this._upgradeStore(event);\n };\n });\n }\n\n _upgradeStore(event: IDBVersionChangeEvent) {\n const target = event.target as IDBOpenDBRequest;\n const db = target.result;\n for (const storeName of storeNames) {\n if (!db.objectStoreNames.contains(storeName)) {\n db.createObjectStore(storeName);\n }\n }\n }\n\n async getItem(k: string): Promise<any> {\n const db = await this._dbPromise;\n return new Promise((resolve, reject) => {\n const transaction = db.transaction([this._storeName], 'readonly');\n const objectStore = transaction.objectStore(this._storeName);\n const request = objectStore.get(k);\n request.onerror = (event) => {\n reject(event);\n };\n request.onsuccess = (_event) => {\n if (request.result) {\n resolve(request.result);\n } else {\n resolve(null);\n }\n };\n });\n }\n\n async setItem(k: string, v: any): Promise<void> {\n const db = await this._dbPromise;\n return new Promise((resolve, reject) => {\n const transaction = db.transaction([this._storeName], 'readwrite');\n const objectStore = transaction.objectStore(this._storeName);\n const request = objectStore.put(v, k);\n\n request.onerror = (event) => {\n reject(event);\n };\n\n request.onsuccess = (_event) => {\n resolve();\n };\n });\n }\n\n // Performs all writes in a transaction so that all succeed or none succeed.\n async multiSet(keyValuePairs: Array<[string, any]>): Promise<void> {\n const db = await this._dbPromise;\n return new Promise((resolve, reject) => {\n const transaction = db.transaction([this._storeName], 'readwrite');\n const objectStore = transaction.objectStore(this._storeName);\n const requests: Set<IDBRequest<IDBValidKey>> = new Set();\n for (const [k, v] of keyValuePairs) {\n const request = objectStore.put(v, k);\n requests.add(request);\n }\n\n for (const request of requests) {\n request.onerror = (event) => {\n transaction.abort();\n reject(event);\n };\n request.onsuccess = (_event) => {\n requests.delete(request);\n // Last request to finish resolves the transaction\n if (requests.size === 0) {\n resolve();\n }\n };\n }\n });\n }\n\n async removeItem(k: string): Promise<void> {\n const db = await this._dbPromise;\n return new Promise((resolve, reject) => {\n const transaction = db.transaction([this._storeName], 'readwrite');\n const objectStore = transaction.objectStore(this._storeName);\n const request = objectStore.delete(k);\n request.onerror = (event) => {\n reject(event);\n };\n\n request.onsuccess = (_event) => {\n resolve();\n };\n });\n }\n\n async getAllKeys(): Promise<string[]> {\n const db = await this._dbPromise;\n return new Promise((resolve, reject) => {\n const transaction = db.transaction([this._storeName], 'readonly');\n const objectStore = transaction.objectStore(this._storeName);\n const request = objectStore.getAllKeys();\n request.onerror = (event) => {\n reject(event);\n };\n request.onsuccess = (_event) => {\n resolve(request.result.filter((x) => typeof x === 'string'));\n };\n });\n }\n}\n"]}
@@ -11,6 +11,8 @@ export default class Reactor<RoomSchema extends import("./presence.ts").RoomSche
11
11
  querySubs: PersistedObject<any, any, any>;
12
12
  /** @type {PersistedObject} */
13
13
  kv: PersistedObject<any, any, any>;
14
+ /** @type {SyncTable} */
15
+ _syncTable: SyncTable;
14
16
  /** @type {Record<string, Array<{ q: any, cb: (data: any) => any }>>} */
15
17
  queryCbs: Record<string, Array<{
16
18
  q: any;
@@ -40,12 +42,12 @@ export default class Reactor<RoomSchema extends import("./presence.ts").RoomSche
40
42
  _wsOk: boolean | null;
41
43
  _localIdPromises: {};
42
44
  _errorMessage: any;
43
- /** @type {Promise<null | {error: {message: string}}>}**/
45
+ /** @type {Promise<null | {error: {message: string}}> | null}**/
44
46
  _oauthCallbackResponse: Promise<null | {
45
47
  error: {
46
48
  message: string;
47
49
  };
48
- }>;
50
+ }> | null;
49
51
  /** @type {null | import('./utils/linkIndex.ts').LinkIndex}} */
50
52
  _linkIndex: null | import("./utils/linkIndex.ts").LinkIndex;
51
53
  /** @type BroadcastChannel | undefined */
@@ -60,10 +62,11 @@ export default class Reactor<RoomSchema extends import("./presence.ts").RoomSche
60
62
  _presence: {};
61
63
  _broadcastQueue: any[];
62
64
  _broadcastSubs: {};
65
+ /** @type {{isLoading: boolean; error: any | undefined, user: any | undefined}} */
63
66
  _currentUserCached: {
64
67
  isLoading: boolean;
65
- error: any;
66
- user: any;
68
+ error: any | undefined;
69
+ user: any | undefined;
67
70
  };
68
71
  _beforeUnloadCbs: any[];
69
72
  _dataForQueryCache: {};
@@ -74,7 +77,6 @@ export default class Reactor<RoomSchema extends import("./presence.ts").RoomSche
74
77
  _inFlightMutationEventIds: Set<any>;
75
78
  queryCacheLimit: any;
76
79
  versions: any;
77
- _syncTable: SyncTable;
78
80
  _beforeUnload(): void;
79
81
  updateSchema(schema: any): void;
80
82
  _reactorStats(): {
@@ -105,10 +107,10 @@ export default class Reactor<RoomSchema extends import("./presence.ts").RoomSche
105
107
  /**
106
108
  * @param {'timeout' | 'error'} status
107
109
  * @param {string} eventId
108
- * @param {{message: string, type?: string, status?: number, hint?: unknown}} errorMsg
110
+ * @param {{message?: string, type?: string, status?: number, hint?: unknown}} errorMsg
109
111
  */
110
112
  _handleMutationError(status: "timeout" | "error", eventId: string, errorMsg: {
111
- message: string;
113
+ message?: string;
112
114
  type?: string;
113
115
  status?: number;
114
116
  hint?: unknown;
@@ -223,8 +225,8 @@ export default class Reactor<RoomSchema extends import("./presence.ts").RoomSche
223
225
  setCurrentUser(user: any): Promise<void>;
224
226
  getCurrentUserCached(): {
225
227
  isLoading: boolean;
226
- error: any;
227
- user: any;
228
+ error: any | undefined;
229
+ user: any | undefined;
228
230
  };
229
231
  _getCurrentUser(): Promise<any>;
230
232
  getCurrentUser(): Promise<{
@@ -326,8 +328,8 @@ export type Connection = import("./Connection.ts").Connection<any>;
326
328
  export type TransportType = import("./Connection.ts").TransportType;
327
329
  export type EventSourceConstructor = import("./Connection.ts").EventSourceConstructor;
328
330
  import { PersistedObject } from './utils/PersistedObject.ts';
329
- import { Deferred } from './utils/Deferred.js';
330
331
  import { SyncTable } from './SyncTable.ts';
332
+ import { Deferred } from './utils/Deferred.js';
331
333
  import * as authAPI from './authAPI.ts';
332
334
  import * as StorageApi from './StorageAPI.ts';
333
335
  import IndexedDBStorage from './IndexedDBStorage.ts';
@@ -1 +1 @@
1
- {"version":3,"file":"Reactor.d.ts","sourceRoot":"","sources":["../../src/Reactor.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Reactor.d.ts","sourceRoot":"","sources":["../../src/Reactor.js"],"names":[],"mappings":"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"}
@@ -180,7 +180,7 @@ export default class Reactor {
180
180
  this._wsOk = null;
181
181
  this._localIdPromises = {};
182
182
  this._errorMessage = null;
183
- /** @type {Promise<null | {error: {message: string}}>}**/
183
+ /** @type {Promise<null | {error: {message: string}}> | null}**/
184
184
  this._oauthCallbackResponse = null;
185
185
  /** @type {null | import('./utils/linkIndex.ts').LinkIndex}} */
186
186
  this._linkIndex = null;
@@ -191,6 +191,7 @@ export default class Reactor {
191
191
  this._presence = {};
192
192
  this._broadcastQueue = [];
193
193
  this._broadcastSubs = {};
194
+ /** @type {{isLoading: boolean; error: any | undefined, user: any | undefined}} */
194
195
  this._currentUserCached = { isLoading: true, error: undefined, user: undefined };
195
196
  this._beforeUnloadCbs = [];
196
197
  this._dataForQueryCache = {};
@@ -531,16 +532,16 @@ export default class Reactor {
531
532
  }
532
533
  else {
533
534
  // Check if error comes from server or client
534
- if (errorMsg.type) {
535
+ if (errorMsg === null || errorMsg === void 0 ? void 0 : errorMsg.type) {
535
536
  const { status } = errorMsg, body = __rest(errorMsg, ["status"]);
536
537
  dfd.reject(new InstantAPIError({
537
538
  // @ts-expect-error body.type is not constant typed
538
539
  body,
539
- status,
540
+ status: status !== null && status !== void 0 ? status : 0,
540
541
  }));
541
542
  }
542
543
  else {
543
- dfd.reject(new InstantError(errorMsg.message, errorMsg.hint));
544
+ dfd.reject(new InstantError((errorMsg === null || errorMsg === void 0 ? void 0 : errorMsg.message) || 'Unknown error', errorMsg === null || errorMsg === void 0 ? void 0 : errorMsg.hint));
544
545
  }
545
546
  }
546
547
  }
@@ -773,7 +774,7 @@ export default class Reactor {
773
774
  /**
774
775
  * @param {'timeout' | 'error'} status
775
776
  * @param {string} eventId
776
- * @param {{message: string, type?: string, status?: number, hint?: unknown}} errorMsg
777
+ * @param {{message?: string, type?: string, status?: number, hint?: unknown}} errorMsg
777
778
  */
778
779
  _handleMutationError(status, eventId, errorMsg) {
779
780
  const mut = this._pendingMutations().get(eventId);