couchset 0.2.7 → 0.4.0

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 (117) hide show
  1. package/CHANGELOG.md +41 -0
  2. package/README.md +292 -152
  3. package/dist/connection/connection.d.ts +68 -0
  4. package/dist/connection/connection.js +495 -0
  5. package/dist/connection/connection.js.map +1 -0
  6. package/dist/connection/env.d.ts +2 -0
  7. package/dist/connection/env.js +16 -0
  8. package/dist/connection/env.js.map +1 -0
  9. package/dist/connection/index.d.ts +3 -0
  10. package/dist/connection/index.js +25 -0
  11. package/dist/connection/index.js.map +1 -0
  12. package/dist/connection/types.d.ts +25 -0
  13. package/dist/connection/types.js +3 -0
  14. package/dist/connection/types.js.map +1 -0
  15. package/dist/database.d.ts +9 -0
  16. package/dist/database.js +196 -0
  17. package/dist/database.js.map +1 -0
  18. package/dist/index.d.ts +20 -6
  19. package/dist/index.js +55 -8
  20. package/dist/index.js.map +1 -1
  21. package/dist/legacy/connection.d.ts +2 -0
  22. package/dist/legacy/connection.js +24 -0
  23. package/dist/legacy/connection.js.map +1 -0
  24. package/dist/legacy/index.d.ts +10 -0
  25. package/dist/legacy/index.js +93 -0
  26. package/dist/legacy/index.js.map +1 -0
  27. package/dist/legacy/model.d.ts +55 -0
  28. package/dist/legacy/model.js +282 -0
  29. package/dist/legacy/model.js.map +1 -0
  30. package/dist/legacy/pagination/index.d.ts +1 -0
  31. package/dist/legacy/pagination/index.js +18 -0
  32. package/dist/legacy/pagination/index.js.map +1 -0
  33. package/dist/legacy/pagination/pagination.d.ts +12 -0
  34. package/dist/legacy/pagination/pagination.js +85 -0
  35. package/dist/legacy/pagination/pagination.js.map +1 -0
  36. package/dist/legacy/search/customQuery.d.ts +13 -0
  37. package/dist/legacy/search/customQuery.js +73 -0
  38. package/dist/legacy/search/customQuery.js.map +1 -0
  39. package/dist/legacy/search/index.d.ts +1 -0
  40. package/dist/legacy/search/index.js +18 -0
  41. package/dist/legacy/search/index.js.map +1 -0
  42. package/dist/model/default-scope.d.ts +10 -0
  43. package/dist/model/default-scope.js +47 -0
  44. package/dist/model/default-scope.js.map +1 -0
  45. package/dist/model/hydrated-document.d.ts +30 -0
  46. package/dist/model/hydrated-document.js +118 -0
  47. package/dist/model/hydrated-document.js.map +1 -0
  48. package/dist/model/include.d.ts +33 -0
  49. package/dist/model/include.js +250 -0
  50. package/dist/model/include.js.map +1 -0
  51. package/dist/model/index.d.ts +192 -52
  52. package/dist/model/index.js +646 -172
  53. package/dist/model/index.js.map +1 -1
  54. package/dist/model/indexes.d.ts +18 -0
  55. package/dist/model/indexes.js +155 -0
  56. package/dist/model/indexes.js.map +1 -0
  57. package/dist/model/keyspace.d.ts +9 -0
  58. package/dist/model/keyspace.js +28 -0
  59. package/dist/model/keyspace.js.map +1 -0
  60. package/dist/model/read-helpers.d.ts +36 -0
  61. package/dist/model/read-helpers.js +275 -0
  62. package/dist/model/read-helpers.js.map +1 -0
  63. package/dist/model/safe-query.d.ts +23 -0
  64. package/dist/model/safe-query.js +138 -0
  65. package/dist/model/safe-query.js.map +1 -0
  66. package/dist/model/ttl.d.ts +9 -0
  67. package/dist/model/ttl.js +73 -0
  68. package/dist/model/ttl.js.map +1 -0
  69. package/dist/model/validation.d.ts +5 -0
  70. package/dist/model/validation.js +104 -0
  71. package/dist/model/validation.js.map +1 -0
  72. package/dist/model/write-helpers.d.ts +39 -0
  73. package/dist/model/write-helpers.js +245 -0
  74. package/dist/model/write-helpers.js.map +1 -0
  75. package/dist/next.d.ts +204 -0
  76. package/dist/next.js +1190 -0
  77. package/dist/next.js.map +1 -0
  78. package/dist/next.types.d.ts +1 -0
  79. package/dist/next.types.js +38 -0
  80. package/dist/next.types.js.map +1 -0
  81. package/dist/pagination/index.d.ts +1 -0
  82. package/dist/pagination/index.js +1 -0
  83. package/dist/pagination/index.js.map +1 -1
  84. package/dist/pagination/pagination.d.ts +1 -8
  85. package/dist/pagination/pagination.js +16 -29
  86. package/dist/pagination/pagination.js.map +1 -1
  87. package/dist/pagination/safe-pagination.d.ts +15 -0
  88. package/dist/pagination/safe-pagination.js +221 -0
  89. package/dist/pagination/safe-pagination.js.map +1 -0
  90. package/dist/pagination/types.d.ts +11 -0
  91. package/dist/pagination/types.js +3 -0
  92. package/dist/pagination/types.js.map +1 -0
  93. package/dist/search/customQuery.d.ts +10 -3
  94. package/dist/search/customQuery.js +17 -18
  95. package/dist/search/customQuery.js.map +1 -1
  96. package/dist/shared/common.model.js +2 -2
  97. package/dist/shared/common.model.js.map +1 -1
  98. package/dist/timeseries/index.d.ts +1 -0
  99. package/dist/timeseries/index.js +18 -0
  100. package/dist/timeseries/index.js.map +1 -0
  101. package/dist/timeseries/time-series-model.d.ts +60 -0
  102. package/dist/timeseries/time-series-model.js +267 -0
  103. package/dist/timeseries/time-series-model.js.map +1 -0
  104. package/dist/utils/awaitTo.d.ts +1 -1
  105. package/dist/utils/awaitTo.js +1 -1
  106. package/dist/utils/awaitTo.js.map +1 -1
  107. package/docs/beta-migration.md +175 -0
  108. package/docs/document-modeling.md +133 -0
  109. package/docs/next-primitives.md +81 -0
  110. package/legacy/index.js +1 -0
  111. package/legacy/package.json +4 -0
  112. package/next/index.js +1 -0
  113. package/next/package.json +4 -0
  114. package/package.json +18 -10
  115. package/dist/connection.d.ts +0 -42
  116. package/dist/connection.js +0 -156
  117. package/dist/connection.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"next.js","sourceRoot":"","sources":["../src/next.ts"],"names":[],"mappings":"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","sourcesContent":["import type {Bucket, Cluster} from 'couchbase';\n\nimport couchbase from './couchbase';\nimport type {CouchsetArgs} from './connection';\nimport {AutoModelFields, FieldCodec, Model, ModelConnection, ModalOptions} from './model';\nimport type {ModelIndexDefinition} from './model';\nimport {buildIndexQuery} from './model/indexes';\nimport {escapeIdentifier, keyspaceIdentifier} from './model/keyspace';\nimport type {SortType} from './query/interface/query.types';\nimport {buildWhereExpr} from './query/helpers/builders';\nimport {generateUUID} from './uuid';\n\nexport type {FieldCodec} from './model';\n\n/** A JSON-friendly Date codec for models declared with defineModel. */\nexport const dateCodec: FieldCodec<Date, string> = {\n fromDatabase: (value: string): Date => new Date(value),\n toDatabase: (value: Date): string => value.toISOString(),\n};\n\nexport interface ModelCollectionSettings {\n maxExpiry?: number;\n history?: boolean;\n}\n\n/**\n * A model definition has no connection and performs no I/O. Definitions may be\n * reused safely across clients and are the unit the client registers.\n */\nexport type ModelField<T> = Extract<keyof T, string>;\nexport type TypedIndexField<T> = ModelField<T> | Partial<Record<ModelField<T>, SortType>>;\nexport type ModelCodecs<T> = Partial<{\n [Field in ModelField<T>]: FieldCodec<T[Field], any>;\n}> &\n Partial<Record<`${string}.${string}`, FieldCodec<any, any>>>;\n\nexport interface TypedModelIndexDefinition<T> extends Omit<ModelIndexDefinition, 'fields'> {\n fields?: TypedIndexField<T>[];\n}\n\nexport interface ModelDefinition<T = any> extends Omit<ModalOptions, 'codecs' | 'indexes'> {\n name: string;\n collectionSettings?: ModelCollectionSettings;\n codecs?: ModelCodecs<T>;\n indexes?: TypedModelIndexDefinition<T>[];\n}\n\n/** User fields are distinct from CouchSet's generated persistence metadata. */\nexport type ModelCreateInput<T> = Omit<T, keyof AutoModelFields> &\n Partial<Pick<T, Extract<keyof T, keyof AutoModelFields>>>;\n\nexport interface TypedModel<T>\n extends Omit<Model, 'getById' | 'getWithCas' | 'insert' | 'replaceById' | 'replaceIfCas'> {\n getById(id: string, options?: any): Promise<T & AutoModelFields>;\n getWithCas(\n id: string,\n options?: any\n ): Promise<{content: T & AutoModelFields; cas: any; expiryTime?: any}>;\n insert(data: ModelCreateInput<T>, options?: any): Promise<T & AutoModelFields>;\n replaceById(id: string, data: T, options?: any): Promise<T & AutoModelFields>;\n replaceIfCas(id: string, data: T, cas: any, options?: any): Promise<T & AutoModelFields>;\n}\n\nexport const defineModel = <T = any>(definition: ModelDefinition<T>): ModelDefinition<T> => {\n if (!definition || !definition.name) {\n throw new Error('defineModel requires a non-empty name');\n }\n\n return {...definition};\n};\n\nexport interface CouchsetClientDependencies {\n /** Supply a fully controlled runtime for tests or an application-owned connection. */\n connection?: ModelConnection;\n /** Supply an already connected SDK cluster/bucket without using couchbase.connect. */\n cluster?: Cluster;\n bucket?: Bucket;\n /** Override connection construction; useful for dependency injection and test doubles. */\n connect?: (settings: CouchsetArgs) => Promise<Cluster>;\n}\n\nexport interface CouchsetClientOptions extends Partial<CouchsetArgs> {\n models?: Array<ModelDefinition<any>>;\n dependencies?: CouchsetClientDependencies;\n}\n\nexport interface EnsureCollectionsOptions {\n models?: Array<ModelDefinition<any>>;\n timeoutMs?: number;\n pollIntervalMs?: number;\n}\n\nexport interface ProvisionOptions extends EnsureCollectionsOptions {\n collections?: boolean;\n indexes?: boolean;\n waitForIndexes?: boolean;\n}\n\nexport interface RegisterModelOptions extends ProvisionOptions {\n /** Explicitly provision this dynamic model. Constructors and CRUD never do this. */\n provision?: boolean | {collections?: boolean; indexes?: boolean; waitForIndexes?: boolean};\n}\n\nexport interface ProvisionedTarget {\n scope: string;\n collection: string;\n createdScope: boolean;\n createdCollection: boolean;\n}\n\nexport interface IndexPlanItem {\n status: 'create' | 'matching' | 'replace';\n definition: ModelIndexDefinition;\n keyspace: string;\n target: CollectionTarget;\n /** The physical index CouchSet will create. Replacement names are versioned. */\n createAs: string;\n /** Only populated for an explicit or detected safe replacement. */\n replaces?: string;\n reason?: string;\n}\n\nexport interface IndexPlan {\n items: IndexPlanItem[];\n}\n\nexport interface ApplyIndexPlanOptions {\n /** Opt-in only: drop old indexes after the replacement is online. */\n dropReplaced?: boolean;\n timeoutMs?: number;\n}\n\ninterface RegisteredModel<T = any> {\n definition: ModelDefinition<T>;\n model: Model;\n}\n\ninterface CollectionTarget {\n scope: string;\n collection: string;\n settings?: ModelCollectionSettings;\n}\n\nconst defaultSettings = (options: CouchsetClientOptions): CouchsetArgs => ({\n bucketName: options.bucketName || 'default',\n connectionString: options.connectionString || 'couchbase://localhost',\n password: options.password || '',\n username: options.username || '',\n proxy: options.proxy,\n});\n\nconst errorText = (error: any): string => `${error?.name || ''} ${error?.message || error || ''}`;\nconst isAlreadyExists = (error: any): boolean =>\n /already exists|exists|ScopeExists|CollectionExists/i.test(errorText(error));\nconst isNotFound = (error: any): boolean => /not found|not exist/i.test(errorText(error));\n\nconst provisionError = (operation: string, target: string, error: any): Error => {\n const message = errorText(error);\n const privilege = /access|permission|authoriz|privilege|forbidden/i.test(message)\n ? ' This operation requires Couchbase Manage Scopes privileges on the bucket.'\n : '';\n const wrapped: any = new Error(\n `CouchSet could not ${operation} ${target}.${privilege} ${message}`.trim()\n );\n wrapped.cause = error;\n return wrapped;\n};\n\nconst delay = (milliseconds: number): Promise<void> =>\n new Promise((resolve) => setTimeout(resolve, milliseconds));\n\nclass DirectConnection implements ModelConnection {\n public cluster: Cluster;\n public bucket: Bucket;\n private connectPromise?: Promise<Cluster>;\n\n constructor(\n private readonly settings: CouchsetArgs,\n private readonly dependencies: CouchsetClientDependencies\n ) {\n this.cluster = dependencies.cluster as Cluster;\n this.bucket = dependencies.bucket as Bucket;\n\n if (this.cluster && !this.bucket) {\n this.bucket = this.cluster.bucket(settings.bucketName);\n }\n }\n\n public getBucket(): string {\n return this.settings.bucketName;\n }\n\n public getCollection(scopeName?: string, collectionName?: string): any {\n if (!this.bucket) {\n throw new Error('CouchSet client is not connected; call client.ready() first');\n }\n\n if (!scopeName && !collectionName) {\n return this.bucket.defaultCollection();\n }\n\n return this.bucket.scope(scopeName || '_default').collection(collectionName || '_default');\n }\n\n public isConnected(): boolean {\n return !!this.cluster && !!this.bucket;\n }\n\n public async ready(): Promise<DirectConnection> {\n if (this.isConnected()) {\n return this;\n }\n\n if (!this.connectPromise) {\n const connect =\n this.dependencies.connect ||\n ((settings: CouchsetArgs) =>\n couchbase.connect(settings.connectionString, {\n password: settings.password,\n proxy: settings.proxy,\n username: settings.username,\n }));\n this.connectPromise = connect(this.settings);\n }\n\n this.cluster = await this.connectPromise;\n this.bucket = this.cluster.bucket(this.settings.bucketName);\n return this;\n }\n\n public shouldReconnect(): boolean {\n return false;\n }\n\n public markDisconnected(): void {\n // A client-owned connection never retries an arbitrary write operation.\n }\n\n public async shutdown(): Promise<void> {\n if (this.cluster && typeof (this.cluster as any).close === 'function') {\n await (this.cluster as any).close();\n }\n this.cluster = undefined as any;\n this.bucket = undefined as any;\n }\n}\n\n/**\n * A client owns its model-definition registry and connection. It intentionally\n * does not alter the legacy singleton or register models globally.\n */\nexport class CouchsetClient {\n private readonly connection: ModelConnection;\n private readonly registered = new Map<string, RegisteredModel<any>>();\n private readonly settings: CouchsetArgs;\n\n constructor(options: CouchsetClientOptions = {}) {\n this.settings = defaultSettings(options);\n const dependencies = options.dependencies || {};\n\n if (dependencies.connection) {\n const bucketName = dependencies.connection.getBucket();\n if (!bucketName) {\n throw new Error('Injected CouchSet connections must expose a bucket name');\n }\n if (options.bucketName && options.bucketName !== bucketName) {\n throw new Error(\n `Injected CouchSet connection targets ${bucketName}, not requested bucket ${options.bucketName}`\n );\n }\n this.settings.bucketName = bucketName;\n } else if (dependencies.bucket) {\n const bucketName = dependencies.bucket.name;\n if (options.bucketName && options.bucketName !== bucketName) {\n throw new Error(\n `Injected Couchbase bucket targets ${bucketName}, not requested bucket ${options.bucketName}`\n );\n }\n this.settings.bucketName = bucketName;\n } else if (dependencies.cluster && !options.bucketName) {\n throw new Error('bucketName is required when injecting a Couchbase cluster');\n }\n\n this.connection =\n dependencies.connection || new DirectConnection(this.settings, dependencies);\n\n (options.models || []).forEach((definition) => this.model(definition));\n }\n\n public async ready(): Promise<this> {\n await this.connection.ready();\n return this;\n }\n\n public async shutdown(): Promise<void> {\n const shutdown = (this.connection as any).shutdown;\n if (typeof shutdown === 'function') {\n await shutdown.call(this.connection);\n }\n }\n\n public definitions(): ModelDefinition<any>[] {\n return Array.from(this.registered.values()).map(({definition}) => definition);\n }\n\n /** Bind and register a definition without provisioning or index DDL. */\n public model<T>(definition: ModelDefinition<T>): TypedModel<T> {\n const identity = modelIdentity(definition);\n const existing = this.registered.get(identity);\n\n if (existing) {\n assertSameDefinition(existing.definition, definition);\n return existing.model as TypedModel<T>;\n }\n\n const model = new Model(definition.name, definition as ModalOptions, this.connection);\n this.registered.set(identity, {definition, model});\n return model as TypedModel<T>;\n }\n\n /**\n * Async registration for dynamic models. DDL is performed only when the\n * caller explicitly opts into provision; ordinary model() is side-effect-free.\n */\n public async registerModel<T>(\n definition: ModelDefinition<T>,\n options: RegisterModelOptions = {}\n ): Promise<TypedModel<T>> {\n const model = this.model(definition);\n const requested = options.provision;\n\n if (requested) {\n const config =\n typeof requested === 'boolean' ? {collections: true, indexes: true} : requested;\n await this.provision({\n collections: config.collections !== false,\n indexes: config.indexes !== false,\n models: [definition],\n timeoutMs: options.timeoutMs,\n waitForIndexes: config.waitForIndexes,\n });\n }\n\n return model;\n }\n\n /** Create only missing scopes/collections. Existing resources are never altered. */\n public async ensureCollections(\n options: EnsureCollectionsOptions = {}\n ): Promise<ProvisionedTarget[]> {\n await this.ready();\n const targets = this.targets(options.models);\n const manager: any = (this.connection as any).bucket.collections();\n let manifest: any[];\n\n try {\n manifest = await manager.getAllScopes();\n } catch (error) {\n throw provisionError('read the scope manifest for', this.settings.bucketName, error);\n }\n\n const result: ProvisionedTarget[] = [];\n for (const target of targets) {\n const defaultTarget = target.scope === '_default' && target.collection === '_default';\n if (defaultTarget) {\n result.push({...target, createdScope: false, createdCollection: false});\n continue;\n }\n\n let scope = findScope(manifest, target.scope);\n let createdScope = false;\n if (!scope && target.scope !== '_default') {\n try {\n await manager.createScope(target.scope);\n createdScope = true;\n } catch (error) {\n if (!isAlreadyExists(error)) {\n throw provisionError('create scope', target.scope, error);\n }\n }\n manifest = await this.waitForCollectionManifest(target.scope, undefined, options);\n scope = findScope(manifest, target.scope);\n }\n\n if (!scope) {\n throw new Error(`CouchSet could not find scope ${target.scope} after provisioning`);\n }\n\n const exists = (scope.collections || []).some(\n (item: any) => item.name === target.collection\n );\n let createdCollection = false;\n if (!exists) {\n try {\n await manager.createCollection(\n target.collection,\n target.scope,\n target.settings || {}\n );\n createdCollection = true;\n } catch (error) {\n if (!isAlreadyExists(error)) {\n throw provisionError(\n 'create collection',\n `${target.scope}.${target.collection}`,\n error\n );\n }\n }\n }\n\n await this.waitForCollectionManifest(target.scope, target.collection, options);\n result.push({...target, createdScope, createdCollection});\n }\n\n return result;\n }\n\n /** Explicit bootstrap: provisioning occurs before index creation. */\n public async provision(options: ProvisionOptions = {}): Promise<{\n collections: ProvisionedTarget[];\n indexes: string[];\n }> {\n const definitions = options.models || this.definitions();\n const collections =\n options.collections === false\n ? []\n : await this.ensureCollections({...options, models: definitions});\n const indexes = options.indexes\n ? await this.ensureIndexes({\n models: definitions,\n waitForIndexes: options.waitForIndexes,\n timeoutMs: options.timeoutMs,\n })\n : [];\n\n return {collections, indexes};\n }\n\n /** Normal ensureIndexes stays create-only. It never checks, drops, or changes an existing index. */\n public async ensureIndexes(\n options: {\n models?: Array<ModelDefinition<any>>;\n deferred?: boolean;\n waitForIndexes?: boolean;\n timeoutMs?: number;\n } = {}\n ): Promise<string[]> {\n await this.ready();\n const definitions = options.models || this.definitions();\n const queries: string[] = [];\n const indexes: Array<{name: string; target: CollectionTarget}> = [];\n\n for (const definition of definitions) {\n const model = this.model(definition);\n const statements = await model.ensureIndexes({deferred: options.deferred});\n queries.push(...statements);\n indexes.push(\n ...(definition.indexes || []).map((index) => ({\n name: index.name,\n target: definitionTarget(definition),\n }))\n );\n }\n\n if (options.waitForIndexes && indexes.length) {\n await this.waitForIndexes(indexes, options.timeoutMs);\n }\n\n return queries;\n }\n\n /** Report missing, matching, and drifted indexes; this method has no DDL side effects. */\n public async planIndexes(\n options: {models?: Array<ModelDefinition<any>>} = {}\n ): Promise<IndexPlan> {\n await this.ready();\n const rows = await this.indexCatalog();\n const items: IndexPlanItem[] = [];\n\n for (const definition of options.models || this.definitions()) {\n const keyspace = this.keyspace(definition);\n const target = definitionTarget(definition);\n for (const index of definition.indexes || []) {\n const matchingRows = rows.filter((row) => indexRowMatchesTarget(row, definition));\n const desired = matchingRows.find((row) => row.name === index.name);\n const replacementName = versionedIndexName(index.name, index);\n const replacement = matchingRows.find((row) => row.name === replacementName);\n\n // A previous safe rollout may have dropped the old logical name\n // while retaining this deterministic replacement physical name.\n if (replacement && indexMatches(replacement, index)) {\n items.push({\n createAs: replacementName,\n definition: index,\n keyspace,\n status: 'matching',\n target,\n });\n continue;\n }\n\n if (desired && indexMatches(desired, index)) {\n items.push({\n createAs: index.name,\n definition: index,\n keyspace,\n status: 'matching',\n target,\n });\n continue;\n }\n\n // `replaces` explicitly asks for a new physical index, even if\n // the predecessor happens to have equivalent keys.\n const predecessorName = index.replaces || index.name;\n const predecessor = matchingRows.find((row) => row.name === predecessorName);\n\n if (!predecessor) {\n items.push({\n createAs: index.name,\n definition: index,\n keyspace,\n status: 'create',\n target,\n });\n continue;\n }\n\n const createAs = index.replaces ? index.name : replacementName;\n items.push({\n createAs,\n definition: index,\n keyspace,\n reason: 'Declared keys, predicate, or primary mode differs from the live index.',\n replaces: predecessor.name,\n status: 'replace',\n target,\n });\n }\n }\n\n return {items};\n }\n\n /**\n * Apply a reviewed plan by creating versioned replacements and waiting for\n * them. Dropping old indexes is deliberately an explicit second opt-in.\n */\n public async applyIndexPlan(\n plan: IndexPlan,\n options: ApplyIndexPlanOptions = {}\n ): Promise<string[]> {\n await this.ready();\n const applied: string[] = [];\n const replacements: Array<{name: string; target: CollectionTarget}> = [];\n\n for (const item of plan.items) {\n if (item.status === 'matching') {\n continue;\n }\n\n const definition = {...item.definition, name: item.createAs};\n const query = buildIndexQuery(item.keyspace, definition);\n await this.connection.cluster.query(query);\n applied.push(query);\n replacements.push({name: item.createAs, target: item.target});\n }\n\n if (replacements.length) {\n await this.waitForIndexes(replacements, options.timeoutMs);\n }\n\n if (options.dropReplaced) {\n for (const item of plan.items) {\n if (item.status === 'replace' && item.replaces) {\n await this.connection.cluster.query(\n `DROP INDEX ${item.keyspace}.${escapeIdentifier(item.replaces)}`\n );\n }\n }\n }\n\n return applied;\n }\n\n /**\n * Run the callback through Couchbase's transaction retry loop. The callback\n * may execute more than once; do not perform external side effects inside it.\n * A commit-ambiguous error is rethrown and must be resolved by the caller via\n * an idempotency key/outbox, never by blindly retrying a side effect.\n */\n public async transaction<T>(\n callback: (transaction: CouchsetTransaction) => Promise<T>\n ): Promise<T> {\n await this.ready();\n let result: T;\n await (this.connection.cluster as any).transactions().run(async (attempt: any) => {\n result = await callback(new CouchsetTransaction(this, attempt));\n });\n return result as T;\n }\n\n public keyspace(definition: ModelDefinition<any>): string {\n const target = definitionTarget(definition);\n return keyspaceIdentifier({\n bucketName: this.settings.bucketName,\n collectionName: target.collection,\n scopeName: target.scope,\n });\n }\n\n public getConnection(): ModelConnection {\n return this.connection;\n }\n\n private targets(definitions?: Array<ModelDefinition<any>>): CollectionTarget[] {\n const targets = new Map<string, CollectionTarget>();\n for (const definition of definitions || this.definitions()) {\n const target = definitionTarget(definition);\n const identity = `${target.scope}.${target.collection}`;\n const existing = targets.get(identity);\n const settings = definition.collectionSettings;\n\n if (\n existing &&\n JSON.stringify(existing.settings || {}) !== JSON.stringify(settings || {})\n ) {\n throw new Error(\n `Conflicting collection settings declared for ${identity}; CouchSet will not alter an existing collection`\n );\n }\n targets.set(identity, {...target, settings});\n }\n return Array.from(targets.values());\n }\n\n private async waitForCollectionManifest(\n scopeName: string,\n collectionName: string | undefined,\n options: EnsureCollectionsOptions\n ): Promise<any[]> {\n const manager: any = (this.connection as any).bucket.collections();\n const timeout = options.timeoutMs || 30000;\n const poll = options.pollIntervalMs || 100;\n const deadline = Date.now() + timeout;\n\n while (Date.now() <= deadline) {\n try {\n const manifest = await manager.getAllScopes();\n const scope = findScope(manifest, scopeName);\n if (\n scope &&\n (!collectionName ||\n (scope.collections || []).some((item: any) => item.name === collectionName))\n ) {\n return manifest;\n }\n } catch (error) {\n if (!isNotFound(error)) {\n throw provisionError(\n 'wait for collection metadata',\n `${scopeName}.${collectionName || ''}`,\n error\n );\n }\n }\n await delay(poll);\n }\n\n throw new Error(\n `Timed out waiting for Couchbase collection ${scopeName}.${\n collectionName || ''\n } to appear in the manifest`\n );\n }\n\n private async waitForIndexes(\n indexes: Array<{name: string; target: CollectionTarget}>,\n timeoutMs = 30000\n ): Promise<void> {\n const deadline = Date.now() + timeoutMs;\n\n while (Date.now() <= deadline) {\n const rows = await this.indexCatalog();\n if (\n indexes.every((index) =>\n rows.some(\n (row) =>\n row.name === index.name &&\n String(row.state).toLowerCase() === 'online' &&\n indexRowMatchesCollection(row, index.target)\n )\n )\n ) {\n return;\n }\n await delay(100);\n }\n\n throw new Error(\n `Timed out waiting for Couchbase indexes to become online: ${indexes\n .map((index) => index.name)\n .join(', ')}`\n );\n }\n\n private async indexCatalog(): Promise<any[]> {\n const result = await this.connection.cluster.query(\n 'SELECT name, bucket_id, keyspace_id, scope_id, collection_id, index_key, condition, is_primary, state FROM system:indexes WHERE bucket_id = $bucket OR keyspace_id = $bucket',\n {parameters: {bucket: this.settings.bucketName}}\n );\n return (result as any).rows || [];\n }\n}\n\n/** A model bound strictly to a Couchbase transaction attempt. */\nexport class TransactionModel<T = any> {\n constructor(private readonly model: TypedModel<T>, private readonly attempt: any) {}\n\n public async get(id: string): Promise<TransactionDocument<T> | null> {\n try {\n const document = await this.attempt.get(this.model.getCollection(), id);\n return {content: this.model.parse<T & AutoModelFields>(document.content), document};\n } catch (error) {\n if (isNotFound(error)) {\n return null;\n }\n throw error;\n }\n }\n\n public getById(id: string): Promise<TransactionDocument<T> | null> {\n return this.get(id);\n }\n\n public async insert(id: string, data: ModelCreateInput<T>): Promise<TransactionDocument<T>> {\n const stored = await this.model.prepareInsert({...data, id} as T);\n const document = await this.attempt.insert(this.model.getCollection(), id, stored);\n return {\n content: this.model.parse<T & AutoModelFields>(document.content || stored),\n document,\n };\n }\n\n /** Replace requires the prior transactional read, as required by the SDK. */\n public async replace(\n document: TransactionDocument<T>,\n data: T\n ): Promise<TransactionDocument<T>> {\n const stored = await this.model.prepareReplace(document.content.id, data);\n const replacement = await this.attempt.replace(document.document, stored);\n return {\n content: this.model.parse<T & AutoModelFields>(replacement.content || stored),\n document: replacement,\n };\n }\n\n public async replaceById(id: string, data: T): Promise<TransactionDocument<T>> {\n const current = await this.get(id);\n if (!current) {\n throw new Error(`Cannot replace missing transaction document ${id}`);\n }\n return this.replace(current, data);\n }\n\n public async remove(document: TransactionDocument<T>): Promise<void> {\n await this.attempt.remove(document.document);\n }\n\n public query<TRow = any>(statement: string, options?: any): Promise<{rows: TRow[]}> {\n return this.attempt.query(statement, options);\n }\n}\n\nexport interface TransactionDocument<T> {\n content: T & AutoModelFields;\n /** Opaque transaction SDK result; only pass it back to replace/remove. */\n document: any;\n}\n\nexport class CouchsetTransaction {\n constructor(private readonly client: CouchsetClient, private readonly attempt: any) {}\n\n public model<T>(definition: ModelDefinition<T>): TransactionModel<T> {\n return new TransactionModel<T>(this.client.model(definition), this.attempt);\n }\n\n public query<TRow = any>(statement: string, options?: any): Promise<{rows: TRow[]}> {\n return this.attempt.query(statement, options);\n }\n}\n\n/**\n * Creates a short-lived scoped fixture and a cleanup function. The caller must\n * invoke cleanup in after/afterEach; no normal client operation ever drops data.\n */\nexport const createCouchsetTestFixture = async <T = any>(\n client: CouchsetClient,\n definition: Omit<ModelDefinition<T>, 'scope' | 'collection'> & {\n scope?: string;\n collection?: string;\n }\n): Promise<{\n definition: ModelDefinition<T>;\n model: TypedModel<T>;\n cleanup: () => Promise<void>;\n}> => {\n const suffix = generateUUID().replace(/-/g, '').slice(0, 12);\n const fixtureScope = definition.scope || `couchset_test_${suffix}`;\n const generatedScope = fixtureScope !== definition.scope;\n const scoped = defineModel<T>({\n ...definition,\n collection: definition.collection || `fixture_${suffix}`,\n scope: fixtureScope,\n });\n const model = await client.registerModel(scoped, {provision: {collections: true}});\n\n return {\n definition: scoped,\n model,\n cleanup: async () => {\n const target = definitionTarget(scoped);\n const manager: any = (client.getConnection() as any).bucket.collections();\n try {\n await manager.dropCollection(target.collection, target.scope);\n } catch (error) {\n if (!isNotFound(error)) {\n throw provisionError(\n 'drop fixture collection',\n `${target.scope}.${target.collection}`,\n error\n );\n }\n }\n if (generatedScope) {\n try {\n await manager.dropScope(target.scope);\n } catch (error) {\n if (!isNotFound(error)) {\n throw provisionError('drop fixture scope', target.scope, error);\n }\n }\n }\n },\n };\n};\n\nexport const createCouchsetClient = (options: CouchsetClientOptions = {}): CouchsetClient =>\n new CouchsetClient(options);\n\nconst definitionTarget = (definition: ModelDefinition<any>): CollectionTarget => ({\n collection: Object.prototype.hasOwnProperty.call(definition, 'collection')\n ? definition.collection || '_default'\n : '_default',\n scope: Object.prototype.hasOwnProperty.call(definition, 'scope')\n ? definition.scope || '_default'\n : '_default',\n});\n\nconst modelIdentity = (definition: ModelDefinition<any>): string => {\n const target = definitionTarget(definition);\n return `${target.scope}.${target.collection}.${definition.name}`;\n};\n\nconst assertSameDefinition = (left: ModelDefinition<any>, right: ModelDefinition<any>): void => {\n if (!sameValue(left, right)) {\n throw new Error(\n `Model ${modelIdentity(\n left\n )} is already registered with a different definition; create a separate client or use a new model name`\n );\n }\n};\n\nconst sameValue = (left: any, right: any): boolean => {\n if (left === right) {\n return true;\n }\n if (!left || !right || typeof left !== 'object' || typeof right !== 'object') {\n return false;\n }\n if (left instanceof Date || right instanceof Date) {\n return left instanceof Date && right instanceof Date && left.getTime() === right.getTime();\n }\n if (Array.isArray(left) || Array.isArray(right)) {\n return (\n Array.isArray(left) &&\n Array.isArray(right) &&\n left.length === right.length &&\n left.every((item, index) => sameValue(item, right[index]))\n );\n }\n const leftKeys = Object.keys(left).sort();\n const rightKeys = Object.keys(right).sort();\n return (\n leftKeys.length === rightKeys.length &&\n leftKeys.every((key, index) => key === rightKeys[index] && sameValue(left[key], right[key]))\n );\n};\n\nconst findScope = (scopes: any[], name: string): any => scopes.find((scope) => scope.name === name);\n\nconst normalize = (value: any): string =>\n JSON.stringify(value || '')\n .replace(/[\\s`()\"']/g, '')\n .toLowerCase();\n\nconst indexMatches = (row: any, definition: ModelIndexDefinition): boolean => {\n if (!!row.is_primary !== !!definition.primary) {\n return false;\n }\n if (definition.primary) {\n return true;\n }\n\n const expectedKeys = (definition.fields || []).map((field) => {\n if (typeof field === 'string') {\n return field;\n }\n const key = Object.keys(field)[0];\n return `${key} ${field[key]}`;\n });\n return (\n normalize(row.index_key) === normalize(expectedKeys) &&\n normalize(row.condition) === normalize(indexCondition(definition))\n );\n};\n\n/** Match Couchbase's catalogued SQL++ condition against the same SQL++ we declare. */\nconst indexCondition = (definition: ModelIndexDefinition): string =>\n buildWhereExpr(definition.where).replace(/^\\s*WHERE\\s+/i, '');\n\nconst indexRowMatchesTarget = (row: any, definition: ModelDefinition<any>): boolean => {\n return indexRowMatchesCollection(row, definitionTarget(definition));\n};\n\nconst indexRowMatchesCollection = (row: any, target: CollectionTarget): boolean => {\n // On current Couchbase Server, scoped collection indexes expose the\n // collection in keyspace_id and omit collection_id. Older/default targets\n // may use keyspace_id for the bucket, so prefer collection_id when present.\n const collection = row.collection_id || (row.scope_id ? row.keyspace_id : undefined);\n return (\n (!row.scope_id || row.scope_id === target.scope) &&\n (!collection || collection === target.collection)\n );\n};\n\nconst versionedIndexName = (name: string, definition: ModelIndexDefinition): string => {\n const fingerprint = JSON.stringify({\n fields: definition.fields,\n primary: definition.primary,\n where: definition.where,\n })\n .split('')\n .reduce((hash, character) => (hash * 31 + character.charCodeAt(0)) >>> 0, 7)\n .toString(36);\n return `${name}_v${fingerprint}`;\n};\n"]}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ /* eslint-disable @typescript-eslint/ban-ts-comment -- this file verifies compiler errors. */
4
+ var next_1 = require("./next");
5
+ var booleanCodec = {
6
+ fromDatabase: function (value) { return value === 'true'; },
7
+ toDatabase: function (value) { return String(value); },
8
+ };
9
+ (0, next_1.defineModel)({
10
+ codecs: { expiresAt: next_1.dateCodec },
11
+ indexes: [{ fields: ['userId'], name: 'idx_typed_session_user' }],
12
+ name: 'TypedSession',
13
+ });
14
+ (0, next_1.defineModel)({
15
+ codecs: {
16
+ // @ts-expect-error Codec keys must exist on the declared document type.
17
+ missing: next_1.dateCodec,
18
+ },
19
+ name: 'InvalidCodecKey',
20
+ });
21
+ (0, next_1.defineModel)({
22
+ codecs: {
23
+ // @ts-expect-error Codec input must match the declared field type.
24
+ expiresAt: booleanCodec,
25
+ },
26
+ name: 'InvalidCodecValue',
27
+ });
28
+ (0, next_1.defineModel)({
29
+ indexes: [
30
+ {
31
+ // @ts-expect-error Declared index fields are checked against the document type.
32
+ fields: ['missing'],
33
+ name: 'idx_invalid_field',
34
+ },
35
+ ],
36
+ name: 'InvalidTypedSession',
37
+ });
38
+ //# sourceMappingURL=next.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"next.types.js","sourceRoot":"","sources":["../src/next.types.ts"],"names":[],"mappings":";;AAAA,6FAA6F;AAC7F,+BAA0D;AAO1D,IAAM,YAAY,GAAgC;IAC9C,YAAY,EAAE,UAAC,KAAK,IAAK,OAAA,KAAK,KAAK,MAAM,EAAhB,CAAgB;IACzC,UAAU,EAAE,UAAC,KAAK,IAAK,OAAA,MAAM,CAAC,KAAK,CAAC,EAAb,CAAa;CACvC,CAAC;AAEF,IAAA,kBAAW,EAAe;IACtB,MAAM,EAAE,EAAC,SAAS,EAAE,gBAAS,EAAC;IAC9B,OAAO,EAAE,CAAC,EAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,wBAAwB,EAAC,CAAC;IAC/D,IAAI,EAAE,cAAc;CACvB,CAAC,CAAC;AAEH,IAAA,kBAAW,EAAe;IACtB,MAAM,EAAE;QACJ,wEAAwE;QACxE,OAAO,EAAE,gBAAS;KACrB;IACD,IAAI,EAAE,iBAAiB;CAC1B,CAAC,CAAC;AAEH,IAAA,kBAAW,EAAe;IACtB,MAAM,EAAE;QACJ,mEAAmE;QACnE,SAAS,EAAE,YAAY;KAC1B;IACD,IAAI,EAAE,mBAAmB;CAC5B,CAAC,CAAC;AAEH,IAAA,kBAAW,EAAe;IACtB,OAAO,EAAE;QACL;YACI,gFAAgF;YAChF,MAAM,EAAE,CAAC,SAAS,CAAC;YACnB,IAAI,EAAE,mBAAmB;SAC5B;KACJ;IACD,IAAI,EAAE,qBAAqB;CAC9B,CAAC,CAAC","sourcesContent":["/* eslint-disable @typescript-eslint/ban-ts-comment -- this file verifies compiler errors. */\nimport {dateCodec, defineModel, FieldCodec} from './next';\n\ninterface TypedSession {\n expiresAt: Date;\n userId: string;\n}\n\nconst booleanCodec: FieldCodec<boolean, string> = {\n fromDatabase: (value) => value === 'true',\n toDatabase: (value) => String(value),\n};\n\ndefineModel<TypedSession>({\n codecs: {expiresAt: dateCodec},\n indexes: [{fields: ['userId'], name: 'idx_typed_session_user'}],\n name: 'TypedSession',\n});\n\ndefineModel<TypedSession>({\n codecs: {\n // @ts-expect-error Codec keys must exist on the declared document type.\n missing: dateCodec,\n },\n name: 'InvalidCodecKey',\n});\n\ndefineModel<TypedSession>({\n codecs: {\n // @ts-expect-error Codec input must match the declared field type.\n expiresAt: booleanCodec,\n },\n name: 'InvalidCodecValue',\n});\n\ndefineModel<TypedSession>({\n indexes: [\n {\n // @ts-expect-error Declared index fields are checked against the document type.\n fields: ['missing'],\n name: 'idx_invalid_field',\n },\n ],\n name: 'InvalidTypedSession',\n});\n"]}
@@ -1 +1,2 @@
1
1
  export * from './pagination';
2
+ export * from './types';
@@ -15,4 +15,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./pagination"), exports);
18
+ __exportStar(require("./types"), exports);
18
19
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/pagination/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,+CAA6B","sourcesContent":["export * from './pagination';\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/pagination/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,+CAA6B;AAC7B,0CAAwB","sourcesContent":["export * from './pagination';\nexport * from './types';\n"]}
@@ -1,11 +1,4 @@
1
- export interface PaginationArgs {
2
- bucketName: string;
3
- select?: any[] | string;
4
- where: any;
5
- page: number;
6
- limit: number;
7
- orderBy?: any;
8
- }
1
+ import { PaginationArgs } from './types';
9
2
  /**
10
3
  * Common pagination
11
4
  * where = {
@@ -40,8 +40,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
40
40
  };
41
41
  Object.defineProperty(exports, "__esModule", { value: true });
42
42
  exports.Pagination = void 0;
43
- var query_1 = require("../query");
44
43
  var connection_1 = __importDefault(require("../connection"));
44
+ var safe_pagination_1 = require("./safe-pagination");
45
45
  /**
46
46
  * Common pagination
47
47
  * where = {
@@ -53,42 +53,29 @@ var connection_1 = __importDefault(require("../connection"));
53
53
  * @param args PaginationArgs
54
54
  */
55
55
  var Pagination = function (args) { return __awaiter(void 0, void 0, void 0, function () {
56
- var _a, bucketName, _b,
57
- // select: ogSelected = '*',
58
- where, _c, page, _d, limit, _e, orderBy, cluster, select, offset, query, rows, completedRows, error_1;
59
- return __generator(this, function (_f) {
60
- switch (_f.label) {
56
+ var _a, bucketName, _b, resultKey, cluster, _c, query, parameters, selectAll_1, rows, completedRows, error_1;
57
+ return __generator(this, function (_d) {
58
+ switch (_d.label) {
61
59
  case 0:
62
- _a = args.bucketName, bucketName = _a === void 0 ? '_default' : _a, _b = args.where, where = _b === void 0 ? {
63
- // where: {owner: {$eq: 'stoqey'}, _type: {$eq: 'Trade'}},
64
- } : _b, _c = args.page, page = _c === void 0 ? 0 : _c, _d = args.limit, limit = _d === void 0 ? 10 : _d, _e = args.orderBy, orderBy = _e === void 0 ? { createdAt: 'DESC' } : _e;
60
+ _a = args.bucketName, bucketName = _a === void 0 ? '_default' : _a, _b = args.resultKey, resultKey = _b === void 0 ? bucketName : _b;
65
61
  cluster = connection_1.default.Instance.cluster;
66
- select = args.select || '*';
67
- if (Array.isArray(select)) {
68
- select = select.map(function (i) { return ({ $field: i }); });
69
- }
70
- offset = page * limit;
71
- _f.label = 1;
62
+ _d.label = 1;
72
63
  case 1:
73
- _f.trys.push([1, 3, , 4]);
74
- query = new query_1.QueryBuilder(where, bucketName)
75
- .select(select)
76
- .limit(limit)
77
- .offset(offset)
78
- .orderBy(orderBy)
79
- .build();
80
- console.log('query', query);
81
- return [4 /*yield*/, cluster.query(query)];
64
+ _d.trys.push([1, 3, , 4]);
65
+ _c = (0, safe_pagination_1.buildPaginationQuery)(args), query = _c.query, parameters = _c.parameters, selectAll_1 = _c.selectAll;
66
+ return [4 /*yield*/, cluster.query(query, { parameters: parameters })];
82
67
  case 2:
83
- rows = (_f.sent()).rows;
68
+ rows = (_d.sent()).rows;
84
69
  completedRows = rows.map(function (r) {
85
- return select === '*' ? r[bucketName] : r;
70
+ return selectAll_1 ? r[resultKey] : r;
86
71
  });
87
72
  return [2 /*return*/, completedRows];
88
73
  case 3:
89
- error_1 = _f.sent();
90
- console.error('error running pagination', error_1);
91
- return [2 /*return*/, []];
74
+ error_1 = _d.sent();
75
+ if (args.throwOnError === false) {
76
+ return [2 /*return*/, []];
77
+ }
78
+ throw error_1;
92
79
  case 4: return [2 /*return*/];
93
80
  }
94
81
  });
@@ -1 +1 @@
1
- {"version":3,"file":"pagination.js","sourceRoot":"","sources":["../../src/pagination/pagination.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kCAAsC;AACtC,6DAAgD;AAWhD;;;;;;;;;GASG;AACI,IAAM,UAAU,GAAG,UAAO,IAAoB;;;;;;;gBAE7C,KAQA,IAAI,WARmB,EAAvB,UAAU,mBAAG,UAAU,KAAA,EAEvB,KAMA,IAAI,MAJH,EAFD,KAAK,mBAAG;gBACJ,0DAA0D;iBAC7D,KAAA,EACD,KAGA,IAAI,KAHI,EAAR,IAAI,mBAAG,CAAC,KAAA,EACR,KAEA,IAAI,MAFM,EAAV,KAAK,mBAAG,EAAE,KAAA,EACV,KACA,IAAI,QADyB,EAA7B,OAAO,mBAAG,EAAC,SAAS,EAAE,MAAM,EAAC,KAAA,CACxB;gBAEH,OAAO,GAAG,oBAAmB,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAEjD,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,GAAG,CAAC;gBAChC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;oBACxB,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,EAAC,MAAM,EAAE,CAAC,EAAC,CAAC,EAAb,CAAa,CAAC,CAAC;gBAC9C,CAAC;gBAEK,MAAM,GAAG,IAAI,GAAG,KAAK,CAAC;;;;gBAGlB,KAAK,GAAG,IAAI,oBAAY,CAAC,KAAK,EAAE,UAAU,CAAC;qBAC5C,MAAM,CAAC,MAAM,CAAC;qBACd,KAAK,CAAC,KAAK,CAAC;qBACZ,MAAM,CAAC,MAAM,CAAC;qBACd,OAAO,CAAC,OAAO,CAAC;qBAChB,KAAK,EAAE,CAAC;gBAEb,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;gBAEb,qBAAM,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAA;;gBAAlC,IAAI,GAAI,CAAA,SAA0B,CAAA,KAA9B;gBAEL,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,UAAC,CAAM;oBAClC,OAAO,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC9C,CAAC,CAAC,CAAC;gBAEH,sBAAO,aAAa,EAAC;;;gBAErB,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,OAAK,CAAC,CAAC;gBACjD,sBAAO,EAAE,EAAC;;;;KAEjB,CAAC;AA1CW,QAAA,UAAU,cA0CrB","sourcesContent":["import {QueryBuilder} from '../query';\nimport CouchbaseConnection from '../connection';\n\nexport interface PaginationArgs {\n bucketName: string;\n select?: any[] | string;\n where: any;\n page: number;\n limit: number;\n orderBy?: any;\n}\n\n/**\n * Common pagination\n * where = {\n where: { owner: { $eq: \"stoqey\" }, _type: { $eq: \"Trade\" } },\n },\n page = 0,\n limit = 10,\n orderBy = { createdAt: \"DESC\" },\n * @param args PaginationArgs\n */\nexport const Pagination = async (args: PaginationArgs): Promise<any[]> => {\n const {\n bucketName = '_default',\n // select: ogSelected = '*',\n where = {\n // where: {owner: {$eq: 'stoqey'}, _type: {$eq: 'Trade'}},\n },\n page = 0,\n limit = 10,\n orderBy = {createdAt: 'DESC'},\n } = args;\n\n const cluster = CouchbaseConnection.Instance.cluster;\n\n let select = args.select || '*';\n if (Array.isArray(select)) {\n select = select.map((i) => ({$field: i}));\n }\n\n const offset = page * limit;\n\n try {\n const query = new QueryBuilder(where, bucketName)\n .select(select)\n .limit(limit)\n .offset(offset)\n .orderBy(orderBy)\n .build();\n\n console.log('query', query);\n\n const {rows} = await cluster.query(query);\n\n const completedRows = rows.map((r: any) => {\n return select === '*' ? r[bucketName] : r;\n });\n\n return completedRows;\n } catch (error) {\n console.error('error running pagination', error);\n return [];\n }\n};\n"]}
1
+ {"version":3,"file":"pagination.js","sourceRoot":"","sources":["../../src/pagination/pagination.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6DAAgD;AAEhD,qDAAuD;AAGvD;;;;;;;;;GASG;AACI,IAAM,UAAU,GAAG,UAAO,IAAoB;;;;;gBAC1C,KAAmD,IAAI,WAAhC,EAAvB,UAAU,mBAAG,UAAU,KAAA,EAAE,KAA0B,IAAI,UAAR,EAAtB,SAAS,mBAAG,UAAU,KAAA,CAAS;gBAEzD,OAAO,GAAG,oBAAmB,CAAC,QAAQ,CAAC,OAAO,CAAC;;;;gBAG3C,KAAiC,IAAA,sCAAoB,EAAC,IAAI,CAAC,EAA1D,KAAK,WAAA,EAAE,UAAU,gBAAA,EAAE,0BAAS,CAA+B;gBAEnD,qBAAM,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,EAAC,UAAU,YAAA,EAAC,CAAC,EAAA;;gBAAhD,IAAI,GAAI,CAAA,SAAwC,CAAA,KAA5C;gBAEL,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,UAAC,CAAM;oBAClC,OAAO,WAAS,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACxC,CAAC,CAAC,CAAC;gBAEH,sBAAO,aAAa,EAAC;;;gBAErB,IAAI,IAAI,CAAC,YAAY,KAAK,KAAK,EAAE,CAAC;oBAC9B,sBAAO,EAAE,EAAC;gBACd,CAAC;gBAED,MAAM,OAAK,CAAC;;;;KAEnB,CAAC;AAtBW,QAAA,UAAU,cAsBrB","sourcesContent":["import CouchbaseConnection from '../connection';\n\nimport {buildPaginationQuery} from './safe-pagination';\nimport {PaginationArgs} from './types';\n\n/**\n * Common pagination\n * where = {\n where: { owner: { $eq: \"stoqey\" }, _type: { $eq: \"Trade\" } },\n },\n page = 0,\n limit = 10,\n orderBy = { createdAt: \"DESC\" },\n * @param args PaginationArgs\n */\nexport const Pagination = async (args: PaginationArgs): Promise<any[]> => {\n const {bucketName = '_default', resultKey = bucketName} = args;\n\n const cluster = CouchbaseConnection.Instance.cluster;\n\n try {\n const {query, parameters, selectAll} = buildPaginationQuery(args);\n\n const {rows} = await cluster.query(query, {parameters});\n\n const completedRows = rows.map((r: any) => {\n return selectAll ? r[resultKey] : r;\n });\n\n return completedRows;\n } catch (error) {\n if (args.throwOnError === false) {\n return [];\n }\n\n throw error;\n }\n};\n"]}
@@ -0,0 +1,15 @@
1
+ import { SortType } from '../query/interface/query.types';
2
+ import { PaginationArgs } from './types';
3
+ export interface PaginationQuery {
4
+ query: string;
5
+ parameters: Record<string, any>;
6
+ selectAll: boolean;
7
+ limit?: number;
8
+ offset?: number;
9
+ }
10
+ export interface SelectionQueryOptions {
11
+ includeLimitOffset?: boolean;
12
+ defaultOrderBy?: Record<string, SortType>;
13
+ }
14
+ export declare const buildSelectionQuery: (args: PaginationArgs, options?: SelectionQueryOptions) => PaginationQuery;
15
+ export declare const buildPaginationQuery: (args: PaginationArgs) => PaginationQuery;
@@ -0,0 +1,221 @@
1
+ "use strict";
2
+ var __read = (this && this.__read) || function (o, n) {
3
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
4
+ if (!m) return o;
5
+ var i = m.call(o), r, ar = [], e;
6
+ try {
7
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
8
+ }
9
+ catch (error) { e = { error: error }; }
10
+ finally {
11
+ try {
12
+ if (r && !r.done && (m = i["return"])) m.call(i);
13
+ }
14
+ finally { if (e) throw e.error; }
15
+ }
16
+ return ar;
17
+ };
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.buildPaginationQuery = exports.buildSelectionQuery = void 0;
20
+ var helpers_1 = require("../query/helpers");
21
+ var utils_1 = require("../query/utils");
22
+ var comparisonOperators = {
23
+ $eq: '=',
24
+ $neq: '!=',
25
+ $gt: '>',
26
+ $gte: '>=',
27
+ $lt: '<',
28
+ $lte: '<=',
29
+ };
30
+ var stringComparisonOperators = {
31
+ $like: 'LIKE',
32
+ $notLike: 'NOT LIKE',
33
+ };
34
+ var emptyComparisonOperators = {
35
+ $isNull: 'IS NULL',
36
+ $isNotNull: 'IS NOT NULL',
37
+ $isMissing: 'IS MISSING',
38
+ $isNotMissing: 'IS NOT MISSING',
39
+ $isValued: 'IS VALUED',
40
+ $isNotValued: 'IS NOT VALUED',
41
+ };
42
+ var multipleComparisonOperators = {
43
+ $btw: 'BETWEEN',
44
+ $notBtw: 'NOT BETWEEN',
45
+ };
46
+ var logicalOperators = {
47
+ $and: 'AND',
48
+ $or: 'OR',
49
+ };
50
+ var PaginationParameterStore = /** @class */ (function () {
51
+ function PaginationParameterStore() {
52
+ this.parameters = {};
53
+ this.index = 0;
54
+ }
55
+ PaginationParameterStore.prototype.add = function (value) {
56
+ var key = "cs_param_".concat(this.index);
57
+ this.index += 1;
58
+ this.parameters[key] = value;
59
+ return "$".concat(key);
60
+ };
61
+ return PaginationParameterStore;
62
+ }());
63
+ var collectionIdentifier = function (collection) {
64
+ if (collection.indexOf(' ') !== -1) {
65
+ return "`".concat(collection).replace(' ', '` ');
66
+ }
67
+ if (collection.indexOf('`') !== -1) {
68
+ return collection;
69
+ }
70
+ return "`".concat(collection, "`");
71
+ };
72
+ var hasLogicalOperator = function (clause) {
73
+ return Object.keys(clause).some(function (key) { return ['$and', '$or', '$not'].includes(key); });
74
+ };
75
+ var parameterizeValue = function (value, store) {
76
+ return store.add(value);
77
+ };
78
+ var buildComparisonExpr = function (fieldName, comparison, store) {
79
+ var field = (0, utils_1.escapeReservedWords)(fieldName);
80
+ var expr = Object.keys(comparison)
81
+ .map(function (operator) {
82
+ if (Object.prototype.hasOwnProperty.call(emptyComparisonOperators, operator)) {
83
+ return "".concat(field, " ").concat(emptyComparisonOperators[operator]);
84
+ }
85
+ if (Object.prototype.hasOwnProperty.call(comparisonOperators, operator)) {
86
+ return "".concat(field).concat(comparisonOperators[operator]).concat(parameterizeValue(comparison[operator], store));
87
+ }
88
+ if (Object.prototype.hasOwnProperty.call(stringComparisonOperators, operator)) {
89
+ return "".concat(field, " ").concat(stringComparisonOperators[operator], " ").concat(parameterizeValue(comparison[operator], store));
90
+ }
91
+ if (Object.prototype.hasOwnProperty.call(multipleComparisonOperators, operator) &&
92
+ Array.isArray(comparison[operator])) {
93
+ var _a = __read(comparison[operator], 2), from = _a[0], to = _a[1];
94
+ return "".concat(field, " ").concat(multipleComparisonOperators[operator], " ").concat(parameterizeValue(from, store), " AND ").concat(parameterizeValue(to, store));
95
+ }
96
+ throw new Error("Unsupported pagination where operator: ".concat(operator));
97
+ })
98
+ .join(' AND ');
99
+ return Object.keys(comparison).length > 1 ? "(".concat(expr, ")") : expr;
100
+ };
101
+ var buildFieldExpr = function (field, store) {
102
+ return Object.keys(field)
103
+ .map(function (fieldName) {
104
+ var value = field[fieldName];
105
+ if (value &&
106
+ typeof value === 'object' &&
107
+ !Array.isArray(value) &&
108
+ Object.keys(value).some(function (operator) { return operator.indexOf('$') === 0; })) {
109
+ return buildComparisonExpr(fieldName, value, store);
110
+ }
111
+ if (fieldName.indexOf('$') === -1) {
112
+ return "".concat((0, utils_1.escapeReservedWords)(fieldName), "=").concat(parameterizeValue(value, store));
113
+ }
114
+ throw new Error("Unsupported pagination where field: ".concat(fieldName));
115
+ })
116
+ .join(' AND ');
117
+ };
118
+ var buildWhereClauseExpr = function (clause, store) {
119
+ if (!hasLogicalOperator(clause)) {
120
+ return buildFieldExpr(clause, store);
121
+ }
122
+ return Object.keys(clause)
123
+ .map(function (key) {
124
+ var _a;
125
+ var value = clause[key];
126
+ if (Array.isArray(value) &&
127
+ Object.prototype.hasOwnProperty.call(logicalOperators, key)) {
128
+ return "(".concat(value
129
+ .map(function (item) { return buildWhereClauseExpr(item, store); })
130
+ .join(" ".concat(logicalOperators[key], " ")), ")");
131
+ }
132
+ if (key === '$not' && Array.isArray(value)) {
133
+ return "NOT (".concat(value
134
+ .map(function (item) { return buildWhereClauseExpr(item, store); })
135
+ .join(' AND '), ")");
136
+ }
137
+ return buildWhereClauseExpr((_a = {}, _a[key] = value, _a), store);
138
+ })
139
+ .join(' AND ');
140
+ };
141
+ var buildWhereExpr = function (expr, store, clause) {
142
+ if (clause === void 0) { clause = 'WHERE'; }
143
+ return expr ? " ".concat(clause, " ").concat(buildWhereClauseExpr(expr, store)) : '';
144
+ };
145
+ var buildUseKeysExpr = function (useKeys, store) {
146
+ return Array.isArray(useKeys) ? " USE KEYS ".concat(parameterizeValue(useKeys, store)) : '';
147
+ };
148
+ var buildLetExpr = function (letExpr, store, clause) {
149
+ if (clause === void 0) { clause = 'LET'; }
150
+ return Array.isArray(letExpr)
151
+ ? " ".concat(clause, " ").concat(letExpr
152
+ .map(function (value) {
153
+ return "".concat((0, utils_1.escapeReservedWords)(value.key), "=").concat(parameterizeValue(value.value, store));
154
+ })
155
+ .join(','))
156
+ : '';
157
+ };
158
+ var buildGroupByExpr = function (groupByExpr, lettingExpr, havingExpr, store) {
159
+ if (!groupByExpr) {
160
+ return '';
161
+ }
162
+ return " GROUP BY ".concat(groupByExpr
163
+ .map(function (value) {
164
+ return "".concat((0, utils_1.escapeReservedWords)(value.expr)).concat(value.as ? " AS ".concat(value.as) : '');
165
+ })
166
+ .join(',')).concat(buildLetExpr(lettingExpr, store, 'LETTING')).concat(buildWhereExpr(havingExpr, store, 'HAVING'));
167
+ };
168
+ var buildSelectExpr = function (select) {
169
+ if (!select || select === '*') {
170
+ return { expr: '*', selectAll: true };
171
+ }
172
+ if (typeof select === 'string') {
173
+ return { expr: select, selectAll: false };
174
+ }
175
+ var selectExpr = select.map(function (item) {
176
+ return typeof item === 'string' ? { $field: item } : item;
177
+ });
178
+ return { expr: (0, helpers_1.buildSelectArrayExpr)(selectExpr), selectAll: false };
179
+ };
180
+ var buildOrderByExpr = function (orderExpr) {
181
+ return orderExpr
182
+ ? " ORDER BY ".concat(Object.keys(orderExpr)
183
+ .map(function (value) { return "".concat((0, utils_1.escapeReservedWords)(value), " ").concat(orderExpr[value]); })
184
+ .join(','))
185
+ : '';
186
+ };
187
+ var addNamedParameter = function (parameters, key, value) {
188
+ parameters[key] = value;
189
+ return "$".concat(key);
190
+ };
191
+ var buildSelectionQuery = function (args, options) {
192
+ if (options === void 0) { options = {}; }
193
+ var _a = args.bucketName, bucketName = _a === void 0 ? '_default' : _a, _b = args.where, where = _b === void 0 ? {} : _b, _c = args.page, page = _c === void 0 ? 0 : _c, _d = args.limit, limit = _d === void 0 ? 10 : _d, offset = args.offset, _e = args.orderBy, orderBy = _e === void 0 ? options.defaultOrderBy : _e;
194
+ var _f = options.includeLimitOffset, includeLimitOffset = _f === void 0 ? false : _f;
195
+ var store = new PaginationParameterStore();
196
+ var parameters = store.parameters;
197
+ var _g = buildSelectExpr(args.select || '*'), selectExpr = _g.expr, selectAll = _g.selectAll;
198
+ var queryOffset = typeof offset === 'number' ? offset : page * limit;
199
+ var conditions = where || {};
200
+ var plainJoin = conditions.plainJoin ? " ".concat(conditions.plainJoin, " ") : '';
201
+ var limitOffsetExpr = includeLimitOffset
202
+ ? " LIMIT ".concat(addNamedParameter(parameters, 'cs_limit', limit), " OFFSET ").concat(addNamedParameter(parameters, 'cs_offset', queryOffset))
203
+ : '';
204
+ var query = "SELECT ".concat(selectExpr, " FROM ").concat(collectionIdentifier(bucketName)).concat(plainJoin).concat(buildUseKeysExpr(conditions.use, store)).concat(buildLetExpr(conditions.let, store)).concat(buildWhereExpr(conditions.where, store)).concat(buildGroupByExpr(conditions.groupBy, conditions.letting, conditions.having, store)).concat(buildOrderByExpr(orderBy)).concat(limitOffsetExpr);
205
+ return {
206
+ query: query,
207
+ parameters: parameters,
208
+ selectAll: selectAll,
209
+ limit: limit,
210
+ offset: queryOffset,
211
+ };
212
+ };
213
+ exports.buildSelectionQuery = buildSelectionQuery;
214
+ var buildPaginationQuery = function (args) {
215
+ return (0, exports.buildSelectionQuery)(args, {
216
+ includeLimitOffset: true,
217
+ defaultOrderBy: { createdAt: 'DESC' },
218
+ });
219
+ };
220
+ exports.buildPaginationQuery = buildPaginationQuery;
221
+ //# sourceMappingURL=safe-pagination.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safe-pagination.js","sourceRoot":"","sources":["../../src/pagination/safe-pagination.ts"],"names":[],"mappings":"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","sourcesContent":["import {buildSelectArrayExpr} from '../query/helpers';\nimport {IGroupBy, ILetExpr, LogicalWhereExpr, SortType} from '../query/interface/query.types';\nimport {escapeReservedWords} from '../query/utils';\n\nimport {PaginationArgs} from './types';\n\nexport interface PaginationQuery {\n query: string;\n parameters: Record<string, any>;\n selectAll: boolean;\n limit?: number;\n offset?: number;\n}\n\nexport interface SelectionQueryOptions {\n includeLimitOffset?: boolean;\n defaultOrderBy?: Record<string, SortType>;\n}\n\nconst comparisonOperators: Record<string, string> = {\n $eq: '=',\n $neq: '!=',\n $gt: '>',\n $gte: '>=',\n $lt: '<',\n $lte: '<=',\n};\n\nconst stringComparisonOperators: Record<string, string> = {\n $like: 'LIKE',\n $notLike: 'NOT LIKE',\n};\n\nconst emptyComparisonOperators: Record<string, string> = {\n $isNull: 'IS NULL',\n $isNotNull: 'IS NOT NULL',\n $isMissing: 'IS MISSING',\n $isNotMissing: 'IS NOT MISSING',\n $isValued: 'IS VALUED',\n $isNotValued: 'IS NOT VALUED',\n};\n\nconst multipleComparisonOperators: Record<string, string> = {\n $btw: 'BETWEEN',\n $notBtw: 'NOT BETWEEN',\n};\n\nconst logicalOperators: Record<string, string> = {\n $and: 'AND',\n $or: 'OR',\n};\n\nclass PaginationParameterStore {\n public parameters: Record<string, any> = {};\n private index = 0;\n\n public add(value: any): string {\n const key = `cs_param_${this.index}`;\n this.index += 1;\n this.parameters[key] = value;\n\n return `$${key}`;\n }\n}\n\nconst collectionIdentifier = (collection: string): string => {\n if (collection.indexOf(' ') !== -1) {\n return `\\`${collection}`.replace(' ', '` ');\n }\n\n if (collection.indexOf('`') !== -1) {\n return collection;\n }\n\n return `\\`${collection}\\``;\n};\n\nconst hasLogicalOperator = (clause: Record<string, any>): boolean => {\n return Object.keys(clause).some((key) => ['$and', '$or', '$not'].includes(key));\n};\n\nconst parameterizeValue = (value: any, store: PaginationParameterStore): string => {\n return store.add(value);\n};\n\nconst buildComparisonExpr = (\n fieldName: string,\n comparison: Record<string, any>,\n store: PaginationParameterStore\n): string => {\n const field = escapeReservedWords(fieldName);\n const expr = Object.keys(comparison)\n .map((operator) => {\n if (Object.prototype.hasOwnProperty.call(emptyComparisonOperators, operator)) {\n return `${field} ${emptyComparisonOperators[operator]}`;\n }\n\n if (Object.prototype.hasOwnProperty.call(comparisonOperators, operator)) {\n return `${field}${comparisonOperators[operator]}${parameterizeValue(\n comparison[operator],\n store\n )}`;\n }\n\n if (Object.prototype.hasOwnProperty.call(stringComparisonOperators, operator)) {\n return `${field} ${stringComparisonOperators[operator]} ${parameterizeValue(\n comparison[operator],\n store\n )}`;\n }\n\n if (\n Object.prototype.hasOwnProperty.call(multipleComparisonOperators, operator) &&\n Array.isArray(comparison[operator])\n ) {\n const [from, to] = comparison[operator];\n\n return `${field} ${multipleComparisonOperators[operator]} ${parameterizeValue(\n from,\n store\n )} AND ${parameterizeValue(to, store)}`;\n }\n\n throw new Error(`Unsupported pagination where operator: ${operator}`);\n })\n .join(' AND ');\n\n return Object.keys(comparison).length > 1 ? `(${expr})` : expr;\n};\n\nconst buildFieldExpr = (field: Record<string, any>, store: PaginationParameterStore): string => {\n return Object.keys(field)\n .map((fieldName) => {\n const value = field[fieldName];\n\n if (\n value &&\n typeof value === 'object' &&\n !Array.isArray(value) &&\n Object.keys(value).some((operator) => operator.indexOf('$') === 0)\n ) {\n return buildComparisonExpr(fieldName, value, store);\n }\n\n if (fieldName.indexOf('$') === -1) {\n return `${escapeReservedWords(fieldName)}=${parameterizeValue(value, store)}`;\n }\n\n throw new Error(`Unsupported pagination where field: ${fieldName}`);\n })\n .join(' AND ');\n};\n\nconst buildWhereClauseExpr = (\n clause: LogicalWhereExpr,\n store: PaginationParameterStore\n): string => {\n if (!hasLogicalOperator(clause as Record<string, any>)) {\n return buildFieldExpr(clause as Record<string, any>, store);\n }\n\n return Object.keys(clause)\n .map((key) => {\n const value = clause[key];\n\n if (\n Array.isArray(value) &&\n Object.prototype.hasOwnProperty.call(logicalOperators, key)\n ) {\n return `(${value\n .map((item) => buildWhereClauseExpr(item as LogicalWhereExpr, store))\n .join(` ${logicalOperators[key]} `)})`;\n }\n\n if (key === '$not' && Array.isArray(value)) {\n return `NOT (${value\n .map((item) => buildWhereClauseExpr(item as LogicalWhereExpr, store))\n .join(' AND ')})`;\n }\n\n return buildWhereClauseExpr({[key]: value} as LogicalWhereExpr, store);\n })\n .join(' AND ');\n};\n\nconst buildWhereExpr = (\n expr: LogicalWhereExpr | undefined,\n store: PaginationParameterStore,\n clause = 'WHERE'\n): string => {\n return expr ? ` ${clause} ${buildWhereClauseExpr(expr, store)}` : '';\n};\n\nconst buildUseKeysExpr = (\n useKeys: string[] | undefined,\n store: PaginationParameterStore\n): string => {\n return Array.isArray(useKeys) ? ` USE KEYS ${parameterizeValue(useKeys, store)}` : '';\n};\n\nconst buildLetExpr = (\n letExpr: ILetExpr[] | undefined,\n store: PaginationParameterStore,\n clause = 'LET'\n): string => {\n return Array.isArray(letExpr)\n ? ` ${clause} ${letExpr\n .map(\n (value: ILetExpr) =>\n `${escapeReservedWords(value.key)}=${parameterizeValue(value.value, store)}`\n )\n .join(',')}`\n : '';\n};\n\nconst buildGroupByExpr = (\n groupByExpr: IGroupBy[] | undefined,\n lettingExpr: ILetExpr[] | undefined,\n havingExpr: LogicalWhereExpr | undefined,\n store: PaginationParameterStore\n): string => {\n if (!groupByExpr) {\n return '';\n }\n\n return ` GROUP BY ${groupByExpr\n .map((value: IGroupBy) => {\n return `${escapeReservedWords(value.expr)}${value.as ? ` AS ${value.as}` : ''}`;\n })\n .join(',')}${buildLetExpr(lettingExpr, store, 'LETTING')}${buildWhereExpr(\n havingExpr,\n store,\n 'HAVING'\n )}`;\n};\n\nconst buildSelectExpr = (select?: any[] | string): {expr: string; selectAll: boolean} => {\n if (!select || select === '*') {\n return {expr: '*', selectAll: true};\n }\n\n if (typeof select === 'string') {\n return {expr: select, selectAll: false};\n }\n\n const selectExpr = select.map((item) => {\n return typeof item === 'string' ? {$field: item} : item;\n });\n\n return {expr: buildSelectArrayExpr(selectExpr), selectAll: false};\n};\n\nconst buildOrderByExpr = (orderExpr: Record<string, SortType> | undefined): string => {\n return orderExpr\n ? ` ORDER BY ${Object.keys(orderExpr)\n .map((value: string) => `${escapeReservedWords(value)} ${orderExpr[value]}`)\n .join(',')}`\n : '';\n};\n\nconst addNamedParameter = (parameters: Record<string, any>, key: string, value: any): string => {\n parameters[key] = value;\n\n return `$${key}`;\n};\n\nexport const buildSelectionQuery = (\n args: PaginationArgs,\n options: SelectionQueryOptions = {}\n): PaginationQuery => {\n const {\n bucketName = '_default',\n where = {},\n page = 0,\n limit = 10,\n offset,\n orderBy = options.defaultOrderBy,\n } = args;\n const {includeLimitOffset = false} = options;\n const store = new PaginationParameterStore();\n const parameters = store.parameters;\n const {expr: selectExpr, selectAll} = buildSelectExpr(args.select || '*');\n const queryOffset = typeof offset === 'number' ? offset : page * limit;\n const conditions = where || {};\n const plainJoin = conditions.plainJoin ? ` ${conditions.plainJoin} ` : '';\n const limitOffsetExpr = includeLimitOffset\n ? ` LIMIT ${addNamedParameter(parameters, 'cs_limit', limit)} OFFSET ${addNamedParameter(\n parameters,\n 'cs_offset',\n queryOffset\n )}`\n : '';\n\n const query = `SELECT ${selectExpr} FROM ${collectionIdentifier(\n bucketName\n )}${plainJoin}${buildUseKeysExpr(conditions.use, store)}${buildLetExpr(\n conditions.let,\n store\n )}${buildWhereExpr(conditions.where, store)}${buildGroupByExpr(\n conditions.groupBy,\n conditions.letting,\n conditions.having,\n store\n )}${buildOrderByExpr(orderBy)}${limitOffsetExpr}`;\n\n return {\n query,\n parameters,\n selectAll,\n limit,\n offset: queryOffset,\n };\n};\n\nexport const buildPaginationQuery = (args: PaginationArgs): PaginationQuery => {\n return buildSelectionQuery(args, {\n includeLimitOffset: true,\n defaultOrderBy: {createdAt: 'DESC'},\n });\n};\n"]}
@@ -0,0 +1,11 @@
1
+ export interface PaginationArgs {
2
+ bucketName: string;
3
+ resultKey?: string;
4
+ select?: any[] | string;
5
+ where: any;
6
+ page?: number;
7
+ limit?: number;
8
+ offset?: number;
9
+ orderBy?: any;
10
+ throwOnError?: boolean;
11
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/pagination/types.ts"],"names":[],"mappings":"","sourcesContent":["export interface PaginationArgs {\n bucketName: string;\n resultKey?: string;\n select?: any[] | string;\n where: any;\n page?: number;\n limit?: number;\n offset?: number;\n orderBy?: any;\n throwOnError?: boolean;\n}\n"]}