@tanstack/db 0.0.26 → 0.0.29

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 (164) hide show
  1. package/dist/cjs/change-events.cjs +141 -0
  2. package/dist/cjs/change-events.cjs.map +1 -0
  3. package/dist/cjs/change-events.d.cts +49 -0
  4. package/dist/cjs/collection.cjs +236 -90
  5. package/dist/cjs/collection.cjs.map +1 -1
  6. package/dist/cjs/collection.d.cts +95 -20
  7. package/dist/cjs/errors.cjs +509 -1
  8. package/dist/cjs/errors.cjs.map +1 -1
  9. package/dist/cjs/errors.d.cts +225 -1
  10. package/dist/cjs/index.cjs +82 -3
  11. package/dist/cjs/index.cjs.map +1 -1
  12. package/dist/cjs/index.d.cts +5 -1
  13. package/dist/cjs/indexes/auto-index.cjs +64 -0
  14. package/dist/cjs/indexes/auto-index.cjs.map +1 -0
  15. package/dist/cjs/indexes/auto-index.d.cts +9 -0
  16. package/dist/cjs/indexes/base-index.cjs +46 -0
  17. package/dist/cjs/indexes/base-index.cjs.map +1 -0
  18. package/dist/cjs/indexes/base-index.d.cts +54 -0
  19. package/dist/cjs/indexes/index-options.d.cts +13 -0
  20. package/dist/cjs/indexes/lazy-index.cjs +193 -0
  21. package/dist/cjs/indexes/lazy-index.cjs.map +1 -0
  22. package/dist/cjs/indexes/lazy-index.d.cts +96 -0
  23. package/dist/cjs/indexes/ordered-index.cjs +227 -0
  24. package/dist/cjs/indexes/ordered-index.cjs.map +1 -0
  25. package/dist/cjs/indexes/ordered-index.d.cts +72 -0
  26. package/dist/cjs/local-storage.cjs +9 -15
  27. package/dist/cjs/local-storage.cjs.map +1 -1
  28. package/dist/cjs/query/builder/functions.cjs +11 -0
  29. package/dist/cjs/query/builder/functions.cjs.map +1 -1
  30. package/dist/cjs/query/builder/functions.d.cts +4 -0
  31. package/dist/cjs/query/builder/index.cjs +6 -7
  32. package/dist/cjs/query/builder/index.cjs.map +1 -1
  33. package/dist/cjs/query/builder/ref-proxy.cjs +37 -0
  34. package/dist/cjs/query/builder/ref-proxy.cjs.map +1 -1
  35. package/dist/cjs/query/builder/ref-proxy.d.cts +12 -0
  36. package/dist/cjs/query/compiler/evaluators.cjs +83 -58
  37. package/dist/cjs/query/compiler/evaluators.cjs.map +1 -1
  38. package/dist/cjs/query/compiler/evaluators.d.cts +8 -0
  39. package/dist/cjs/query/compiler/expressions.cjs +61 -0
  40. package/dist/cjs/query/compiler/expressions.cjs.map +1 -0
  41. package/dist/cjs/query/compiler/expressions.d.cts +25 -0
  42. package/dist/cjs/query/compiler/group-by.cjs +5 -10
  43. package/dist/cjs/query/compiler/group-by.cjs.map +1 -1
  44. package/dist/cjs/query/compiler/index.cjs +23 -17
  45. package/dist/cjs/query/compiler/index.cjs.map +1 -1
  46. package/dist/cjs/query/compiler/index.d.cts +12 -3
  47. package/dist/cjs/query/compiler/joins.cjs +61 -12
  48. package/dist/cjs/query/compiler/joins.cjs.map +1 -1
  49. package/dist/cjs/query/compiler/order-by.cjs +4 -34
  50. package/dist/cjs/query/compiler/order-by.cjs.map +1 -1
  51. package/dist/cjs/query/compiler/types.d.cts +2 -2
  52. package/dist/cjs/query/live-query-collection.cjs +54 -12
  53. package/dist/cjs/query/live-query-collection.cjs.map +1 -1
  54. package/dist/cjs/query/optimizer.cjs +45 -7
  55. package/dist/cjs/query/optimizer.cjs.map +1 -1
  56. package/dist/cjs/query/optimizer.d.cts +13 -3
  57. package/dist/cjs/transactions.cjs +5 -4
  58. package/dist/cjs/transactions.cjs.map +1 -1
  59. package/dist/cjs/types.d.cts +31 -0
  60. package/dist/cjs/utils/array-utils.cjs +18 -0
  61. package/dist/cjs/utils/array-utils.cjs.map +1 -0
  62. package/dist/cjs/utils/array-utils.d.cts +8 -0
  63. package/dist/cjs/utils/comparison.cjs +52 -0
  64. package/dist/cjs/utils/comparison.cjs.map +1 -0
  65. package/dist/cjs/utils/comparison.d.cts +11 -0
  66. package/dist/cjs/utils/index-optimization.cjs +270 -0
  67. package/dist/cjs/utils/index-optimization.cjs.map +1 -0
  68. package/dist/cjs/utils/index-optimization.d.cts +29 -0
  69. package/dist/esm/change-events.d.ts +49 -0
  70. package/dist/esm/change-events.js +141 -0
  71. package/dist/esm/change-events.js.map +1 -0
  72. package/dist/esm/collection.d.ts +95 -20
  73. package/dist/esm/collection.js +234 -88
  74. package/dist/esm/collection.js.map +1 -1
  75. package/dist/esm/errors.d.ts +225 -1
  76. package/dist/esm/errors.js +510 -2
  77. package/dist/esm/errors.js.map +1 -1
  78. package/dist/esm/index.d.ts +5 -1
  79. package/dist/esm/index.js +81 -2
  80. package/dist/esm/index.js.map +1 -1
  81. package/dist/esm/indexes/auto-index.d.ts +9 -0
  82. package/dist/esm/indexes/auto-index.js +64 -0
  83. package/dist/esm/indexes/auto-index.js.map +1 -0
  84. package/dist/esm/indexes/base-index.d.ts +54 -0
  85. package/dist/esm/indexes/base-index.js +46 -0
  86. package/dist/esm/indexes/base-index.js.map +1 -0
  87. package/dist/esm/indexes/index-options.d.ts +13 -0
  88. package/dist/esm/indexes/lazy-index.d.ts +96 -0
  89. package/dist/esm/indexes/lazy-index.js +193 -0
  90. package/dist/esm/indexes/lazy-index.js.map +1 -0
  91. package/dist/esm/indexes/ordered-index.d.ts +72 -0
  92. package/dist/esm/indexes/ordered-index.js +227 -0
  93. package/dist/esm/indexes/ordered-index.js.map +1 -0
  94. package/dist/esm/local-storage.js +9 -15
  95. package/dist/esm/local-storage.js.map +1 -1
  96. package/dist/esm/query/builder/functions.d.ts +4 -0
  97. package/dist/esm/query/builder/functions.js +11 -0
  98. package/dist/esm/query/builder/functions.js.map +1 -1
  99. package/dist/esm/query/builder/index.js +6 -7
  100. package/dist/esm/query/builder/index.js.map +1 -1
  101. package/dist/esm/query/builder/ref-proxy.d.ts +12 -0
  102. package/dist/esm/query/builder/ref-proxy.js +37 -0
  103. package/dist/esm/query/builder/ref-proxy.js.map +1 -1
  104. package/dist/esm/query/compiler/evaluators.d.ts +8 -0
  105. package/dist/esm/query/compiler/evaluators.js +84 -59
  106. package/dist/esm/query/compiler/evaluators.js.map +1 -1
  107. package/dist/esm/query/compiler/expressions.d.ts +25 -0
  108. package/dist/esm/query/compiler/expressions.js +61 -0
  109. package/dist/esm/query/compiler/expressions.js.map +1 -0
  110. package/dist/esm/query/compiler/group-by.js +5 -10
  111. package/dist/esm/query/compiler/group-by.js.map +1 -1
  112. package/dist/esm/query/compiler/index.d.ts +12 -3
  113. package/dist/esm/query/compiler/index.js +23 -17
  114. package/dist/esm/query/compiler/index.js.map +1 -1
  115. package/dist/esm/query/compiler/joins.js +61 -12
  116. package/dist/esm/query/compiler/joins.js.map +1 -1
  117. package/dist/esm/query/compiler/order-by.js +1 -31
  118. package/dist/esm/query/compiler/order-by.js.map +1 -1
  119. package/dist/esm/query/compiler/types.d.ts +2 -2
  120. package/dist/esm/query/live-query-collection.js +54 -12
  121. package/dist/esm/query/live-query-collection.js.map +1 -1
  122. package/dist/esm/query/optimizer.d.ts +13 -3
  123. package/dist/esm/query/optimizer.js +40 -2
  124. package/dist/esm/query/optimizer.js.map +1 -1
  125. package/dist/esm/transactions.js +5 -4
  126. package/dist/esm/transactions.js.map +1 -1
  127. package/dist/esm/types.d.ts +31 -0
  128. package/dist/esm/utils/array-utils.d.ts +8 -0
  129. package/dist/esm/utils/array-utils.js +18 -0
  130. package/dist/esm/utils/array-utils.js.map +1 -0
  131. package/dist/esm/utils/comparison.d.ts +11 -0
  132. package/dist/esm/utils/comparison.js +52 -0
  133. package/dist/esm/utils/comparison.js.map +1 -0
  134. package/dist/esm/utils/index-optimization.d.ts +29 -0
  135. package/dist/esm/utils/index-optimization.js +270 -0
  136. package/dist/esm/utils/index-optimization.js.map +1 -0
  137. package/package.json +3 -2
  138. package/src/change-events.ts +257 -0
  139. package/src/collection.ts +321 -110
  140. package/src/errors.ts +545 -1
  141. package/src/index.ts +7 -1
  142. package/src/indexes/auto-index.ts +108 -0
  143. package/src/indexes/base-index.ts +119 -0
  144. package/src/indexes/index-options.ts +42 -0
  145. package/src/indexes/lazy-index.ts +251 -0
  146. package/src/indexes/ordered-index.ts +305 -0
  147. package/src/local-storage.ts +16 -17
  148. package/src/query/builder/functions.ts +14 -0
  149. package/src/query/builder/index.ts +12 -7
  150. package/src/query/builder/ref-proxy.ts +65 -0
  151. package/src/query/compiler/evaluators.ts +114 -62
  152. package/src/query/compiler/expressions.ts +92 -0
  153. package/src/query/compiler/group-by.ts +10 -10
  154. package/src/query/compiler/index.ts +52 -22
  155. package/src/query/compiler/joins.ts +114 -15
  156. package/src/query/compiler/order-by.ts +1 -45
  157. package/src/query/compiler/types.ts +2 -2
  158. package/src/query/live-query-collection.ts +95 -15
  159. package/src/query/optimizer.ts +94 -5
  160. package/src/transactions.ts +10 -4
  161. package/src/types.ts +38 -0
  162. package/src/utils/array-utils.ts +28 -0
  163. package/src/utils/comparison.ts +79 -0
  164. package/src/utils/index-optimization.ts +546 -0
@@ -1 +1 @@
1
- {"version":3,"file":"errors.cjs","sources":["../../src/errors.ts"],"sourcesContent":["export class NonRetriableError extends Error {\n constructor(message: string) {\n super(message)\n this.name = `NonRetriableError`\n }\n}\n"],"names":[],"mappings":";;AAAO,MAAM,0BAA0B,MAAM;AAAA,EAC3C,YAAY,SAAiB;AAC3B,UAAM,OAAO;AACb,SAAK,OAAO;AAAA,EACd;AACF;;"}
1
+ {"version":3,"file":"errors.cjs","sources":["../../src/errors.ts"],"sourcesContent":["// Root error class for all TanStack DB errors\nexport class TanStackDBError extends Error {\n constructor(message: string) {\n super(message)\n this.name = `TanStackDBError`\n }\n}\n\n// Base error classes\nexport class NonRetriableError extends TanStackDBError {\n constructor(message: string) {\n super(message)\n this.name = `NonRetriableError`\n }\n}\n\n// Schema validation error (exported from index for backward compatibility)\nexport class SchemaValidationError extends TanStackDBError {\n type: `insert` | `update`\n issues: ReadonlyArray<{\n message: string\n path?: ReadonlyArray<string | number | symbol>\n }>\n\n constructor(\n type: `insert` | `update`,\n issues: ReadonlyArray<{\n message: string\n path?: ReadonlyArray<string | number | symbol>\n }>,\n message?: string\n ) {\n const defaultMessage = `${type === `insert` ? `Insert` : `Update`} validation failed: ${issues\n .map((issue) => `\\n- ${issue.message} - path: ${issue.path}`)\n .join(``)}`\n\n super(message || defaultMessage)\n this.name = `SchemaValidationError`\n this.type = type\n this.issues = issues\n }\n}\n\n// Collection Configuration Errors\nexport class CollectionConfigurationError extends TanStackDBError {\n constructor(message: string) {\n super(message)\n this.name = `CollectionConfigurationError`\n }\n}\n\nexport class CollectionRequiresConfigError extends CollectionConfigurationError {\n constructor() {\n super(`Collection requires a config`)\n }\n}\n\nexport class CollectionRequiresSyncConfigError extends CollectionConfigurationError {\n constructor() {\n super(`Collection requires a sync config`)\n }\n}\n\nexport class InvalidSchemaError extends CollectionConfigurationError {\n constructor() {\n super(`Schema must implement the standard-schema interface`)\n }\n}\n\nexport class SchemaMustBeSynchronousError extends CollectionConfigurationError {\n constructor() {\n super(`Schema validation must be synchronous`)\n }\n}\n\n// Collection State Errors\nexport class CollectionStateError extends TanStackDBError {\n constructor(message: string) {\n super(message)\n this.name = `CollectionStateError`\n }\n}\n\nexport class CollectionInErrorStateError extends CollectionStateError {\n constructor(operation: string, collectionId: string) {\n super(\n `Cannot perform ${operation} on collection \"${collectionId}\" - collection is in error state. Try calling cleanup() and restarting the collection.`\n )\n }\n}\n\nexport class InvalidCollectionStatusTransitionError extends CollectionStateError {\n constructor(from: string, to: string, collectionId: string) {\n super(\n `Invalid collection status transition from \"${from}\" to \"${to}\" for collection \"${collectionId}\"`\n )\n }\n}\n\nexport class CollectionIsInErrorStateError extends CollectionStateError {\n constructor() {\n super(`Collection is in error state`)\n }\n}\n\nexport class NegativeActiveSubscribersError extends CollectionStateError {\n constructor() {\n super(`Active subscribers count is negative - this should never happen`)\n }\n}\n\n// Collection Operation Errors\nexport class CollectionOperationError extends TanStackDBError {\n constructor(message: string) {\n super(message)\n this.name = `CollectionOperationError`\n }\n}\n\nexport class UndefinedKeyError extends CollectionOperationError {\n constructor(item: any) {\n super(\n `An object was created without a defined key: ${JSON.stringify(item)}`\n )\n }\n}\n\nexport class DuplicateKeyError extends CollectionOperationError {\n constructor(key: string | number) {\n super(\n `Cannot insert document with ID \"${key}\" because it already exists in the collection`\n )\n }\n}\n\nexport class DuplicateKeySyncError extends CollectionOperationError {\n constructor(key: string | number, collectionId: string) {\n super(\n `Cannot insert document with key \"${key}\" from sync because it already exists in the collection \"${collectionId}\"`\n )\n }\n}\n\nexport class MissingUpdateArgumentError extends CollectionOperationError {\n constructor() {\n super(`The first argument to update is missing`)\n }\n}\n\nexport class NoKeysPassedToUpdateError extends CollectionOperationError {\n constructor() {\n super(`No keys were passed to update`)\n }\n}\n\nexport class UpdateKeyNotFoundError extends CollectionOperationError {\n constructor(key: string | number) {\n super(\n `The key \"${key}\" was passed to update but an object for this key was not found in the collection`\n )\n }\n}\n\nexport class KeyUpdateNotAllowedError extends CollectionOperationError {\n constructor(originalKey: string | number, newKey: string | number) {\n super(\n `Updating the key of an item is not allowed. Original key: \"${originalKey}\", Attempted new key: \"${newKey}\". Please delete the old item and create a new one if a key change is necessary.`\n )\n }\n}\n\nexport class NoKeysPassedToDeleteError extends CollectionOperationError {\n constructor() {\n super(`No keys were passed to delete`)\n }\n}\n\nexport class DeleteKeyNotFoundError extends CollectionOperationError {\n constructor(key: string | number) {\n super(\n `Collection.delete was called with key '${key}' but there is no item in the collection with this key`\n )\n }\n}\n\n// Collection Handler Errors\nexport class MissingHandlerError extends TanStackDBError {\n constructor(message: string) {\n super(message)\n this.name = `MissingHandlerError`\n }\n}\n\nexport class MissingInsertHandlerError extends MissingHandlerError {\n constructor() {\n super(\n `Collection.insert called directly (not within an explicit transaction) but no 'onInsert' handler is configured.`\n )\n }\n}\n\nexport class MissingUpdateHandlerError extends MissingHandlerError {\n constructor() {\n super(\n `Collection.update called directly (not within an explicit transaction) but no 'onUpdate' handler is configured.`\n )\n }\n}\n\nexport class MissingDeleteHandlerError extends MissingHandlerError {\n constructor() {\n super(\n `Collection.delete called directly (not within an explicit transaction) but no 'onDelete' handler is configured.`\n )\n }\n}\n\n// Transaction Errors\nexport class TransactionError extends TanStackDBError {\n constructor(message: string) {\n super(message)\n this.name = `TransactionError`\n }\n}\n\nexport class MissingMutationFunctionError extends TransactionError {\n constructor() {\n super(`mutationFn is required when creating a transaction`)\n }\n}\n\nexport class TransactionNotPendingMutateError extends TransactionError {\n constructor() {\n super(\n `You can no longer call .mutate() as the transaction is no longer pending`\n )\n }\n}\n\nexport class TransactionAlreadyCompletedRollbackError extends TransactionError {\n constructor() {\n super(\n `You can no longer call .rollback() as the transaction is already completed`\n )\n }\n}\n\nexport class TransactionNotPendingCommitError extends TransactionError {\n constructor() {\n super(\n `You can no longer call .commit() as the transaction is no longer pending`\n )\n }\n}\n\nexport class NoPendingSyncTransactionWriteError extends TransactionError {\n constructor() {\n super(`No pending sync transaction to write to`)\n }\n}\n\nexport class SyncTransactionAlreadyCommittedWriteError extends TransactionError {\n constructor() {\n super(\n `The pending sync transaction is already committed, you can't still write to it.`\n )\n }\n}\n\nexport class NoPendingSyncTransactionCommitError extends TransactionError {\n constructor() {\n super(`No pending sync transaction to commit`)\n }\n}\n\nexport class SyncTransactionAlreadyCommittedError extends TransactionError {\n constructor() {\n super(\n `The pending sync transaction is already committed, you can't commit it again.`\n )\n }\n}\n\n// Query Builder Errors\nexport class QueryBuilderError extends TanStackDBError {\n constructor(message: string) {\n super(message)\n this.name = `QueryBuilderError`\n }\n}\n\nexport class OnlyOneSourceAllowedError extends QueryBuilderError {\n constructor(context: string) {\n super(`Only one source is allowed in the ${context}`)\n }\n}\n\nexport class SubQueryMustHaveFromClauseError extends QueryBuilderError {\n constructor(context: string) {\n super(`A sub query passed to a ${context} must have a from clause itself`)\n }\n}\n\nexport class InvalidSourceError extends QueryBuilderError {\n constructor() {\n super(`Invalid source`)\n }\n}\n\nexport class JoinConditionMustBeEqualityError extends QueryBuilderError {\n constructor() {\n super(`Join condition must be an equality expression`)\n }\n}\n\nexport class QueryMustHaveFromClauseError extends QueryBuilderError {\n constructor() {\n super(`Query must have a from clause`)\n }\n}\n\n// Query Compilation Errors\nexport class QueryCompilationError extends TanStackDBError {\n constructor(message: string) {\n super(message)\n this.name = `QueryCompilationError`\n }\n}\n\nexport class DistinctRequiresSelectError extends QueryCompilationError {\n constructor() {\n super(`DISTINCT requires a SELECT clause.`)\n }\n}\n\nexport class HavingRequiresGroupByError extends QueryCompilationError {\n constructor() {\n super(`HAVING clause requires GROUP BY clause`)\n }\n}\n\nexport class LimitOffsetRequireOrderByError extends QueryCompilationError {\n constructor() {\n super(\n `LIMIT and OFFSET require an ORDER BY clause to ensure deterministic results`\n )\n }\n}\n\nexport class CollectionInputNotFoundError extends QueryCompilationError {\n constructor(collectionId: string) {\n super(`Input for collection \"${collectionId}\" not found in inputs map`)\n }\n}\n\nexport class UnsupportedFromTypeError extends QueryCompilationError {\n constructor(type: string) {\n super(`Unsupported FROM type: ${type}`)\n }\n}\n\nexport class UnknownExpressionTypeError extends QueryCompilationError {\n constructor(type: string) {\n super(`Unknown expression type: ${type}`)\n }\n}\n\nexport class EmptyReferencePathError extends QueryCompilationError {\n constructor() {\n super(`Reference path cannot be empty`)\n }\n}\n\nexport class UnknownFunctionError extends QueryCompilationError {\n constructor(functionName: string) {\n super(`Unknown function: ${functionName}`)\n }\n}\n\n// JOIN Operation Errors\nexport class JoinError extends TanStackDBError {\n constructor(message: string) {\n super(message)\n this.name = `JoinError`\n }\n}\n\nexport class UnsupportedJoinTypeError extends JoinError {\n constructor(joinType: string) {\n super(`Unsupported join type: ${joinType}`)\n }\n}\n\nexport class InvalidJoinConditionSameTableError extends JoinError {\n constructor(tableAlias: string) {\n super(\n `Invalid join condition: both expressions refer to the same table \"${tableAlias}\"`\n )\n }\n}\n\nexport class InvalidJoinConditionTableMismatchError extends JoinError {\n constructor(mainTableAlias: string, joinedTableAlias: string) {\n super(\n `Invalid join condition: expressions must reference table aliases \"${mainTableAlias}\" and \"${joinedTableAlias}\"`\n )\n }\n}\n\nexport class InvalidJoinConditionWrongTablesError extends JoinError {\n constructor(\n leftTableAlias: string,\n rightTableAlias: string,\n mainTableAlias: string,\n joinedTableAlias: string\n ) {\n super(\n `Invalid join condition: expressions reference tables \"${leftTableAlias}\" and \"${rightTableAlias}\" but join is between \"${mainTableAlias}\" and \"${joinedTableAlias}\"`\n )\n }\n}\n\nexport class UnsupportedJoinSourceTypeError extends JoinError {\n constructor(type: string) {\n super(`Unsupported join source type: ${type}`)\n }\n}\n\n// GROUP BY and Aggregation Errors\nexport class GroupByError extends TanStackDBError {\n constructor(message: string) {\n super(message)\n this.name = `GroupByError`\n }\n}\n\nexport class NonAggregateExpressionNotInGroupByError extends GroupByError {\n constructor(alias: string) {\n super(\n `Non-aggregate expression '${alias}' in SELECT must also appear in GROUP BY clause`\n )\n }\n}\n\nexport class UnsupportedAggregateFunctionError extends GroupByError {\n constructor(functionName: string) {\n super(`Unsupported aggregate function: ${functionName}`)\n }\n}\n\nexport class AggregateFunctionNotInSelectError extends GroupByError {\n constructor(functionName: string) {\n super(\n `Aggregate function in HAVING clause must also be in SELECT clause: ${functionName}`\n )\n }\n}\n\nexport class UnknownHavingExpressionTypeError extends GroupByError {\n constructor(type: string) {\n super(`Unknown expression type in HAVING clause: ${type}`)\n }\n}\n\n// Storage Errors\nexport class StorageError extends TanStackDBError {\n constructor(message: string) {\n super(message)\n this.name = `StorageError`\n }\n}\n\nexport class SerializationError extends StorageError {\n constructor(operation: string, originalError: string) {\n super(\n `Cannot ${operation} item because it cannot be JSON serialized: ${originalError}`\n )\n }\n}\n\n// LocalStorage Collection Errors\nexport class LocalStorageCollectionError extends StorageError {\n constructor(message: string) {\n super(message)\n this.name = `LocalStorageCollectionError`\n }\n}\n\nexport class StorageKeyRequiredError extends LocalStorageCollectionError {\n constructor() {\n super(`[LocalStorageCollection] storageKey must be provided.`)\n }\n}\n\nexport class NoStorageAvailableError extends LocalStorageCollectionError {\n constructor() {\n super(\n `[LocalStorageCollection] No storage available. Please provide a storage option or ensure window.localStorage is available.`\n )\n }\n}\n\nexport class NoStorageEventApiError extends LocalStorageCollectionError {\n constructor() {\n super(\n `[LocalStorageCollection] No storage event API available. Please provide a storageEventApi option or ensure window is available.`\n )\n }\n}\n\nexport class InvalidStorageDataFormatError extends LocalStorageCollectionError {\n constructor(storageKey: string, key: string) {\n super(\n `[LocalStorageCollection] Invalid data format in storage key \"${storageKey}\" for key \"${key}\".`\n )\n }\n}\n\nexport class InvalidStorageObjectFormatError extends LocalStorageCollectionError {\n constructor(storageKey: string) {\n super(\n `[LocalStorageCollection] Invalid data format in storage key \"${storageKey}\". Expected object format.`\n )\n }\n}\n\n// Sync Cleanup Errors\nexport class SyncCleanupError extends TanStackDBError {\n constructor(collectionId: string, error: Error | string) {\n const message = error instanceof Error ? error.message : String(error)\n super(\n `Collection \"${collectionId}\" sync cleanup function threw an error: ${message}`\n )\n this.name = `SyncCleanupError`\n }\n}\n\n// Query Optimizer Errors\nexport class QueryOptimizerError extends TanStackDBError {\n constructor(message: string) {\n super(message)\n this.name = `QueryOptimizerError`\n }\n}\n\nexport class CannotCombineEmptyExpressionListError extends QueryOptimizerError {\n constructor() {\n super(`Cannot combine empty expression list`)\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1,3 +1,227 @@
1
- export declare class NonRetriableError extends Error {
1
+ export declare class TanStackDBError extends Error {
2
2
  constructor(message: string);
3
3
  }
4
+ export declare class NonRetriableError extends TanStackDBError {
5
+ constructor(message: string);
6
+ }
7
+ export declare class SchemaValidationError extends TanStackDBError {
8
+ type: `insert` | `update`;
9
+ issues: ReadonlyArray<{
10
+ message: string;
11
+ path?: ReadonlyArray<string | number | symbol>;
12
+ }>;
13
+ constructor(type: `insert` | `update`, issues: ReadonlyArray<{
14
+ message: string;
15
+ path?: ReadonlyArray<string | number | symbol>;
16
+ }>, message?: string);
17
+ }
18
+ export declare class CollectionConfigurationError extends TanStackDBError {
19
+ constructor(message: string);
20
+ }
21
+ export declare class CollectionRequiresConfigError extends CollectionConfigurationError {
22
+ constructor();
23
+ }
24
+ export declare class CollectionRequiresSyncConfigError extends CollectionConfigurationError {
25
+ constructor();
26
+ }
27
+ export declare class InvalidSchemaError extends CollectionConfigurationError {
28
+ constructor();
29
+ }
30
+ export declare class SchemaMustBeSynchronousError extends CollectionConfigurationError {
31
+ constructor();
32
+ }
33
+ export declare class CollectionStateError extends TanStackDBError {
34
+ constructor(message: string);
35
+ }
36
+ export declare class CollectionInErrorStateError extends CollectionStateError {
37
+ constructor(operation: string, collectionId: string);
38
+ }
39
+ export declare class InvalidCollectionStatusTransitionError extends CollectionStateError {
40
+ constructor(from: string, to: string, collectionId: string);
41
+ }
42
+ export declare class CollectionIsInErrorStateError extends CollectionStateError {
43
+ constructor();
44
+ }
45
+ export declare class NegativeActiveSubscribersError extends CollectionStateError {
46
+ constructor();
47
+ }
48
+ export declare class CollectionOperationError extends TanStackDBError {
49
+ constructor(message: string);
50
+ }
51
+ export declare class UndefinedKeyError extends CollectionOperationError {
52
+ constructor(item: any);
53
+ }
54
+ export declare class DuplicateKeyError extends CollectionOperationError {
55
+ constructor(key: string | number);
56
+ }
57
+ export declare class DuplicateKeySyncError extends CollectionOperationError {
58
+ constructor(key: string | number, collectionId: string);
59
+ }
60
+ export declare class MissingUpdateArgumentError extends CollectionOperationError {
61
+ constructor();
62
+ }
63
+ export declare class NoKeysPassedToUpdateError extends CollectionOperationError {
64
+ constructor();
65
+ }
66
+ export declare class UpdateKeyNotFoundError extends CollectionOperationError {
67
+ constructor(key: string | number);
68
+ }
69
+ export declare class KeyUpdateNotAllowedError extends CollectionOperationError {
70
+ constructor(originalKey: string | number, newKey: string | number);
71
+ }
72
+ export declare class NoKeysPassedToDeleteError extends CollectionOperationError {
73
+ constructor();
74
+ }
75
+ export declare class DeleteKeyNotFoundError extends CollectionOperationError {
76
+ constructor(key: string | number);
77
+ }
78
+ export declare class MissingHandlerError extends TanStackDBError {
79
+ constructor(message: string);
80
+ }
81
+ export declare class MissingInsertHandlerError extends MissingHandlerError {
82
+ constructor();
83
+ }
84
+ export declare class MissingUpdateHandlerError extends MissingHandlerError {
85
+ constructor();
86
+ }
87
+ export declare class MissingDeleteHandlerError extends MissingHandlerError {
88
+ constructor();
89
+ }
90
+ export declare class TransactionError extends TanStackDBError {
91
+ constructor(message: string);
92
+ }
93
+ export declare class MissingMutationFunctionError extends TransactionError {
94
+ constructor();
95
+ }
96
+ export declare class TransactionNotPendingMutateError extends TransactionError {
97
+ constructor();
98
+ }
99
+ export declare class TransactionAlreadyCompletedRollbackError extends TransactionError {
100
+ constructor();
101
+ }
102
+ export declare class TransactionNotPendingCommitError extends TransactionError {
103
+ constructor();
104
+ }
105
+ export declare class NoPendingSyncTransactionWriteError extends TransactionError {
106
+ constructor();
107
+ }
108
+ export declare class SyncTransactionAlreadyCommittedWriteError extends TransactionError {
109
+ constructor();
110
+ }
111
+ export declare class NoPendingSyncTransactionCommitError extends TransactionError {
112
+ constructor();
113
+ }
114
+ export declare class SyncTransactionAlreadyCommittedError extends TransactionError {
115
+ constructor();
116
+ }
117
+ export declare class QueryBuilderError extends TanStackDBError {
118
+ constructor(message: string);
119
+ }
120
+ export declare class OnlyOneSourceAllowedError extends QueryBuilderError {
121
+ constructor(context: string);
122
+ }
123
+ export declare class SubQueryMustHaveFromClauseError extends QueryBuilderError {
124
+ constructor(context: string);
125
+ }
126
+ export declare class InvalidSourceError extends QueryBuilderError {
127
+ constructor();
128
+ }
129
+ export declare class JoinConditionMustBeEqualityError extends QueryBuilderError {
130
+ constructor();
131
+ }
132
+ export declare class QueryMustHaveFromClauseError extends QueryBuilderError {
133
+ constructor();
134
+ }
135
+ export declare class QueryCompilationError extends TanStackDBError {
136
+ constructor(message: string);
137
+ }
138
+ export declare class DistinctRequiresSelectError extends QueryCompilationError {
139
+ constructor();
140
+ }
141
+ export declare class HavingRequiresGroupByError extends QueryCompilationError {
142
+ constructor();
143
+ }
144
+ export declare class LimitOffsetRequireOrderByError extends QueryCompilationError {
145
+ constructor();
146
+ }
147
+ export declare class CollectionInputNotFoundError extends QueryCompilationError {
148
+ constructor(collectionId: string);
149
+ }
150
+ export declare class UnsupportedFromTypeError extends QueryCompilationError {
151
+ constructor(type: string);
152
+ }
153
+ export declare class UnknownExpressionTypeError extends QueryCompilationError {
154
+ constructor(type: string);
155
+ }
156
+ export declare class EmptyReferencePathError extends QueryCompilationError {
157
+ constructor();
158
+ }
159
+ export declare class UnknownFunctionError extends QueryCompilationError {
160
+ constructor(functionName: string);
161
+ }
162
+ export declare class JoinError extends TanStackDBError {
163
+ constructor(message: string);
164
+ }
165
+ export declare class UnsupportedJoinTypeError extends JoinError {
166
+ constructor(joinType: string);
167
+ }
168
+ export declare class InvalidJoinConditionSameTableError extends JoinError {
169
+ constructor(tableAlias: string);
170
+ }
171
+ export declare class InvalidJoinConditionTableMismatchError extends JoinError {
172
+ constructor(mainTableAlias: string, joinedTableAlias: string);
173
+ }
174
+ export declare class InvalidJoinConditionWrongTablesError extends JoinError {
175
+ constructor(leftTableAlias: string, rightTableAlias: string, mainTableAlias: string, joinedTableAlias: string);
176
+ }
177
+ export declare class UnsupportedJoinSourceTypeError extends JoinError {
178
+ constructor(type: string);
179
+ }
180
+ export declare class GroupByError extends TanStackDBError {
181
+ constructor(message: string);
182
+ }
183
+ export declare class NonAggregateExpressionNotInGroupByError extends GroupByError {
184
+ constructor(alias: string);
185
+ }
186
+ export declare class UnsupportedAggregateFunctionError extends GroupByError {
187
+ constructor(functionName: string);
188
+ }
189
+ export declare class AggregateFunctionNotInSelectError extends GroupByError {
190
+ constructor(functionName: string);
191
+ }
192
+ export declare class UnknownHavingExpressionTypeError extends GroupByError {
193
+ constructor(type: string);
194
+ }
195
+ export declare class StorageError extends TanStackDBError {
196
+ constructor(message: string);
197
+ }
198
+ export declare class SerializationError extends StorageError {
199
+ constructor(operation: string, originalError: string);
200
+ }
201
+ export declare class LocalStorageCollectionError extends StorageError {
202
+ constructor(message: string);
203
+ }
204
+ export declare class StorageKeyRequiredError extends LocalStorageCollectionError {
205
+ constructor();
206
+ }
207
+ export declare class NoStorageAvailableError extends LocalStorageCollectionError {
208
+ constructor();
209
+ }
210
+ export declare class NoStorageEventApiError extends LocalStorageCollectionError {
211
+ constructor();
212
+ }
213
+ export declare class InvalidStorageDataFormatError extends LocalStorageCollectionError {
214
+ constructor(storageKey: string, key: string);
215
+ }
216
+ export declare class InvalidStorageObjectFormatError extends LocalStorageCollectionError {
217
+ constructor(storageKey: string);
218
+ }
219
+ export declare class SyncCleanupError extends TanStackDBError {
220
+ constructor(collectionId: string, error: Error | string);
221
+ }
222
+ export declare class QueryOptimizerError extends TanStackDBError {
223
+ constructor(message: string);
224
+ }
225
+ export declare class CannotCombineEmptyExpressionListError extends QueryOptimizerError {
226
+ constructor();
227
+ }
@@ -3,23 +3,24 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const collection = require("./collection.cjs");
4
4
  const SortedMap = require("./SortedMap.cjs");
5
5
  const transactions = require("./transactions.cjs");
6
- const errors = require("./errors.cjs");
7
6
  const proxy = require("./proxy.cjs");
8
7
  const optimisticAction = require("./optimistic-action.cjs");
9
8
  const localOnly = require("./local-only.cjs");
10
9
  const localStorage = require("./local-storage.cjs");
10
+ const errors = require("./errors.cjs");
11
+ const baseIndex = require("./indexes/base-index.cjs");
12
+ const orderedIndex = require("./indexes/ordered-index.cjs");
13
+ const lazyIndex = require("./indexes/lazy-index.cjs");
11
14
  const index = require("./query/builder/index.cjs");
12
15
  const functions = require("./query/builder/functions.cjs");
13
16
  const index$1 = require("./query/compiler/index.cjs");
14
17
  const liveQueryCollection = require("./query/live-query-collection.cjs");
15
18
  exports.CollectionImpl = collection.CollectionImpl;
16
- exports.SchemaValidationError = collection.SchemaValidationError;
17
19
  exports.collectionsStore = collection.collectionsStore;
18
20
  exports.createCollection = collection.createCollection;
19
21
  exports.SortedMap = SortedMap.SortedMap;
20
22
  exports.createTransaction = transactions.createTransaction;
21
23
  exports.getActiveTransaction = transactions.getActiveTransaction;
22
- exports.NonRetriableError = errors.NonRetriableError;
23
24
  exports.createArrayChangeProxy = proxy.createArrayChangeProxy;
24
25
  exports.createChangeProxy = proxy.createChangeProxy;
25
26
  exports.withArrayChangeTracking = proxy.withArrayChangeTracking;
@@ -27,6 +28,84 @@ exports.withChangeTracking = proxy.withChangeTracking;
27
28
  exports.createOptimisticAction = optimisticAction.createOptimisticAction;
28
29
  exports.localOnlyCollectionOptions = localOnly.localOnlyCollectionOptions;
29
30
  exports.localStorageCollectionOptions = localStorage.localStorageCollectionOptions;
31
+ exports.AggregateFunctionNotInSelectError = errors.AggregateFunctionNotInSelectError;
32
+ exports.CannotCombineEmptyExpressionListError = errors.CannotCombineEmptyExpressionListError;
33
+ exports.CollectionConfigurationError = errors.CollectionConfigurationError;
34
+ exports.CollectionInErrorStateError = errors.CollectionInErrorStateError;
35
+ exports.CollectionInputNotFoundError = errors.CollectionInputNotFoundError;
36
+ exports.CollectionIsInErrorStateError = errors.CollectionIsInErrorStateError;
37
+ exports.CollectionOperationError = errors.CollectionOperationError;
38
+ exports.CollectionRequiresConfigError = errors.CollectionRequiresConfigError;
39
+ exports.CollectionRequiresSyncConfigError = errors.CollectionRequiresSyncConfigError;
40
+ exports.CollectionStateError = errors.CollectionStateError;
41
+ exports.DeleteKeyNotFoundError = errors.DeleteKeyNotFoundError;
42
+ exports.DistinctRequiresSelectError = errors.DistinctRequiresSelectError;
43
+ exports.DuplicateKeyError = errors.DuplicateKeyError;
44
+ exports.DuplicateKeySyncError = errors.DuplicateKeySyncError;
45
+ exports.EmptyReferencePathError = errors.EmptyReferencePathError;
46
+ exports.GroupByError = errors.GroupByError;
47
+ exports.HavingRequiresGroupByError = errors.HavingRequiresGroupByError;
48
+ exports.InvalidCollectionStatusTransitionError = errors.InvalidCollectionStatusTransitionError;
49
+ exports.InvalidJoinConditionSameTableError = errors.InvalidJoinConditionSameTableError;
50
+ exports.InvalidJoinConditionTableMismatchError = errors.InvalidJoinConditionTableMismatchError;
51
+ exports.InvalidJoinConditionWrongTablesError = errors.InvalidJoinConditionWrongTablesError;
52
+ exports.InvalidSchemaError = errors.InvalidSchemaError;
53
+ exports.InvalidSourceError = errors.InvalidSourceError;
54
+ exports.InvalidStorageDataFormatError = errors.InvalidStorageDataFormatError;
55
+ exports.InvalidStorageObjectFormatError = errors.InvalidStorageObjectFormatError;
56
+ exports.JoinConditionMustBeEqualityError = errors.JoinConditionMustBeEqualityError;
57
+ exports.JoinError = errors.JoinError;
58
+ exports.KeyUpdateNotAllowedError = errors.KeyUpdateNotAllowedError;
59
+ exports.LimitOffsetRequireOrderByError = errors.LimitOffsetRequireOrderByError;
60
+ exports.LocalStorageCollectionError = errors.LocalStorageCollectionError;
61
+ exports.MissingDeleteHandlerError = errors.MissingDeleteHandlerError;
62
+ exports.MissingHandlerError = errors.MissingHandlerError;
63
+ exports.MissingInsertHandlerError = errors.MissingInsertHandlerError;
64
+ exports.MissingMutationFunctionError = errors.MissingMutationFunctionError;
65
+ exports.MissingUpdateArgumentError = errors.MissingUpdateArgumentError;
66
+ exports.MissingUpdateHandlerError = errors.MissingUpdateHandlerError;
67
+ exports.NegativeActiveSubscribersError = errors.NegativeActiveSubscribersError;
68
+ exports.NoKeysPassedToDeleteError = errors.NoKeysPassedToDeleteError;
69
+ exports.NoKeysPassedToUpdateError = errors.NoKeysPassedToUpdateError;
70
+ exports.NoPendingSyncTransactionCommitError = errors.NoPendingSyncTransactionCommitError;
71
+ exports.NoPendingSyncTransactionWriteError = errors.NoPendingSyncTransactionWriteError;
72
+ exports.NoStorageAvailableError = errors.NoStorageAvailableError;
73
+ exports.NoStorageEventApiError = errors.NoStorageEventApiError;
74
+ exports.NonAggregateExpressionNotInGroupByError = errors.NonAggregateExpressionNotInGroupByError;
75
+ exports.NonRetriableError = errors.NonRetriableError;
76
+ exports.OnlyOneSourceAllowedError = errors.OnlyOneSourceAllowedError;
77
+ exports.QueryBuilderError = errors.QueryBuilderError;
78
+ exports.QueryCompilationError = errors.QueryCompilationError;
79
+ exports.QueryMustHaveFromClauseError = errors.QueryMustHaveFromClauseError;
80
+ exports.QueryOptimizerError = errors.QueryOptimizerError;
81
+ exports.SchemaMustBeSynchronousError = errors.SchemaMustBeSynchronousError;
82
+ exports.SchemaValidationError = errors.SchemaValidationError;
83
+ exports.SerializationError = errors.SerializationError;
84
+ exports.StorageError = errors.StorageError;
85
+ exports.StorageKeyRequiredError = errors.StorageKeyRequiredError;
86
+ exports.SubQueryMustHaveFromClauseError = errors.SubQueryMustHaveFromClauseError;
87
+ exports.SyncCleanupError = errors.SyncCleanupError;
88
+ exports.SyncTransactionAlreadyCommittedError = errors.SyncTransactionAlreadyCommittedError;
89
+ exports.SyncTransactionAlreadyCommittedWriteError = errors.SyncTransactionAlreadyCommittedWriteError;
90
+ exports.TanStackDBError = errors.TanStackDBError;
91
+ exports.TransactionAlreadyCompletedRollbackError = errors.TransactionAlreadyCompletedRollbackError;
92
+ exports.TransactionError = errors.TransactionError;
93
+ exports.TransactionNotPendingCommitError = errors.TransactionNotPendingCommitError;
94
+ exports.TransactionNotPendingMutateError = errors.TransactionNotPendingMutateError;
95
+ exports.UndefinedKeyError = errors.UndefinedKeyError;
96
+ exports.UnknownExpressionTypeError = errors.UnknownExpressionTypeError;
97
+ exports.UnknownFunctionError = errors.UnknownFunctionError;
98
+ exports.UnknownHavingExpressionTypeError = errors.UnknownHavingExpressionTypeError;
99
+ exports.UnsupportedAggregateFunctionError = errors.UnsupportedAggregateFunctionError;
100
+ exports.UnsupportedFromTypeError = errors.UnsupportedFromTypeError;
101
+ exports.UnsupportedJoinSourceTypeError = errors.UnsupportedJoinSourceTypeError;
102
+ exports.UnsupportedJoinTypeError = errors.UnsupportedJoinTypeError;
103
+ exports.UpdateKeyNotFoundError = errors.UpdateKeyNotFoundError;
104
+ exports.BaseIndex = baseIndex.BaseIndex;
105
+ exports.IndexOperation = baseIndex.IndexOperation;
106
+ exports.OrderedIndex = orderedIndex.OrderedIndex;
107
+ exports.IndexProxy = lazyIndex.IndexProxy;
108
+ exports.LazyIndexWrapper = lazyIndex.LazyIndexWrapper;
30
109
  exports.BaseQueryBuilder = index.BaseQueryBuilder;
31
110
  exports.Query = index.Query;
32
111
  exports.add = functions.add;
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -2,10 +2,14 @@ export * from './collection.cjs';
2
2
  export * from './SortedMap.cjs';
3
3
  export * from './transactions.cjs';
4
4
  export * from './types.cjs';
5
- export * from './errors.cjs';
6
5
  export * from './proxy.cjs';
7
6
  export * from './query/index.js';
8
7
  export * from './optimistic-action.cjs';
9
8
  export * from './local-only.cjs';
10
9
  export * from './local-storage.cjs';
10
+ export * from './errors.cjs';
11
+ export * from './indexes/base-index.js';
12
+ export * from './indexes/ordered-index.js';
13
+ export * from './indexes/lazy-index.js';
14
+ export { type IndexOptions } from './indexes/index-options.js';
11
15
  export type { Collection } from './collection.cjs';
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const orderedIndex = require("./ordered-index.cjs");
4
+ function ensureIndexForExpression(expression, collection) {
5
+ if (collection.config.autoIndex !== `eager`) {
6
+ return;
7
+ }
8
+ if (collection.status === `loading` || collection.status === `initialCommit`) {
9
+ return;
10
+ }
11
+ const indexableExpressions = extractIndexableExpressions(expression);
12
+ for (const { fieldName, fieldPath } of indexableExpressions) {
13
+ const existingIndex = Array.from(collection.indexes.values()).find(
14
+ (index) => index.matchesField(fieldPath)
15
+ );
16
+ if (existingIndex) {
17
+ continue;
18
+ }
19
+ try {
20
+ collection.createIndex((row) => row[fieldName], {
21
+ name: `auto_${fieldName}`,
22
+ indexType: orderedIndex.OrderedIndex
23
+ });
24
+ } catch (error) {
25
+ console.warn(
26
+ `Failed to create auto-index for field "${fieldName}":`,
27
+ error
28
+ );
29
+ }
30
+ }
31
+ }
32
+ function extractIndexableExpressions(expression) {
33
+ const results = [];
34
+ function extractFromExpression(expr) {
35
+ if (expr.type !== `func`) {
36
+ return;
37
+ }
38
+ const func = expr;
39
+ if (func.name === `and`) {
40
+ for (const arg of func.args) {
41
+ extractFromExpression(arg);
42
+ }
43
+ return;
44
+ }
45
+ const supportedOperations = [`eq`, `gt`, `gte`, `lt`, `lte`, `in`];
46
+ if (!supportedOperations.includes(func.name)) {
47
+ return;
48
+ }
49
+ if (func.args.length < 1 || func.args[0].type !== `ref`) {
50
+ return;
51
+ }
52
+ const fieldRef = func.args[0];
53
+ const fieldPath = fieldRef.path;
54
+ if (fieldPath.length !== 1) {
55
+ return;
56
+ }
57
+ const fieldName = fieldPath[0];
58
+ results.push({ fieldName, fieldPath });
59
+ }
60
+ extractFromExpression(expression);
61
+ return results;
62
+ }
63
+ exports.ensureIndexForExpression = ensureIndexForExpression;
64
+ //# sourceMappingURL=auto-index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-index.cjs","sources":["../../../src/indexes/auto-index.ts"],"sourcesContent":["import { OrderedIndex } from \"./ordered-index\"\nimport type { BasicExpression } from \"../query/ir\"\nimport type { CollectionImpl } from \"../collection\"\n\nexport interface AutoIndexConfig {\n autoIndex?: `off` | `eager`\n}\n\n/**\n * Analyzes a where expression and creates indexes for all simple operations on single fields\n */\nexport function ensureIndexForExpression<\n T extends Record<string, any>,\n TKey extends string | number,\n>(\n expression: BasicExpression,\n collection: CollectionImpl<T, TKey, any, any, any>\n): void {\n // Only proceed if auto-indexing is enabled\n if (collection.config.autoIndex !== `eager`) {\n return\n }\n\n // Don't auto-index during sync operations\n if (\n collection.status === `loading` ||\n collection.status === `initialCommit`\n ) {\n return\n }\n\n // Extract all indexable expressions and create indexes for them\n const indexableExpressions = extractIndexableExpressions(expression)\n\n for (const { fieldName, fieldPath } of indexableExpressions) {\n // Check if we already have an index for this field\n const existingIndex = Array.from(collection.indexes.values()).find(\n (index) => index.matchesField(fieldPath)\n )\n\n if (existingIndex) {\n continue // Index already exists\n }\n\n // Create a new index for this field using the collection's createIndex method\n try {\n collection.createIndex((row) => (row as any)[fieldName], {\n name: `auto_${fieldName}`,\n indexType: OrderedIndex,\n })\n } catch (error) {\n console.warn(\n `Failed to create auto-index for field \"${fieldName}\":`,\n error\n )\n }\n }\n}\n\n/**\n * Extracts all indexable expressions from a where expression\n */\nfunction extractIndexableExpressions(\n expression: BasicExpression\n): Array<{ fieldName: string; fieldPath: Array<string> }> {\n const results: Array<{ fieldName: string; fieldPath: Array<string> }> = []\n\n function extractFromExpression(expr: BasicExpression): void {\n if (expr.type !== `func`) {\n return\n }\n\n const func = expr as any\n\n // Handle 'and' expressions by recursively processing all arguments\n if (func.name === `and`) {\n for (const arg of func.args) {\n extractFromExpression(arg)\n }\n return\n }\n\n // Check if this is a supported operation\n const supportedOperations = [`eq`, `gt`, `gte`, `lt`, `lte`, `in`]\n if (!supportedOperations.includes(func.name)) {\n return\n }\n\n // Check if the first argument is a property reference (single field)\n if (func.args.length < 1 || func.args[0].type !== `ref`) {\n return\n }\n\n const fieldRef = func.args[0]\n const fieldPath = fieldRef.path\n\n // Skip if it's not a simple field (e.g., nested properties or array access)\n if (fieldPath.length !== 1) {\n return\n }\n\n const fieldName = fieldPath[0]\n results.push({ fieldName, fieldPath })\n }\n\n extractFromExpression(expression)\n return results\n}\n"],"names":["OrderedIndex"],"mappings":";;;AAWO,SAAS,yBAId,YACA,YACM;AAEN,MAAI,WAAW,OAAO,cAAc,SAAS;AAC3C;AAAA,EACF;AAGA,MACE,WAAW,WAAW,aACtB,WAAW,WAAW,iBACtB;AACA;AAAA,EACF;AAGA,QAAM,uBAAuB,4BAA4B,UAAU;AAEnE,aAAW,EAAE,WAAW,UAAA,KAAe,sBAAsB;AAE3D,UAAM,gBAAgB,MAAM,KAAK,WAAW,QAAQ,OAAA,CAAQ,EAAE;AAAA,MAC5D,CAAC,UAAU,MAAM,aAAa,SAAS;AAAA,IAAA;AAGzC,QAAI,eAAe;AACjB;AAAA,IACF;AAGA,QAAI;AACF,iBAAW,YAAY,CAAC,QAAS,IAAY,SAAS,GAAG;AAAA,QACvD,MAAM,QAAQ,SAAS;AAAA,QACvB,WAAWA,aAAAA;AAAAA,MAAA,CACZ;AAAA,IACH,SAAS,OAAO;AACd,cAAQ;AAAA,QACN,0CAA0C,SAAS;AAAA,QACnD;AAAA,MAAA;AAAA,IAEJ;AAAA,EACF;AACF;AAKA,SAAS,4BACP,YACwD;AACxD,QAAM,UAAkE,CAAA;AAExE,WAAS,sBAAsB,MAA6B;AAC1D,QAAI,KAAK,SAAS,QAAQ;AACxB;AAAA,IACF;AAEA,UAAM,OAAO;AAGb,QAAI,KAAK,SAAS,OAAO;AACvB,iBAAW,OAAO,KAAK,MAAM;AAC3B,8BAAsB,GAAG;AAAA,MAC3B;AACA;AAAA,IACF;AAGA,UAAM,sBAAsB,CAAC,MAAM,MAAM,OAAO,MAAM,OAAO,IAAI;AACjE,QAAI,CAAC,oBAAoB,SAAS,KAAK,IAAI,GAAG;AAC5C;AAAA,IACF;AAGA,QAAI,KAAK,KAAK,SAAS,KAAK,KAAK,KAAK,CAAC,EAAE,SAAS,OAAO;AACvD;AAAA,IACF;AAEA,UAAM,WAAW,KAAK,KAAK,CAAC;AAC5B,UAAM,YAAY,SAAS;AAG3B,QAAI,UAAU,WAAW,GAAG;AAC1B;AAAA,IACF;AAEA,UAAM,YAAY,UAAU,CAAC;AAC7B,YAAQ,KAAK,EAAE,WAAW,UAAA,CAAW;AAAA,EACvC;AAEA,wBAAsB,UAAU;AAChC,SAAO;AACT;;"}
@@ -0,0 +1,9 @@
1
+ import { BasicExpression } from '../query/ir.cjs';
2
+ import { CollectionImpl } from '../collection.cjs';
3
+ export interface AutoIndexConfig {
4
+ autoIndex?: `off` | `eager`;
5
+ }
6
+ /**
7
+ * Analyzes a where expression and creates indexes for all simple operations on single fields
8
+ */
9
+ export declare function ensureIndexForExpression<T extends Record<string, any>, TKey extends string | number>(expression: BasicExpression, collection: CollectionImpl<T, TKey, any, any, any>): void;
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const evaluators = require("../query/compiler/evaluators.cjs");
4
+ const functions = require("../query/builder/functions.cjs");
5
+ const IndexOperation = functions.comparisonFunctions;
6
+ class BaseIndex {
7
+ constructor(id, expression, name, options) {
8
+ this.lookupCount = 0;
9
+ this.totalLookupTime = 0;
10
+ this.lastUpdated = /* @__PURE__ */ new Date();
11
+ this.id = id;
12
+ this.expression = expression;
13
+ this.name = name;
14
+ this.initialize(options);
15
+ }
16
+ // Common methods
17
+ supports(operation) {
18
+ return this.supportedOperations.has(operation);
19
+ }
20
+ matchesField(fieldPath) {
21
+ return this.expression.type === `ref` && this.expression.path.length === fieldPath.length && this.expression.path.every((part, i) => part === fieldPath[i]);
22
+ }
23
+ getStats() {
24
+ return {
25
+ entryCount: this.keyCount,
26
+ lookupCount: this.lookupCount,
27
+ averageLookupTime: this.lookupCount > 0 ? this.totalLookupTime / this.lookupCount : 0,
28
+ lastUpdated: this.lastUpdated
29
+ };
30
+ }
31
+ evaluateIndexExpression(item) {
32
+ const evaluator = evaluators.compileSingleRowExpression(this.expression);
33
+ return evaluator(item);
34
+ }
35
+ trackLookup(startTime) {
36
+ const duration = performance.now() - startTime;
37
+ this.lookupCount++;
38
+ this.totalLookupTime += duration;
39
+ }
40
+ updateTimestamp() {
41
+ this.lastUpdated = /* @__PURE__ */ new Date();
42
+ }
43
+ }
44
+ exports.BaseIndex = BaseIndex;
45
+ exports.IndexOperation = IndexOperation;
46
+ //# sourceMappingURL=base-index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-index.cjs","sources":["../../../src/indexes/base-index.ts"],"sourcesContent":["import { compileSingleRowExpression } from \"../query/compiler/evaluators.js\"\nimport { comparisonFunctions } from \"../query/builder/functions.js\"\nimport type { BasicExpression } from \"../query/ir.js\"\n\n/**\n * Operations that indexes can support, imported from available comparison functions\n */\nexport const IndexOperation = comparisonFunctions\n\n/**\n * Type for index operation values\n */\nexport type IndexOperation = (typeof comparisonFunctions)[number]\n\n/**\n * Statistics about index usage and performance\n */\nexport interface IndexStats {\n readonly entryCount: number\n readonly lookupCount: number\n readonly averageLookupTime: number\n readonly lastUpdated: Date\n}\n\n/**\n * Base abstract class that all index types extend\n */\nexport abstract class BaseIndex<\n TKey extends string | number = string | number,\n> {\n public readonly id: number\n public readonly name?: string\n public readonly expression: BasicExpression\n public abstract readonly supportedOperations: Set<IndexOperation>\n\n protected lookupCount = 0\n protected totalLookupTime = 0\n protected lastUpdated = new Date()\n\n constructor(\n id: number,\n expression: BasicExpression,\n name?: string,\n options?: any\n ) {\n this.id = id\n this.expression = expression\n this.name = name\n this.initialize(options)\n }\n\n // Abstract methods that each index type must implement\n abstract add(key: TKey, item: any): void\n abstract remove(key: TKey, item: any): void\n abstract update(key: TKey, oldItem: any, newItem: any): void\n abstract build(entries: Iterable<[TKey, any]>): void\n abstract clear(): void\n abstract lookup(operation: IndexOperation, value: any): Set<TKey>\n abstract get keyCount(): number\n\n // Common methods\n supports(operation: IndexOperation): boolean {\n return this.supportedOperations.has(operation)\n }\n\n matchesField(fieldPath: Array<string>): boolean {\n return (\n this.expression.type === `ref` &&\n this.expression.path.length === fieldPath.length &&\n this.expression.path.every((part, i) => part === fieldPath[i])\n )\n }\n\n getStats(): IndexStats {\n return {\n entryCount: this.keyCount,\n lookupCount: this.lookupCount,\n averageLookupTime:\n this.lookupCount > 0 ? this.totalLookupTime / this.lookupCount : 0,\n lastUpdated: this.lastUpdated,\n }\n }\n\n // Protected methods for subclasses\n protected abstract initialize(options?: any): void\n\n protected evaluateIndexExpression(item: any): any {\n const evaluator = compileSingleRowExpression(this.expression)\n return evaluator(item as Record<string, unknown>)\n }\n\n protected trackLookup(startTime: number): void {\n const duration = performance.now() - startTime\n this.lookupCount++\n this.totalLookupTime += duration\n }\n\n protected updateTimestamp(): void {\n this.lastUpdated = new Date()\n }\n}\n\n/**\n * Type for index constructor\n */\nexport type IndexConstructor<TKey extends string | number = string | number> =\n new (\n id: number,\n expression: BasicExpression,\n name?: string,\n options?: any\n ) => BaseIndex<TKey>\n\n/**\n * Index resolver can be either a class constructor or async loader\n */\nexport type IndexResolver<TKey extends string | number = string | number> =\n | IndexConstructor<TKey>\n | (() => Promise<IndexConstructor<TKey>>)\n"],"names":["comparisonFunctions","compileSingleRowExpression"],"mappings":";;;;AAOO,MAAM,iBAAiBA,UAAAA;AAoBvB,MAAe,UAEpB;AAAA,EAUA,YACE,IACA,YACA,MACA,SACA;AATF,SAAU,cAAc;AACxB,SAAU,kBAAkB;AAC5B,SAAU,kCAAkB,KAAA;AAQ1B,SAAK,KAAK;AACV,SAAK,aAAa;AAClB,SAAK,OAAO;AACZ,SAAK,WAAW,OAAO;AAAA,EACzB;AAAA;AAAA,EAYA,SAAS,WAAoC;AAC3C,WAAO,KAAK,oBAAoB,IAAI,SAAS;AAAA,EAC/C;AAAA,EAEA,aAAa,WAAmC;AAC9C,WACE,KAAK,WAAW,SAAS,SACzB,KAAK,WAAW,KAAK,WAAW,UAAU,UAC1C,KAAK,WAAW,KAAK,MAAM,CAAC,MAAM,MAAM,SAAS,UAAU,CAAC,CAAC;AAAA,EAEjE;AAAA,EAEA,WAAuB;AACrB,WAAO;AAAA,MACL,YAAY,KAAK;AAAA,MACjB,aAAa,KAAK;AAAA,MAClB,mBACE,KAAK,cAAc,IAAI,KAAK,kBAAkB,KAAK,cAAc;AAAA,MACnE,aAAa,KAAK;AAAA,IAAA;AAAA,EAEtB;AAAA,EAKU,wBAAwB,MAAgB;AAChD,UAAM,YAAYC,WAAAA,2BAA2B,KAAK,UAAU;AAC5D,WAAO,UAAU,IAA+B;AAAA,EAClD;AAAA,EAEU,YAAY,WAAyB;AAC7C,UAAM,WAAW,YAAY,IAAA,IAAQ;AACrC,SAAK;AACL,SAAK,mBAAmB;AAAA,EAC1B;AAAA,EAEU,kBAAwB;AAChC,SAAK,kCAAkB,KAAA;AAAA,EACzB;AACF;;;"}
@@ -0,0 +1,54 @@
1
+ import { comparisonFunctions } from '../query/builder/functions.js';
2
+ import { BasicExpression } from '../query/ir.js';
3
+ /**
4
+ * Operations that indexes can support, imported from available comparison functions
5
+ */
6
+ export declare const IndexOperation: readonly ["eq", "gt", "gte", "lt", "lte", "in", "like", "ilike"];
7
+ /**
8
+ * Type for index operation values
9
+ */
10
+ export type IndexOperation = (typeof comparisonFunctions)[number];
11
+ /**
12
+ * Statistics about index usage and performance
13
+ */
14
+ export interface IndexStats {
15
+ readonly entryCount: number;
16
+ readonly lookupCount: number;
17
+ readonly averageLookupTime: number;
18
+ readonly lastUpdated: Date;
19
+ }
20
+ /**
21
+ * Base abstract class that all index types extend
22
+ */
23
+ export declare abstract class BaseIndex<TKey extends string | number = string | number> {
24
+ readonly id: number;
25
+ readonly name?: string;
26
+ readonly expression: BasicExpression;
27
+ abstract readonly supportedOperations: Set<IndexOperation>;
28
+ protected lookupCount: number;
29
+ protected totalLookupTime: number;
30
+ protected lastUpdated: Date;
31
+ constructor(id: number, expression: BasicExpression, name?: string, options?: any);
32
+ abstract add(key: TKey, item: any): void;
33
+ abstract remove(key: TKey, item: any): void;
34
+ abstract update(key: TKey, oldItem: any, newItem: any): void;
35
+ abstract build(entries: Iterable<[TKey, any]>): void;
36
+ abstract clear(): void;
37
+ abstract lookup(operation: IndexOperation, value: any): Set<TKey>;
38
+ abstract get keyCount(): number;
39
+ supports(operation: IndexOperation): boolean;
40
+ matchesField(fieldPath: Array<string>): boolean;
41
+ getStats(): IndexStats;
42
+ protected abstract initialize(options?: any): void;
43
+ protected evaluateIndexExpression(item: any): any;
44
+ protected trackLookup(startTime: number): void;
45
+ protected updateTimestamp(): void;
46
+ }
47
+ /**
48
+ * Type for index constructor
49
+ */
50
+ export type IndexConstructor<TKey extends string | number = string | number> = new (id: number, expression: BasicExpression, name?: string, options?: any) => BaseIndex<TKey>;
51
+ /**
52
+ * Index resolver can be either a class constructor or async loader
53
+ */
54
+ export type IndexResolver<TKey extends string | number = string | number> = IndexConstructor<TKey> | (() => Promise<IndexConstructor<TKey>>);
@@ -0,0 +1,13 @@
1
+ import { IndexConstructor, IndexResolver } from './base-index.js';
2
+ /**
3
+ * Enhanced index options that support both sync and async resolvers
4
+ */
5
+ export interface IndexOptions<TResolver extends IndexResolver = IndexResolver> {
6
+ name?: string;
7
+ indexType?: TResolver;
8
+ options?: TResolver extends IndexConstructor<any> ? TResolver extends new (id: string, expr: any, name?: string, options?: infer O) => any ? O : never : TResolver extends () => Promise<infer TCtor> ? TCtor extends new (id: string, expr: any, name?: string, options?: infer O) => any ? O : never : never;
9
+ }
10
+ /**
11
+ * Utility type to extract the constructed index type from a resolver
12
+ */
13
+ export type ResolvedIndexType<TResolver extends IndexResolver> = TResolver extends IndexConstructor<any> ? InstanceType<TResolver> : TResolver extends () => Promise<IndexConstructor<any>> ? TResolver extends () => Promise<infer TCtor> ? TCtor extends IndexConstructor<any> ? InstanceType<TCtor> : never : never : never;