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
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/model/index.ts"],"names":[],"mappings":"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","sourcesContent":["import type {Collection, GetOptions, RemoveOptions, ReplaceOptions, UpsertOptions} from 'couchbase';\n\n// import {AutomaticMethodOptions, AutomaticOutput, automateImplementation} from '../automate';\nimport {CustomQuery, CustomQueryPagination} from '../search';\nimport {SchemaTypes, parseSchema} from '../utils';\nimport CouchbaseConnection from '../connection';\nimport {Pagination} from '../pagination';\nimport {generateUUID} from '../uuid';\n\nexport interface AutoModelFields {\n id: string;\n createdAt: Date;\n updatedAt?: Date;\n deleted?: Date;\n _type: string; // type for models/collections\n _scope: string; // scope for collections\n}\n\nexport interface UpdateOptions extends ReplaceOptions {\n silent?: boolean; // whether to updatedAt;\n}\n\nexport interface ModalOptions {\n scope?: string;\n schema?: Record<string, SchemaTypes>;\n graphqlType?: any;\n}\n\nexport class Model {\n collection: Collection;\n collectionName: string;\n scope = '_default';\n schema: Record<string, SchemaTypes> = {\n createdAt: 'date',\n updatedAt: 'date',\n };\n graphqlType = null;\n\n constructor(name: string, options?: ModalOptions) {\n // this.collection = CouchbaseConnection.Instance.getCollection();\n this.collectionName = name;\n if (options) {\n this.graphqlType = (options && options.graphqlType) || null;\n this.scope = (options && options.scope) || '_default';\n this.schema = {\n ...((options && options.schema) || {}),\n createdAt: 'date',\n updatedAt: 'date',\n };\n }\n }\n\n /**\n * Set setGraphqlType\n * setGraphqlType\n */\n public setGraphqlType(gqlType: any): Model {\n this.graphqlType = gqlType;\n return this;\n }\n\n /**\n * Refresh and get default collection from CouchbaseConnection\n * Because CouchbaseConnection is a singleton, sometimes it might be undefined depending when model was created\n * So we have to call it from all model methods\n * to avoid error `Cannot read property 'defaultCollection' of null`\n */\n public fresh(): void {\n // if couchbase connection has been init\n if (CouchbaseConnection.Instance.bucketName) {\n this.collection = CouchbaseConnection.Instance.getCollection();\n }\n }\n\n /** Get this collection\n * getCollection\n */\n public getBucketName(): string {\n return CouchbaseConnection.Instance?.getBucket();\n }\n\n /** Get this collection\n * getCollection\n */\n public couchbaseConnection(): CouchbaseConnection {\n return CouchbaseConnection.Instance;\n }\n\n /** Get this collection\n * getCollection\n */\n public getCollection(): Collection {\n this.fresh();\n return this.collection;\n }\n\n /**\n * create\n */\n public async create<T>(data: T, options?: UpsertOptions): Promise<T & AutoModelFields> {\n this.fresh();\n const id = generateUUID();\n const createdData = {\n id, // let id be override\n ...data,\n createdAt: new Date(),\n updatedAt: new Date(), // same as created at\n _type: this.collectionName,\n _scope: this.scope,\n };\n\n try {\n await this.collection.upsert(createdData.id, createdData, options);\n return parseSchema(this.schema, createdData);\n } catch (error) {\n throw error;\n }\n }\n\n /**\n * findById\n */\n public async findById(id: string, options?: GetOptions): Promise<any & AutoModelFields> {\n this.fresh();\n try {\n const data = await this.collection.get(id, options);\n return parseSchema(this.schema, data.content);\n } catch (error) {\n throw error;\n }\n }\n\n /**\n * update\n */\n public async updateById<T>(id: string, data: T, opt?: UpdateOptions): Promise<T> {\n this.fresh();\n\n const {silent = false, ...options} = opt || {};\n\n const updatedDocument: any = {\n ...data,\n id,\n _type: this.collectionName, // type and scope must be defined\n _scope: this.scope,\n };\n\n if (!silent) {\n updatedDocument.updatedAt = new Date();\n }\n\n try {\n await this.collection.replace(id, updatedDocument, options);\n return parseSchema(this.schema, updatedDocument);\n } catch (error) {\n throw error;\n }\n }\n\n /**\n * save\n */\n public async save<T>(data: T & {id: string}, opt?: UpdateOptions): Promise<T> {\n this.fresh();\n\n const id = data && data.id;\n\n const {silent = false, ...options} = opt || {};\n\n const updatedDocument: any = {\n ...data,\n id,\n _type: this.collectionName, // type and scope must be defined\n _scope: this.scope,\n };\n\n if (!silent) {\n updatedDocument.updatedAt = new Date();\n }\n\n try {\n if (!id) {\n throw new Error('document must have id');\n }\n await this.collection.replace(id, updatedDocument, options);\n return parseSchema(this.schema, updatedDocument);\n } catch (error) {\n console.error(error);\n throw error;\n }\n }\n\n public async delete(id: string, options?: RemoveOptions): Promise<boolean> {\n this.fresh();\n try {\n await this.collection.remove(id, options);\n return true;\n } catch (error) {\n throw error;\n }\n }\n\n /**\n * Pagination\n * \n select = ['id', 'createdAt']\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 */\n public async pagination({\n select,\n where,\n orderBy,\n limit,\n page,\n customQuery = {},\n }: {\n select?: any[] | string;\n where?: any;\n orderBy?: any;\n limit?: number;\n page?: number;\n customQuery?: any; // can be $and or any other valid quries\n }): Promise<any[]> {\n this.fresh(); // refresh\n // Where begins here\n let whereEx = {_type: {$eq: this.collectionName}};\n\n if (where) {\n whereEx = {\n ...whereEx,\n ...where,\n };\n }\n\n const bucketName = CouchbaseConnection.Instance.bucketName;\n\n const rows = await Pagination({\n bucketName,\n select,\n where: {where: whereEx, ...customQuery},\n limit,\n page,\n orderBy,\n });\n\n return rows.map((r) => parseSchema(this.schema, r));\n }\n\n /**\n * Run a custom query with model parsing\n * @param { select, query }\n * @returns\n */\n public async customQuery<T>({\n params,\n limit,\n query,\n }: {\n params: any;\n limit: number;\n query: string;\n }): Promise<[T[], CustomQueryPagination]> {\n this.fresh(); // refresh\n // Where begins here\n\n const response = await CustomQuery<T>({\n limit,\n params,\n query,\n });\n\n return response;\n }\n\n public parse<T>(data: T): T {\n this.fresh(); // refresh\n return parseSchema(this.schema, data);\n }\n\n // /**\n // *\n // * @param args AutomaticModelOptions\n // * @returns\n // */\n // public automate(args?: Partial<AutomaticMethodOptions>): AutomaticOutput {\n // this.fresh(); // refresh\n // return automateImplementation(this.graphqlType, {model: this, ...args});\n // }\n}\n\nexport default Model;\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/model/index.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n Collection,\n Cluster,\n GetOptions,\n MutateInOptions,\n RemoveOptions,\n ReplaceOptions,\n} from 'couchbase';\n\nimport {SchemaTypes, parseSchema} from '../utils';\nimport CouchbaseConnection from '../connection';\n\nimport {applyDefaultWhere, DefaultWhereMode} from './default-scope';\nimport {\n count as countRows,\n exists as rowsExist,\n findMany as findManyRows,\n findOne as findOneRow,\n page as pageRows,\n} from './read-helpers';\nimport type {ModelPageResult, ModelReadArgs, ModelReadContext} from './read-helpers';\nimport {bucketIdentifier, fromTarget, keyspaceIdentifier} from './keyspace';\nimport {runQueryOne, runQueryPage, runQueryRows} from './safe-query';\nimport type {\n QueryPageOptions,\n QueryPageResult,\n QueryParameters,\n SafeQueryOptions,\n} from './safe-query';\nimport {\n findByIdWithMeta as findByIdWithMetaDoc,\n incrementById as incrementDocumentById,\n insert as insertDocument,\n mutateById as mutateDocumentById,\n patchById as patchDocumentById,\n prepareInsertDocument,\n prepareReplacementDocument,\n replaceById as replaceDocumentById,\n upsert as upsertDocument,\n} from './write-helpers';\nimport type {\n FindByIdWithMetaResult,\n InsertWriteOptions,\n ModelWriteContext,\n PatchByIdArgs,\n UpsertWriteOptions,\n} from './write-helpers';\nimport {hydrate as hydrateDocument, Hydrated} from './hydrated-document';\nimport {\n buildIndexQuery,\n ensureModelIndexes,\n EnsureIndexOptions,\n ModelIndexDefinition,\n} from './indexes';\nimport type {ParseHook, ValidationHook} from './validation';\nimport {parseDateFields, schemaFromDateFields} from './validation';\n\n/** A small connection surface used by client-bound models. */\nexport interface ModelConnection {\n bucket?: any;\n bucketName?: string;\n cluster: Cluster;\n getBucket(): string;\n getCollection(scopeName?: string, collectionName?: string): Collection;\n isConnected(): boolean;\n ready(): Promise<any>;\n shouldReconnect(error: any): boolean;\n markDisconnected(error: any): void;\n}\n\n/** Converts a field between the application's value and Couchbase JSON. */\nexport interface FieldCodec<T = any, TDatabase = any> {\n toDatabase(value: T): TDatabase;\n fromDatabase(value: TDatabase): T;\n}\n\nexport type {ModelPageResult, ModelReadArgs} from './read-helpers';\nexport type {\n QueryLogger,\n QueryPageOptions,\n QueryPageResult,\n QueryParameters,\n SafeQueryOptions,\n} from './safe-query';\nexport type {FindByIdWithMetaResult, PatchByIdArgs} from './write-helpers';\nexport type {Hydrated} from './hydrated-document';\nexport type {IncludeDefinition, IncludeType} from './include';\nexport type {EnsureIndexOptions, ModelIndexDefinition} from './indexes';\nexport type {TtlOptions} from './ttl';\nexport type {ParseHook, ValidationHook} from './validation';\n\nexport interface AutoModelFields {\n id: string;\n createdAt: Date;\n updatedAt?: Date;\n deleted?: Date;\n _type: string; // type for models/collections\n _scope: string; // scope for collections\n}\n\nexport interface UpdateOptions extends ReplaceOptions {\n silent?: boolean; // whether to updatedAt;\n}\n\nexport interface DeleteByIdOptions extends RemoveOptions {\n hard?: boolean;\n}\n\nexport interface ModalOptions {\n scope?: string;\n collection?: string;\n schema?: Record<string, SchemaTypes>;\n softDelete?: boolean;\n defaultWhere?: any;\n validateCreate?: ValidationHook;\n validateReplace?: ValidationHook;\n parse?: ParseHook;\n dateFields?: string[];\n /**\n * Explicit field transforms. A field cannot also be a dateFields/schema date\n * transform, since that makes the parse order ambiguous.\n */\n codecs?: Record<string, FieldCodec<any, any>>;\n indexes?: ModelIndexDefinition[];\n}\n\nexport type ConsumeOnceResult = {status: 'consumed'} | {status: 'missing'} | {status: 'conflict'};\n\ninterface CollectionTarget {\n scopeName?: string;\n collectionName?: string;\n}\n\nexport class Model {\n private static registeredModels: Model[] = [];\n\n collection: Collection;\n collectionName: string;\n scope = '_default';\n private scopeName?: string;\n private collectionTargetName?: string;\n private defaultWhere?: any;\n private defaultWhereMode: DefaultWhereMode = 'default';\n private softDelete = false;\n private validateCreateHook?: ValidationHook;\n private validateReplaceHook?: ValidationHook;\n private parseHook?: ParseHook;\n private dateFields?: string[];\n private codecs: Record<string, FieldCodec<any, any>> = {};\n private readonly connection?: ModelConnection;\n private indexes: ModelIndexDefinition[] = [];\n schema: Record<string, SchemaTypes> = {\n createdAt: 'date',\n updatedAt: 'date',\n };\n\n constructor(name: string, options?: ModalOptions, connection?: ModelConnection) {\n // this.collection = CouchbaseConnection.Instance.getCollection();\n this.collectionName = name;\n this.connection = connection;\n if (options) {\n const hasScope = Object.prototype.hasOwnProperty.call(options, 'scope');\n const hasCollection = Object.prototype.hasOwnProperty.call(options, 'collection');\n this.scope = (options && options.scope) || '_default';\n this.scopeName = hasScope ? this.scope : undefined;\n this.collectionTargetName = hasCollection\n ? options.collection || '_default'\n : undefined;\n this.softDelete = !!options.softDelete;\n this.defaultWhere = options.defaultWhere;\n this.validateCreateHook = options.validateCreate;\n this.validateReplaceHook = options.validateReplace;\n this.parseHook = options.parse;\n this.dateFields = options.dateFields;\n this.codecs = options.codecs || {};\n const dateFields = new Set(options.dateFields || []);\n Object.keys(this.codecs).forEach((field) => {\n if (dateFields.has(field) || options.schema?.[field] === 'date') {\n throw new Error(\n `codec for ${field} conflicts with dateFields or schema date; use one transform`\n );\n }\n });\n this.indexes = options.indexes || [];\n this.schema = {\n ...((options && options.schema) || {}),\n ...schemaFromDateFields(options.dateFields),\n createdAt: 'date',\n updatedAt: 'date',\n };\n }\n\n // Legacy models participate in the singleton registry. Client-bound\n // models are registered only by their owning CouchsetClient.\n if (this.indexes.length && !this.connection) {\n Model.registeredModels.push(this);\n }\n }\n\n /**\n * Ensure indexes for every constructed model with index declarations.\n */\n public static async ensureIndexes(options?: EnsureIndexOptions): Promise<string[]> {\n const queries: string[] = [];\n const seenQueries = new Set<string>();\n\n for (const model of Model.registeredModels) {\n await model.prepare();\n const statements = model.indexStatements(options);\n const pending = statements.filter((query) => !seenQueries.has(query));\n\n pending.forEach((query) => seenQueries.add(query));\n await ensureModelIndexes(\n model.couchbaseConnection().cluster,\n model.keyspace(),\n model.indexes.filter((index, indexPosition) =>\n pending.includes(statements[indexPosition])\n ),\n options\n );\n queries.push(...pending);\n }\n\n return queries;\n }\n\n /**\n * Refresh and get default collection from CouchbaseConnection\n * Because CouchbaseConnection is a singleton, sometimes it might be undefined depending when model was created\n * So we have to call it from all model methods\n * to avoid error `Cannot read property 'defaultCollection' of null`\n */\n private fresh(): void {\n // if couchbase connection has been init\n if (this.couchbaseConnection().isConnected()) {\n const target = this.collectionTarget();\n this.collection = this.couchbaseConnection().getCollection(\n target.scopeName,\n target.collectionName\n );\n }\n }\n\n private async prepare(): Promise<void> {\n const connection = this.couchbaseConnection();\n\n if (!connection.bucket) {\n await connection.ready();\n }\n\n const target = this.collectionTarget();\n this.collection = connection.getCollection(target.scopeName, target.collectionName);\n }\n\n private async withConnection<T>(operation: () => Promise<T>): Promise<T> {\n await this.prepare();\n\n try {\n return await operation();\n } catch (error) {\n const connection = this.couchbaseConnection();\n\n if (!connection.shouldReconnect(error)) {\n throw error;\n }\n\n connection.markDisconnected(error);\n await this.prepare();\n\n return operation();\n }\n }\n\n /** Get this collection\n * getCollection\n */\n private getBucketName(): string {\n const bucketName = this.couchbaseConnection().getBucket();\n\n if (!bucketName) {\n throw new Error('couchset is not connected; call couchset(args) first');\n }\n\n return bucketName;\n }\n\n /** Get this collection\n * getCollection\n */\n private couchbaseConnection(): ModelConnection {\n return this.connection || CouchbaseConnection.Instance;\n }\n\n /** Get this collection\n * getCollection\n */\n public getCollection(): Collection {\n this.fresh();\n return this.collection;\n }\n\n private collectionTarget(): CollectionTarget {\n if (!this.scopeName && !this.collectionTargetName) {\n return {};\n }\n\n return {\n scopeName: this.scopeName || '_default',\n collectionName: this.collectionTargetName || '_default',\n };\n }\n\n private queryResultKey(): string {\n const target = this.collectionTarget();\n\n return target.collectionName || this.getBucketName();\n }\n\n private readContext(): ModelReadContext {\n return {\n bucketName: this.keyspace(),\n collectionName: this.collectionName,\n cluster: this.couchbaseConnection().cluster,\n parse: <T>(data: T) => this.parse(data),\n resultKey: this.queryResultKey(),\n };\n }\n\n private readArgs(args: ModelReadArgs = {}): ModelReadArgs {\n return applyDefaultWhere(args, {\n defaultWhere: this.defaultWhere,\n mode: this.defaultWhereMode,\n softDelete: this.softDelete,\n });\n }\n\n private writeContext(): ModelWriteContext {\n return {\n collection: this.getCollection(),\n collectionName: this.collectionName,\n scope: this.scope,\n parse: <T>(data: T) => this.parse(data),\n serialize: <T>(data: T) => this.serialize(data),\n serializeField: (path: string, value: any) => this.serializeField(path, value),\n validateCreate: this.validateCreateHook,\n validateReplace: this.validateReplaceHook,\n };\n }\n\n private cloneWithDefaultWhereMode(mode: DefaultWhereMode): Model {\n const options: ModalOptions = {\n codecs: this.codecs,\n dateFields: this.dateFields,\n defaultWhere: this.defaultWhere,\n parse: this.parseHook,\n schema: this.schema,\n softDelete: this.softDelete,\n validateCreate: this.validateCreateHook,\n validateReplace: this.validateReplaceHook,\n };\n\n if (this.scopeName) {\n options.scope = this.scopeName;\n }\n\n if (this.collectionTargetName) {\n options.collection = this.collectionTargetName;\n }\n\n const model = new Model(this.collectionName, options, this.connection);\n model.defaultWhereMode = mode;\n\n return model;\n }\n\n /**\n * Return the active bucket as a SQL++ keyspace identifier.\n */\n public bucket(): string {\n return bucketIdentifier(this.getBucketName());\n }\n\n /**\n * Return this model's SQL++ keyspace target.\n */\n public keyspace(): string {\n const target = this.collectionTarget();\n\n return keyspaceIdentifier({\n bucketName: this.getBucketName(),\n scopeName: target.scopeName,\n collectionName: target.collectionName,\n });\n }\n\n /**\n * Return a SQL++ FROM target for this model's current bucket.\n */\n public from(alias?: string): string {\n return fromTarget(this.keyspace(), alias);\n }\n\n /**\n * Return CREATE INDEX statements for this model without executing them.\n */\n public indexStatements(options?: EnsureIndexOptions): string[] {\n return this.indexes.map((index) => buildIndexQuery(this.keyspace(), index, options));\n }\n\n /**\n * Create this model's declared indexes if Couchbase does not already have them.\n */\n public async ensureIndexes(options?: EnsureIndexOptions): Promise<string[]> {\n return this.withConnection(() =>\n ensureModelIndexes(\n this.couchbaseConnection().cluster,\n this.keyspace(),\n this.indexes,\n options\n )\n );\n }\n\n /**\n * Run a SQL++ query and return rows directly.\n */\n public async queryRows<T>(\n query: string,\n params?: QueryParameters,\n options?: SafeQueryOptions\n ): Promise<T[]> {\n return this.withConnection(() =>\n runQueryRows<T>(this.couchbaseConnection().cluster, query, params, options)\n );\n }\n\n /**\n * Run a SQL++ query and return the first row or null.\n */\n public async queryOne<T>(\n query: string,\n params?: QueryParameters,\n options?: SafeQueryOptions\n ): Promise<T | null> {\n return this.withConnection(() =>\n runQueryOne<T>(this.couchbaseConnection().cluster, query, params, options)\n );\n }\n\n /**\n * Run a SQL++ query using limit + 1 pagination.\n */\n public async queryPage<T>(\n query: string,\n params?: QueryParameters,\n options?: QueryPageOptions\n ): Promise<QueryPageResult<T>> {\n return this.withConnection(() =>\n runQueryPage<T>(this.couchbaseConnection().cluster, query, params, options)\n );\n }\n\n /**\n * Find many model-scoped documents.\n */\n public async findMany<T>(args: ModelReadArgs = {}): Promise<T[]> {\n return this.withConnection(() => findManyRows<T>(this.readContext(), this.readArgs(args)));\n }\n\n /**\n * Find the first matching model-scoped document.\n */\n public async findOne<T>(args: ModelReadArgs = {}): Promise<T | null> {\n return this.withConnection(() => findOneRow<T>(this.readContext(), this.readArgs(args)));\n }\n\n /**\n * Check whether at least one model-scoped document matches.\n */\n public async exists(args: ModelReadArgs = {}): Promise<boolean> {\n return this.withConnection(() => rowsExist(this.readContext(), this.readArgs(args)));\n }\n\n /**\n * Count model-scoped documents.\n */\n public async count(args: ModelReadArgs = {}): Promise<number> {\n return this.withConnection(() => countRows(this.readContext(), this.readArgs(args)));\n }\n\n /**\n * Fetch a limit + 1 page of model-scoped documents.\n */\n public async page<T>(args: ModelReadArgs = {}): Promise<ModelPageResult<T>> {\n return this.withConnection(() => pageRows<T>(this.readContext(), this.readArgs(args)));\n }\n\n public withDeleted(): Model {\n return this.cloneWithDefaultWhereMode('withDeleted');\n }\n\n public onlyDeleted(): Model {\n return this.cloneWithDefaultWhereMode('onlyDeleted');\n }\n\n public withoutDefaultWhere(): Model {\n return this.cloneWithDefaultWhereMode('none');\n }\n\n /**\n * Insert a new document and fail if the id already exists.\n */\n public async insert<T>(data: T, options?: InsertWriteOptions): Promise<T & AutoModelFields> {\n return this.withConnection(() => insertDocument<T>(this.writeContext(), data, options));\n }\n\n /** @internal Prepare a transaction insert without issuing a normal SDK write. */\n public prepareInsert<T>(data: T): Promise<T & AutoModelFields> {\n return prepareInsertDocument<T>(this.writeContext(), data);\n }\n\n /**\n * Explicit insert-or-replace write.\n */\n public async upsert<T>(data: T, options?: UpsertWriteOptions): Promise<T & AutoModelFields> {\n return this.withConnection(() => upsertDocument<T>(this.writeContext(), data, options));\n }\n\n public async getById<T>(id: string, options?: GetOptions): Promise<T & AutoModelFields> {\n return this.withConnection(async () => {\n const data = await this.collection.get(id, options);\n return this.parse<T & AutoModelFields>(data.content);\n });\n }\n\n public async findDocById<T extends {id: string}>(\n id: string,\n options?: GetOptions\n ): Promise<Hydrated<T>> {\n const data = await this.getById<T>(id, options);\n\n return this.hydrate<T>(data);\n }\n\n /**\n * Find a document with SDK metadata.\n */\n public async findByIdWithMeta<T>(\n id: string,\n options?: GetOptions\n ): Promise<FindByIdWithMetaResult<T>> {\n return this.withConnection(() => findByIdWithMetaDoc<T>(this.writeContext(), id, options));\n }\n\n /** Ergonomic alias for findByIdWithMeta, intended for CAS workflows. */\n public async getWithCas<T>(\n id: string,\n options?: GetOptions\n ): Promise<FindByIdWithMetaResult<T>> {\n return this.findByIdWithMeta<T>(id, options);\n }\n\n /**\n * Explicit full-document replace.\n */\n public async replaceById<T>(\n id: string,\n data: T,\n options?: UpdateOptions\n ): Promise<T & AutoModelFields> {\n return this.withConnection(() =>\n replaceDocumentById<T>(this.writeContext(), id, data, options)\n );\n }\n\n /** @internal Prepare a transaction replace without issuing a normal SDK write. */\n public prepareReplace<T>(\n id: string,\n data: T,\n options?: UpdateOptions\n ): Promise<T & AutoModelFields> {\n return prepareReplacementDocument<T>(this.writeContext(), id, data, options);\n }\n\n /**\n * Replace only when the supplied CAS still describes the current document.\n * CouchSet deliberately performs one SDK operation and never re-reads/retries\n * with a new CAS, because doing so would defeat the caller's concurrency check.\n */\n public async replaceIfCas<T>(\n id: string,\n data: T,\n cas: any,\n options?: UpdateOptions\n ): Promise<T & AutoModelFields> {\n return this.replaceById<T>(id, data, {...(options || {}), cas});\n }\n\n /**\n * Remove a one-time document with exactly the CAS supplied by the caller.\n * Missing and CAS-mismatch cases are normal outcomes; transport and ambiguous\n * failures are rethrown so callers never mistake an unknown commit for success.\n */\n public async consumeOnce(id: string, cas: any): Promise<ConsumeOnceResult> {\n await this.prepare();\n\n try {\n await this.collection.remove(id, {cas});\n return {status: 'consumed'};\n } catch (error) {\n const name = (error as any)?.name || '';\n const message = (error as any)?.message || '';\n\n if (/DocumentNotFound|not found/i.test(`${name} ${message}`)) {\n return {status: 'missing'};\n }\n\n if (/CasMismatch|cas mismatch/i.test(`${name} ${message}`)) {\n return {status: 'conflict'};\n }\n\n throw error;\n }\n }\n\n /**\n * Partial document mutation using common patch operators.\n */\n public async patchById<T>(\n id: string,\n patch: PatchByIdArgs,\n options?: MutateInOptions\n ): Promise<T & AutoModelFields> {\n return this.withConnection(() =>\n patchDocumentById<T>(this.writeContext(), id, patch, options)\n );\n }\n\n /**\n * Couchbase subdocument mutation escape hatch.\n */\n public async mutateById(id: string, specs: any[], options?: MutateInOptions): Promise<any> {\n return this.withConnection(() =>\n mutateDocumentById(this.writeContext(), id, specs, options)\n );\n }\n\n /**\n * Atomic numeric field increment.\n */\n public async incrementById<T>(\n id: string,\n field: string,\n delta: number,\n options?: MutateInOptions\n ): Promise<T & AutoModelFields> {\n return this.withConnection(() =>\n incrementDocumentById<T>(this.writeContext(), id, field, delta, options)\n );\n }\n\n public async softDeleteById<T>(\n id: string,\n options?: MutateInOptions\n ): Promise<T & AutoModelFields> {\n return this.patchById<T>(id, {$set: {deleted: true, deletedAt: new Date()}}, options);\n }\n\n public async restoreById<T>(\n id: string,\n options?: MutateInOptions\n ): Promise<T & AutoModelFields> {\n return this.patchById<T>(id, {$unset: ['deleted', 'deletedAt']}, options);\n }\n\n public async deleteById<T>(\n id: string,\n options?: DeleteByIdOptions\n ): Promise<boolean | (T & AutoModelFields)> {\n const {hard = false, ...removeOptions} = options || {};\n\n if (hard || !this.softDelete) {\n return this.withConnection(async () => {\n await this.collection.remove(id, removeOptions);\n return true;\n });\n }\n\n return this.softDeleteById<T>(id);\n }\n\n public async findDocOne<T extends {id: string}>(\n args: ModelReadArgs = {}\n ): Promise<Hydrated<T> | null> {\n const data = await this.findOne<T>(args);\n\n return data ? this.hydrate<T>(data as T & AutoModelFields) : null;\n }\n\n public hydrate<T extends {id: string}>(data: T & AutoModelFields): Hydrated<T> {\n return hydrateDocument<T>(this as any, this.parse(data));\n }\n\n public parse<T>(data: T): T {\n const decoded = this.deserialize(data);\n const parsed = parseSchema(this.schema, decoded);\n const parsedDates = parseDateFields(parsed, this.dateFields);\n\n return this.parseHook ? this.parseHook(parsedDates) : parsedDates;\n }\n\n /** @internal Used by the typed client before a document reaches the SDK. */\n public serialize<T>(data: T): T {\n const result: any = {...(data as any)};\n\n Object.keys(this.codecs).forEach((path) => {\n const current = getPath(result, path);\n if (current !== undefined) {\n setPath(result, path, this.codecs[path].toDatabase(current));\n }\n });\n\n return result;\n }\n\n /** @internal Used by patch helpers and transaction-bound models. */\n public serializeField(path: string, value: any): any {\n return this.codecs[path] ? this.codecs[path].toDatabase(value) : value;\n }\n\n private deserialize<T>(data: T): T {\n const result: any = {...(data as any)};\n\n Object.keys(this.codecs).forEach((path) => {\n const current = getPath(result, path);\n if (current !== undefined) {\n setPath(result, path, this.codecs[path].fromDatabase(current));\n }\n });\n\n return result;\n }\n}\n\nconst getPath = (data: any, path: string): any =>\n path.split('.').reduce((value, key) => (value == null ? undefined : value[key]), data);\n\nconst setPath = (data: any, path: string, value: any): void => {\n const parts = path.split('.');\n const key = parts.pop() as string;\n const target = parts.reduce((current, part) => {\n const existing = current[part];\n if (Array.isArray(existing)) {\n current[part] = existing.slice();\n } else if (existing && typeof existing === 'object') {\n // serialize/parse start with a shallow root copy. Clone every branch\n // we traverse so dotted codecs never mutate caller or SDK content.\n current[part] = {...existing};\n } else {\n current[part] = {};\n }\n return current[part];\n }, data);\n target[key] = value;\n};\n\nexport default Model;\n"]}
@@ -0,0 +1,18 @@
1
+ import type { Cluster } from 'couchbase';
2
+ import { LogicalWhereExpr, SortType } from '../query/interface/query.types';
3
+ export type IndexField = string | Record<string, SortType>;
4
+ export interface ModelIndexDefinition {
5
+ name: string;
6
+ /** Logical predecessor for an explicit, safe replacement rollout. */
7
+ replaces?: string;
8
+ fields?: IndexField[];
9
+ where?: LogicalWhereExpr;
10
+ deferred?: boolean;
11
+ numReplica?: number;
12
+ primary?: boolean;
13
+ }
14
+ export interface EnsureIndexOptions {
15
+ deferred?: boolean;
16
+ }
17
+ export declare const buildIndexQuery: (keyspace: string, index: ModelIndexDefinition, options?: EnsureIndexOptions) => string;
18
+ export declare const ensureModelIndexes: (cluster: Cluster, keyspace: string, indexes?: ModelIndexDefinition[], options?: EnsureIndexOptions) => Promise<string[]>;
@@ -0,0 +1,155 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
13
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ var __read = (this && this.__read) || function (o, n) {
39
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
40
+ if (!m) return o;
41
+ var i = m.call(o), r, ar = [], e;
42
+ try {
43
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
44
+ }
45
+ catch (error) { e = { error: error }; }
46
+ finally {
47
+ try {
48
+ if (r && !r.done && (m = i["return"])) m.call(i);
49
+ }
50
+ finally { if (e) throw e.error; }
51
+ }
52
+ return ar;
53
+ };
54
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
55
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
56
+ if (ar || !(i in from)) {
57
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
58
+ ar[i] = from[i];
59
+ }
60
+ }
61
+ return to.concat(ar || Array.prototype.slice.call(from));
62
+ };
63
+ var __values = (this && this.__values) || function(o) {
64
+ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
65
+ if (m) return m.call(o);
66
+ if (o && typeof o.length === "number") return {
67
+ next: function () {
68
+ if (o && i >= o.length) o = void 0;
69
+ return { value: o && o[i++], done: !o };
70
+ }
71
+ };
72
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
73
+ };
74
+ Object.defineProperty(exports, "__esModule", { value: true });
75
+ exports.ensureModelIndexes = exports.buildIndexQuery = void 0;
76
+ var builders_1 = require("../query/helpers/builders");
77
+ var utils_1 = require("../query/utils");
78
+ var indexName = function (name) { return "`".concat(name.replace(/`/g, '``'), "`"); };
79
+ var buildIndexField = function (field) {
80
+ if (typeof field === 'string') {
81
+ return (0, utils_1.escapeReservedWords)(field);
82
+ }
83
+ var key = Object.keys(field)[0];
84
+ return "".concat((0, utils_1.escapeReservedWords)(key), " ").concat(field[key]);
85
+ };
86
+ var buildWithExpr = function (index, options) {
87
+ var _a;
88
+ var deferred = (_a = options === null || options === void 0 ? void 0 : options.deferred) !== null && _a !== void 0 ? _a : index.deferred;
89
+ var withOptions = [];
90
+ if (deferred) {
91
+ withOptions.push('"defer_build": true');
92
+ }
93
+ if (typeof index.numReplica === 'number') {
94
+ withOptions.push("\"num_replica\": ".concat(index.numReplica));
95
+ }
96
+ return withOptions.length ? " WITH {".concat(withOptions.join(','), "}") : '';
97
+ };
98
+ var buildIndexQuery = function (keyspace, index, options) {
99
+ if (index.primary) {
100
+ return "CREATE PRIMARY INDEX IF NOT EXISTS ".concat(indexName(index.name), " ON ").concat(keyspace).concat(buildWithExpr(index, options));
101
+ }
102
+ if (!index.fields || !index.fields.length) {
103
+ throw new Error("index ".concat(index.name, " requires at least one field"));
104
+ }
105
+ return "CREATE INDEX IF NOT EXISTS ".concat(indexName(index.name), " ON ").concat(keyspace, "(").concat(index.fields
106
+ .map(buildIndexField)
107
+ .join(','), ")").concat((0, builders_1.buildWhereExpr)(index.where)).concat(buildWithExpr(index, options));
108
+ };
109
+ exports.buildIndexQuery = buildIndexQuery;
110
+ var ensureModelIndexes = function (cluster_1, keyspace_1) {
111
+ var args_1 = [];
112
+ for (var _i = 2; _i < arguments.length; _i++) {
113
+ args_1[_i - 2] = arguments[_i];
114
+ }
115
+ return __awaiter(void 0, __spreadArray([cluster_1, keyspace_1], __read(args_1), false), void 0, function (cluster, keyspace, indexes, options) {
116
+ var queries, queries_1, queries_1_1, query, e_1_1;
117
+ var e_1, _a;
118
+ if (indexes === void 0) { indexes = []; }
119
+ return __generator(this, function (_b) {
120
+ switch (_b.label) {
121
+ case 0:
122
+ queries = indexes.map(function (index) { return (0, exports.buildIndexQuery)(keyspace, index, options); });
123
+ _b.label = 1;
124
+ case 1:
125
+ _b.trys.push([1, 6, 7, 8]);
126
+ queries_1 = __values(queries), queries_1_1 = queries_1.next();
127
+ _b.label = 2;
128
+ case 2:
129
+ if (!!queries_1_1.done) return [3 /*break*/, 5];
130
+ query = queries_1_1.value;
131
+ return [4 /*yield*/, cluster.query(query)];
132
+ case 3:
133
+ _b.sent();
134
+ _b.label = 4;
135
+ case 4:
136
+ queries_1_1 = queries_1.next();
137
+ return [3 /*break*/, 2];
138
+ case 5: return [3 /*break*/, 8];
139
+ case 6:
140
+ e_1_1 = _b.sent();
141
+ e_1 = { error: e_1_1 };
142
+ return [3 /*break*/, 8];
143
+ case 7:
144
+ try {
145
+ if (queries_1_1 && !queries_1_1.done && (_a = queries_1.return)) _a.call(queries_1);
146
+ }
147
+ finally { if (e_1) throw e_1.error; }
148
+ return [7 /*endfinally*/];
149
+ case 8: return [2 /*return*/, queries];
150
+ }
151
+ });
152
+ });
153
+ };
154
+ exports.ensureModelIndexes = ensureModelIndexes;
155
+ //# sourceMappingURL=indexes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indexes.js","sourceRoot":"","sources":["../../src/model/indexes.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,sDAAyD;AAEzD,wCAAmD;AAmBnD,IAAM,SAAS,GAAG,UAAC,IAAY,IAAa,OAAA,WAAK,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,MAAI,EAAjC,CAAiC,CAAC;AAE9E,IAAM,eAAe,GAAG,UAAC,KAAiB;IACtC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,IAAA,2BAAmB,EAAC,KAAK,CAAC,CAAC;IACtC,CAAC;IAED,IAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAElC,OAAO,UAAG,IAAA,2BAAmB,EAAC,GAAG,CAAC,cAAI,KAAK,CAAC,GAAG,CAAC,CAAE,CAAC;AACvD,CAAC,CAAC;AAEF,IAAM,aAAa,GAAG,UAAC,KAA2B,EAAE,OAA4B;;IAC5E,IAAM,QAAQ,GAAG,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,QAAQ,mCAAI,KAAK,CAAC,QAAQ,CAAC;IACrD,IAAM,WAAW,GAAa,EAAE,CAAC;IAEjC,IAAI,QAAQ,EAAE,CAAC;QACX,WAAW,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IAC5C,CAAC;IAED,IAAI,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ,EAAE,CAAC;QACvC,WAAW,CAAC,IAAI,CAAC,2BAAkB,KAAK,CAAC,UAAU,CAAE,CAAC,CAAC;IAC3D,CAAC;IAED,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,iBAAU,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,MAAG,CAAC,CAAC,CAAC,EAAE,CAAC;AACxE,CAAC,CAAC;AAEK,IAAM,eAAe,GAAG,UAC3B,QAAgB,EAChB,KAA2B,EAC3B,OAA4B;IAE5B,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAChB,OAAO,6CAAsC,SAAS,CAClD,KAAK,CAAC,IAAI,CACb,iBAAO,QAAQ,SAAG,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,CAAE,CAAC;IACvD,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACxC,MAAM,IAAI,KAAK,CAAC,gBAAS,KAAK,CAAC,IAAI,iCAA8B,CAAC,CAAC;IACvE,CAAC;IAED,OAAO,qCAA8B,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAO,QAAQ,cAAI,KAAK,CAAC,MAAM;SACpF,GAAG,CAAC,eAAe,CAAC;SACpB,IAAI,CAAC,GAAG,CAAC,cAAI,IAAA,yBAAc,EAAC,KAAK,CAAC,KAAK,CAAC,SAAG,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,CAAE,CAAC;AACpF,CAAC,CAAC;AAlBW,QAAA,eAAe,mBAkB1B;AAEK,IAAM,kBAAkB,GAAG;;;;;8GAC9B,OAAgB,EAChB,QAAgB,EAChB,OAAoC,EACpC,OAA4B;;;QAD5B,wBAAA,EAAA,YAAoC;;;;oBAG9B,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,UAAC,KAAK,IAAK,OAAA,IAAA,uBAAe,EAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC,EAAzC,CAAyC,CAAC,CAAC;;;;oBAE9D,YAAA,SAAA,OAAO,CAAA;;;;oBAAhB,KAAK;oBACZ,qBAAM,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAA;;oBAA1B,SAA0B,CAAC;;;;;;;;;;;;;;;;wBAG/B,sBAAO,OAAO,EAAC;;;;CAClB,CAAC;AAbW,QAAA,kBAAkB,sBAa7B","sourcesContent":["import type {Cluster} from 'couchbase';\n\nimport {buildWhereExpr} from '../query/helpers/builders';\nimport {LogicalWhereExpr, SortType} from '../query/interface/query.types';\nimport {escapeReservedWords} from '../query/utils';\n\nexport type IndexField = string | Record<string, SortType>;\n\nexport interface ModelIndexDefinition {\n name: string;\n /** Logical predecessor for an explicit, safe replacement rollout. */\n replaces?: string;\n fields?: IndexField[];\n where?: LogicalWhereExpr;\n deferred?: boolean;\n numReplica?: number;\n primary?: boolean;\n}\n\nexport interface EnsureIndexOptions {\n deferred?: boolean;\n}\n\nconst indexName = (name: string): string => `\\`${name.replace(/`/g, '``')}\\``;\n\nconst buildIndexField = (field: IndexField): string => {\n if (typeof field === 'string') {\n return escapeReservedWords(field);\n }\n\n const key = Object.keys(field)[0];\n\n return `${escapeReservedWords(key)} ${field[key]}`;\n};\n\nconst buildWithExpr = (index: ModelIndexDefinition, options?: EnsureIndexOptions): string => {\n const deferred = options?.deferred ?? index.deferred;\n const withOptions: string[] = [];\n\n if (deferred) {\n withOptions.push('\"defer_build\": true');\n }\n\n if (typeof index.numReplica === 'number') {\n withOptions.push(`\"num_replica\": ${index.numReplica}`);\n }\n\n return withOptions.length ? ` WITH {${withOptions.join(',')}}` : '';\n};\n\nexport const buildIndexQuery = (\n keyspace: string,\n index: ModelIndexDefinition,\n options?: EnsureIndexOptions\n): string => {\n if (index.primary) {\n return `CREATE PRIMARY INDEX IF NOT EXISTS ${indexName(\n index.name\n )} ON ${keyspace}${buildWithExpr(index, options)}`;\n }\n\n if (!index.fields || !index.fields.length) {\n throw new Error(`index ${index.name} requires at least one field`);\n }\n\n return `CREATE INDEX IF NOT EXISTS ${indexName(index.name)} ON ${keyspace}(${index.fields\n .map(buildIndexField)\n .join(',')})${buildWhereExpr(index.where)}${buildWithExpr(index, options)}`;\n};\n\nexport const ensureModelIndexes = async (\n cluster: Cluster,\n keyspace: string,\n indexes: ModelIndexDefinition[] = [],\n options?: EnsureIndexOptions\n): Promise<string[]> => {\n const queries = indexes.map((index) => buildIndexQuery(keyspace, index, options));\n\n for (const query of queries) {\n await cluster.query(query);\n }\n\n return queries;\n};\n"]}
@@ -0,0 +1,9 @@
1
+ export interface ModelKeyspaceTarget {
2
+ bucketName: string;
3
+ scopeName?: string;
4
+ collectionName?: string;
5
+ }
6
+ export declare const escapeIdentifier: (identifier: string) => string;
7
+ export declare const bucketIdentifier: (bucketName: string) => string;
8
+ export declare const keyspaceIdentifier: ({ bucketName, scopeName, collectionName, }: ModelKeyspaceTarget) => string;
9
+ export declare const fromTarget: (keyspace: string, alias?: string) => string;
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.fromTarget = exports.keyspaceIdentifier = exports.bucketIdentifier = exports.escapeIdentifier = void 0;
4
+ var escapeIdentifier = function (identifier) {
5
+ return "`".concat(identifier.replace(/`/g, '``'), "`");
6
+ };
7
+ exports.escapeIdentifier = escapeIdentifier;
8
+ var safeAlias = function (alias) {
9
+ return /^[A-Za-z_][A-Za-z0-9_]*$/.test(alias) ? alias : (0, exports.escapeIdentifier)(alias);
10
+ };
11
+ var bucketIdentifier = function (bucketName) { return (0, exports.escapeIdentifier)(bucketName); };
12
+ exports.bucketIdentifier = bucketIdentifier;
13
+ var keyspaceIdentifier = function (_a) {
14
+ var bucketName = _a.bucketName, scopeName = _a.scopeName, collectionName = _a.collectionName;
15
+ if (!scopeName && !collectionName) {
16
+ return (0, exports.bucketIdentifier)(bucketName);
17
+ }
18
+ return "default:".concat((0, exports.bucketIdentifier)(bucketName), ".").concat((0, exports.escapeIdentifier)(scopeName || '_default'), ".").concat((0, exports.escapeIdentifier)(collectionName || '_default'));
19
+ };
20
+ exports.keyspaceIdentifier = keyspaceIdentifier;
21
+ var fromTarget = function (keyspace, alias) {
22
+ if (!alias) {
23
+ return keyspace;
24
+ }
25
+ return "".concat(keyspace, " AS ").concat(safeAlias(alias));
26
+ };
27
+ exports.fromTarget = fromTarget;
28
+ //# sourceMappingURL=keyspace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keyspace.js","sourceRoot":"","sources":["../../src/model/keyspace.ts"],"names":[],"mappings":";;;AAMO,IAAM,gBAAgB,GAAG,UAAC,UAAkB;IAC/C,OAAA,WAAK,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,MAAI;AAAvC,CAAuC,CAAC;AAD/B,QAAA,gBAAgB,oBACe;AAE5C,IAAM,SAAS,GAAG,UAAC,KAAa;IAC5B,OAAO,0BAA0B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAA,wBAAgB,EAAC,KAAK,CAAC,CAAC;AACpF,CAAC,CAAC;AAEK,IAAM,gBAAgB,GAAG,UAAC,UAAkB,IAAa,OAAA,IAAA,wBAAgB,EAAC,UAAU,CAAC,EAA5B,CAA4B,CAAC;AAAhF,QAAA,gBAAgB,oBAAgE;AAEtF,IAAM,kBAAkB,GAAG,UAAC,EAIb;QAHlB,UAAU,gBAAA,EACV,SAAS,eAAA,EACT,cAAc,oBAAA;IAEd,IAAI,CAAC,SAAS,IAAI,CAAC,cAAc,EAAE,CAAC;QAChC,OAAO,IAAA,wBAAgB,EAAC,UAAU,CAAC,CAAC;IACxC,CAAC;IAED,OAAO,kBAAW,IAAA,wBAAgB,EAAC,UAAU,CAAC,cAAI,IAAA,wBAAgB,EAC9D,SAAS,IAAI,UAAU,CAC1B,cAAI,IAAA,wBAAgB,EAAC,cAAc,IAAI,UAAU,CAAC,CAAE,CAAC;AAC1D,CAAC,CAAC;AAZW,QAAA,kBAAkB,sBAY7B;AAEK,IAAM,UAAU,GAAG,UAAC,QAAgB,EAAE,KAAc;IACvD,IAAI,CAAC,KAAK,EAAE,CAAC;QACT,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED,OAAO,UAAG,QAAQ,iBAAO,SAAS,CAAC,KAAK,CAAC,CAAE,CAAC;AAChD,CAAC,CAAC;AANW,QAAA,UAAU,cAMrB","sourcesContent":["export interface ModelKeyspaceTarget {\n bucketName: string;\n scopeName?: string;\n collectionName?: string;\n}\n\nexport const escapeIdentifier = (identifier: string): string =>\n `\\`${identifier.replace(/`/g, '``')}\\``;\n\nconst safeAlias = (alias: string): string => {\n return /^[A-Za-z_][A-Za-z0-9_]*$/.test(alias) ? alias : escapeIdentifier(alias);\n};\n\nexport const bucketIdentifier = (bucketName: string): string => escapeIdentifier(bucketName);\n\nexport const keyspaceIdentifier = ({\n bucketName,\n scopeName,\n collectionName,\n}: ModelKeyspaceTarget): string => {\n if (!scopeName && !collectionName) {\n return bucketIdentifier(bucketName);\n }\n\n return `default:${bucketIdentifier(bucketName)}.${escapeIdentifier(\n scopeName || '_default'\n )}.${escapeIdentifier(collectionName || '_default')}`;\n};\n\nexport const fromTarget = (keyspace: string, alias?: string): string => {\n if (!alias) {\n return keyspace;\n }\n\n return `${keyspace} AS ${safeAlias(alias)}`;\n};\n"]}
@@ -0,0 +1,36 @@
1
+ import type { Cluster } from 'couchbase';
2
+ import { IncludeDefinition } from './include';
3
+ export interface ModelReadArgs {
4
+ select?: any[] | string;
5
+ where?: any;
6
+ orderBy?: any;
7
+ limit?: number;
8
+ page?: number;
9
+ offset?: number;
10
+ throwOnError?: boolean;
11
+ include?: IncludeDefinition[];
12
+ }
13
+ export interface ModelPageInfo {
14
+ limit: number;
15
+ page: number;
16
+ offset: number;
17
+ nextPage: number | null;
18
+ nextOffset: number | null;
19
+ }
20
+ export interface ModelPageResult<T> {
21
+ items: T[];
22
+ hasNext: boolean;
23
+ pageInfo: ModelPageInfo;
24
+ }
25
+ export interface ModelReadContext {
26
+ bucketName: string;
27
+ collectionName: string;
28
+ cluster: Cluster;
29
+ parse: <T>(data: T) => T;
30
+ resultKey?: string;
31
+ }
32
+ export declare const findMany: <T>(context: ModelReadContext, args?: ModelReadArgs) => Promise<T[]>;
33
+ export declare const findOne: <T>(context: ModelReadContext, args?: ModelReadArgs) => Promise<T | null>;
34
+ export declare const exists: (context: ModelReadContext, args?: ModelReadArgs) => Promise<boolean>;
35
+ export declare const count: (context: ModelReadContext, args?: ModelReadArgs) => Promise<number>;
36
+ export declare const page: <T>(context: ModelReadContext, args?: ModelReadArgs) => Promise<ModelPageResult<T>>;