couchset 0.4.1 → 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.
Files changed (39) hide show
  1. package/README.md +177 -2
  2. package/dist/database.d.ts +6 -0
  3. package/dist/database.js +51 -2
  4. package/dist/database.js.map +1 -1
  5. package/dist/eventing.d.ts +179 -0
  6. package/dist/eventing.js +822 -0
  7. package/dist/eventing.js.map +1 -0
  8. package/dist/model/include.d.ts +36 -3
  9. package/dist/model/include.js +154 -49
  10. package/dist/model/include.js.map +1 -1
  11. package/dist/model/index.d.ts +4 -1
  12. package/dist/model/index.js +8 -1
  13. package/dist/model/index.js.map +1 -1
  14. package/dist/model/read-helpers.d.ts +6 -2
  15. package/dist/model/read-helpers.js +96 -23
  16. package/dist/model/read-helpers.js.map +1 -1
  17. package/dist/model/read-types.d.ts +51 -0
  18. package/dist/model/read-types.js +3 -0
  19. package/dist/model/read-types.js.map +1 -0
  20. package/dist/model/safe-query.d.ts +3 -0
  21. package/dist/model/safe-query.js +22 -2
  22. package/dist/model/safe-query.js.map +1 -1
  23. package/dist/next.d.ts +20 -2
  24. package/dist/next.js +26 -1
  25. package/dist/next.js.map +1 -1
  26. package/dist/next.types.js +149 -1
  27. package/dist/next.types.js.map +1 -1
  28. package/dist/pagination/pagination.js +3 -1
  29. package/dist/pagination/pagination.js.map +1 -1
  30. package/dist/pagination/types.d.ts +2 -0
  31. package/dist/pagination/types.js.map +1 -1
  32. package/dist/search/customQuery.d.ts +2 -0
  33. package/dist/search/customQuery.js +4 -1
  34. package/dist/search/customQuery.js.map +1 -1
  35. package/docs/beta-migration.md +1 -1
  36. package/docs/document-modeling.md +5 -1
  37. package/docs/joins-and-consistency.md +228 -0
  38. package/docs/next-primitives.md +37 -0
  39. package/package.json +2 -1
@@ -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
@@ -1,9 +1,16 @@
1
1
  import type { Bucket, Cluster } from 'couchbase';
2
2
  import type { CouchsetArgs } from './connection';
3
+ import { Eventing } from './eventing';
4
+ import type { EventingOptions } from './eventing';
3
5
  import { AutoModelFields, FieldCodec, Model, ModelConnection, ModalOptions } from './model';
4
- import type { ModelIndexDefinition } from './model';
6
+ import type { ModelIndexDefinition, ModelReadArgs, ModelPageResult } from './model';
7
+ import type { CheckedReadArgs, ModelDocument, ModelReadResult } from './model/read-types';
5
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';
6
12
  export type { FieldCodec } from './model';
13
+ export * from './eventing';
7
14
  /** A JSON-friendly Date codec for models declared with defineModel. */
8
15
  export declare const dateCodec: FieldCodec<Date, string>;
9
16
  export interface ModelCollectionSettings {
@@ -30,7 +37,13 @@ export interface ModelDefinition<T = any> extends Omit<ModalOptions, 'codecs' |
30
37
  }
31
38
  /** User fields are distinct from CouchSet's generated persistence metadata. */
32
39
  export type ModelCreateInput<T> = Omit<T, keyof AutoModelFields> & Partial<Pick<T, Extract<keyof T, keyof AutoModelFields>>>;
33
- export interface TypedModel<T> extends Omit<Model, 'getById' | 'getWithCas' | 'insert' | 'replaceById' | 'replaceIfCas'> {
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>;
34
47
  getById(id: string, options?: any): Promise<T & AutoModelFields>;
35
48
  getWithCas(id: string, options?: any): Promise<{
36
49
  content: T & AutoModelFields;
@@ -115,6 +128,11 @@ export declare class CouchsetClient {
115
128
  ready(): Promise<this>;
116
129
  shutdown(): Promise<void>;
117
130
  definitions(): ModelDefinition<any>[];
131
+ /**
132
+ * Creates a namespace-owned Eventing control plane. Definitions remain
133
+ * declarative until eventing.apply() is called.
134
+ */
135
+ eventing(options: EventingOptions): Eventing;
118
136
  /** Bind and register a definition without provisioning or index DDL. */
119
137
  model<T>(definition: ModelDefinition<T>): TypedModel<T>;
120
138
  /**
package/dist/next.js CHANGED
@@ -10,6 +10,20 @@ var __assign = (this && this.__assign) || function () {
10
10
  };
11
11
  return __assign.apply(this, arguments);
12
12
  };
13
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ var desc = Object.getOwnPropertyDescriptor(m, k);
16
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
17
+ desc = { enumerable: true, get: function() { return m[k]; } };
18
+ }
19
+ Object.defineProperty(o, k2, desc);
20
+ }) : (function(o, m, k, k2) {
21
+ if (k2 === undefined) k2 = k;
22
+ o[k2] = m[k];
23
+ }));
24
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
25
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
26
+ };
13
27
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
14
28
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
15
29
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -86,13 +100,17 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
86
100
  return (mod && mod.__esModule) ? mod : { "default": mod };
87
101
  };
88
102
  Object.defineProperty(exports, "__esModule", { value: true });
89
- 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;
90
104
  var couchbase_1 = __importDefault(require("./couchbase"));
105
+ var eventing_1 = require("./eventing");
91
106
  var model_1 = require("./model");
92
107
  var indexes_1 = require("./model/indexes");
93
108
  var keyspace_1 = require("./model/keyspace");
94
109
  var builders_1 = require("./query/helpers/builders");
95
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; } });
113
+ __exportStar(require("./eventing"), exports);
96
114
  /** A JSON-friendly Date codec for models declared with defineModel. */
97
115
  exports.dateCodec = {
98
116
  fromDatabase: function (value) { return new Date(value); },
@@ -280,6 +298,13 @@ var CouchsetClient = /** @class */ (function () {
280
298
  return definition;
281
299
  });
282
300
  };
301
+ /**
302
+ * Creates a namespace-owned Eventing control plane. Definitions remain
303
+ * declarative until eventing.apply() is called.
304
+ */
305
+ CouchsetClient.prototype.eventing = function (options) {
306
+ return new eventing_1.Eventing(this, options);
307
+ };
283
308
  /** Bind and register a definition without provisioning or index DDL. */
284
309
  CouchsetClient.prototype.model = function (definition) {
285
310
  var identity = modelIdentity(definition);
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 {AutoModelFields, FieldCodec, Model, ModelConnection, ModalOptions} from './model';\nimport type {ModelIndexDefinition} from './model';\nimport {buildIndexQuery} from './model/indexes';\nimport {escapeIdentifier, keyspaceIdentifier} from './model/keyspace';\nimport type {SortType} from './query/interface/query.types';\nimport {buildWhereExpr} from './query/helpers/builders';\nimport {generateUUID} from './uuid';\n\nexport type {FieldCodec} from './model';\n\n/** A JSON-friendly Date codec for models declared with defineModel. */\nexport const dateCodec: FieldCodec<Date, string> = {\n fromDatabase: (value: string): Date => new Date(value),\n toDatabase: (value: Date): string => value.toISOString(),\n};\n\nexport interface ModelCollectionSettings {\n maxExpiry?: number;\n history?: boolean;\n}\n\n/**\n * A model definition has no connection and performs no I/O. Definitions may be\n * reused safely across clients and are the unit the client registers.\n */\nexport type ModelField<T> = Extract<keyof T, string>;\nexport type TypedIndexField<T> = ModelField<T> | Partial<Record<ModelField<T>, SortType>>;\nexport type ModelCodecs<T> = Partial<{\n [Field in ModelField<T>]: FieldCodec<T[Field], any>;\n}> &\n Partial<Record<`${string}.${string}`, FieldCodec<any, any>>>;\n\nexport interface TypedModelIndexDefinition<T> extends Omit<ModelIndexDefinition, 'fields'> {\n fields?: TypedIndexField<T>[];\n}\n\nexport interface ModelDefinition<T = any> extends Omit<ModalOptions, 'codecs' | 'indexes'> {\n name: string;\n collectionSettings?: ModelCollectionSettings;\n codecs?: ModelCodecs<T>;\n indexes?: TypedModelIndexDefinition<T>[];\n}\n\n/** User fields are distinct from CouchSet's generated persistence metadata. */\nexport type ModelCreateInput<T> = Omit<T, keyof AutoModelFields> &\n Partial<Pick<T, Extract<keyof T, keyof AutoModelFields>>>;\n\nexport interface TypedModel<T>\n extends Omit<Model, 'getById' | 'getWithCas' | 'insert' | 'replaceById' | 'replaceIfCas'> {\n getById(id: string, options?: any): Promise<T & AutoModelFields>;\n getWithCas(\n id: string,\n options?: any\n ): Promise<{content: T & AutoModelFields; cas: any; expiryTime?: any}>;\n insert(data: ModelCreateInput<T>, options?: any): Promise<T & AutoModelFields>;\n replaceById(id: string, data: T, options?: any): Promise<T & AutoModelFields>;\n replaceIfCas(id: string, data: T, cas: any, options?: any): Promise<T & AutoModelFields>;\n}\n\nexport const defineModel = <T = any>(definition: ModelDefinition<T>): ModelDefinition<T> => {\n if (!definition || !definition.name) {\n throw new Error('defineModel requires a non-empty name');\n }\n\n return {...definition};\n};\n\nexport interface CouchsetClientDependencies {\n /** Supply a fully controlled runtime for tests or an application-owned connection. */\n connection?: ModelConnection;\n /** Supply an already connected SDK cluster/bucket without using couchbase.connect. */\n cluster?: Cluster;\n bucket?: Bucket;\n /** Override connection construction; useful for dependency injection and test doubles. */\n connect?: (settings: CouchsetArgs) => Promise<Cluster>;\n}\n\nexport interface CouchsetClientOptions extends Partial<CouchsetArgs> {\n models?: Array<ModelDefinition<any>>;\n dependencies?: CouchsetClientDependencies;\n}\n\nexport interface EnsureCollectionsOptions {\n models?: Array<ModelDefinition<any>>;\n timeoutMs?: number;\n pollIntervalMs?: number;\n}\n\nexport interface ProvisionOptions extends EnsureCollectionsOptions {\n collections?: boolean;\n indexes?: boolean;\n waitForIndexes?: boolean;\n}\n\nexport interface RegisterModelOptions extends ProvisionOptions {\n /** Explicitly provision this dynamic model. Constructors and CRUD never do this. */\n provision?: boolean | {collections?: boolean; indexes?: boolean; waitForIndexes?: boolean};\n}\n\nexport interface ProvisionedTarget {\n scope: string;\n collection: string;\n createdScope: boolean;\n createdCollection: boolean;\n}\n\nexport interface IndexPlanItem {\n status: 'create' | 'matching' | 'replace';\n definition: ModelIndexDefinition;\n keyspace: string;\n target: CollectionTarget;\n /** The physical index CouchSet will create. Replacement names are versioned. */\n createAs: string;\n /** Only populated for an explicit or detected safe replacement. */\n replaces?: string;\n reason?: string;\n}\n\nexport interface IndexPlan {\n items: IndexPlanItem[];\n}\n\nexport interface ApplyIndexPlanOptions {\n /** Opt-in only: drop old indexes after the replacement is online. */\n dropReplaced?: boolean;\n timeoutMs?: number;\n}\n\ninterface RegisteredModel<T = any> {\n definition: ModelDefinition<T>;\n model: Model;\n}\n\ninterface CollectionTarget {\n scope: string;\n collection: string;\n settings?: ModelCollectionSettings;\n}\n\nconst defaultSettings = (options: CouchsetClientOptions): CouchsetArgs => ({\n bucketName: options.bucketName || 'default',\n connectionString: options.connectionString || 'couchbase://localhost',\n password: options.password || '',\n username: options.username || '',\n proxy: options.proxy,\n});\n\nconst errorText = (error: any): string => `${error?.name || ''} ${error?.message || error || ''}`;\nconst isAlreadyExists = (error: any): boolean =>\n /already exists|exists|ScopeExists|CollectionExists/i.test(errorText(error));\nconst isNotFound = (error: any): boolean => /not found|not exist/i.test(errorText(error));\n\nconst provisionError = (operation: string, target: string, error: any): Error => {\n const message = errorText(error);\n const privilege = /access|permission|authoriz|privilege|forbidden/i.test(message)\n ? ' This operation requires Couchbase Manage Scopes privileges on the bucket.'\n : '';\n const wrapped: any = new Error(\n `CouchSet could not ${operation} ${target}.${privilege} ${message}`.trim()\n );\n wrapped.cause = error;\n return wrapped;\n};\n\nconst delay = (milliseconds: number): Promise<void> =>\n new Promise((resolve) => setTimeout(resolve, milliseconds));\n\nclass DirectConnection implements ModelConnection {\n public cluster: Cluster;\n public bucket: Bucket;\n private connectPromise?: Promise<Cluster>;\n\n constructor(\n private readonly settings: CouchsetArgs,\n private readonly dependencies: CouchsetClientDependencies\n ) {\n this.cluster = dependencies.cluster as Cluster;\n this.bucket = dependencies.bucket as Bucket;\n\n if (this.cluster && !this.bucket) {\n this.bucket = this.cluster.bucket(settings.bucketName);\n }\n }\n\n public getBucket(): string {\n return this.settings.bucketName;\n }\n\n public getCollection(scopeName?: string, collectionName?: string): any {\n if (!this.bucket) {\n throw new Error('CouchSet client is not connected; call client.ready() first');\n }\n\n if (!scopeName && !collectionName) {\n return this.bucket.defaultCollection();\n }\n\n return this.bucket.scope(scopeName || '_default').collection(collectionName || '_default');\n }\n\n public isConnected(): boolean {\n return !!this.cluster && !!this.bucket;\n }\n\n public async ready(): Promise<DirectConnection> {\n if (this.isConnected()) {\n return this;\n }\n\n if (!this.connectPromise) {\n const connect =\n this.dependencies.connect ||\n ((settings: CouchsetArgs) =>\n couchbase.connect(settings.connectionString, {\n password: settings.password,\n proxy: settings.proxy,\n username: settings.username,\n }));\n this.connectPromise = connect(this.settings);\n }\n\n this.cluster = await this.connectPromise;\n this.bucket = this.cluster.bucket(this.settings.bucketName);\n return this;\n }\n\n public shouldReconnect(): boolean {\n return false;\n }\n\n public markDisconnected(): void {\n // A client-owned connection never retries an arbitrary write operation.\n }\n\n public async shutdown(): Promise<void> {\n if (this.cluster && typeof (this.cluster as any).close === 'function') {\n await (this.cluster as any).close();\n }\n this.cluster = undefined as any;\n this.bucket = undefined as any;\n }\n}\n\n/**\n * A client owns its model-definition registry and connection. It intentionally\n * does not alter the legacy singleton or register models globally.\n */\nexport class CouchsetClient {\n private readonly connection: ModelConnection;\n private readonly registered = new Map<string, RegisteredModel<any>>();\n private readonly settings: CouchsetArgs;\n\n constructor(options: CouchsetClientOptions = {}) {\n this.settings = defaultSettings(options);\n const dependencies = options.dependencies || {};\n\n if (dependencies.connection) {\n const bucketName = dependencies.connection.getBucket();\n if (!bucketName) {\n throw new Error('Injected CouchSet connections must expose a bucket name');\n }\n if (options.bucketName && options.bucketName !== bucketName) {\n throw new Error(\n `Injected CouchSet connection targets ${bucketName}, not requested bucket ${options.bucketName}`\n );\n }\n this.settings.bucketName = bucketName;\n } else if (dependencies.bucket) {\n const bucketName = dependencies.bucket.name;\n if (options.bucketName && options.bucketName !== bucketName) {\n throw new Error(\n `Injected Couchbase bucket targets ${bucketName}, not requested bucket ${options.bucketName}`\n );\n }\n this.settings.bucketName = bucketName;\n } else if (dependencies.cluster && !options.bucketName) {\n throw new Error('bucketName is required when injecting a Couchbase cluster');\n }\n\n this.connection =\n dependencies.connection || new DirectConnection(this.settings, dependencies);\n\n (options.models || []).forEach((definition) => this.model(definition));\n }\n\n public async ready(): Promise<this> {\n await this.connection.ready();\n return this;\n }\n\n public async shutdown(): Promise<void> {\n const shutdown = (this.connection as any).shutdown;\n if (typeof shutdown === 'function') {\n await shutdown.call(this.connection);\n }\n }\n\n public definitions(): ModelDefinition<any>[] {\n return Array.from(this.registered.values()).map(({definition}) => definition);\n }\n\n /** Bind and register a definition without provisioning or index DDL. */\n public model<T>(definition: ModelDefinition<T>): TypedModel<T> {\n const identity = modelIdentity(definition);\n const existing = this.registered.get(identity);\n\n if (existing) {\n assertSameDefinition(existing.definition, definition);\n return existing.model as TypedModel<T>;\n }\n\n const model = new Model(definition.name, definition as ModalOptions, this.connection);\n this.registered.set(identity, {definition, model});\n return model as TypedModel<T>;\n }\n\n /**\n * Async registration for dynamic models. DDL is performed only when the\n * caller explicitly opts into provision; ordinary model() is side-effect-free.\n */\n public async registerModel<T>(\n definition: ModelDefinition<T>,\n options: RegisterModelOptions = {}\n ): Promise<TypedModel<T>> {\n const model = this.model(definition);\n const requested = options.provision;\n\n if (requested) {\n const config =\n typeof requested === 'boolean' ? {collections: true, indexes: true} : requested;\n await this.provision({\n collections: config.collections !== false,\n indexes: config.indexes !== false,\n models: [definition],\n timeoutMs: options.timeoutMs,\n waitForIndexes: config.waitForIndexes,\n });\n }\n\n return model;\n }\n\n /** Create only missing scopes/collections. Existing resources are never altered. */\n public async ensureCollections(\n options: EnsureCollectionsOptions = {}\n ): Promise<ProvisionedTarget[]> {\n await this.ready();\n const targets = this.targets(options.models);\n const manager: any = (this.connection as any).bucket.collections();\n let manifest: any[];\n\n try {\n manifest = await manager.getAllScopes();\n } catch (error) {\n throw provisionError('read the scope manifest for', this.settings.bucketName, error);\n }\n\n const result: ProvisionedTarget[] = [];\n for (const target of targets) {\n const defaultTarget = target.scope === '_default' && target.collection === '_default';\n if (defaultTarget) {\n result.push({...target, createdScope: false, createdCollection: false});\n continue;\n }\n\n let scope = findScope(manifest, target.scope);\n let createdScope = false;\n if (!scope && target.scope !== '_default') {\n try {\n await manager.createScope(target.scope);\n createdScope = true;\n } catch (error) {\n if (!isAlreadyExists(error)) {\n throw provisionError('create scope', target.scope, error);\n }\n }\n manifest = await this.waitForCollectionManifest(target.scope, undefined, options);\n scope = findScope(manifest, target.scope);\n }\n\n if (!scope) {\n throw new Error(`CouchSet could not find scope ${target.scope} after provisioning`);\n }\n\n const exists = (scope.collections || []).some(\n (item: any) => item.name === target.collection\n );\n let createdCollection = false;\n if (!exists) {\n try {\n await manager.createCollection(\n target.collection,\n target.scope,\n target.settings || {}\n );\n createdCollection = true;\n } catch (error) {\n if (!isAlreadyExists(error)) {\n throw provisionError(\n 'create collection',\n `${target.scope}.${target.collection}`,\n error\n );\n }\n }\n }\n\n await this.waitForCollectionManifest(target.scope, target.collection, options);\n result.push({...target, createdScope, createdCollection});\n }\n\n return result;\n }\n\n /** Explicit bootstrap: provisioning occurs before index creation. */\n public async provision(options: ProvisionOptions = {}): Promise<{\n collections: ProvisionedTarget[];\n indexes: string[];\n }> {\n const definitions = options.models || this.definitions();\n const collections =\n options.collections === false\n ? []\n : await this.ensureCollections({...options, models: definitions});\n const indexes = options.indexes\n ? await this.ensureIndexes({\n models: definitions,\n waitForIndexes: options.waitForIndexes,\n timeoutMs: options.timeoutMs,\n })\n : [];\n\n return {collections, indexes};\n }\n\n /** Normal ensureIndexes stays create-only. It never checks, drops, or changes an existing index. */\n public async ensureIndexes(\n options: {\n models?: Array<ModelDefinition<any>>;\n deferred?: boolean;\n waitForIndexes?: boolean;\n timeoutMs?: number;\n } = {}\n ): Promise<string[]> {\n await this.ready();\n const definitions = options.models || this.definitions();\n const queries: string[] = [];\n const indexes: Array<{name: string; target: CollectionTarget}> = [];\n\n for (const definition of definitions) {\n const model = this.model(definition);\n const statements = await model.ensureIndexes({deferred: options.deferred});\n queries.push(...statements);\n indexes.push(\n ...(definition.indexes || []).map((index) => ({\n name: index.name,\n target: definitionTarget(definition),\n }))\n );\n }\n\n if (options.waitForIndexes && indexes.length) {\n await this.waitForIndexes(indexes, options.timeoutMs);\n }\n\n return queries;\n }\n\n /** Report missing, matching, and drifted indexes; this method has no DDL side effects. */\n public async planIndexes(\n options: {models?: Array<ModelDefinition<any>>} = {}\n ): Promise<IndexPlan> {\n await this.ready();\n const rows = await this.indexCatalog();\n const items: IndexPlanItem[] = [];\n\n for (const definition of options.models || this.definitions()) {\n const keyspace = this.keyspace(definition);\n const target = definitionTarget(definition);\n for (const index of definition.indexes || []) {\n const matchingRows = rows.filter((row) => indexRowMatchesTarget(row, definition));\n const desired = matchingRows.find((row) => row.name === index.name);\n const replacementName = versionedIndexName(index.name, index);\n const replacement = matchingRows.find((row) => row.name === replacementName);\n\n // A previous safe rollout may have dropped the old logical name\n // while retaining this deterministic replacement physical name.\n if (replacement && indexMatches(replacement, index)) {\n items.push({\n createAs: replacementName,\n definition: index,\n keyspace,\n status: 'matching',\n target,\n });\n continue;\n }\n\n if (desired && indexMatches(desired, index)) {\n items.push({\n createAs: index.name,\n definition: index,\n keyspace,\n status: 'matching',\n target,\n });\n continue;\n }\n\n // `replaces` explicitly asks for a new physical index, even if\n // the predecessor happens to have equivalent keys.\n const predecessorName = index.replaces || index.name;\n const predecessor = matchingRows.find((row) => row.name === predecessorName);\n\n if (!predecessor) {\n items.push({\n createAs: index.name,\n definition: index,\n keyspace,\n status: 'create',\n target,\n });\n continue;\n }\n\n const createAs = index.replaces ? index.name : replacementName;\n items.push({\n createAs,\n definition: index,\n keyspace,\n reason: 'Declared keys, predicate, or primary mode differs from the live index.',\n replaces: predecessor.name,\n status: 'replace',\n target,\n });\n }\n }\n\n return {items};\n }\n\n /**\n * Apply a reviewed plan by creating versioned replacements and waiting for\n * them. Dropping old indexes is deliberately an explicit second opt-in.\n */\n public async applyIndexPlan(\n plan: IndexPlan,\n options: ApplyIndexPlanOptions = {}\n ): Promise<string[]> {\n await this.ready();\n const applied: string[] = [];\n const replacements: Array<{name: string; target: CollectionTarget}> = [];\n\n for (const item of plan.items) {\n if (item.status === 'matching') {\n continue;\n }\n\n const definition = {...item.definition, name: item.createAs};\n const query = buildIndexQuery(item.keyspace, definition);\n await this.connection.cluster.query(query);\n applied.push(query);\n replacements.push({name: item.createAs, target: item.target});\n }\n\n if (replacements.length) {\n await this.waitForIndexes(replacements, options.timeoutMs);\n }\n\n if (options.dropReplaced) {\n for (const item of plan.items) {\n if (item.status === 'replace' && item.replaces) {\n await this.connection.cluster.query(\n `DROP INDEX ${item.keyspace}.${escapeIdentifier(item.replaces)}`\n );\n }\n }\n }\n\n return applied;\n }\n\n /**\n * Run the callback through Couchbase's transaction retry loop. The callback\n * may execute more than once; do not perform external side effects inside it.\n * A commit-ambiguous error is rethrown and must be resolved by the caller via\n * an idempotency key/outbox, never by blindly retrying a side effect.\n */\n public async transaction<T>(\n callback: (transaction: CouchsetTransaction) => Promise<T>\n ): Promise<T> {\n await this.ready();\n let result: T;\n await (this.connection.cluster as any).transactions().run(async (attempt: any) => {\n result = await callback(new CouchsetTransaction(this, attempt));\n });\n return result as T;\n }\n\n public keyspace(definition: ModelDefinition<any>): string {\n const target = definitionTarget(definition);\n return keyspaceIdentifier({\n bucketName: this.settings.bucketName,\n collectionName: target.collection,\n scopeName: target.scope,\n });\n }\n\n public getConnection(): ModelConnection {\n return this.connection;\n }\n\n private targets(definitions?: Array<ModelDefinition<any>>): CollectionTarget[] {\n const targets = new Map<string, CollectionTarget>();\n for (const definition of definitions || this.definitions()) {\n const target = definitionTarget(definition);\n const identity = `${target.scope}.${target.collection}`;\n const existing = targets.get(identity);\n const settings = definition.collectionSettings;\n\n if (\n existing &&\n JSON.stringify(existing.settings || {}) !== JSON.stringify(settings || {})\n ) {\n throw new Error(\n `Conflicting collection settings declared for ${identity}; CouchSet will not alter an existing collection`\n );\n }\n targets.set(identity, {...target, settings});\n }\n return Array.from(targets.values());\n }\n\n private async waitForCollectionManifest(\n scopeName: string,\n collectionName: string | undefined,\n options: EnsureCollectionsOptions\n ): Promise<any[]> {\n const manager: any = (this.connection as any).bucket.collections();\n const timeout = options.timeoutMs || 30000;\n const poll = options.pollIntervalMs || 100;\n const deadline = Date.now() + timeout;\n\n while (Date.now() <= deadline) {\n try {\n const manifest = await manager.getAllScopes();\n const scope = findScope(manifest, scopeName);\n if (\n scope &&\n (!collectionName ||\n (scope.collections || []).some((item: any) => item.name === collectionName))\n ) {\n return manifest;\n }\n } catch (error) {\n if (!isNotFound(error)) {\n throw provisionError(\n 'wait for collection metadata',\n `${scopeName}.${collectionName || ''}`,\n error\n );\n }\n }\n await delay(poll);\n }\n\n throw new Error(\n `Timed out waiting for Couchbase collection ${scopeName}.${\n collectionName || ''\n } to appear in the manifest`\n );\n }\n\n private async waitForIndexes(\n indexes: Array<{name: string; target: CollectionTarget}>,\n timeoutMs = 30000\n ): Promise<void> {\n const deadline = Date.now() + timeoutMs;\n\n while (Date.now() <= deadline) {\n const rows = await this.indexCatalog();\n if (\n indexes.every((index) =>\n rows.some(\n (row) =>\n row.name === index.name &&\n String(row.state).toLowerCase() === 'online' &&\n indexRowMatchesCollection(row, index.target)\n )\n )\n ) {\n return;\n }\n await delay(100);\n }\n\n throw new Error(\n `Timed out waiting for Couchbase indexes to become online: ${indexes\n .map((index) => index.name)\n .join(', ')}`\n );\n }\n\n private async indexCatalog(): Promise<any[]> {\n const result = await this.connection.cluster.query(\n 'SELECT name, bucket_id, keyspace_id, scope_id, collection_id, index_key, condition, is_primary, state FROM system:indexes WHERE bucket_id = $bucket OR keyspace_id = $bucket',\n {parameters: {bucket: this.settings.bucketName}}\n );\n return (result as any).rows || [];\n }\n}\n\n/** A model bound strictly to a Couchbase transaction attempt. */\nexport class TransactionModel<T = any> {\n constructor(private readonly model: TypedModel<T>, private readonly attempt: any) {}\n\n public async get(id: string): Promise<TransactionDocument<T> | null> {\n try {\n const document = await this.attempt.get(this.model.getCollection(), id);\n return {content: this.model.parse<T & AutoModelFields>(document.content), document};\n } catch (error) {\n if (isNotFound(error)) {\n return null;\n }\n throw error;\n }\n }\n\n public getById(id: string): Promise<TransactionDocument<T> | null> {\n return this.get(id);\n }\n\n public async insert(id: string, data: ModelCreateInput<T>): Promise<TransactionDocument<T>> {\n const stored = await this.model.prepareInsert({...data, id} as T);\n const document = await this.attempt.insert(this.model.getCollection(), id, stored);\n return {\n content: this.model.parse<T & AutoModelFields>(document.content || stored),\n document,\n };\n }\n\n /** Replace requires the prior transactional read, as required by the SDK. */\n public async replace(\n document: TransactionDocument<T>,\n data: T\n ): Promise<TransactionDocument<T>> {\n const stored = await this.model.prepareReplace(document.content.id, data);\n const replacement = await this.attempt.replace(document.document, stored);\n return {\n content: this.model.parse<T & AutoModelFields>(replacement.content || stored),\n document: replacement,\n };\n }\n\n public async replaceById(id: string, data: T): Promise<TransactionDocument<T>> {\n const current = await this.get(id);\n if (!current) {\n throw new Error(`Cannot replace missing transaction document ${id}`);\n }\n return this.replace(current, data);\n }\n\n public async remove(document: TransactionDocument<T>): Promise<void> {\n await this.attempt.remove(document.document);\n }\n\n public query<TRow = any>(statement: string, options?: any): Promise<{rows: TRow[]}> {\n return this.attempt.query(statement, options);\n }\n}\n\nexport interface TransactionDocument<T> {\n content: T & AutoModelFields;\n /** Opaque transaction SDK result; only pass it back to replace/remove. */\n document: any;\n}\n\nexport class CouchsetTransaction {\n constructor(private readonly client: CouchsetClient, private readonly attempt: any) {}\n\n public model<T>(definition: ModelDefinition<T>): TransactionModel<T> {\n return new TransactionModel<T>(this.client.model(definition), this.attempt);\n }\n\n public query<TRow = any>(statement: string, options?: any): Promise<{rows: TRow[]}> {\n return this.attempt.query(statement, options);\n }\n}\n\n/**\n * Creates a short-lived scoped fixture and a cleanup function. The caller must\n * invoke cleanup in after/afterEach; no normal client operation ever drops data.\n */\nexport const createCouchsetTestFixture = async <T = any>(\n client: CouchsetClient,\n definition: Omit<ModelDefinition<T>, 'scope' | 'collection'> & {\n scope?: string;\n collection?: string;\n }\n): Promise<{\n definition: ModelDefinition<T>;\n model: TypedModel<T>;\n cleanup: () => Promise<void>;\n}> => {\n const suffix = generateUUID().replace(/-/g, '').slice(0, 12);\n const fixtureScope = definition.scope || `couchset_test_${suffix}`;\n const generatedScope = fixtureScope !== definition.scope;\n const scoped = defineModel<T>({\n ...definition,\n collection: definition.collection || `fixture_${suffix}`,\n scope: fixtureScope,\n });\n const model = await client.registerModel(scoped, {provision: {collections: true}});\n\n return {\n definition: scoped,\n model,\n cleanup: async () => {\n const target = definitionTarget(scoped);\n const manager: any = (client.getConnection() as any).bucket.collections();\n try {\n await manager.dropCollection(target.collection, target.scope);\n } catch (error) {\n if (!isNotFound(error)) {\n throw provisionError(\n 'drop fixture collection',\n `${target.scope}.${target.collection}`,\n error\n );\n }\n }\n if (generatedScope) {\n try {\n await manager.dropScope(target.scope);\n } catch (error) {\n if (!isNotFound(error)) {\n throw provisionError('drop fixture scope', target.scope, error);\n }\n }\n }\n },\n };\n};\n\nexport const createCouchsetClient = (options: CouchsetClientOptions = {}): CouchsetClient =>\n new CouchsetClient(options);\n\nconst definitionTarget = (definition: ModelDefinition<any>): CollectionTarget => ({\n collection: Object.prototype.hasOwnProperty.call(definition, 'collection')\n ? definition.collection || '_default'\n : '_default',\n scope: Object.prototype.hasOwnProperty.call(definition, 'scope')\n ? definition.scope || '_default'\n : '_default',\n});\n\nconst modelIdentity = (definition: ModelDefinition<any>): string => {\n const target = definitionTarget(definition);\n return `${target.scope}.${target.collection}.${definition.name}`;\n};\n\nconst assertSameDefinition = (left: ModelDefinition<any>, right: ModelDefinition<any>): void => {\n if (!sameValue(left, right)) {\n throw new Error(\n `Model ${modelIdentity(\n left\n )} is already registered with a different definition; create a separate client or use a new model name`\n );\n }\n};\n\nconst sameValue = (left: any, right: any): boolean => {\n if (left === right) {\n return true;\n }\n if (!left || !right || typeof left !== 'object' || typeof right !== 'object') {\n return false;\n }\n if (left instanceof Date || right instanceof Date) {\n return left instanceof Date && right instanceof Date && left.getTime() === right.getTime();\n }\n if (Array.isArray(left) || Array.isArray(right)) {\n return (\n Array.isArray(left) &&\n Array.isArray(right) &&\n left.length === right.length &&\n left.every((item, index) => sameValue(item, right[index]))\n );\n }\n const leftKeys = Object.keys(left).sort();\n const rightKeys = Object.keys(right).sort();\n return (\n leftKeys.length === rightKeys.length &&\n leftKeys.every((key, index) => key === rightKeys[index] && sameValue(left[key], right[key]))\n );\n};\n\nconst findScope = (scopes: any[], name: string): any => scopes.find((scope) => scope.name === name);\n\nconst normalize = (value: any): string =>\n JSON.stringify(value || '')\n .replace(/[\\s`()\"']/g, '')\n .toLowerCase();\n\nconst indexMatches = (row: any, definition: ModelIndexDefinition): boolean => {\n if (!!row.is_primary !== !!definition.primary) {\n return false;\n }\n if (definition.primary) {\n return true;\n }\n\n const expectedKeys = (definition.fields || []).map((field) => {\n if (typeof field === 'string') {\n return field;\n }\n const key = Object.keys(field)[0];\n return `${key} ${field[key]}`;\n });\n return (\n normalize(row.index_key) === normalize(expectedKeys) &&\n normalize(row.condition) === normalize(indexCondition(definition))\n );\n};\n\n/** Match Couchbase's catalogued SQL++ condition against the same SQL++ we declare. */\nconst indexCondition = (definition: ModelIndexDefinition): string =>\n buildWhereExpr(definition.where).replace(/^\\s*WHERE\\s+/i, '');\n\nconst indexRowMatchesTarget = (row: any, definition: ModelDefinition<any>): boolean => {\n return indexRowMatchesCollection(row, definitionTarget(definition));\n};\n\nconst indexRowMatchesCollection = (row: any, target: CollectionTarget): boolean => {\n // On current Couchbase Server, scoped collection indexes expose the\n // collection in keyspace_id and omit collection_id. Older/default targets\n // may use keyspace_id for the bucket, so prefer collection_id when present.\n const collection = row.collection_id || (row.scope_id ? row.keyspace_id : undefined);\n return (\n (!row.scope_id || row.scope_id === target.scope) &&\n (!collection || collection === target.collection)\n );\n};\n\nconst versionedIndexName = (name: string, definition: ModelIndexDefinition): string => {\n const fingerprint = JSON.stringify({\n fields: definition.fields,\n primary: definition.primary,\n where: definition.where,\n })\n .split('')\n .reduce((hash, character) => (hash * 31 + character.charCodeAt(0)) >>> 0, 7)\n .toString(36);\n return `${name}_v${fingerprint}`;\n};\n"]}
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"]}