couchset 0.5.0 → 0.5.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.
@@ -1 +1 @@
1
- {"version":3,"file":"read-helpers.js","sourceRoot":"","sources":["../../src/model/read-helpers.ts"],"names":[],"mappings":"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","sourcesContent":["import type {Cluster} from 'couchbase';\n\nimport {buildSelectionQuery} from '../pagination/safe-pagination';\n\nimport {buildIncludedSelectionQuery, IncludeDefinition} from './include';\n\nexport interface ModelReadArgs {\n select?: any[] | string;\n where?: any;\n orderBy?: any;\n limit?: number;\n page?: number;\n offset?: number;\n throwOnError?: boolean;\n include?: IncludeDefinition[];\n}\n\nexport interface ModelPageInfo {\n limit: number;\n page: number;\n offset: number;\n nextPage: number | null;\n nextOffset: number | null;\n}\n\nexport interface ModelPageResult<T> {\n items: T[];\n hasNext: boolean;\n pageInfo: ModelPageInfo;\n}\n\nexport interface ModelReadContext {\n bucketName: string;\n collectionName: string;\n cluster: Cluster;\n parse: <T>(data: T) => T;\n resultKey?: string;\n}\n\nconst scopedWhere = (collectionName: string, where?: any): any => {\n const typeWhere = {_type: {$eq: collectionName}};\n\n if (!where || !Object.keys(where).length) {\n return typeWhere;\n }\n\n return {$and: [typeWhere, where]};\n};\n\nconst shouldThrow = (args: ModelReadArgs): boolean => args.throwOnError !== false;\n\nconst unwrapRows = <T>(\n rows: any[],\n bucketName: string,\n selectAll: boolean,\n parse: <TItem>(data: TItem) => TItem\n): T[] => {\n return rows.map((row) => {\n const data = selectAll ? row[bucketName] : row;\n\n return parse<T>(data);\n });\n};\n\nconst runReadQuery = async <T>(\n context: ModelReadContext,\n args: ModelReadArgs,\n queryArgs: ModelReadArgs\n): Promise<T[]> => {\n const hasIncludes = Array.isArray(queryArgs.include) && queryArgs.include.length > 0;\n const builtQuery = hasIncludes\n ? buildIncludedSelectionQuery({\n keyspace: context.bucketName,\n collectionName: context.collectionName,\n select: queryArgs.select || '*',\n where: scopedWhere(context.collectionName, queryArgs.where),\n limit: queryArgs.limit,\n page: queryArgs.page,\n offset: queryArgs.offset,\n orderBy: queryArgs.orderBy,\n include: queryArgs.include,\n })\n : {\n ...buildSelectionQuery(\n {\n bucketName: context.bucketName,\n select: queryArgs.select || '*',\n where: {where: scopedWhere(context.collectionName, queryArgs.where)},\n limit: queryArgs.limit,\n page: queryArgs.page,\n offset: queryArgs.offset,\n orderBy: queryArgs.orderBy,\n },\n {includeLimitOffset: true}\n ),\n resultKey: undefined,\n };\n const {query, parameters, selectAll, resultKey} = builtQuery;\n\n try {\n const {rows = []} = await context.cluster.query(query, {parameters});\n\n return unwrapRows<T>(\n rows,\n resultKey || context.resultKey || context.bucketName,\n selectAll,\n context.parse\n );\n } catch (error) {\n if (shouldThrow(args)) {\n throw error;\n }\n\n return [];\n }\n};\n\nexport const findMany = async <T>(\n context: ModelReadContext,\n args: ModelReadArgs = {}\n): Promise<T[]> => {\n return runReadQuery<T>(context, args, {\n ...args,\n limit: typeof args.limit === 'number' ? args.limit : 10,\n page: typeof args.page === 'number' ? args.page : 0,\n });\n};\n\nexport const findOne = async <T>(\n context: ModelReadContext,\n args: ModelReadArgs = {}\n): Promise<T | null> => {\n const rows = await runReadQuery<T>(context, args, {\n ...args,\n limit: 1,\n page: 0,\n offset: args.offset,\n });\n\n return rows.length ? rows[0] : null;\n};\n\nexport const exists = async (\n context: ModelReadContext,\n args: ModelReadArgs = {}\n): Promise<boolean> => {\n const {query, parameters} = buildSelectionQuery(\n {\n bucketName: context.bucketName,\n select: 'RAW 1',\n where: {where: scopedWhere(context.collectionName, args.where)},\n limit: 1,\n page: 0,\n },\n {includeLimitOffset: true}\n );\n\n try {\n const {rows = []} = await context.cluster.query(query, {parameters});\n\n return rows.length > 0;\n } catch (error) {\n if (shouldThrow(args)) {\n throw error;\n }\n\n return false;\n }\n};\n\nexport const count = async (\n context: ModelReadContext,\n args: ModelReadArgs = {}\n): Promise<number> => {\n const {query, parameters} = buildSelectionQuery({\n bucketName: context.bucketName,\n select: 'RAW COUNT(1)',\n where: {where: scopedWhere(context.collectionName, args.where)},\n });\n\n try {\n const {rows = []} = await context.cluster.query(query, {parameters});\n\n return Number(rows[0] || 0);\n } catch (error) {\n if (shouldThrow(args)) {\n throw error;\n }\n\n return 0;\n }\n};\n\nexport const page = async <T>(\n context: ModelReadContext,\n args: ModelReadArgs = {}\n): Promise<ModelPageResult<T>> => {\n const limit = typeof args.limit === 'number' ? args.limit : 10;\n const pageNumber = typeof args.page === 'number' ? args.page : 0;\n const offset = typeof args.offset === 'number' ? args.offset : pageNumber * limit;\n const rows = await runReadQuery<T>(context, args, {\n ...args,\n limit: limit + 1,\n page: pageNumber,\n offset,\n });\n const hasNext = rows.length > limit;\n\n return {\n items: hasNext ? rows.slice(0, limit) : rows,\n hasNext,\n pageInfo: {\n limit,\n page: pageNumber,\n offset,\n nextPage: hasNext ? pageNumber + 1 : null,\n nextOffset: hasNext ? offset + limit : null,\n },\n };\n};\n"]}
1
+ {"version":3,"file":"read-helpers.js","sourceRoot":"","sources":["../../src/model/read-helpers.ts"],"names":[],"mappings":"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","sourcesContent":["import type {Cluster} from 'couchbase';\n\nimport {buildSelectionQuery} from '../pagination/safe-pagination';\n\nimport {buildIncludedSelectionQuery, IncludeDefinition, includeOperator} from './include';\nimport {queryOptionsWithParameters, SafeQueryOptions} from './safe-query';\n\nexport interface ModelReadArgs {\n select?: readonly any[] | string;\n where?: any;\n orderBy?: any;\n limit?: number;\n page?: number;\n offset?: number;\n throwOnError?: boolean;\n include?: readonly IncludeDefinition[];\n sourceAlias?: string;\n queryOptions?: SafeQueryOptions;\n}\n\nexport interface ModelPageInfo {\n limit: number;\n page: number;\n offset: number;\n nextPage: number | null;\n nextOffset: number | null;\n}\n\nexport interface ModelPageResult<T> {\n items: T[];\n hasNext: boolean;\n pageInfo: ModelPageInfo;\n}\n\nexport interface ModelReadContext {\n bucketName: string;\n collectionName: string;\n cluster: Cluster;\n parse: <T>(data: T) => T;\n resultKey?: string;\n parseProjection?: <T>(data: T) => T;\n}\n\nconst scopedWhere = (collectionName: string, where?: any): any => {\n const typeWhere = {_type: {$eq: collectionName}};\n\n if (!where || !Object.keys(where).length) {\n return typeWhere;\n }\n\n return {$and: [typeWhere, where]};\n};\n\nconst shouldThrow = (args: ModelReadArgs): boolean => args.throwOnError !== false;\n\nconst decodeRows = <T>(\n rows: any[],\n context: ModelReadContext,\n args: ModelReadArgs,\n selectAll: boolean,\n resultKey?: string\n): T[] => {\n const includes = args.include || [];\n const structured =\n Array.isArray(args.select) &&\n args.select.every((field) => typeof field === 'string' && !field.includes('.'));\n return rows.map((row) => {\n let root: any;\n if (resultKey === '__cs_root') root = row.__cs_root;\n else root = selectAll ? row[context.resultKey || context.bucketName] : row;\n // Raw/computed projections have unknown shape and must not run document codecs.\n const parse = selectAll ? context.parse : structured ? context.parseProjection : undefined;\n if (!includes.length && !parse) return root as T;\n const result: any = parse ? parse(root) : {...root};\n for (const item of includes) {\n if (\n resultKey === '__cs_root' &&\n (Object.prototype.hasOwnProperty.call(root, item.as) ||\n Object.prototype.hasOwnProperty.call(result, item.as))\n ) {\n throw new Error(\n `Include alias ${item.as} would overwrite a root field; choose another alias`\n );\n }\n if (!Object.prototype.hasOwnProperty.call(row, item.as)) {\n if (includeOperator(item).includes('NEST')) result[item.as] = [];\n continue;\n }\n const value = row[item.as];\n if (includeOperator(item).includes('NEST') && (value === null || value === undefined)) {\n result[item.as] = [];\n continue;\n }\n const model = typeof item.model === 'object' ? item.model : undefined;\n const decode = item.select ? model?.parseProjection : model?.parse;\n result[item.as] =\n value === null || value === undefined || !decode\n ? value\n : Array.isArray(value)\n ? value.map((document) => decode.call(model, document))\n : decode.call(model, value);\n }\n return result as T;\n });\n};\n\nconst runReadQuery = async <T>(\n context: ModelReadContext,\n args: ModelReadArgs,\n queryArgs: ModelReadArgs\n): Promise<T[]> => {\n const hasIncludes = Array.isArray(queryArgs.include) && queryArgs.include.length > 0;\n const builtQuery = hasIncludes\n ? buildIncludedSelectionQuery({\n keyspace: context.bucketName,\n collectionName: context.collectionName,\n select: queryArgs.select || '*',\n where: scopedWhere(context.collectionName, queryArgs.where),\n limit: queryArgs.limit,\n page: queryArgs.page,\n offset: queryArgs.offset,\n orderBy: queryArgs.orderBy,\n include: queryArgs.include,\n sourceAlias: queryArgs.sourceAlias,\n })\n : {\n ...buildSelectionQuery(\n {\n bucketName: context.bucketName,\n select: (queryArgs.select || '*') as any,\n where: {where: scopedWhere(context.collectionName, queryArgs.where)},\n limit: queryArgs.limit,\n page: queryArgs.page,\n offset: queryArgs.offset,\n orderBy: queryArgs.orderBy,\n },\n {includeLimitOffset: true}\n ),\n resultKey: undefined,\n };\n const {query, parameters, selectAll, resultKey} = builtQuery;\n\n const options = queryOptionsWithParameters(parameters, args.queryOptions);\n try {\n const {rows = []} = await context.cluster.query(query, options);\n\n return decodeRows<T>(rows, context, queryArgs, selectAll, resultKey);\n } catch (error) {\n if (shouldThrow(args)) {\n throw error;\n }\n\n return [];\n }\n};\n\nexport const findMany = async <T>(\n context: ModelReadContext,\n args: ModelReadArgs = {}\n): Promise<T[]> => {\n return runReadQuery<T>(context, args, {\n ...args,\n limit: typeof args.limit === 'number' ? args.limit : 10,\n page: typeof args.page === 'number' ? args.page : 0,\n });\n};\n\nexport const findOne = async <T>(\n context: ModelReadContext,\n args: ModelReadArgs = {}\n): Promise<T | null> => {\n const rows = await runReadQuery<T>(context, args, {\n ...args,\n limit: 1,\n page: 0,\n offset: args.offset,\n });\n\n return rows.length ? rows[0] : null;\n};\n\nexport const exists = async (\n context: ModelReadContext,\n args: ModelReadArgs = {}\n): Promise<boolean> => {\n if (args.include?.length)\n throw new Error('count/exists do not support includes; use findMany/page for joined rows');\n const {query, parameters} = buildSelectionQuery(\n {\n bucketName: context.bucketName,\n select: 'RAW 1',\n where: {where: scopedWhere(context.collectionName, args.where)},\n limit: 1,\n page: 0,\n },\n {includeLimitOffset: true}\n );\n\n const options = queryOptionsWithParameters(parameters, args.queryOptions);\n try {\n const {rows = []} = await context.cluster.query(query, options);\n\n return rows.length > 0;\n } catch (error) {\n if (shouldThrow(args)) {\n throw error;\n }\n\n return false;\n }\n};\n\nexport const count = async (\n context: ModelReadContext,\n args: ModelReadArgs = {}\n): Promise<number> => {\n if (args.include?.length)\n throw new Error('count/exists do not support includes; use findMany/page for joined rows');\n const {query, parameters} = buildSelectionQuery({\n bucketName: context.bucketName,\n select: 'RAW COUNT(1)',\n where: {where: scopedWhere(context.collectionName, args.where)},\n });\n\n const options = queryOptionsWithParameters(parameters, args.queryOptions);\n try {\n const {rows = []} = await context.cluster.query(query, options);\n\n return Number(rows[0] || 0);\n } catch (error) {\n if (shouldThrow(args)) {\n throw error;\n }\n\n return 0;\n }\n};\n\nexport const page = async <T>(\n context: ModelReadContext,\n args: ModelReadArgs = {}\n): Promise<ModelPageResult<T>> => {\n const limit = typeof args.limit === 'number' ? args.limit : 10;\n const pageNumber = typeof args.page === 'number' ? args.page : 0;\n const offset = typeof args.offset === 'number' ? args.offset : pageNumber * limit;\n const rows = await runReadQuery<T>(context, args, {\n ...args,\n limit: limit + 1,\n page: pageNumber,\n offset,\n });\n const hasNext = rows.length > limit;\n\n return {\n items: hasNext ? rows.slice(0, limit) : rows,\n hasNext,\n pageInfo: {\n limit,\n page: pageNumber,\n offset,\n nextPage: hasNext ? pageNumber + 1 : null,\n nextOffset: hasNext ? offset + limit : null,\n },\n };\n};\n"]}
@@ -0,0 +1,51 @@
1
+ import type { IncludeDefinition } from './include';
2
+ import type { ModelReadArgs } from './read-helpers';
3
+ import type { AutoModelFields } from './index';
4
+ /** Compile-time marker carried by client-bound models; no runtime value is required. */
5
+ export declare const modelDocument: unique symbol;
6
+ export interface ModelDocument<T> {
7
+ readonly [modelDocument]?: T;
8
+ }
9
+ type DocumentOf<M> = M extends ModelDocument<infer T> ? T : Record<string, unknown>;
10
+ /** Optional keys can take their declared value or the runtime default. */
11
+ type Option<I, K extends PropertyKey, Default> = K extends keyof I ? {} extends Pick<I, K> ? I[K] | Default : I[K] : Default;
12
+ type IsUnion<T, Whole = T> = T extends Whole ? ([Whole] extends [T] ? false : true) : never;
13
+ type HasUnionEntries<S extends readonly unknown[]> = S extends readonly [infer Head, ...infer Tail] ? true extends IsUnion<Head> ? true : HasUnionEntries<Tail> : false;
14
+ type Project<T, S> = S extends undefined | '*' ? T : S extends readonly (keyof T)[] ? number extends S['length'] ? Partial<Pick<T, S[number]>> : S extends Required<S> ? HasUnionEntries<S> extends true ? Partial<Pick<T, S[number]>> : Pick<T, S[number]> : Partial<Pick<T, S[number]>> : Record<string, unknown>;
15
+ type Relation<I extends IncludeDefinition> = Project<I extends {
16
+ model: infer M;
17
+ } ? DocumentOf<M> : Record<string, unknown>, Option<I, 'select', '*'>>;
18
+ type DefaultNest<I> = 'keys' extends keyof I ? (I extends {
19
+ keys: string;
20
+ } ? true : boolean) : false;
21
+ type NestKind<I, K> = K extends 'nest' | 'leftNest' ? true : K extends 'join' | 'leftJoin' ? false : DefaultNest<I>;
22
+ type IsNest<I> = NestKind<I, Option<I, 'type', 'default'>>;
23
+ type IsLeft<I> = Extract<Option<I, 'type', 'default'>, 'leftJoin' | 'leftNest'> extends never ? true extends Option<I, 'optional', false> ? true : false : true;
24
+ type Included<I extends IncludeDefinition> = IncludeDefinition extends I ? unknown : true extends IsNest<I> ? false extends IsNest<I> ? unknown : Relation<I>[] : IsLeft<I> extends true ? Relation<I> | null | undefined : Relation<I>;
25
+ type UncertainAlias<I extends IncludeDefinition> = string extends I['as'] ? true : IsUnion<I['as']>;
26
+ type OptionalAlias<I extends IncludeDefinition> = true extends UncertainAlias<I> ? true : IsLeft<I> extends true ? IsNest<I> extends true ? false : true : false;
27
+ type IncludeOne<I extends IncludeDefinition> = I extends unknown ? {
28
+ [Alias in I['as'] as OptionalAlias<I> extends true ? never : Alias]: Included<I>;
29
+ } & {
30
+ [Alias in I['as'] as OptionalAlias<I> extends true ? Alias : never]?: Included<I>;
31
+ } : never;
32
+ type Includes<I> = [I] extends [undefined] ? {} : I extends readonly IncludeDefinition[] ? number extends I['length'] ? Record<string, unknown> : I extends readonly [
33
+ infer Head extends IncludeDefinition,
34
+ ...infer Tail extends readonly IncludeDefinition[]
35
+ ] ? IncludeOne<Head> & Includes<Tail> : {} : {};
36
+ type ReadIncludes<A> = A extends {
37
+ include: infer I;
38
+ } ? Includes<I> : {};
39
+ export type ModelReadResult<T, A> = 'select' extends keyof A ? A extends {
40
+ select?: infer S;
41
+ } ? S extends undefined | '*' | readonly (keyof (T & AutoModelFields))[] ? Project<T & AutoModelFields, S> & ReadIncludes<A> : unknown : unknown : (T & AutoModelFields) & ReadIncludes<A>;
42
+ /** Reject known collisions; runtime checks also cover schemaless documents. */
43
+ type AliasCollision<T, A> = A extends {
44
+ include: readonly (infer I)[];
45
+ } ? I extends {
46
+ as: infer Alias;
47
+ } ? Extract<Alias, keyof T | keyof AutoModelFields | 'doc' | '__cs_root'> : never : never;
48
+ export type CheckedReadArgs<T, A extends ModelReadArgs> = A & ([AliasCollision<T, A>] extends [never] ? unknown : {
49
+ readonly __includeAliasConflictsWithRoot: never;
50
+ });
51
+ export {};
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=read-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-types.js","sourceRoot":"","sources":["../../src/model/read-types.ts"],"names":[],"mappings":"","sourcesContent":["import type {IncludeDefinition} from './include';\nimport type {ModelReadArgs} from './read-helpers';\n\nimport type {AutoModelFields} from './index';\n\n/** Compile-time marker carried by client-bound models; no runtime value is required. */\nexport declare const modelDocument: unique symbol;\nexport interface ModelDocument<T> {\n readonly [modelDocument]?: T;\n}\n\ntype DocumentOf<M> = M extends ModelDocument<infer T> ? T : Record<string, unknown>;\n/** Optional keys can take their declared value or the runtime default. */\ntype Option<I, K extends PropertyKey, Default> = K extends keyof I\n ? {} extends Pick<I, K>\n ? I[K] | Default\n : I[K]\n : Default;\ntype IsUnion<T, Whole = T> = T extends Whole ? ([Whole] extends [T] ? false : true) : never;\ntype HasUnionEntries<S extends readonly unknown[]> = S extends readonly [infer Head, ...infer Tail]\n ? true extends IsUnion<Head>\n ? true\n : HasUnionEntries<Tail>\n : false;\ntype Project<T, S> = S extends undefined | '*'\n ? T\n : S extends readonly (keyof T)[]\n ? number extends S['length']\n ? Partial<Pick<T, S[number]>>\n : S extends Required<S>\n ? HasUnionEntries<S> extends true\n ? Partial<Pick<T, S[number]>>\n : Pick<T, S[number]>\n : Partial<Pick<T, S[number]>>\n : Record<string, unknown>;\ntype Relation<I extends IncludeDefinition> = Project<\n I extends {model: infer M} ? DocumentOf<M> : Record<string, unknown>,\n Option<I, 'select', '*'>\n>;\ntype DefaultNest<I> = 'keys' extends keyof I ? (I extends {keys: string} ? true : boolean) : false;\ntype NestKind<I, K> = K extends 'nest' | 'leftNest'\n ? true\n : K extends 'join' | 'leftJoin'\n ? false\n : DefaultNest<I>;\ntype IsNest<I> = NestKind<I, Option<I, 'type', 'default'>>;\ntype IsLeft<I> = Extract<Option<I, 'type', 'default'>, 'leftJoin' | 'leftNest'> extends never\n ? true extends Option<I, 'optional', false>\n ? true\n : false\n : true;\ntype Included<I extends IncludeDefinition> = IncludeDefinition extends I\n ? unknown\n : true extends IsNest<I>\n ? false extends IsNest<I>\n ? unknown\n : Relation<I>[]\n : IsLeft<I> extends true\n ? Relation<I> | null | undefined\n : Relation<I>;\ntype UncertainAlias<I extends IncludeDefinition> = string extends I['as'] ? true : IsUnion<I['as']>;\ntype OptionalAlias<I extends IncludeDefinition> = true extends UncertainAlias<I>\n ? true\n : IsLeft<I> extends true\n ? IsNest<I> extends true\n ? false\n : true\n : false;\n// Distribute each tuple slot separately: a union-valued include describes one\n// runtime alternative, not all its alternative aliases at once.\ntype IncludeOne<I extends IncludeDefinition> = I extends unknown\n ? {[Alias in I['as'] as OptionalAlias<I> extends true ? never : Alias]: Included<I>} & {\n [Alias in I['as'] as OptionalAlias<I> extends true ? Alias : never]?: Included<I>;\n }\n : never;\ntype Includes<I> = [I] extends [undefined]\n ? {}\n : I extends readonly IncludeDefinition[]\n ? number extends I['length']\n ? Record<string, unknown>\n : I extends readonly [\n infer Head extends IncludeDefinition,\n ...infer Tail extends readonly IncludeDefinition[]\n ]\n ? IncludeOne<Head> & Includes<Tail>\n : {}\n : {};\n\ntype ReadIncludes<A> = A extends {include: infer I} ? Includes<I> : {};\nexport type ModelReadResult<T, A> = 'select' extends keyof A\n ? A extends {select?: infer S}\n ? S extends undefined | '*' | readonly (keyof (T & AutoModelFields))[]\n ? Project<T & AutoModelFields, S> & ReadIncludes<A>\n : unknown\n : unknown\n : (T & AutoModelFields) & ReadIncludes<A>;\n\n/** Reject known collisions; runtime checks also cover schemaless documents. */\ntype AliasCollision<T, A> = A extends {include: readonly (infer I)[]}\n ? I extends {as: infer Alias}\n ? Extract<Alias, keyof T | keyof AutoModelFields | 'doc' | '__cs_root'>\n : never\n : never;\nexport type CheckedReadArgs<T, A extends ModelReadArgs> = A &\n ([AliasCollision<T, A>] extends [never]\n ? unknown\n : {readonly __includeAliasConflictsWithRoot: never});\n"]}
@@ -17,6 +17,9 @@ export interface QueryPageResult<T> {
17
17
  hasNext: boolean;
18
18
  params?: any;
19
19
  }
20
+ /** SDK consistency modes are mutually exclusive, including explicit not_bounded. */
21
+ export declare const validateReadConsistency: (options?: SafeQueryOptions) => void;
22
+ export declare const queryOptionsWithParameters: (params?: QueryParameters, options?: SafeQueryOptions) => QueryOptions;
20
23
  export { bucketIdentifier, fromTarget };
21
24
  export declare const runQueryRows: <T>(cluster: Cluster, query: string, params?: QueryParameters, options?: SafeQueryOptions) => Promise<T[]>;
22
25
  export declare const runQueryOne: <T>(cluster: Cluster, query: string, params?: QueryParameters, options?: SafeQueryOptions) => Promise<T | null>;
@@ -47,16 +47,36 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
47
47
  }
48
48
  };
49
49
  Object.defineProperty(exports, "__esModule", { value: true });
50
- exports.runQueryPage = exports.runQueryOne = exports.runQueryRows = exports.fromTarget = exports.bucketIdentifier = void 0;
50
+ exports.runQueryPage = exports.runQueryOne = exports.runQueryRows = exports.fromTarget = exports.bucketIdentifier = exports.queryOptionsWithParameters = exports.validateReadConsistency = void 0;
51
51
  var keyspace_1 = require("./keyspace");
52
52
  Object.defineProperty(exports, "bucketIdentifier", { enumerable: true, get: function () { return keyspace_1.bucketIdentifier; } });
53
53
  Object.defineProperty(exports, "fromTarget", { enumerable: true, get: function () { return keyspace_1.fromTarget; } });
54
+ /** SDK consistency modes are mutually exclusive, including explicit not_bounded. */
55
+ var validateReadConsistency = function (options) {
56
+ if ((options === null || options === void 0 ? void 0 : options.scanConsistency) !== undefined &&
57
+ !['request_plus', 'not_bounded'].includes(options.scanConsistency)) {
58
+ throw new Error('Unsupported query scanConsistency');
59
+ }
60
+ if ((options === null || options === void 0 ? void 0 : options.scanConsistency) !== undefined && (options === null || options === void 0 ? void 0 : options.consistentWith) !== undefined) {
61
+ throw new Error('scanConsistency and consistentWith cannot be combined');
62
+ }
63
+ var raw = options === null || options === void 0 ? void 0 : options.raw;
64
+ if (raw &&
65
+ ['scan_consistency', 'scan_vectors', 'scan_vector'].some(function (key) {
66
+ return Object.prototype.hasOwnProperty.call(raw, key);
67
+ })) {
68
+ throw new Error('Use scanConsistency or consistentWith instead of raw consistency options');
69
+ }
70
+ };
71
+ exports.validateReadConsistency = validateReadConsistency;
54
72
  var queryOptionsWithParameters = function (params, options) {
73
+ (0, exports.validateReadConsistency)(options);
55
74
  var queryOptions = __assign({}, (options || {}));
56
75
  delete queryOptions.debug;
57
76
  delete queryOptions.logger;
58
77
  return __assign(__assign({}, queryOptions), (params === undefined ? {} : { parameters: params }));
59
78
  };
79
+ exports.queryOptionsWithParameters = queryOptionsWithParameters;
60
80
  var resolvePageLimit = function (params, options) {
61
81
  var limit = options && typeof options.limit === 'number'
62
82
  ? options.limit
@@ -91,7 +111,7 @@ var runQueryRows = function (cluster, query, params, options) { return __awaiter
91
111
  return __generator(this, function (_b) {
92
112
  switch (_b.label) {
93
113
  case 0:
94
- queryOptions = queryOptionsWithParameters(params, options);
114
+ queryOptions = (0, exports.queryOptionsWithParameters)(params, options);
95
115
  if (options && options.debug && options.logger) {
96
116
  options.logger('couchset queryRows', { query: query, options: queryOptions });
97
117
  }
@@ -1 +1 @@
1
- {"version":3,"file":"safe-query.js","sourceRoot":"","sources":["../../src/model/safe-query.ts"],"names":[],"mappings":"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","sourcesContent":["import type {Cluster, QueryOptions} from 'couchbase';\n\nimport {bucketIdentifier, fromTarget} from './keyspace';\n\nexport type QueryParameters = {[key: string]: any} | any[];\n\nexport type QueryLogger = (message: string, details?: any) => void;\n\nexport interface SafeQueryOptions extends Omit<QueryOptions, 'parameters'> {\n debug?: boolean;\n logger?: QueryLogger;\n}\n\nexport interface QueryPageOptions extends SafeQueryOptions {\n limit?: number;\n limitParamIndex?: number;\n}\n\nexport interface QueryPageResult<T> {\n items: T[];\n hasNext: boolean;\n params?: any;\n}\n\nconst queryOptionsWithParameters = (\n params?: QueryParameters,\n options?: SafeQueryOptions\n): QueryOptions => {\n const queryOptions: any = {...(options || {})};\n delete queryOptions.debug;\n delete queryOptions.logger;\n\n return {\n ...queryOptions,\n ...(params === undefined ? {} : {parameters: params}),\n };\n};\n\nconst resolvePageLimit = (params?: QueryParameters, options?: QueryPageOptions): number => {\n const limit =\n options && typeof options.limit === 'number'\n ? options.limit\n : !Array.isArray(params) && params && typeof params.limit === 'number'\n ? params.limit\n : null;\n\n if (!limit || limit < 1) {\n throw new Error('queryPage requires a positive limit option or named params.limit');\n }\n\n return limit;\n};\n\nconst pageParameters = (\n params: QueryParameters | undefined,\n limit: number,\n options?: QueryPageOptions\n): QueryParameters | undefined => {\n const nextLimit = limit + 1;\n\n if (Array.isArray(params)) {\n if (options && typeof options.limitParamIndex === 'number') {\n const updatedParams = params.slice();\n updatedParams[options.limitParamIndex] = nextLimit;\n return updatedParams;\n }\n\n return params;\n }\n\n return {...(params || {}), limit: nextLimit};\n};\n\nconst queryPageOptions = (options?: QueryPageOptions): SafeQueryOptions => {\n const queryOptions: any = {...(options || {})};\n delete queryOptions.limit;\n delete queryOptions.limitParamIndex;\n\n return queryOptions;\n};\n\nexport {bucketIdentifier, fromTarget};\n\nexport const runQueryRows = async <T>(\n cluster: Cluster,\n query: string,\n params?: QueryParameters,\n options?: SafeQueryOptions\n): Promise<T[]> => {\n const queryOptions = queryOptionsWithParameters(params, options);\n\n if (options && options.debug && options.logger) {\n options.logger('couchset queryRows', {query, options: queryOptions});\n }\n\n const {rows = []} = await cluster.query<T>(query, queryOptions);\n\n return rows;\n};\n\nexport const runQueryOne = async <T>(\n cluster: Cluster,\n query: string,\n params?: QueryParameters,\n options?: SafeQueryOptions\n): Promise<T | null> => {\n const rows = await runQueryRows<T>(cluster, query, params, options);\n\n return rows.length ? rows[0] : null;\n};\n\nexport const runQueryPage = async <T>(\n cluster: Cluster,\n query: string,\n params?: QueryParameters,\n options?: QueryPageOptions\n): Promise<QueryPageResult<T>> => {\n const limit = resolvePageLimit(params, options);\n const pagedParams = pageParameters(params, limit, options);\n const rows = await runQueryRows<T>(cluster, query, pagedParams, queryPageOptions(options));\n const hasNext = rows.length > limit;\n\n return {\n items: hasNext ? rows.slice(0, limit) : rows,\n hasNext,\n params: pagedParams,\n };\n};\n"]}
1
+ {"version":3,"file":"safe-query.js","sourceRoot":"","sources":["../../src/model/safe-query.ts"],"names":[],"mappings":"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","sourcesContent":["import type {Cluster, QueryOptions} from 'couchbase';\n\nimport {bucketIdentifier, fromTarget} from './keyspace';\n\nexport type QueryParameters = {[key: string]: any} | any[];\n\nexport type QueryLogger = (message: string, details?: any) => void;\n\nexport interface SafeQueryOptions extends Omit<QueryOptions, 'parameters'> {\n debug?: boolean;\n logger?: QueryLogger;\n}\n\nexport interface QueryPageOptions extends SafeQueryOptions {\n limit?: number;\n limitParamIndex?: number;\n}\n\nexport interface QueryPageResult<T> {\n items: T[];\n hasNext: boolean;\n params?: any;\n}\n\n/** SDK consistency modes are mutually exclusive, including explicit not_bounded. */\nexport const validateReadConsistency = (options?: SafeQueryOptions): void => {\n if (\n options?.scanConsistency !== undefined &&\n !['request_plus', 'not_bounded'].includes(options.scanConsistency)\n ) {\n throw new Error('Unsupported query scanConsistency');\n }\n if (options?.scanConsistency !== undefined && options?.consistentWith !== undefined) {\n throw new Error('scanConsistency and consistentWith cannot be combined');\n }\n const raw = options?.raw;\n if (\n raw &&\n ['scan_consistency', 'scan_vectors', 'scan_vector'].some((key) =>\n Object.prototype.hasOwnProperty.call(raw, key)\n )\n ) {\n throw new Error('Use scanConsistency or consistentWith instead of raw consistency options');\n }\n};\n\nexport const queryOptionsWithParameters = (\n params?: QueryParameters,\n options?: SafeQueryOptions\n): QueryOptions => {\n validateReadConsistency(options);\n const queryOptions: any = {...(options || {})};\n delete queryOptions.debug;\n delete queryOptions.logger;\n\n return {\n ...queryOptions,\n ...(params === undefined ? {} : {parameters: params}),\n };\n};\n\nconst resolvePageLimit = (params?: QueryParameters, options?: QueryPageOptions): number => {\n const limit =\n options && typeof options.limit === 'number'\n ? options.limit\n : !Array.isArray(params) && params && typeof params.limit === 'number'\n ? params.limit\n : null;\n\n if (!limit || limit < 1) {\n throw new Error('queryPage requires a positive limit option or named params.limit');\n }\n\n return limit;\n};\n\nconst pageParameters = (\n params: QueryParameters | undefined,\n limit: number,\n options?: QueryPageOptions\n): QueryParameters | undefined => {\n const nextLimit = limit + 1;\n\n if (Array.isArray(params)) {\n if (options && typeof options.limitParamIndex === 'number') {\n const updatedParams = params.slice();\n updatedParams[options.limitParamIndex] = nextLimit;\n return updatedParams;\n }\n\n return params;\n }\n\n return {...(params || {}), limit: nextLimit};\n};\n\nconst queryPageOptions = (options?: QueryPageOptions): SafeQueryOptions => {\n const queryOptions: any = {...(options || {})};\n delete queryOptions.limit;\n delete queryOptions.limitParamIndex;\n\n return queryOptions;\n};\n\nexport {bucketIdentifier, fromTarget};\n\nexport const runQueryRows = async <T>(\n cluster: Cluster,\n query: string,\n params?: QueryParameters,\n options?: SafeQueryOptions\n): Promise<T[]> => {\n const queryOptions = queryOptionsWithParameters(params, options);\n\n if (options && options.debug && options.logger) {\n options.logger('couchset queryRows', {query, options: queryOptions});\n }\n\n const {rows = []} = await cluster.query<T>(query, queryOptions);\n\n return rows;\n};\n\nexport const runQueryOne = async <T>(\n cluster: Cluster,\n query: string,\n params?: QueryParameters,\n options?: SafeQueryOptions\n): Promise<T | null> => {\n const rows = await runQueryRows<T>(cluster, query, params, options);\n\n return rows.length ? rows[0] : null;\n};\n\nexport const runQueryPage = async <T>(\n cluster: Cluster,\n query: string,\n params?: QueryParameters,\n options?: QueryPageOptions\n): Promise<QueryPageResult<T>> => {\n const limit = resolvePageLimit(params, options);\n const pagedParams = pageParameters(params, limit, options);\n const rows = await runQueryRows<T>(cluster, query, pagedParams, queryPageOptions(options));\n const hasNext = rows.length > limit;\n\n return {\n items: hasNext ? rows.slice(0, limit) : rows,\n hasNext,\n params: pagedParams,\n };\n};\n"]}
package/dist/next.d.ts CHANGED
@@ -3,8 +3,12 @@ import type { CouchsetArgs } from './connection';
3
3
  import { Eventing } from './eventing';
4
4
  import type { EventingOptions } from './eventing';
5
5
  import { AutoModelFields, FieldCodec, Model, ModelConnection, ModalOptions } from './model';
6
- import type { ModelIndexDefinition } from './model';
6
+ import type { ModelIndexDefinition, ModelReadArgs, ModelPageResult } from './model';
7
+ import type { CheckedReadArgs, ModelDocument, ModelReadResult } from './model/read-types';
7
8
  import type { SortType } from './query/interface/query.types';
9
+ export { joinField } from './model/include';
10
+ export type { JoinField, JoinPredicate, IncludeDefinition, IncludeType } from './model/include';
11
+ export type { ModelReadResult } from './model/read-types';
8
12
  export type { FieldCodec } from './model';
9
13
  export * from './eventing';
10
14
  /** A JSON-friendly Date codec for models declared with defineModel. */
@@ -33,7 +37,13 @@ export interface ModelDefinition<T = any> extends Omit<ModalOptions, 'codecs' |
33
37
  }
34
38
  /** User fields are distinct from CouchSet's generated persistence metadata. */
35
39
  export type ModelCreateInput<T> = Omit<T, keyof AutoModelFields> & Partial<Pick<T, Extract<keyof T, keyof AutoModelFields>>>;
36
- export interface TypedModel<T> extends Omit<Model, 'getById' | 'getWithCas' | 'insert' | 'replaceById' | 'replaceIfCas'> {
40
+ export interface TypedModel<T> extends Omit<Model, 'getById' | 'getWithCas' | 'insert' | 'replaceById' | 'replaceIfCas' | 'findMany' | 'findOne' | 'page' | 'withDeleted' | 'onlyDeleted' | 'withoutDefaultWhere'>, ModelDocument<T & AutoModelFields> {
41
+ findMany<const A extends ModelReadArgs = {}>(args?: CheckedReadArgs<T, A>): Promise<ModelReadResult<T, A>[]>;
42
+ findOne<const A extends ModelReadArgs = {}>(args?: CheckedReadArgs<T, A>): Promise<ModelReadResult<T, A> | null>;
43
+ page<const A extends ModelReadArgs = {}>(args?: CheckedReadArgs<T, A>): Promise<ModelPageResult<ModelReadResult<T, A>>>;
44
+ withDeleted(): TypedModel<T>;
45
+ onlyDeleted(): TypedModel<T>;
46
+ withoutDefaultWhere(): TypedModel<T>;
37
47
  getById(id: string, options?: any): Promise<T & AutoModelFields>;
38
48
  getWithCas(id: string, options?: any): Promise<{
39
49
  content: T & AutoModelFields;
package/dist/next.js CHANGED
@@ -100,7 +100,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
100
100
  return (mod && mod.__esModule) ? mod : { "default": mod };
101
101
  };
102
102
  Object.defineProperty(exports, "__esModule", { value: true });
103
- exports.createCouchsetClient = exports.createCouchsetTestFixture = exports.CouchsetTransaction = exports.TransactionModel = exports.CouchsetClient = exports.defineModel = exports.dateCodec = void 0;
103
+ exports.createCouchsetClient = exports.createCouchsetTestFixture = exports.CouchsetTransaction = exports.TransactionModel = exports.CouchsetClient = exports.defineModel = exports.dateCodec = exports.joinField = void 0;
104
104
  var couchbase_1 = __importDefault(require("./couchbase"));
105
105
  var eventing_1 = require("./eventing");
106
106
  var model_1 = require("./model");
@@ -108,6 +108,8 @@ var indexes_1 = require("./model/indexes");
108
108
  var keyspace_1 = require("./model/keyspace");
109
109
  var builders_1 = require("./query/helpers/builders");
110
110
  var uuid_1 = require("./uuid");
111
+ var include_1 = require("./model/include");
112
+ Object.defineProperty(exports, "joinField", { enumerable: true, get: function () { return include_1.joinField; } });
111
113
  __exportStar(require("./eventing"), exports);
112
114
  /** A JSON-friendly Date codec for models declared with defineModel. */
113
115
  exports.dateCodec = {
package/dist/next.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"next.js","sourceRoot":"","sources":["../src/next.ts"],"names":[],"mappings":"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","sourcesContent":["import type {Bucket, Cluster} from 'couchbase';\n\nimport couchbase from './couchbase';\nimport type {CouchsetArgs} from './connection';\nimport {Eventing} from './eventing';\nimport type {EventingOptions} from './eventing';\nimport {AutoModelFields, FieldCodec, Model, ModelConnection, ModalOptions} from './model';\nimport type {ModelIndexDefinition} from './model';\nimport {buildIndexQuery} from './model/indexes';\nimport {escapeIdentifier, keyspaceIdentifier} from './model/keyspace';\nimport type {SortType} from './query/interface/query.types';\nimport {buildWhereExpr} from './query/helpers/builders';\nimport {generateUUID} from './uuid';\n\nexport type {FieldCodec} from './model';\nexport * from './eventing';\n\n/** A JSON-friendly Date codec for models declared with defineModel. */\nexport const dateCodec: FieldCodec<Date, string> = {\n fromDatabase: (value: string): Date => new Date(value),\n toDatabase: (value: Date): string => value.toISOString(),\n};\n\nexport interface ModelCollectionSettings {\n maxExpiry?: number;\n history?: boolean;\n}\n\n/**\n * A model definition has no connection and performs no I/O. Definitions may be\n * reused safely across clients and are the unit the client registers.\n */\nexport type ModelField<T> = Extract<keyof T, string>;\nexport type TypedIndexField<T> = ModelField<T> | Partial<Record<ModelField<T>, SortType>>;\nexport type ModelCodecs<T> = Partial<{\n [Field in ModelField<T>]: FieldCodec<T[Field], any>;\n}> &\n Partial<Record<`${string}.${string}`, FieldCodec<any, any>>>;\n\nexport interface TypedModelIndexDefinition<T> extends Omit<ModelIndexDefinition, 'fields'> {\n fields?: TypedIndexField<T>[];\n}\n\nexport interface ModelDefinition<T = any> extends Omit<ModalOptions, 'codecs' | 'indexes'> {\n name: string;\n collectionSettings?: ModelCollectionSettings;\n codecs?: ModelCodecs<T>;\n indexes?: TypedModelIndexDefinition<T>[];\n}\n\n/** User fields are distinct from CouchSet's generated persistence metadata. */\nexport type ModelCreateInput<T> = Omit<T, keyof AutoModelFields> &\n Partial<Pick<T, Extract<keyof T, keyof AutoModelFields>>>;\n\nexport interface TypedModel<T>\n extends Omit<Model, 'getById' | 'getWithCas' | 'insert' | 'replaceById' | 'replaceIfCas'> {\n getById(id: string, options?: any): Promise<T & AutoModelFields>;\n getWithCas(\n id: string,\n options?: any\n ): Promise<{content: T & AutoModelFields; cas: any; expiryTime?: any}>;\n insert(data: ModelCreateInput<T>, options?: any): Promise<T & AutoModelFields>;\n replaceById(id: string, data: T, options?: any): Promise<T & AutoModelFields>;\n replaceIfCas(id: string, data: T, cas: any, options?: any): Promise<T & AutoModelFields>;\n}\n\nexport const defineModel = <T = any>(definition: ModelDefinition<T>): ModelDefinition<T> => {\n if (!definition || !definition.name) {\n throw new Error('defineModel requires a non-empty name');\n }\n\n return {...definition};\n};\n\nexport interface CouchsetClientDependencies {\n /** Supply a fully controlled runtime for tests or an application-owned connection. */\n connection?: ModelConnection;\n /** Supply an already connected SDK cluster/bucket without using couchbase.connect. */\n cluster?: Cluster;\n bucket?: Bucket;\n /** Override connection construction; useful for dependency injection and test doubles. */\n connect?: (settings: CouchsetArgs) => Promise<Cluster>;\n}\n\nexport interface CouchsetClientOptions extends Partial<CouchsetArgs> {\n models?: Array<ModelDefinition<any>>;\n dependencies?: CouchsetClientDependencies;\n}\n\nexport interface EnsureCollectionsOptions {\n models?: Array<ModelDefinition<any>>;\n timeoutMs?: number;\n pollIntervalMs?: number;\n}\n\nexport interface ProvisionOptions extends EnsureCollectionsOptions {\n collections?: boolean;\n indexes?: boolean;\n waitForIndexes?: boolean;\n}\n\nexport interface RegisterModelOptions extends ProvisionOptions {\n /** Explicitly provision this dynamic model. Constructors and CRUD never do this. */\n provision?: boolean | {collections?: boolean; indexes?: boolean; waitForIndexes?: boolean};\n}\n\nexport interface ProvisionedTarget {\n scope: string;\n collection: string;\n createdScope: boolean;\n createdCollection: boolean;\n}\n\nexport interface IndexPlanItem {\n status: 'create' | 'matching' | 'replace';\n definition: ModelIndexDefinition;\n keyspace: string;\n target: CollectionTarget;\n /** The physical index CouchSet will create. Replacement names are versioned. */\n createAs: string;\n /** Only populated for an explicit or detected safe replacement. */\n replaces?: string;\n reason?: string;\n}\n\nexport interface IndexPlan {\n items: IndexPlanItem[];\n}\n\nexport interface ApplyIndexPlanOptions {\n /** Opt-in only: drop old indexes after the replacement is online. */\n dropReplaced?: boolean;\n timeoutMs?: number;\n}\n\ninterface RegisteredModel<T = any> {\n definition: ModelDefinition<T>;\n model: Model;\n}\n\ninterface CollectionTarget {\n scope: string;\n collection: string;\n settings?: ModelCollectionSettings;\n}\n\nconst defaultSettings = (options: CouchsetClientOptions): CouchsetArgs => ({\n bucketName: options.bucketName || 'default',\n connectionString: options.connectionString || 'couchbase://localhost',\n password: options.password || '',\n username: options.username || '',\n proxy: options.proxy,\n});\n\nconst errorText = (error: any): string => `${error?.name || ''} ${error?.message || error || ''}`;\nconst isAlreadyExists = (error: any): boolean =>\n /already exists|exists|ScopeExists|CollectionExists/i.test(errorText(error));\nconst isNotFound = (error: any): boolean => /not found|not exist/i.test(errorText(error));\n\nconst provisionError = (operation: string, target: string, error: any): Error => {\n const message = errorText(error);\n const privilege = /access|permission|authoriz|privilege|forbidden/i.test(message)\n ? ' This operation requires Couchbase Manage Scopes privileges on the bucket.'\n : '';\n const wrapped: any = new Error(\n `CouchSet could not ${operation} ${target}.${privilege} ${message}`.trim()\n );\n wrapped.cause = error;\n return wrapped;\n};\n\nconst delay = (milliseconds: number): Promise<void> =>\n new Promise((resolve) => setTimeout(resolve, milliseconds));\n\nclass DirectConnection implements ModelConnection {\n public cluster: Cluster;\n public bucket: Bucket;\n private connectPromise?: Promise<Cluster>;\n\n constructor(\n private readonly settings: CouchsetArgs,\n private readonly dependencies: CouchsetClientDependencies\n ) {\n this.cluster = dependencies.cluster as Cluster;\n this.bucket = dependencies.bucket as Bucket;\n\n if (this.cluster && !this.bucket) {\n this.bucket = this.cluster.bucket(settings.bucketName);\n }\n }\n\n public getBucket(): string {\n return this.settings.bucketName;\n }\n\n public getCollection(scopeName?: string, collectionName?: string): any {\n if (!this.bucket) {\n throw new Error('CouchSet client is not connected; call client.ready() first');\n }\n\n if (!scopeName && !collectionName) {\n return this.bucket.defaultCollection();\n }\n\n return this.bucket.scope(scopeName || '_default').collection(collectionName || '_default');\n }\n\n public isConnected(): boolean {\n return !!this.cluster && !!this.bucket;\n }\n\n public async ready(): Promise<DirectConnection> {\n if (this.isConnected()) {\n return this;\n }\n\n if (!this.connectPromise) {\n const connect =\n this.dependencies.connect ||\n ((settings: CouchsetArgs) =>\n couchbase.connect(settings.connectionString, {\n password: settings.password,\n proxy: settings.proxy,\n username: settings.username,\n }));\n this.connectPromise = connect(this.settings);\n }\n\n this.cluster = await this.connectPromise;\n this.bucket = this.cluster.bucket(this.settings.bucketName);\n return this;\n }\n\n public shouldReconnect(): boolean {\n return false;\n }\n\n public markDisconnected(): void {\n // A client-owned connection never retries an arbitrary write operation.\n }\n\n public async shutdown(): Promise<void> {\n if (this.cluster && typeof (this.cluster as any).close === 'function') {\n await (this.cluster as any).close();\n }\n this.cluster = undefined as any;\n this.bucket = undefined as any;\n }\n}\n\n/**\n * A client owns its model-definition registry and connection. It intentionally\n * does not alter the legacy singleton or register models globally.\n */\nexport class CouchsetClient {\n private readonly connection: ModelConnection;\n private readonly registered = new Map<string, RegisteredModel<any>>();\n private readonly settings: CouchsetArgs;\n\n constructor(options: CouchsetClientOptions = {}) {\n this.settings = defaultSettings(options);\n const dependencies = options.dependencies || {};\n\n if (dependencies.connection) {\n const bucketName = dependencies.connection.getBucket();\n if (!bucketName) {\n throw new Error('Injected CouchSet connections must expose a bucket name');\n }\n if (options.bucketName && options.bucketName !== bucketName) {\n throw new Error(\n `Injected CouchSet connection targets ${bucketName}, not requested bucket ${options.bucketName}`\n );\n }\n this.settings.bucketName = bucketName;\n } else if (dependencies.bucket) {\n const bucketName = dependencies.bucket.name;\n if (options.bucketName && options.bucketName !== bucketName) {\n throw new Error(\n `Injected Couchbase bucket targets ${bucketName}, not requested bucket ${options.bucketName}`\n );\n }\n this.settings.bucketName = bucketName;\n } else if (dependencies.cluster && !options.bucketName) {\n throw new Error('bucketName is required when injecting a Couchbase cluster');\n }\n\n this.connection =\n dependencies.connection || new DirectConnection(this.settings, dependencies);\n\n (options.models || []).forEach((definition) => this.model(definition));\n }\n\n public async ready(): Promise<this> {\n await this.connection.ready();\n return this;\n }\n\n public async shutdown(): Promise<void> {\n const shutdown = (this.connection as any).shutdown;\n if (typeof shutdown === 'function') {\n await shutdown.call(this.connection);\n }\n }\n\n public definitions(): ModelDefinition<any>[] {\n return Array.from(this.registered.values()).map(({definition}) => definition);\n }\n\n /**\n * Creates a namespace-owned Eventing control plane. Definitions remain\n * declarative until eventing.apply() is called.\n */\n public eventing(options: EventingOptions): Eventing {\n return new Eventing(this, options);\n }\n\n /** Bind and register a definition without provisioning or index DDL. */\n public model<T>(definition: ModelDefinition<T>): TypedModel<T> {\n const identity = modelIdentity(definition);\n const existing = this.registered.get(identity);\n\n if (existing) {\n assertSameDefinition(existing.definition, definition);\n return existing.model as TypedModel<T>;\n }\n\n const model = new Model(definition.name, definition as ModalOptions, this.connection);\n this.registered.set(identity, {definition, model});\n return model as TypedModel<T>;\n }\n\n /**\n * Async registration for dynamic models. DDL is performed only when the\n * caller explicitly opts into provision; ordinary model() is side-effect-free.\n */\n public async registerModel<T>(\n definition: ModelDefinition<T>,\n options: RegisterModelOptions = {}\n ): Promise<TypedModel<T>> {\n const model = this.model(definition);\n const requested = options.provision;\n\n if (requested) {\n const config =\n typeof requested === 'boolean' ? {collections: true, indexes: true} : requested;\n await this.provision({\n collections: config.collections !== false,\n indexes: config.indexes !== false,\n models: [definition],\n timeoutMs: options.timeoutMs,\n waitForIndexes: config.waitForIndexes,\n });\n }\n\n return model;\n }\n\n /** Create only missing scopes/collections. Existing resources are never altered. */\n public async ensureCollections(\n options: EnsureCollectionsOptions = {}\n ): Promise<ProvisionedTarget[]> {\n await this.ready();\n const targets = this.targets(options.models);\n const manager: any = (this.connection as any).bucket.collections();\n let manifest: any[];\n\n try {\n manifest = await manager.getAllScopes();\n } catch (error) {\n throw provisionError('read the scope manifest for', this.settings.bucketName, error);\n }\n\n const result: ProvisionedTarget[] = [];\n for (const target of targets) {\n const defaultTarget = target.scope === '_default' && target.collection === '_default';\n if (defaultTarget) {\n result.push({...target, createdScope: false, createdCollection: false});\n continue;\n }\n\n let scope = findScope(manifest, target.scope);\n let createdScope = false;\n if (!scope && target.scope !== '_default') {\n try {\n await manager.createScope(target.scope);\n createdScope = true;\n } catch (error) {\n if (!isAlreadyExists(error)) {\n throw provisionError('create scope', target.scope, error);\n }\n }\n manifest = await this.waitForCollectionManifest(target.scope, undefined, options);\n scope = findScope(manifest, target.scope);\n }\n\n if (!scope) {\n throw new Error(`CouchSet could not find scope ${target.scope} after provisioning`);\n }\n\n const exists = (scope.collections || []).some(\n (item: any) => item.name === target.collection\n );\n let createdCollection = false;\n if (!exists) {\n try {\n await manager.createCollection(\n target.collection,\n target.scope,\n target.settings || {}\n );\n createdCollection = true;\n } catch (error) {\n if (!isAlreadyExists(error)) {\n throw provisionError(\n 'create collection',\n `${target.scope}.${target.collection}`,\n error\n );\n }\n }\n }\n\n await this.waitForCollectionManifest(target.scope, target.collection, options);\n result.push({...target, createdScope, createdCollection});\n }\n\n return result;\n }\n\n /** Explicit bootstrap: provisioning occurs before index creation. */\n public async provision(options: ProvisionOptions = {}): Promise<{\n collections: ProvisionedTarget[];\n indexes: string[];\n }> {\n const definitions = options.models || this.definitions();\n const collections =\n options.collections === false\n ? []\n : await this.ensureCollections({...options, models: definitions});\n const indexes = options.indexes\n ? await this.ensureIndexes({\n models: definitions,\n waitForIndexes: options.waitForIndexes,\n timeoutMs: options.timeoutMs,\n })\n : [];\n\n return {collections, indexes};\n }\n\n /** Normal ensureIndexes stays create-only. It never checks, drops, or changes an existing index. */\n public async ensureIndexes(\n options: {\n models?: Array<ModelDefinition<any>>;\n deferred?: boolean;\n waitForIndexes?: boolean;\n timeoutMs?: number;\n } = {}\n ): Promise<string[]> {\n await this.ready();\n const definitions = options.models || this.definitions();\n const queries: string[] = [];\n const indexes: Array<{name: string; target: CollectionTarget}> = [];\n\n for (const definition of definitions) {\n const model = this.model(definition);\n const statements = await model.ensureIndexes({deferred: options.deferred});\n queries.push(...statements);\n indexes.push(\n ...(definition.indexes || []).map((index) => ({\n name: index.name,\n target: definitionTarget(definition),\n }))\n );\n }\n\n if (options.waitForIndexes && indexes.length) {\n await this.waitForIndexes(indexes, options.timeoutMs);\n }\n\n return queries;\n }\n\n /** Report missing, matching, and drifted indexes; this method has no DDL side effects. */\n public async planIndexes(\n options: {models?: Array<ModelDefinition<any>>} = {}\n ): Promise<IndexPlan> {\n await this.ready();\n const rows = await this.indexCatalog();\n const items: IndexPlanItem[] = [];\n\n for (const definition of options.models || this.definitions()) {\n const keyspace = this.keyspace(definition);\n const target = definitionTarget(definition);\n for (const index of definition.indexes || []) {\n const matchingRows = rows.filter((row) => indexRowMatchesTarget(row, definition));\n const desired = matchingRows.find((row) => row.name === index.name);\n const replacementName = versionedIndexName(index.name, index);\n const replacement = matchingRows.find((row) => row.name === replacementName);\n\n // A previous safe rollout may have dropped the old logical name\n // while retaining this deterministic replacement physical name.\n if (replacement && indexMatches(replacement, index)) {\n items.push({\n createAs: replacementName,\n definition: index,\n keyspace,\n status: 'matching',\n target,\n });\n continue;\n }\n\n if (desired && indexMatches(desired, index)) {\n items.push({\n createAs: index.name,\n definition: index,\n keyspace,\n status: 'matching',\n target,\n });\n continue;\n }\n\n // `replaces` explicitly asks for a new physical index, even if\n // the predecessor happens to have equivalent keys.\n const predecessorName = index.replaces || index.name;\n const predecessor = matchingRows.find((row) => row.name === predecessorName);\n\n if (!predecessor) {\n items.push({\n createAs: index.name,\n definition: index,\n keyspace,\n status: 'create',\n target,\n });\n continue;\n }\n\n const createAs = index.replaces ? index.name : replacementName;\n items.push({\n createAs,\n definition: index,\n keyspace,\n reason: 'Declared keys, predicate, or primary mode differs from the live index.',\n replaces: predecessor.name,\n status: 'replace',\n target,\n });\n }\n }\n\n return {items};\n }\n\n /**\n * Apply a reviewed plan by creating versioned replacements and waiting for\n * them. Dropping old indexes is deliberately an explicit second opt-in.\n */\n public async applyIndexPlan(\n plan: IndexPlan,\n options: ApplyIndexPlanOptions = {}\n ): Promise<string[]> {\n await this.ready();\n const applied: string[] = [];\n const replacements: Array<{name: string; target: CollectionTarget}> = [];\n\n for (const item of plan.items) {\n if (item.status === 'matching') {\n continue;\n }\n\n const definition = {...item.definition, name: item.createAs};\n const query = buildIndexQuery(item.keyspace, definition);\n await this.connection.cluster.query(query);\n applied.push(query);\n replacements.push({name: item.createAs, target: item.target});\n }\n\n if (replacements.length) {\n await this.waitForIndexes(replacements, options.timeoutMs);\n }\n\n if (options.dropReplaced) {\n for (const item of plan.items) {\n if (item.status === 'replace' && item.replaces) {\n await this.connection.cluster.query(\n `DROP INDEX ${item.keyspace}.${escapeIdentifier(item.replaces)}`\n );\n }\n }\n }\n\n return applied;\n }\n\n /**\n * Run the callback through Couchbase's transaction retry loop. The callback\n * may execute more than once; do not perform external side effects inside it.\n * A commit-ambiguous error is rethrown and must be resolved by the caller via\n * an idempotency key/outbox, never by blindly retrying a side effect.\n */\n public async transaction<T>(\n callback: (transaction: CouchsetTransaction) => Promise<T>\n ): Promise<T> {\n await this.ready();\n let result: T;\n await (this.connection.cluster as any).transactions().run(async (attempt: any) => {\n result = await callback(new CouchsetTransaction(this, attempt));\n });\n return result as T;\n }\n\n public keyspace(definition: ModelDefinition<any>): string {\n const target = definitionTarget(definition);\n return keyspaceIdentifier({\n bucketName: this.settings.bucketName,\n collectionName: target.collection,\n scopeName: target.scope,\n });\n }\n\n public getConnection(): ModelConnection {\n return this.connection;\n }\n\n private targets(definitions?: Array<ModelDefinition<any>>): CollectionTarget[] {\n const targets = new Map<string, CollectionTarget>();\n for (const definition of definitions || this.definitions()) {\n const target = definitionTarget(definition);\n const identity = `${target.scope}.${target.collection}`;\n const existing = targets.get(identity);\n const settings = definition.collectionSettings;\n\n if (\n existing &&\n JSON.stringify(existing.settings || {}) !== JSON.stringify(settings || {})\n ) {\n throw new Error(\n `Conflicting collection settings declared for ${identity}; CouchSet will not alter an existing collection`\n );\n }\n targets.set(identity, {...target, settings});\n }\n return Array.from(targets.values());\n }\n\n private async waitForCollectionManifest(\n scopeName: string,\n collectionName: string | undefined,\n options: EnsureCollectionsOptions\n ): Promise<any[]> {\n const manager: any = (this.connection as any).bucket.collections();\n const timeout = options.timeoutMs || 30000;\n const poll = options.pollIntervalMs || 100;\n const deadline = Date.now() + timeout;\n\n while (Date.now() <= deadline) {\n try {\n const manifest = await manager.getAllScopes();\n const scope = findScope(manifest, scopeName);\n if (\n scope &&\n (!collectionName ||\n (scope.collections || []).some((item: any) => item.name === collectionName))\n ) {\n return manifest;\n }\n } catch (error) {\n if (!isNotFound(error)) {\n throw provisionError(\n 'wait for collection metadata',\n `${scopeName}.${collectionName || ''}`,\n error\n );\n }\n }\n await delay(poll);\n }\n\n throw new Error(\n `Timed out waiting for Couchbase collection ${scopeName}.${\n collectionName || ''\n } to appear in the manifest`\n );\n }\n\n private async waitForIndexes(\n indexes: Array<{name: string; target: CollectionTarget}>,\n timeoutMs = 30000\n ): Promise<void> {\n const deadline = Date.now() + timeoutMs;\n\n while (Date.now() <= deadline) {\n const rows = await this.indexCatalog();\n if (\n indexes.every((index) =>\n rows.some(\n (row) =>\n row.name === index.name &&\n String(row.state).toLowerCase() === 'online' &&\n indexRowMatchesCollection(row, index.target)\n )\n )\n ) {\n return;\n }\n await delay(100);\n }\n\n throw new Error(\n `Timed out waiting for Couchbase indexes to become online: ${indexes\n .map((index) => index.name)\n .join(', ')}`\n );\n }\n\n private async indexCatalog(): Promise<any[]> {\n const result = await this.connection.cluster.query(\n 'SELECT name, bucket_id, keyspace_id, scope_id, collection_id, index_key, condition, is_primary, state FROM system:indexes WHERE bucket_id = $bucket OR keyspace_id = $bucket',\n {parameters: {bucket: this.settings.bucketName}}\n );\n return (result as any).rows || [];\n }\n}\n\n/** A model bound strictly to a Couchbase transaction attempt. */\nexport class TransactionModel<T = any> {\n constructor(private readonly model: TypedModel<T>, private readonly attempt: any) {}\n\n public async get(id: string): Promise<TransactionDocument<T> | null> {\n try {\n const document = await this.attempt.get(this.model.getCollection(), id);\n return {content: this.model.parse<T & AutoModelFields>(document.content), document};\n } catch (error) {\n if (isNotFound(error)) {\n return null;\n }\n throw error;\n }\n }\n\n public getById(id: string): Promise<TransactionDocument<T> | null> {\n return this.get(id);\n }\n\n public async insert(id: string, data: ModelCreateInput<T>): Promise<TransactionDocument<T>> {\n const stored = await this.model.prepareInsert({...data, id} as T);\n const document = await this.attempt.insert(this.model.getCollection(), id, stored);\n return {\n content: this.model.parse<T & AutoModelFields>(document.content || stored),\n document,\n };\n }\n\n /** Replace requires the prior transactional read, as required by the SDK. */\n public async replace(\n document: TransactionDocument<T>,\n data: T\n ): Promise<TransactionDocument<T>> {\n const stored = await this.model.prepareReplace(document.content.id, data);\n const replacement = await this.attempt.replace(document.document, stored);\n return {\n content: this.model.parse<T & AutoModelFields>(replacement.content || stored),\n document: replacement,\n };\n }\n\n public async replaceById(id: string, data: T): Promise<TransactionDocument<T>> {\n const current = await this.get(id);\n if (!current) {\n throw new Error(`Cannot replace missing transaction document ${id}`);\n }\n return this.replace(current, data);\n }\n\n public async remove(document: TransactionDocument<T>): Promise<void> {\n await this.attempt.remove(document.document);\n }\n\n public query<TRow = any>(statement: string, options?: any): Promise<{rows: TRow[]}> {\n return this.attempt.query(statement, options);\n }\n}\n\nexport interface TransactionDocument<T> {\n content: T & AutoModelFields;\n /** Opaque transaction SDK result; only pass it back to replace/remove. */\n document: any;\n}\n\nexport class CouchsetTransaction {\n constructor(private readonly client: CouchsetClient, private readonly attempt: any) {}\n\n public model<T>(definition: ModelDefinition<T>): TransactionModel<T> {\n return new TransactionModel<T>(this.client.model(definition), this.attempt);\n }\n\n public query<TRow = any>(statement: string, options?: any): Promise<{rows: TRow[]}> {\n return this.attempt.query(statement, options);\n }\n}\n\n/**\n * Creates a short-lived scoped fixture and a cleanup function. The caller must\n * invoke cleanup in after/afterEach; no normal client operation ever drops data.\n */\nexport const createCouchsetTestFixture = async <T = any>(\n client: CouchsetClient,\n definition: Omit<ModelDefinition<T>, 'scope' | 'collection'> & {\n scope?: string;\n collection?: string;\n }\n): Promise<{\n definition: ModelDefinition<T>;\n model: TypedModel<T>;\n cleanup: () => Promise<void>;\n}> => {\n const suffix = generateUUID().replace(/-/g, '').slice(0, 12);\n const fixtureScope = definition.scope || `couchset_test_${suffix}`;\n const generatedScope = fixtureScope !== definition.scope;\n const scoped = defineModel<T>({\n ...definition,\n collection: definition.collection || `fixture_${suffix}`,\n scope: fixtureScope,\n });\n const model = await client.registerModel(scoped, {provision: {collections: true}});\n\n return {\n definition: scoped,\n model,\n cleanup: async () => {\n const target = definitionTarget(scoped);\n const manager: any = (client.getConnection() as any).bucket.collections();\n try {\n await manager.dropCollection(target.collection, target.scope);\n } catch (error) {\n if (!isNotFound(error)) {\n throw provisionError(\n 'drop fixture collection',\n `${target.scope}.${target.collection}`,\n error\n );\n }\n }\n if (generatedScope) {\n try {\n await manager.dropScope(target.scope);\n } catch (error) {\n if (!isNotFound(error)) {\n throw provisionError('drop fixture scope', target.scope, error);\n }\n }\n }\n },\n };\n};\n\nexport const createCouchsetClient = (options: CouchsetClientOptions = {}): CouchsetClient =>\n new CouchsetClient(options);\n\nconst definitionTarget = (definition: ModelDefinition<any>): CollectionTarget => ({\n collection: Object.prototype.hasOwnProperty.call(definition, 'collection')\n ? definition.collection || '_default'\n : '_default',\n scope: Object.prototype.hasOwnProperty.call(definition, 'scope')\n ? definition.scope || '_default'\n : '_default',\n});\n\nconst modelIdentity = (definition: ModelDefinition<any>): string => {\n const target = definitionTarget(definition);\n return `${target.scope}.${target.collection}.${definition.name}`;\n};\n\nconst assertSameDefinition = (left: ModelDefinition<any>, right: ModelDefinition<any>): void => {\n if (!sameValue(left, right)) {\n throw new Error(\n `Model ${modelIdentity(\n left\n )} is already registered with a different definition; create a separate client or use a new model name`\n );\n }\n};\n\nconst sameValue = (left: any, right: any): boolean => {\n if (left === right) {\n return true;\n }\n if (!left || !right || typeof left !== 'object' || typeof right !== 'object') {\n return false;\n }\n if (left instanceof Date || right instanceof Date) {\n return left instanceof Date && right instanceof Date && left.getTime() === right.getTime();\n }\n if (Array.isArray(left) || Array.isArray(right)) {\n return (\n Array.isArray(left) &&\n Array.isArray(right) &&\n left.length === right.length &&\n left.every((item, index) => sameValue(item, right[index]))\n );\n }\n const leftKeys = Object.keys(left).sort();\n const rightKeys = Object.keys(right).sort();\n return (\n leftKeys.length === rightKeys.length &&\n leftKeys.every((key, index) => key === rightKeys[index] && sameValue(left[key], right[key]))\n );\n};\n\nconst findScope = (scopes: any[], name: string): any => scopes.find((scope) => scope.name === name);\n\nconst normalize = (value: any): string =>\n JSON.stringify(value || '')\n .replace(/[\\s`()\"']/g, '')\n .toLowerCase();\n\nconst indexMatches = (row: any, definition: ModelIndexDefinition): boolean => {\n if (!!row.is_primary !== !!definition.primary) {\n return false;\n }\n if (definition.primary) {\n return true;\n }\n\n const expectedKeys = (definition.fields || []).map((field) => {\n if (typeof field === 'string') {\n return field;\n }\n const key = Object.keys(field)[0];\n return `${key} ${field[key]}`;\n });\n return (\n normalize(row.index_key) === normalize(expectedKeys) &&\n normalize(row.condition) === normalize(indexCondition(definition))\n );\n};\n\n/** Match Couchbase's catalogued SQL++ condition against the same SQL++ we declare. */\nconst indexCondition = (definition: ModelIndexDefinition): string =>\n buildWhereExpr(definition.where).replace(/^\\s*WHERE\\s+/i, '');\n\nconst indexRowMatchesTarget = (row: any, definition: ModelDefinition<any>): boolean => {\n return indexRowMatchesCollection(row, definitionTarget(definition));\n};\n\nconst indexRowMatchesCollection = (row: any, target: CollectionTarget): boolean => {\n // On current Couchbase Server, scoped collection indexes expose the\n // collection in keyspace_id and omit collection_id. Older/default targets\n // may use keyspace_id for the bucket, so prefer collection_id when present.\n const collection = row.collection_id || (row.scope_id ? row.keyspace_id : undefined);\n return (\n (!row.scope_id || row.scope_id === target.scope) &&\n (!collection || collection === target.collection)\n );\n};\n\nconst versionedIndexName = (name: string, definition: ModelIndexDefinition): string => {\n const fingerprint = JSON.stringify({\n fields: definition.fields,\n primary: definition.primary,\n where: definition.where,\n })\n .split('')\n .reduce((hash, character) => (hash * 31 + character.charCodeAt(0)) >>> 0, 7)\n .toString(36);\n return `${name}_v${fingerprint}`;\n};\n"]}
1
+ {"version":3,"file":"next.js","sourceRoot":"","sources":["../src/next.ts"],"names":[],"mappings":"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","sourcesContent":["import type {Bucket, Cluster} from 'couchbase';\n\nimport couchbase from './couchbase';\nimport type {CouchsetArgs} from './connection';\nimport {Eventing} from './eventing';\nimport type {EventingOptions} from './eventing';\nimport {AutoModelFields, FieldCodec, Model, ModelConnection, ModalOptions} from './model';\nimport type {ModelIndexDefinition, ModelReadArgs, ModelPageResult} from './model';\nimport type {CheckedReadArgs, ModelDocument, ModelReadResult} from './model/read-types';\nimport {buildIndexQuery} from './model/indexes';\nimport {escapeIdentifier, keyspaceIdentifier} from './model/keyspace';\nimport type {SortType} from './query/interface/query.types';\nimport {buildWhereExpr} from './query/helpers/builders';\nimport {generateUUID} from './uuid';\n\nexport {joinField} from './model/include';\nexport type {JoinField, JoinPredicate, IncludeDefinition, IncludeType} from './model/include';\nexport type {ModelReadResult} from './model/read-types';\n\nexport type {FieldCodec} from './model';\nexport * from './eventing';\n\n/** A JSON-friendly Date codec for models declared with defineModel. */\nexport const dateCodec: FieldCodec<Date, string> = {\n fromDatabase: (value: string): Date => new Date(value),\n toDatabase: (value: Date): string => value.toISOString(),\n};\n\nexport interface ModelCollectionSettings {\n maxExpiry?: number;\n history?: boolean;\n}\n\n/**\n * A model definition has no connection and performs no I/O. Definitions may be\n * reused safely across clients and are the unit the client registers.\n */\nexport type ModelField<T> = Extract<keyof T, string>;\nexport type TypedIndexField<T> = ModelField<T> | Partial<Record<ModelField<T>, SortType>>;\nexport type ModelCodecs<T> = Partial<{\n [Field in ModelField<T>]: FieldCodec<T[Field], any>;\n}> &\n Partial<Record<`${string}.${string}`, FieldCodec<any, any>>>;\n\nexport interface TypedModelIndexDefinition<T> extends Omit<ModelIndexDefinition, 'fields'> {\n fields?: TypedIndexField<T>[];\n}\n\nexport interface ModelDefinition<T = any> extends Omit<ModalOptions, 'codecs' | 'indexes'> {\n name: string;\n collectionSettings?: ModelCollectionSettings;\n codecs?: ModelCodecs<T>;\n indexes?: TypedModelIndexDefinition<T>[];\n}\n\n/** User fields are distinct from CouchSet's generated persistence metadata. */\nexport type ModelCreateInput<T> = Omit<T, keyof AutoModelFields> &\n Partial<Pick<T, Extract<keyof T, keyof AutoModelFields>>>;\n\nexport interface TypedModel<T>\n extends Omit<\n Model,\n | 'getById'\n | 'getWithCas'\n | 'insert'\n | 'replaceById'\n | 'replaceIfCas'\n | 'findMany'\n | 'findOne'\n | 'page'\n | 'withDeleted'\n | 'onlyDeleted'\n | 'withoutDefaultWhere'\n >,\n ModelDocument<T & AutoModelFields> {\n findMany<const A extends ModelReadArgs = {}>(\n args?: CheckedReadArgs<T, A>\n ): Promise<ModelReadResult<T, A>[]>;\n findOne<const A extends ModelReadArgs = {}>(\n args?: CheckedReadArgs<T, A>\n ): Promise<ModelReadResult<T, A> | null>;\n page<const A extends ModelReadArgs = {}>(\n args?: CheckedReadArgs<T, A>\n ): Promise<ModelPageResult<ModelReadResult<T, A>>>;\n withDeleted(): TypedModel<T>;\n onlyDeleted(): TypedModel<T>;\n withoutDefaultWhere(): TypedModel<T>;\n getById(id: string, options?: any): Promise<T & AutoModelFields>;\n getWithCas(\n id: string,\n options?: any\n ): Promise<{content: T & AutoModelFields; cas: any; expiryTime?: any}>;\n insert(data: ModelCreateInput<T>, options?: any): Promise<T & AutoModelFields>;\n replaceById(id: string, data: T, options?: any): Promise<T & AutoModelFields>;\n replaceIfCas(id: string, data: T, cas: any, options?: any): Promise<T & AutoModelFields>;\n}\n\nexport const defineModel = <T = any>(definition: ModelDefinition<T>): ModelDefinition<T> => {\n if (!definition || !definition.name) {\n throw new Error('defineModel requires a non-empty name');\n }\n\n return {...definition};\n};\n\nexport interface CouchsetClientDependencies {\n /** Supply a fully controlled runtime for tests or an application-owned connection. */\n connection?: ModelConnection;\n /** Supply an already connected SDK cluster/bucket without using couchbase.connect. */\n cluster?: Cluster;\n bucket?: Bucket;\n /** Override connection construction; useful for dependency injection and test doubles. */\n connect?: (settings: CouchsetArgs) => Promise<Cluster>;\n}\n\nexport interface CouchsetClientOptions extends Partial<CouchsetArgs> {\n models?: Array<ModelDefinition<any>>;\n dependencies?: CouchsetClientDependencies;\n}\n\nexport interface EnsureCollectionsOptions {\n models?: Array<ModelDefinition<any>>;\n timeoutMs?: number;\n pollIntervalMs?: number;\n}\n\nexport interface ProvisionOptions extends EnsureCollectionsOptions {\n collections?: boolean;\n indexes?: boolean;\n waitForIndexes?: boolean;\n}\n\nexport interface RegisterModelOptions extends ProvisionOptions {\n /** Explicitly provision this dynamic model. Constructors and CRUD never do this. */\n provision?: boolean | {collections?: boolean; indexes?: boolean; waitForIndexes?: boolean};\n}\n\nexport interface ProvisionedTarget {\n scope: string;\n collection: string;\n createdScope: boolean;\n createdCollection: boolean;\n}\n\nexport interface IndexPlanItem {\n status: 'create' | 'matching' | 'replace';\n definition: ModelIndexDefinition;\n keyspace: string;\n target: CollectionTarget;\n /** The physical index CouchSet will create. Replacement names are versioned. */\n createAs: string;\n /** Only populated for an explicit or detected safe replacement. */\n replaces?: string;\n reason?: string;\n}\n\nexport interface IndexPlan {\n items: IndexPlanItem[];\n}\n\nexport interface ApplyIndexPlanOptions {\n /** Opt-in only: drop old indexes after the replacement is online. */\n dropReplaced?: boolean;\n timeoutMs?: number;\n}\n\ninterface RegisteredModel<T = any> {\n definition: ModelDefinition<T>;\n model: Model;\n}\n\ninterface CollectionTarget {\n scope: string;\n collection: string;\n settings?: ModelCollectionSettings;\n}\n\nconst defaultSettings = (options: CouchsetClientOptions): CouchsetArgs => ({\n bucketName: options.bucketName || 'default',\n connectionString: options.connectionString || 'couchbase://localhost',\n password: options.password || '',\n username: options.username || '',\n proxy: options.proxy,\n});\n\nconst errorText = (error: any): string => `${error?.name || ''} ${error?.message || error || ''}`;\nconst isAlreadyExists = (error: any): boolean =>\n /already exists|exists|ScopeExists|CollectionExists/i.test(errorText(error));\nconst isNotFound = (error: any): boolean => /not found|not exist/i.test(errorText(error));\n\nconst provisionError = (operation: string, target: string, error: any): Error => {\n const message = errorText(error);\n const privilege = /access|permission|authoriz|privilege|forbidden/i.test(message)\n ? ' This operation requires Couchbase Manage Scopes privileges on the bucket.'\n : '';\n const wrapped: any = new Error(\n `CouchSet could not ${operation} ${target}.${privilege} ${message}`.trim()\n );\n wrapped.cause = error;\n return wrapped;\n};\n\nconst delay = (milliseconds: number): Promise<void> =>\n new Promise((resolve) => setTimeout(resolve, milliseconds));\n\nclass DirectConnection implements ModelConnection {\n public cluster: Cluster;\n public bucket: Bucket;\n private connectPromise?: Promise<Cluster>;\n\n constructor(\n private readonly settings: CouchsetArgs,\n private readonly dependencies: CouchsetClientDependencies\n ) {\n this.cluster = dependencies.cluster as Cluster;\n this.bucket = dependencies.bucket as Bucket;\n\n if (this.cluster && !this.bucket) {\n this.bucket = this.cluster.bucket(settings.bucketName);\n }\n }\n\n public getBucket(): string {\n return this.settings.bucketName;\n }\n\n public getCollection(scopeName?: string, collectionName?: string): any {\n if (!this.bucket) {\n throw new Error('CouchSet client is not connected; call client.ready() first');\n }\n\n if (!scopeName && !collectionName) {\n return this.bucket.defaultCollection();\n }\n\n return this.bucket.scope(scopeName || '_default').collection(collectionName || '_default');\n }\n\n public isConnected(): boolean {\n return !!this.cluster && !!this.bucket;\n }\n\n public async ready(): Promise<DirectConnection> {\n if (this.isConnected()) {\n return this;\n }\n\n if (!this.connectPromise) {\n const connect =\n this.dependencies.connect ||\n ((settings: CouchsetArgs) =>\n couchbase.connect(settings.connectionString, {\n password: settings.password,\n proxy: settings.proxy,\n username: settings.username,\n }));\n this.connectPromise = connect(this.settings);\n }\n\n this.cluster = await this.connectPromise;\n this.bucket = this.cluster.bucket(this.settings.bucketName);\n return this;\n }\n\n public shouldReconnect(): boolean {\n return false;\n }\n\n public markDisconnected(): void {\n // A client-owned connection never retries an arbitrary write operation.\n }\n\n public async shutdown(): Promise<void> {\n if (this.cluster && typeof (this.cluster as any).close === 'function') {\n await (this.cluster as any).close();\n }\n this.cluster = undefined as any;\n this.bucket = undefined as any;\n }\n}\n\n/**\n * A client owns its model-definition registry and connection. It intentionally\n * does not alter the legacy singleton or register models globally.\n */\nexport class CouchsetClient {\n private readonly connection: ModelConnection;\n private readonly registered = new Map<string, RegisteredModel<any>>();\n private readonly settings: CouchsetArgs;\n\n constructor(options: CouchsetClientOptions = {}) {\n this.settings = defaultSettings(options);\n const dependencies = options.dependencies || {};\n\n if (dependencies.connection) {\n const bucketName = dependencies.connection.getBucket();\n if (!bucketName) {\n throw new Error('Injected CouchSet connections must expose a bucket name');\n }\n if (options.bucketName && options.bucketName !== bucketName) {\n throw new Error(\n `Injected CouchSet connection targets ${bucketName}, not requested bucket ${options.bucketName}`\n );\n }\n this.settings.bucketName = bucketName;\n } else if (dependencies.bucket) {\n const bucketName = dependencies.bucket.name;\n if (options.bucketName && options.bucketName !== bucketName) {\n throw new Error(\n `Injected Couchbase bucket targets ${bucketName}, not requested bucket ${options.bucketName}`\n );\n }\n this.settings.bucketName = bucketName;\n } else if (dependencies.cluster && !options.bucketName) {\n throw new Error('bucketName is required when injecting a Couchbase cluster');\n }\n\n this.connection =\n dependencies.connection || new DirectConnection(this.settings, dependencies);\n\n (options.models || []).forEach((definition) => this.model(definition));\n }\n\n public async ready(): Promise<this> {\n await this.connection.ready();\n return this;\n }\n\n public async shutdown(): Promise<void> {\n const shutdown = (this.connection as any).shutdown;\n if (typeof shutdown === 'function') {\n await shutdown.call(this.connection);\n }\n }\n\n public definitions(): ModelDefinition<any>[] {\n return Array.from(this.registered.values()).map(({definition}) => definition);\n }\n\n /**\n * Creates a namespace-owned Eventing control plane. Definitions remain\n * declarative until eventing.apply() is called.\n */\n public eventing(options: EventingOptions): Eventing {\n return new Eventing(this, options);\n }\n\n /** Bind and register a definition without provisioning or index DDL. */\n public model<T>(definition: ModelDefinition<T>): TypedModel<T> {\n const identity = modelIdentity(definition);\n const existing = this.registered.get(identity);\n\n if (existing) {\n assertSameDefinition(existing.definition, definition);\n return existing.model as TypedModel<T>;\n }\n\n const model = new Model(definition.name, definition as ModalOptions, this.connection);\n this.registered.set(identity, {definition, model});\n return model as TypedModel<T>;\n }\n\n /**\n * Async registration for dynamic models. DDL is performed only when the\n * caller explicitly opts into provision; ordinary model() is side-effect-free.\n */\n public async registerModel<T>(\n definition: ModelDefinition<T>,\n options: RegisterModelOptions = {}\n ): Promise<TypedModel<T>> {\n const model = this.model(definition);\n const requested = options.provision;\n\n if (requested) {\n const config =\n typeof requested === 'boolean' ? {collections: true, indexes: true} : requested;\n await this.provision({\n collections: config.collections !== false,\n indexes: config.indexes !== false,\n models: [definition],\n timeoutMs: options.timeoutMs,\n waitForIndexes: config.waitForIndexes,\n });\n }\n\n return model;\n }\n\n /** Create only missing scopes/collections. Existing resources are never altered. */\n public async ensureCollections(\n options: EnsureCollectionsOptions = {}\n ): Promise<ProvisionedTarget[]> {\n await this.ready();\n const targets = this.targets(options.models);\n const manager: any = (this.connection as any).bucket.collections();\n let manifest: any[];\n\n try {\n manifest = await manager.getAllScopes();\n } catch (error) {\n throw provisionError('read the scope manifest for', this.settings.bucketName, error);\n }\n\n const result: ProvisionedTarget[] = [];\n for (const target of targets) {\n const defaultTarget = target.scope === '_default' && target.collection === '_default';\n if (defaultTarget) {\n result.push({...target, createdScope: false, createdCollection: false});\n continue;\n }\n\n let scope = findScope(manifest, target.scope);\n let createdScope = false;\n if (!scope && target.scope !== '_default') {\n try {\n await manager.createScope(target.scope);\n createdScope = true;\n } catch (error) {\n if (!isAlreadyExists(error)) {\n throw provisionError('create scope', target.scope, error);\n }\n }\n manifest = await this.waitForCollectionManifest(target.scope, undefined, options);\n scope = findScope(manifest, target.scope);\n }\n\n if (!scope) {\n throw new Error(`CouchSet could not find scope ${target.scope} after provisioning`);\n }\n\n const exists = (scope.collections || []).some(\n (item: any) => item.name === target.collection\n );\n let createdCollection = false;\n if (!exists) {\n try {\n await manager.createCollection(\n target.collection,\n target.scope,\n target.settings || {}\n );\n createdCollection = true;\n } catch (error) {\n if (!isAlreadyExists(error)) {\n throw provisionError(\n 'create collection',\n `${target.scope}.${target.collection}`,\n error\n );\n }\n }\n }\n\n await this.waitForCollectionManifest(target.scope, target.collection, options);\n result.push({...target, createdScope, createdCollection});\n }\n\n return result;\n }\n\n /** Explicit bootstrap: provisioning occurs before index creation. */\n public async provision(options: ProvisionOptions = {}): Promise<{\n collections: ProvisionedTarget[];\n indexes: string[];\n }> {\n const definitions = options.models || this.definitions();\n const collections =\n options.collections === false\n ? []\n : await this.ensureCollections({...options, models: definitions});\n const indexes = options.indexes\n ? await this.ensureIndexes({\n models: definitions,\n waitForIndexes: options.waitForIndexes,\n timeoutMs: options.timeoutMs,\n })\n : [];\n\n return {collections, indexes};\n }\n\n /** Normal ensureIndexes stays create-only. It never checks, drops, or changes an existing index. */\n public async ensureIndexes(\n options: {\n models?: Array<ModelDefinition<any>>;\n deferred?: boolean;\n waitForIndexes?: boolean;\n timeoutMs?: number;\n } = {}\n ): Promise<string[]> {\n await this.ready();\n const definitions = options.models || this.definitions();\n const queries: string[] = [];\n const indexes: Array<{name: string; target: CollectionTarget}> = [];\n\n for (const definition of definitions) {\n const model = this.model(definition);\n const statements = await model.ensureIndexes({deferred: options.deferred});\n queries.push(...statements);\n indexes.push(\n ...(definition.indexes || []).map((index) => ({\n name: index.name,\n target: definitionTarget(definition),\n }))\n );\n }\n\n if (options.waitForIndexes && indexes.length) {\n await this.waitForIndexes(indexes, options.timeoutMs);\n }\n\n return queries;\n }\n\n /** Report missing, matching, and drifted indexes; this method has no DDL side effects. */\n public async planIndexes(\n options: {models?: Array<ModelDefinition<any>>} = {}\n ): Promise<IndexPlan> {\n await this.ready();\n const rows = await this.indexCatalog();\n const items: IndexPlanItem[] = [];\n\n for (const definition of options.models || this.definitions()) {\n const keyspace = this.keyspace(definition);\n const target = definitionTarget(definition);\n for (const index of definition.indexes || []) {\n const matchingRows = rows.filter((row) => indexRowMatchesTarget(row, definition));\n const desired = matchingRows.find((row) => row.name === index.name);\n const replacementName = versionedIndexName(index.name, index);\n const replacement = matchingRows.find((row) => row.name === replacementName);\n\n // A previous safe rollout may have dropped the old logical name\n // while retaining this deterministic replacement physical name.\n if (replacement && indexMatches(replacement, index)) {\n items.push({\n createAs: replacementName,\n definition: index,\n keyspace,\n status: 'matching',\n target,\n });\n continue;\n }\n\n if (desired && indexMatches(desired, index)) {\n items.push({\n createAs: index.name,\n definition: index,\n keyspace,\n status: 'matching',\n target,\n });\n continue;\n }\n\n // `replaces` explicitly asks for a new physical index, even if\n // the predecessor happens to have equivalent keys.\n const predecessorName = index.replaces || index.name;\n const predecessor = matchingRows.find((row) => row.name === predecessorName);\n\n if (!predecessor) {\n items.push({\n createAs: index.name,\n definition: index,\n keyspace,\n status: 'create',\n target,\n });\n continue;\n }\n\n const createAs = index.replaces ? index.name : replacementName;\n items.push({\n createAs,\n definition: index,\n keyspace,\n reason: 'Declared keys, predicate, or primary mode differs from the live index.',\n replaces: predecessor.name,\n status: 'replace',\n target,\n });\n }\n }\n\n return {items};\n }\n\n /**\n * Apply a reviewed plan by creating versioned replacements and waiting for\n * them. Dropping old indexes is deliberately an explicit second opt-in.\n */\n public async applyIndexPlan(\n plan: IndexPlan,\n options: ApplyIndexPlanOptions = {}\n ): Promise<string[]> {\n await this.ready();\n const applied: string[] = [];\n const replacements: Array<{name: string; target: CollectionTarget}> = [];\n\n for (const item of plan.items) {\n if (item.status === 'matching') {\n continue;\n }\n\n const definition = {...item.definition, name: item.createAs};\n const query = buildIndexQuery(item.keyspace, definition);\n await this.connection.cluster.query(query);\n applied.push(query);\n replacements.push({name: item.createAs, target: item.target});\n }\n\n if (replacements.length) {\n await this.waitForIndexes(replacements, options.timeoutMs);\n }\n\n if (options.dropReplaced) {\n for (const item of plan.items) {\n if (item.status === 'replace' && item.replaces) {\n await this.connection.cluster.query(\n `DROP INDEX ${item.keyspace}.${escapeIdentifier(item.replaces)}`\n );\n }\n }\n }\n\n return applied;\n }\n\n /**\n * Run the callback through Couchbase's transaction retry loop. The callback\n * may execute more than once; do not perform external side effects inside it.\n * A commit-ambiguous error is rethrown and must be resolved by the caller via\n * an idempotency key/outbox, never by blindly retrying a side effect.\n */\n public async transaction<T>(\n callback: (transaction: CouchsetTransaction) => Promise<T>\n ): Promise<T> {\n await this.ready();\n let result: T;\n await (this.connection.cluster as any).transactions().run(async (attempt: any) => {\n result = await callback(new CouchsetTransaction(this, attempt));\n });\n return result as T;\n }\n\n public keyspace(definition: ModelDefinition<any>): string {\n const target = definitionTarget(definition);\n return keyspaceIdentifier({\n bucketName: this.settings.bucketName,\n collectionName: target.collection,\n scopeName: target.scope,\n });\n }\n\n public getConnection(): ModelConnection {\n return this.connection;\n }\n\n private targets(definitions?: Array<ModelDefinition<any>>): CollectionTarget[] {\n const targets = new Map<string, CollectionTarget>();\n for (const definition of definitions || this.definitions()) {\n const target = definitionTarget(definition);\n const identity = `${target.scope}.${target.collection}`;\n const existing = targets.get(identity);\n const settings = definition.collectionSettings;\n\n if (\n existing &&\n JSON.stringify(existing.settings || {}) !== JSON.stringify(settings || {})\n ) {\n throw new Error(\n `Conflicting collection settings declared for ${identity}; CouchSet will not alter an existing collection`\n );\n }\n targets.set(identity, {...target, settings});\n }\n return Array.from(targets.values());\n }\n\n private async waitForCollectionManifest(\n scopeName: string,\n collectionName: string | undefined,\n options: EnsureCollectionsOptions\n ): Promise<any[]> {\n const manager: any = (this.connection as any).bucket.collections();\n const timeout = options.timeoutMs || 30000;\n const poll = options.pollIntervalMs || 100;\n const deadline = Date.now() + timeout;\n\n while (Date.now() <= deadline) {\n try {\n const manifest = await manager.getAllScopes();\n const scope = findScope(manifest, scopeName);\n if (\n scope &&\n (!collectionName ||\n (scope.collections || []).some((item: any) => item.name === collectionName))\n ) {\n return manifest;\n }\n } catch (error) {\n if (!isNotFound(error)) {\n throw provisionError(\n 'wait for collection metadata',\n `${scopeName}.${collectionName || ''}`,\n error\n );\n }\n }\n await delay(poll);\n }\n\n throw new Error(\n `Timed out waiting for Couchbase collection ${scopeName}.${\n collectionName || ''\n } to appear in the manifest`\n );\n }\n\n private async waitForIndexes(\n indexes: Array<{name: string; target: CollectionTarget}>,\n timeoutMs = 30000\n ): Promise<void> {\n const deadline = Date.now() + timeoutMs;\n\n while (Date.now() <= deadline) {\n const rows = await this.indexCatalog();\n if (\n indexes.every((index) =>\n rows.some(\n (row) =>\n row.name === index.name &&\n String(row.state).toLowerCase() === 'online' &&\n indexRowMatchesCollection(row, index.target)\n )\n )\n ) {\n return;\n }\n await delay(100);\n }\n\n throw new Error(\n `Timed out waiting for Couchbase indexes to become online: ${indexes\n .map((index) => index.name)\n .join(', ')}`\n );\n }\n\n private async indexCatalog(): Promise<any[]> {\n const result = await this.connection.cluster.query(\n 'SELECT name, bucket_id, keyspace_id, scope_id, collection_id, index_key, condition, is_primary, state FROM system:indexes WHERE bucket_id = $bucket OR keyspace_id = $bucket',\n {parameters: {bucket: this.settings.bucketName}}\n );\n return (result as any).rows || [];\n }\n}\n\n/** A model bound strictly to a Couchbase transaction attempt. */\nexport class TransactionModel<T = any> {\n constructor(private readonly model: TypedModel<T>, private readonly attempt: any) {}\n\n public async get(id: string): Promise<TransactionDocument<T> | null> {\n try {\n const document = await this.attempt.get(this.model.getCollection(), id);\n return {content: this.model.parse<T & AutoModelFields>(document.content), document};\n } catch (error) {\n if (isNotFound(error)) {\n return null;\n }\n throw error;\n }\n }\n\n public getById(id: string): Promise<TransactionDocument<T> | null> {\n return this.get(id);\n }\n\n public async insert(id: string, data: ModelCreateInput<T>): Promise<TransactionDocument<T>> {\n const stored = await this.model.prepareInsert({...data, id} as T);\n const document = await this.attempt.insert(this.model.getCollection(), id, stored);\n return {\n content: this.model.parse<T & AutoModelFields>(document.content || stored),\n document,\n };\n }\n\n /** Replace requires the prior transactional read, as required by the SDK. */\n public async replace(\n document: TransactionDocument<T>,\n data: T\n ): Promise<TransactionDocument<T>> {\n const stored = await this.model.prepareReplace(document.content.id, data);\n const replacement = await this.attempt.replace(document.document, stored);\n return {\n content: this.model.parse<T & AutoModelFields>(replacement.content || stored),\n document: replacement,\n };\n }\n\n public async replaceById(id: string, data: T): Promise<TransactionDocument<T>> {\n const current = await this.get(id);\n if (!current) {\n throw new Error(`Cannot replace missing transaction document ${id}`);\n }\n return this.replace(current, data);\n }\n\n public async remove(document: TransactionDocument<T>): Promise<void> {\n await this.attempt.remove(document.document);\n }\n\n public query<TRow = any>(statement: string, options?: any): Promise<{rows: TRow[]}> {\n return this.attempt.query(statement, options);\n }\n}\n\nexport interface TransactionDocument<T> {\n content: T & AutoModelFields;\n /** Opaque transaction SDK result; only pass it back to replace/remove. */\n document: any;\n}\n\nexport class CouchsetTransaction {\n constructor(private readonly client: CouchsetClient, private readonly attempt: any) {}\n\n public model<T>(definition: ModelDefinition<T>): TransactionModel<T> {\n return new TransactionModel<T>(this.client.model(definition), this.attempt);\n }\n\n public query<TRow = any>(statement: string, options?: any): Promise<{rows: TRow[]}> {\n return this.attempt.query(statement, options);\n }\n}\n\n/**\n * Creates a short-lived scoped fixture and a cleanup function. The caller must\n * invoke cleanup in after/afterEach; no normal client operation ever drops data.\n */\nexport const createCouchsetTestFixture = async <T = any>(\n client: CouchsetClient,\n definition: Omit<ModelDefinition<T>, 'scope' | 'collection'> & {\n scope?: string;\n collection?: string;\n }\n): Promise<{\n definition: ModelDefinition<T>;\n model: TypedModel<T>;\n cleanup: () => Promise<void>;\n}> => {\n const suffix = generateUUID().replace(/-/g, '').slice(0, 12);\n const fixtureScope = definition.scope || `couchset_test_${suffix}`;\n const generatedScope = fixtureScope !== definition.scope;\n const scoped = defineModel<T>({\n ...definition,\n collection: definition.collection || `fixture_${suffix}`,\n scope: fixtureScope,\n });\n const model = await client.registerModel(scoped, {provision: {collections: true}});\n\n return {\n definition: scoped,\n model,\n cleanup: async () => {\n const target = definitionTarget(scoped);\n const manager: any = (client.getConnection() as any).bucket.collections();\n try {\n await manager.dropCollection(target.collection, target.scope);\n } catch (error) {\n if (!isNotFound(error)) {\n throw provisionError(\n 'drop fixture collection',\n `${target.scope}.${target.collection}`,\n error\n );\n }\n }\n if (generatedScope) {\n try {\n await manager.dropScope(target.scope);\n } catch (error) {\n if (!isNotFound(error)) {\n throw provisionError('drop fixture scope', target.scope, error);\n }\n }\n }\n },\n };\n};\n\nexport const createCouchsetClient = (options: CouchsetClientOptions = {}): CouchsetClient =>\n new CouchsetClient(options);\n\nconst definitionTarget = (definition: ModelDefinition<any>): CollectionTarget => ({\n collection: Object.prototype.hasOwnProperty.call(definition, 'collection')\n ? definition.collection || '_default'\n : '_default',\n scope: Object.prototype.hasOwnProperty.call(definition, 'scope')\n ? definition.scope || '_default'\n : '_default',\n});\n\nconst modelIdentity = (definition: ModelDefinition<any>): string => {\n const target = definitionTarget(definition);\n return `${target.scope}.${target.collection}.${definition.name}`;\n};\n\nconst assertSameDefinition = (left: ModelDefinition<any>, right: ModelDefinition<any>): void => {\n if (!sameValue(left, right)) {\n throw new Error(\n `Model ${modelIdentity(\n left\n )} is already registered with a different definition; create a separate client or use a new model name`\n );\n }\n};\n\nconst sameValue = (left: any, right: any): boolean => {\n if (left === right) {\n return true;\n }\n if (!left || !right || typeof left !== 'object' || typeof right !== 'object') {\n return false;\n }\n if (left instanceof Date || right instanceof Date) {\n return left instanceof Date && right instanceof Date && left.getTime() === right.getTime();\n }\n if (Array.isArray(left) || Array.isArray(right)) {\n return (\n Array.isArray(left) &&\n Array.isArray(right) &&\n left.length === right.length &&\n left.every((item, index) => sameValue(item, right[index]))\n );\n }\n const leftKeys = Object.keys(left).sort();\n const rightKeys = Object.keys(right).sort();\n return (\n leftKeys.length === rightKeys.length &&\n leftKeys.every((key, index) => key === rightKeys[index] && sameValue(left[key], right[key]))\n );\n};\n\nconst findScope = (scopes: any[], name: string): any => scopes.find((scope) => scope.name === name);\n\nconst normalize = (value: any): string =>\n JSON.stringify(value || '')\n .replace(/[\\s`()\"']/g, '')\n .toLowerCase();\n\nconst indexMatches = (row: any, definition: ModelIndexDefinition): boolean => {\n if (!!row.is_primary !== !!definition.primary) {\n return false;\n }\n if (definition.primary) {\n return true;\n }\n\n const expectedKeys = (definition.fields || []).map((field) => {\n if (typeof field === 'string') {\n return field;\n }\n const key = Object.keys(field)[0];\n return `${key} ${field[key]}`;\n });\n return (\n normalize(row.index_key) === normalize(expectedKeys) &&\n normalize(row.condition) === normalize(indexCondition(definition))\n );\n};\n\n/** Match Couchbase's catalogued SQL++ condition against the same SQL++ we declare. */\nconst indexCondition = (definition: ModelIndexDefinition): string =>\n buildWhereExpr(definition.where).replace(/^\\s*WHERE\\s+/i, '');\n\nconst indexRowMatchesTarget = (row: any, definition: ModelDefinition<any>): boolean => {\n return indexRowMatchesCollection(row, definitionTarget(definition));\n};\n\nconst indexRowMatchesCollection = (row: any, target: CollectionTarget): boolean => {\n // On current Couchbase Server, scoped collection indexes expose the\n // collection in keyspace_id and omit collection_id. Older/default targets\n // may use keyspace_id for the bucket, so prefer collection_id when present.\n const collection = row.collection_id || (row.scope_id ? row.keyspace_id : undefined);\n return (\n (!row.scope_id || row.scope_id === target.scope) &&\n (!collection || collection === target.collection)\n );\n};\n\nconst versionedIndexName = (name: string, definition: ModelIndexDefinition): string => {\n const fingerprint = JSON.stringify({\n fields: definition.fields,\n primary: definition.primary,\n where: definition.where,\n })\n .split('')\n .reduce((hash, character) => (hash * 31 + character.charCodeAt(0)) >>> 0, 7)\n .toString(36);\n return `${name}_v${fingerprint}`;\n};\n"]}