couchset 0.3.0 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +41 -0
- package/README.md +9 -0
- package/dist/connection/connection.js +17 -7
- package/dist/connection/connection.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/model/index.d.ts +56 -2
- package/dist/model/index.js +138 -9
- package/dist/model/index.js.map +1 -1
- package/dist/model/indexes.d.ts +2 -0
- package/dist/model/indexes.js.map +1 -1
- package/dist/model/write-helpers.d.ts +8 -0
- package/dist/model/write-helpers.js +47 -22
- package/dist/model/write-helpers.js.map +1 -1
- package/dist/next.d.ts +204 -0
- package/dist/next.js +1190 -0
- package/dist/next.js.map +1 -0
- package/dist/next.types.d.ts +1 -0
- package/dist/next.types.js +38 -0
- package/dist/next.types.js.map +1 -0
- package/docs/document-modeling.md +133 -0
- package/docs/next-primitives.md +81 -0
- package/next/index.d.ts +2 -0
- package/next/package.json +2 -2
- package/package.json +49 -4
package/dist/model/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/model/index.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n Collection,\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 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\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 indexes?: ModelIndexDefinition[];\n}\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 indexes: ModelIndexDefinition[] = [];\n schema: Record<string, SchemaTypes> = {\n createdAt: 'date',\n updatedAt: 'date',\n };\n\n constructor(name: string, options?: ModalOptions) {\n // this.collection = CouchbaseConnection.Instance.getCollection();\n this.collectionName = name;\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.indexes = options.indexes || [];\n this.schema = {\n ...((options && options.schema) || {}),\n ...schemaFromDateFields(options.dateFields),\n createdAt: 'date',\n updatedAt: 'date',\n };\n }\n\n if (this.indexes.length) {\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 (CouchbaseConnection.Instance.isConnected()) {\n const target = this.collectionTarget();\n this.collection = CouchbaseConnection.Instance.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 = CouchbaseConnection.Instance?.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(): 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 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 validateCreate: this.validateCreateHook,\n validateReplace: this.validateReplaceHook,\n };\n }\n\n private cloneWithDefaultWhereMode(mode: DefaultWhereMode): Model {\n const options: ModalOptions = {\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);\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 /**\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 /**\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 /**\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 parsed = parseSchema(this.schema, data);\n const parsedDates = parseDateFields(parsed, this.dateFields);\n\n return this.parseHook ? this.parseHook(parsedDates) : parsedDates;\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"]}
|
package/dist/model/indexes.d.ts
CHANGED
|
@@ -3,6 +3,8 @@ import { LogicalWhereExpr, SortType } from '../query/interface/query.types';
|
|
|
3
3
|
export type IndexField = string | Record<string, SortType>;
|
|
4
4
|
export interface ModelIndexDefinition {
|
|
5
5
|
name: string;
|
|
6
|
+
/** Logical predecessor for an explicit, safe replacement rollout. */
|
|
7
|
+
replaces?: string;
|
|
6
8
|
fields?: IndexField[];
|
|
7
9
|
where?: LogicalWhereExpr;
|
|
8
10
|
deferred?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"indexes.js","sourceRoot":"","sources":["../../src/model/indexes.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,sDAAyD;AAEzD,wCAAmD;
|
|
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"]}
|
|
@@ -7,6 +7,8 @@ export interface ModelWriteContext {
|
|
|
7
7
|
collectionName: string;
|
|
8
8
|
scope: string;
|
|
9
9
|
parse: <T>(data: T) => T;
|
|
10
|
+
serialize?: <T>(data: T) => T;
|
|
11
|
+
serializeField?: (path: string, value: any) => any;
|
|
10
12
|
validateCreate?: ValidationHook;
|
|
11
13
|
validateReplace?: ValidationHook;
|
|
12
14
|
}
|
|
@@ -22,6 +24,12 @@ export interface FindByIdWithMetaResult<T> {
|
|
|
22
24
|
}
|
|
23
25
|
export type InsertWriteOptions = InsertOptions & TtlOptions;
|
|
24
26
|
export type UpsertWriteOptions = UpsertOptions & TtlOptions;
|
|
27
|
+
export declare const modelDocument: <T>(context: ModelWriteContext, data: T, createdAt?: Date) => T & AutoModelFields;
|
|
28
|
+
export declare const replacementDocument: <T>(context: ModelWriteContext, id: string, data: T, options?: UpdateOptions) => T & AutoModelFields;
|
|
29
|
+
/** Prepare an insert using the same metadata, validation, and codec pipeline as Model.insert. */
|
|
30
|
+
export declare const prepareInsertDocument: <T>(context: ModelWriteContext, data: T) => Promise<T & AutoModelFields>;
|
|
31
|
+
/** Prepare a replace using the same metadata, validation, and codec pipeline as Model.replaceById. */
|
|
32
|
+
export declare const prepareReplacementDocument: <T>(context: ModelWriteContext, id: string, data: T, options?: UpdateOptions) => Promise<T & AutoModelFields>;
|
|
25
33
|
export declare const insert: <T>(context: ModelWriteContext, data: T, options?: InsertWriteOptions) => Promise<T & AutoModelFields>;
|
|
26
34
|
export declare const upsert: <T>(context: ModelWriteContext, data: T, options?: UpsertWriteOptions) => Promise<T & AutoModelFields>;
|
|
27
35
|
export declare const replaceById: <T>(context: ModelWriteContext, id: string, data: T, options?: UpdateOptions) => Promise<T & AutoModelFields>;
|
|
@@ -86,7 +86,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
86
86
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
87
87
|
};
|
|
88
88
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
89
|
-
exports.findByIdWithMeta = exports.incrementById = exports.patchById = exports.mutateById = exports.replaceById = exports.upsert = exports.insert = void 0;
|
|
89
|
+
exports.findByIdWithMeta = exports.incrementById = exports.patchById = exports.mutateById = exports.replaceById = exports.upsert = exports.insert = exports.prepareReplacementDocument = exports.prepareInsertDocument = exports.replacementDocument = exports.modelDocument = void 0;
|
|
90
90
|
var couchbase_1 = __importDefault(require("../couchbase"));
|
|
91
91
|
var uuid_1 = require("../uuid");
|
|
92
92
|
var ttl_1 = require("./ttl");
|
|
@@ -97,6 +97,7 @@ var modelDocument = function (context, data, createdAt) {
|
|
|
97
97
|
var timestamp = now();
|
|
98
98
|
return __assign(__assign({ id: id }, data), { createdAt: createdAt || timestamp, updatedAt: timestamp, _type: context.collectionName, _scope: context.scope });
|
|
99
99
|
};
|
|
100
|
+
exports.modelDocument = modelDocument;
|
|
100
101
|
var replacementDocument = function (context, id, data, options) {
|
|
101
102
|
var document = __assign(__assign({}, data), { id: id, _type: context.collectionName, _scope: context.scope });
|
|
102
103
|
if (!options || !options.silent) {
|
|
@@ -104,60 +105,82 @@ var replacementDocument = function (context, id, data, options) {
|
|
|
104
105
|
}
|
|
105
106
|
return document;
|
|
106
107
|
};
|
|
108
|
+
exports.replacementDocument = replacementDocument;
|
|
107
109
|
var unsetPaths = function (value) {
|
|
108
110
|
if (!value) {
|
|
109
111
|
return [];
|
|
110
112
|
}
|
|
111
113
|
return Array.isArray(value) ? value : Object.keys(value);
|
|
112
114
|
};
|
|
113
|
-
|
|
114
|
-
|
|
115
|
+
/** Prepare an insert using the same metadata, validation, and codec pipeline as Model.insert. */
|
|
116
|
+
var prepareInsertDocument = function (context, data) { return __awaiter(void 0, void 0, void 0, function () {
|
|
117
|
+
var validated;
|
|
115
118
|
return __generator(this, function (_a) {
|
|
116
119
|
switch (_a.label) {
|
|
117
|
-
case 0:
|
|
118
|
-
|
|
119
|
-
|
|
120
|
+
case 0: return [4 /*yield*/, (0, validation_1.applyValidation)((0, exports.modelDocument)(context, data), context.validateCreate)];
|
|
121
|
+
case 1:
|
|
122
|
+
validated = _a.sent();
|
|
123
|
+
return [2 /*return*/, context.serialize ? context.serialize(validated) : validated];
|
|
124
|
+
}
|
|
125
|
+
});
|
|
126
|
+
}); };
|
|
127
|
+
exports.prepareInsertDocument = prepareInsertDocument;
|
|
128
|
+
/** Prepare a replace using the same metadata, validation, and codec pipeline as Model.replaceById. */
|
|
129
|
+
var prepareReplacementDocument = function (context, id, data, options) { return __awaiter(void 0, void 0, void 0, function () {
|
|
130
|
+
var validated;
|
|
131
|
+
return __generator(this, function (_a) {
|
|
132
|
+
switch (_a.label) {
|
|
133
|
+
case 0: return [4 /*yield*/, (0, validation_1.applyValidation)((0, exports.replacementDocument)(context, id, data, options), context.validateReplace)];
|
|
120
134
|
case 1:
|
|
121
135
|
validated = _a.sent();
|
|
122
|
-
return [
|
|
136
|
+
return [2 /*return*/, context.serialize ? context.serialize(validated) : validated];
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
}); };
|
|
140
|
+
exports.prepareReplacementDocument = prepareReplacementDocument;
|
|
141
|
+
var insert = function (context, data, options) { return __awaiter(void 0, void 0, void 0, function () {
|
|
142
|
+
var stored;
|
|
143
|
+
return __generator(this, function (_a) {
|
|
144
|
+
switch (_a.label) {
|
|
145
|
+
case 0: return [4 /*yield*/, (0, exports.prepareInsertDocument)(context, data)];
|
|
146
|
+
case 1:
|
|
147
|
+
stored = _a.sent();
|
|
148
|
+
return [4 /*yield*/, context.collection.insert(stored.id, stored, (0, ttl_1.applyTtlOptions)(options))];
|
|
123
149
|
case 2:
|
|
124
150
|
_a.sent();
|
|
125
|
-
return [2 /*return*/, context.parse(
|
|
151
|
+
return [2 /*return*/, context.parse(stored)];
|
|
126
152
|
}
|
|
127
153
|
});
|
|
128
154
|
}); };
|
|
129
155
|
exports.insert = insert;
|
|
130
156
|
var upsert = function (context, data, options) { return __awaiter(void 0, void 0, void 0, function () {
|
|
131
|
-
var
|
|
157
|
+
var stored;
|
|
132
158
|
return __generator(this, function (_a) {
|
|
133
159
|
switch (_a.label) {
|
|
134
|
-
case 0:
|
|
135
|
-
document = modelDocument(context, data);
|
|
136
|
-
return [4 /*yield*/, (0, validation_1.applyValidation)(document, context.validateCreate)];
|
|
160
|
+
case 0: return [4 /*yield*/, (0, exports.prepareInsertDocument)(context, data)];
|
|
137
161
|
case 1:
|
|
138
|
-
|
|
139
|
-
return [4 /*yield*/, context.collection.upsert(
|
|
162
|
+
stored = _a.sent();
|
|
163
|
+
return [4 /*yield*/, context.collection.upsert(stored.id, stored, (0, ttl_1.applyTtlOptions)(options))];
|
|
140
164
|
case 2:
|
|
141
165
|
_a.sent();
|
|
142
|
-
return [2 /*return*/, context.parse(
|
|
166
|
+
return [2 /*return*/, context.parse(stored)];
|
|
143
167
|
}
|
|
144
168
|
});
|
|
145
169
|
}); };
|
|
146
170
|
exports.upsert = upsert;
|
|
147
171
|
var replaceById = function (context, id, data, options) { return __awaiter(void 0, void 0, void 0, function () {
|
|
148
|
-
var _a, silent, replaceOptions,
|
|
172
|
+
var _a, silent, replaceOptions, stored;
|
|
149
173
|
return __generator(this, function (_b) {
|
|
150
174
|
switch (_b.label) {
|
|
151
175
|
case 0:
|
|
152
176
|
_a = options || {}, silent = _a.silent, replaceOptions = __rest(_a, ["silent"]);
|
|
153
|
-
|
|
154
|
-
return [4 /*yield*/, (0, validation_1.applyValidation)(document, context.validateReplace)];
|
|
177
|
+
return [4 /*yield*/, (0, exports.prepareReplacementDocument)(context, id, data, { silent: silent })];
|
|
155
178
|
case 1:
|
|
156
|
-
|
|
157
|
-
return [4 /*yield*/, context.collection.replace(id,
|
|
179
|
+
stored = _b.sent();
|
|
180
|
+
return [4 /*yield*/, context.collection.replace(id, stored, replaceOptions)];
|
|
158
181
|
case 2:
|
|
159
182
|
_b.sent();
|
|
160
|
-
return [2 /*return*/, context.parse(
|
|
183
|
+
return [2 /*return*/, context.parse(stored)];
|
|
161
184
|
}
|
|
162
185
|
});
|
|
163
186
|
}); };
|
|
@@ -177,7 +200,9 @@ var patchById = function (context, id, patch, options) { return __awaiter(void 0
|
|
|
177
200
|
switch (_a.label) {
|
|
178
201
|
case 0:
|
|
179
202
|
specs = __spreadArray(__spreadArray(__spreadArray(__spreadArray([], __read(Object.keys(patch.$set || {}).map(function (path) {
|
|
180
|
-
return couchbase_1.default.MutateInSpec.upsert(path,
|
|
203
|
+
return couchbase_1.default.MutateInSpec.upsert(path, context.serializeField
|
|
204
|
+
? context.serializeField(path, patch.$set[path])
|
|
205
|
+
: patch.$set[path]);
|
|
181
206
|
})), false), __read(unsetPaths(patch.$unset).map(function (path) { return couchbase_1.default.MutateInSpec.remove(path); })), false), __read(Object.keys(patch.$inc || {}).map(function (path) {
|
|
182
207
|
return couchbase_1.default.MutateInSpec.increment(path, patch.$inc[path]);
|
|
183
208
|
})), false), [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"write-helpers.js","sourceRoot":"","sources":["../../src/model/write-helpers.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n Collection,\n GetOptions,\n InsertOptions,\n MutateInOptions,\n ReplaceOptions,\n UpsertOptions,\n} from 'couchbase';\n\nimport couchbase from '../couchbase';\nimport {generateUUID} from '../uuid';\n\nimport {applyTtlOptions, TtlOptions} from './ttl';\nimport {applyValidation, ValidationHook} from './validation';\n\nimport type {AutoModelFields, UpdateOptions} from './index';\n\nexport interface ModelWriteContext {\n collection: Collection;\n collectionName: string;\n scope: string;\n parse: <T>(data: T) => T;\n validateCreate?: ValidationHook;\n validateReplace?: ValidationHook;\n}\n\nexport interface PatchByIdArgs {\n $set?: Record<string, any>;\n $unset?: string[] | Record<string, any>;\n $inc?: Record<string, number>;\n}\n\nexport interface FindByIdWithMetaResult<T> {\n content: T & AutoModelFields;\n cas: any;\n expiryTime?: any;\n}\n\nexport type InsertWriteOptions = InsertOptions & TtlOptions;\nexport type UpsertWriteOptions = UpsertOptions & TtlOptions;\n\nconst now = (): Date => new Date();\n\nconst modelDocument = <T>(\n context: ModelWriteContext,\n data: T,\n createdAt?: Date\n): T & AutoModelFields => {\n const id = generateUUID();\n const timestamp = now();\n\n return {\n id,\n ...data,\n createdAt: createdAt || timestamp,\n updatedAt: timestamp,\n _type: context.collectionName,\n _scope: context.scope,\n } as T & AutoModelFields;\n};\n\nconst replacementDocument = <T>(\n context: ModelWriteContext,\n id: string,\n data: T,\n options?: UpdateOptions\n): T & AutoModelFields => {\n const document: any = {\n ...data,\n id,\n _type: context.collectionName,\n _scope: context.scope,\n };\n\n if (!options || !options.silent) {\n document.updatedAt = now();\n }\n\n return document;\n};\n\nconst unsetPaths = (value?: string[] | Record<string, any>): string[] => {\n if (!value) {\n return [];\n }\n\n return Array.isArray(value) ? value : Object.keys(value);\n};\n\nexport const insert = async <T>(\n context: ModelWriteContext,\n data: T,\n options?: InsertWriteOptions\n): Promise<T & AutoModelFields> => {\n const document = modelDocument<T>(context, data);\n const validated = await applyValidation(document, context.validateCreate);\n\n await context.collection.insert(validated.id, validated, applyTtlOptions(options));\n\n return context.parse<T & AutoModelFields>(validated);\n};\n\nexport const upsert = async <T>(\n context: ModelWriteContext,\n data: T,\n options?: UpsertWriteOptions\n): Promise<T & AutoModelFields> => {\n const document = modelDocument<T>(context, data);\n const validated = await applyValidation(document, context.validateCreate);\n\n await context.collection.upsert(validated.id, validated, applyTtlOptions(options));\n\n return context.parse<T & AutoModelFields>(validated);\n};\n\nexport const replaceById = async <T>(\n context: ModelWriteContext,\n id: string,\n data: T,\n options?: UpdateOptions\n): Promise<T & AutoModelFields> => {\n const {silent, ...replaceOptions} = options || {};\n const document = replacementDocument<T>(context, id, data, {silent});\n const validated = await applyValidation(document, context.validateReplace);\n\n await context.collection.replace(id, validated, replaceOptions as ReplaceOptions);\n\n return context.parse<T & AutoModelFields>(validated);\n};\n\nexport const mutateById = async (\n context: ModelWriteContext,\n id: string,\n specs: any[],\n options?: MutateInOptions\n): Promise<any> => {\n if (!Array.isArray(specs) || !specs.length) {\n throw new Error('mutateById requires at least one mutation spec');\n }\n\n return context.collection.mutateIn(id, specs, options);\n};\n\nexport const patchById = async <T>(\n context: ModelWriteContext,\n id: string,\n patch: PatchByIdArgs,\n options?: MutateInOptions\n): Promise<T & AutoModelFields> => {\n const specs = [\n ...Object.keys(patch.$set || {}).map((path) =>\n couchbase.MutateInSpec.upsert(path, patch.$set[path])\n ),\n ...unsetPaths(patch.$unset).map((path) => couchbase.MutateInSpec.remove(path)),\n ...Object.keys(patch.$inc || {}).map((path) =>\n couchbase.MutateInSpec.increment(path, patch.$inc[path])\n ),\n couchbase.MutateInSpec.upsert('updatedAt', now()),\n ];\n\n await mutateById(context, id, specs, options);\n const data = await context.collection.get(id);\n\n return context.parse<T & AutoModelFields>(data.content);\n};\n\nexport const incrementById = async <T>(\n context: ModelWriteContext,\n id: string,\n field: string,\n delta: number,\n options?: MutateInOptions\n): Promise<T & AutoModelFields> => {\n return patchById<T>(context, id, {$inc: {[field]: delta}}, options);\n};\n\nexport const findByIdWithMeta = async <T>(\n context: ModelWriteContext,\n id: string,\n options?: GetOptions\n): Promise<FindByIdWithMetaResult<T>> => {\n const data = await context.collection.get(id, options);\n\n return {\n content: context.parse<T & AutoModelFields>(data.content),\n cas: data.cas,\n expiryTime: data.expiryTime,\n };\n};\n"]}
|
|
1
|
+
{"version":3,"file":"write-helpers.js","sourceRoot":"","sources":["../../src/model/write-helpers.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n Collection,\n GetOptions,\n InsertOptions,\n MutateInOptions,\n ReplaceOptions,\n UpsertOptions,\n} from 'couchbase';\n\nimport couchbase from '../couchbase';\nimport {generateUUID} from '../uuid';\n\nimport {applyTtlOptions, TtlOptions} from './ttl';\nimport {applyValidation, ValidationHook} from './validation';\n\nimport type {AutoModelFields, UpdateOptions} from './index';\n\nexport interface ModelWriteContext {\n collection: Collection;\n collectionName: string;\n scope: string;\n parse: <T>(data: T) => T;\n serialize?: <T>(data: T) => T;\n serializeField?: (path: string, value: any) => any;\n validateCreate?: ValidationHook;\n validateReplace?: ValidationHook;\n}\n\nexport interface PatchByIdArgs {\n $set?: Record<string, any>;\n $unset?: string[] | Record<string, any>;\n $inc?: Record<string, number>;\n}\n\nexport interface FindByIdWithMetaResult<T> {\n content: T & AutoModelFields;\n cas: any;\n expiryTime?: any;\n}\n\nexport type InsertWriteOptions = InsertOptions & TtlOptions;\nexport type UpsertWriteOptions = UpsertOptions & TtlOptions;\n\nconst now = (): Date => new Date();\n\nexport const modelDocument = <T>(\n context: ModelWriteContext,\n data: T,\n createdAt?: Date\n): T & AutoModelFields => {\n const id = generateUUID();\n const timestamp = now();\n\n return {\n id,\n ...data,\n createdAt: createdAt || timestamp,\n updatedAt: timestamp,\n _type: context.collectionName,\n _scope: context.scope,\n } as T & AutoModelFields;\n};\n\nexport const replacementDocument = <T>(\n context: ModelWriteContext,\n id: string,\n data: T,\n options?: UpdateOptions\n): T & AutoModelFields => {\n const document: any = {\n ...data,\n id,\n _type: context.collectionName,\n _scope: context.scope,\n };\n\n if (!options || !options.silent) {\n document.updatedAt = now();\n }\n\n return document;\n};\n\nconst unsetPaths = (value?: string[] | Record<string, any>): string[] => {\n if (!value) {\n return [];\n }\n\n return Array.isArray(value) ? value : Object.keys(value);\n};\n\n/** Prepare an insert using the same metadata, validation, and codec pipeline as Model.insert. */\nexport const prepareInsertDocument = async <T>(\n context: ModelWriteContext,\n data: T\n): Promise<T & AutoModelFields> => {\n const validated = await applyValidation(\n modelDocument<T>(context, data),\n context.validateCreate\n );\n return context.serialize ? context.serialize(validated) : validated;\n};\n\n/** Prepare a replace using the same metadata, validation, and codec pipeline as Model.replaceById. */\nexport const prepareReplacementDocument = async <T>(\n context: ModelWriteContext,\n id: string,\n data: T,\n options?: UpdateOptions\n): Promise<T & AutoModelFields> => {\n const validated = await applyValidation(\n replacementDocument<T>(context, id, data, options),\n context.validateReplace\n );\n return context.serialize ? context.serialize(validated) : validated;\n};\n\nexport const insert = async <T>(\n context: ModelWriteContext,\n data: T,\n options?: InsertWriteOptions\n): Promise<T & AutoModelFields> => {\n const stored = await prepareInsertDocument<T>(context, data);\n await context.collection.insert(stored.id, stored, applyTtlOptions(options));\n\n return context.parse<T & AutoModelFields>(stored);\n};\n\nexport const upsert = async <T>(\n context: ModelWriteContext,\n data: T,\n options?: UpsertWriteOptions\n): Promise<T & AutoModelFields> => {\n const stored = await prepareInsertDocument<T>(context, data);\n await context.collection.upsert(stored.id, stored, applyTtlOptions(options));\n\n return context.parse<T & AutoModelFields>(stored);\n};\n\nexport const replaceById = async <T>(\n context: ModelWriteContext,\n id: string,\n data: T,\n options?: UpdateOptions\n): Promise<T & AutoModelFields> => {\n const {silent, ...replaceOptions} = options || {};\n const stored = await prepareReplacementDocument<T>(context, id, data, {silent});\n await context.collection.replace(id, stored, replaceOptions as ReplaceOptions);\n\n return context.parse<T & AutoModelFields>(stored);\n};\n\nexport const mutateById = async (\n context: ModelWriteContext,\n id: string,\n specs: any[],\n options?: MutateInOptions\n): Promise<any> => {\n if (!Array.isArray(specs) || !specs.length) {\n throw new Error('mutateById requires at least one mutation spec');\n }\n\n return context.collection.mutateIn(id, specs, options);\n};\n\nexport const patchById = async <T>(\n context: ModelWriteContext,\n id: string,\n patch: PatchByIdArgs,\n options?: MutateInOptions\n): Promise<T & AutoModelFields> => {\n const specs = [\n ...Object.keys(patch.$set || {}).map((path) =>\n couchbase.MutateInSpec.upsert(\n path,\n context.serializeField\n ? context.serializeField(path, patch.$set[path])\n : patch.$set[path]\n )\n ),\n ...unsetPaths(patch.$unset).map((path) => couchbase.MutateInSpec.remove(path)),\n ...Object.keys(patch.$inc || {}).map((path) =>\n couchbase.MutateInSpec.increment(path, patch.$inc[path])\n ),\n couchbase.MutateInSpec.upsert('updatedAt', now()),\n ];\n\n await mutateById(context, id, specs, options);\n const data = await context.collection.get(id);\n\n return context.parse<T & AutoModelFields>(data.content);\n};\n\nexport const incrementById = async <T>(\n context: ModelWriteContext,\n id: string,\n field: string,\n delta: number,\n options?: MutateInOptions\n): Promise<T & AutoModelFields> => {\n return patchById<T>(context, id, {$inc: {[field]: delta}}, options);\n};\n\nexport const findByIdWithMeta = async <T>(\n context: ModelWriteContext,\n id: string,\n options?: GetOptions\n): Promise<FindByIdWithMetaResult<T>> => {\n const data = await context.collection.get(id, options);\n\n return {\n content: context.parse<T & AutoModelFields>(data.content),\n cas: data.cas,\n expiryTime: data.expiryTime,\n };\n};\n"]}
|
package/dist/next.d.ts
ADDED
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
import type { Bucket, Cluster } from 'couchbase';
|
|
2
|
+
import type { CouchsetArgs } from './connection';
|
|
3
|
+
import { AutoModelFields, FieldCodec, Model, ModelConnection, ModalOptions } from './model';
|
|
4
|
+
import type { ModelIndexDefinition } from './model';
|
|
5
|
+
import type { SortType } from './query/interface/query.types';
|
|
6
|
+
export type { FieldCodec } from './model';
|
|
7
|
+
/** A JSON-friendly Date codec for models declared with defineModel. */
|
|
8
|
+
export declare const dateCodec: FieldCodec<Date, string>;
|
|
9
|
+
export interface ModelCollectionSettings {
|
|
10
|
+
maxExpiry?: number;
|
|
11
|
+
history?: boolean;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* A model definition has no connection and performs no I/O. Definitions may be
|
|
15
|
+
* reused safely across clients and are the unit the client registers.
|
|
16
|
+
*/
|
|
17
|
+
export type ModelField<T> = Extract<keyof T, string>;
|
|
18
|
+
export type TypedIndexField<T> = ModelField<T> | Partial<Record<ModelField<T>, SortType>>;
|
|
19
|
+
export type ModelCodecs<T> = Partial<{
|
|
20
|
+
[Field in ModelField<T>]: FieldCodec<T[Field], any>;
|
|
21
|
+
}> & Partial<Record<`${string}.${string}`, FieldCodec<any, any>>>;
|
|
22
|
+
export interface TypedModelIndexDefinition<T> extends Omit<ModelIndexDefinition, 'fields'> {
|
|
23
|
+
fields?: TypedIndexField<T>[];
|
|
24
|
+
}
|
|
25
|
+
export interface ModelDefinition<T = any> extends Omit<ModalOptions, 'codecs' | 'indexes'> {
|
|
26
|
+
name: string;
|
|
27
|
+
collectionSettings?: ModelCollectionSettings;
|
|
28
|
+
codecs?: ModelCodecs<T>;
|
|
29
|
+
indexes?: TypedModelIndexDefinition<T>[];
|
|
30
|
+
}
|
|
31
|
+
/** User fields are distinct from CouchSet's generated persistence metadata. */
|
|
32
|
+
export type ModelCreateInput<T> = Omit<T, keyof AutoModelFields> & Partial<Pick<T, Extract<keyof T, keyof AutoModelFields>>>;
|
|
33
|
+
export interface TypedModel<T> extends Omit<Model, 'getById' | 'getWithCas' | 'insert' | 'replaceById' | 'replaceIfCas'> {
|
|
34
|
+
getById(id: string, options?: any): Promise<T & AutoModelFields>;
|
|
35
|
+
getWithCas(id: string, options?: any): Promise<{
|
|
36
|
+
content: T & AutoModelFields;
|
|
37
|
+
cas: any;
|
|
38
|
+
expiryTime?: any;
|
|
39
|
+
}>;
|
|
40
|
+
insert(data: ModelCreateInput<T>, options?: any): Promise<T & AutoModelFields>;
|
|
41
|
+
replaceById(id: string, data: T, options?: any): Promise<T & AutoModelFields>;
|
|
42
|
+
replaceIfCas(id: string, data: T, cas: any, options?: any): Promise<T & AutoModelFields>;
|
|
43
|
+
}
|
|
44
|
+
export declare const defineModel: <T = any>(definition: ModelDefinition<T>) => ModelDefinition<T>;
|
|
45
|
+
export interface CouchsetClientDependencies {
|
|
46
|
+
/** Supply a fully controlled runtime for tests or an application-owned connection. */
|
|
47
|
+
connection?: ModelConnection;
|
|
48
|
+
/** Supply an already connected SDK cluster/bucket without using couchbase.connect. */
|
|
49
|
+
cluster?: Cluster;
|
|
50
|
+
bucket?: Bucket;
|
|
51
|
+
/** Override connection construction; useful for dependency injection and test doubles. */
|
|
52
|
+
connect?: (settings: CouchsetArgs) => Promise<Cluster>;
|
|
53
|
+
}
|
|
54
|
+
export interface CouchsetClientOptions extends Partial<CouchsetArgs> {
|
|
55
|
+
models?: Array<ModelDefinition<any>>;
|
|
56
|
+
dependencies?: CouchsetClientDependencies;
|
|
57
|
+
}
|
|
58
|
+
export interface EnsureCollectionsOptions {
|
|
59
|
+
models?: Array<ModelDefinition<any>>;
|
|
60
|
+
timeoutMs?: number;
|
|
61
|
+
pollIntervalMs?: number;
|
|
62
|
+
}
|
|
63
|
+
export interface ProvisionOptions extends EnsureCollectionsOptions {
|
|
64
|
+
collections?: boolean;
|
|
65
|
+
indexes?: boolean;
|
|
66
|
+
waitForIndexes?: boolean;
|
|
67
|
+
}
|
|
68
|
+
export interface RegisterModelOptions extends ProvisionOptions {
|
|
69
|
+
/** Explicitly provision this dynamic model. Constructors and CRUD never do this. */
|
|
70
|
+
provision?: boolean | {
|
|
71
|
+
collections?: boolean;
|
|
72
|
+
indexes?: boolean;
|
|
73
|
+
waitForIndexes?: boolean;
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
export interface ProvisionedTarget {
|
|
77
|
+
scope: string;
|
|
78
|
+
collection: string;
|
|
79
|
+
createdScope: boolean;
|
|
80
|
+
createdCollection: boolean;
|
|
81
|
+
}
|
|
82
|
+
export interface IndexPlanItem {
|
|
83
|
+
status: 'create' | 'matching' | 'replace';
|
|
84
|
+
definition: ModelIndexDefinition;
|
|
85
|
+
keyspace: string;
|
|
86
|
+
target: CollectionTarget;
|
|
87
|
+
/** The physical index CouchSet will create. Replacement names are versioned. */
|
|
88
|
+
createAs: string;
|
|
89
|
+
/** Only populated for an explicit or detected safe replacement. */
|
|
90
|
+
replaces?: string;
|
|
91
|
+
reason?: string;
|
|
92
|
+
}
|
|
93
|
+
export interface IndexPlan {
|
|
94
|
+
items: IndexPlanItem[];
|
|
95
|
+
}
|
|
96
|
+
export interface ApplyIndexPlanOptions {
|
|
97
|
+
/** Opt-in only: drop old indexes after the replacement is online. */
|
|
98
|
+
dropReplaced?: boolean;
|
|
99
|
+
timeoutMs?: number;
|
|
100
|
+
}
|
|
101
|
+
interface CollectionTarget {
|
|
102
|
+
scope: string;
|
|
103
|
+
collection: string;
|
|
104
|
+
settings?: ModelCollectionSettings;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* A client owns its model-definition registry and connection. It intentionally
|
|
108
|
+
* does not alter the legacy singleton or register models globally.
|
|
109
|
+
*/
|
|
110
|
+
export declare class CouchsetClient {
|
|
111
|
+
private readonly connection;
|
|
112
|
+
private readonly registered;
|
|
113
|
+
private readonly settings;
|
|
114
|
+
constructor(options?: CouchsetClientOptions);
|
|
115
|
+
ready(): Promise<this>;
|
|
116
|
+
shutdown(): Promise<void>;
|
|
117
|
+
definitions(): ModelDefinition<any>[];
|
|
118
|
+
/** Bind and register a definition without provisioning or index DDL. */
|
|
119
|
+
model<T>(definition: ModelDefinition<T>): TypedModel<T>;
|
|
120
|
+
/**
|
|
121
|
+
* Async registration for dynamic models. DDL is performed only when the
|
|
122
|
+
* caller explicitly opts into provision; ordinary model() is side-effect-free.
|
|
123
|
+
*/
|
|
124
|
+
registerModel<T>(definition: ModelDefinition<T>, options?: RegisterModelOptions): Promise<TypedModel<T>>;
|
|
125
|
+
/** Create only missing scopes/collections. Existing resources are never altered. */
|
|
126
|
+
ensureCollections(options?: EnsureCollectionsOptions): Promise<ProvisionedTarget[]>;
|
|
127
|
+
/** Explicit bootstrap: provisioning occurs before index creation. */
|
|
128
|
+
provision(options?: ProvisionOptions): Promise<{
|
|
129
|
+
collections: ProvisionedTarget[];
|
|
130
|
+
indexes: string[];
|
|
131
|
+
}>;
|
|
132
|
+
/** Normal ensureIndexes stays create-only. It never checks, drops, or changes an existing index. */
|
|
133
|
+
ensureIndexes(options?: {
|
|
134
|
+
models?: Array<ModelDefinition<any>>;
|
|
135
|
+
deferred?: boolean;
|
|
136
|
+
waitForIndexes?: boolean;
|
|
137
|
+
timeoutMs?: number;
|
|
138
|
+
}): Promise<string[]>;
|
|
139
|
+
/** Report missing, matching, and drifted indexes; this method has no DDL side effects. */
|
|
140
|
+
planIndexes(options?: {
|
|
141
|
+
models?: Array<ModelDefinition<any>>;
|
|
142
|
+
}): Promise<IndexPlan>;
|
|
143
|
+
/**
|
|
144
|
+
* Apply a reviewed plan by creating versioned replacements and waiting for
|
|
145
|
+
* them. Dropping old indexes is deliberately an explicit second opt-in.
|
|
146
|
+
*/
|
|
147
|
+
applyIndexPlan(plan: IndexPlan, options?: ApplyIndexPlanOptions): Promise<string[]>;
|
|
148
|
+
/**
|
|
149
|
+
* Run the callback through Couchbase's transaction retry loop. The callback
|
|
150
|
+
* may execute more than once; do not perform external side effects inside it.
|
|
151
|
+
* A commit-ambiguous error is rethrown and must be resolved by the caller via
|
|
152
|
+
* an idempotency key/outbox, never by blindly retrying a side effect.
|
|
153
|
+
*/
|
|
154
|
+
transaction<T>(callback: (transaction: CouchsetTransaction) => Promise<T>): Promise<T>;
|
|
155
|
+
keyspace(definition: ModelDefinition<any>): string;
|
|
156
|
+
getConnection(): ModelConnection;
|
|
157
|
+
private targets;
|
|
158
|
+
private waitForCollectionManifest;
|
|
159
|
+
private waitForIndexes;
|
|
160
|
+
private indexCatalog;
|
|
161
|
+
}
|
|
162
|
+
/** A model bound strictly to a Couchbase transaction attempt. */
|
|
163
|
+
export declare class TransactionModel<T = any> {
|
|
164
|
+
private readonly model;
|
|
165
|
+
private readonly attempt;
|
|
166
|
+
constructor(model: TypedModel<T>, attempt: any);
|
|
167
|
+
get(id: string): Promise<TransactionDocument<T> | null>;
|
|
168
|
+
getById(id: string): Promise<TransactionDocument<T> | null>;
|
|
169
|
+
insert(id: string, data: ModelCreateInput<T>): Promise<TransactionDocument<T>>;
|
|
170
|
+
/** Replace requires the prior transactional read, as required by the SDK. */
|
|
171
|
+
replace(document: TransactionDocument<T>, data: T): Promise<TransactionDocument<T>>;
|
|
172
|
+
replaceById(id: string, data: T): Promise<TransactionDocument<T>>;
|
|
173
|
+
remove(document: TransactionDocument<T>): Promise<void>;
|
|
174
|
+
query<TRow = any>(statement: string, options?: any): Promise<{
|
|
175
|
+
rows: TRow[];
|
|
176
|
+
}>;
|
|
177
|
+
}
|
|
178
|
+
export interface TransactionDocument<T> {
|
|
179
|
+
content: T & AutoModelFields;
|
|
180
|
+
/** Opaque transaction SDK result; only pass it back to replace/remove. */
|
|
181
|
+
document: any;
|
|
182
|
+
}
|
|
183
|
+
export declare class CouchsetTransaction {
|
|
184
|
+
private readonly client;
|
|
185
|
+
private readonly attempt;
|
|
186
|
+
constructor(client: CouchsetClient, attempt: any);
|
|
187
|
+
model<T>(definition: ModelDefinition<T>): TransactionModel<T>;
|
|
188
|
+
query<TRow = any>(statement: string, options?: any): Promise<{
|
|
189
|
+
rows: TRow[];
|
|
190
|
+
}>;
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Creates a short-lived scoped fixture and a cleanup function. The caller must
|
|
194
|
+
* invoke cleanup in after/afterEach; no normal client operation ever drops data.
|
|
195
|
+
*/
|
|
196
|
+
export declare const createCouchsetTestFixture: <T = any>(client: CouchsetClient, definition: Omit<ModelDefinition<T>, "scope" | "collection"> & {
|
|
197
|
+
scope?: string;
|
|
198
|
+
collection?: string;
|
|
199
|
+
}) => Promise<{
|
|
200
|
+
definition: ModelDefinition<T>;
|
|
201
|
+
model: TypedModel<T>;
|
|
202
|
+
cleanup: () => Promise<void>;
|
|
203
|
+
}>;
|
|
204
|
+
export declare const createCouchsetClient: (options?: CouchsetClientOptions) => CouchsetClient;
|