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":"include.js","sourceRoot":"","sources":["../../src/model/include.ts"],"names":[],"mappings":"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","sourcesContent":["import {buildSelectArrayExpr} from '../query/helpers';\nimport {LogicalWhereExpr, SortType} from '../query/interface/query.types';\nimport {escapeReservedWords} from '../query/utils';\n\nimport {escapeIdentifier} from './keyspace';\n\nexport type IncludeType = 'join' | 'leftJoin' | 'nest' | 'leftNest';\n\nexport interface IncludeDefinition {\n as: string;\n key?: string;\n keys?: string;\n keyspace?: string;\n model?: string | {keyspace: () => string};\n type?: IncludeType;\n optional?: boolean;\n}\n\nexport interface IncludedSelectionQueryArgs {\n keyspace: string;\n collectionName: string;\n select?: any[] | string;\n where?: LogicalWhereExpr;\n orderBy?: Record<string, SortType>;\n include?: IncludeDefinition[];\n limit?: number;\n page?: number;\n offset?: number;\n sourceAlias?: string;\n}\n\nexport interface IncludedSelectionQuery {\n query: string;\n parameters: Record<string, any>;\n selectAll: boolean;\n resultKey?: string;\n}\n\nconst comparisonOperators: Record<string, string> = {\n $eq: '=',\n $neq: '!=',\n $gt: '>',\n $gte: '>=',\n $lt: '<',\n $lte: '<=',\n};\n\nconst stringComparisonOperators: Record<string, string> = {\n $like: 'LIKE',\n $notLike: 'NOT LIKE',\n};\n\nconst emptyComparisonOperators: Record<string, string> = {\n $isNull: 'IS NULL',\n $isNotNull: 'IS NOT NULL',\n $isMissing: 'IS MISSING',\n $isNotMissing: 'IS NOT MISSING',\n $isValued: 'IS VALUED',\n $isNotValued: 'IS NOT VALUED',\n};\n\nconst multipleComparisonOperators: Record<string, string> = {\n $btw: 'BETWEEN',\n $notBtw: 'NOT BETWEEN',\n};\n\nconst logicalOperators: Record<string, string> = {\n $and: 'AND',\n $or: 'OR',\n};\n\nclass IncludeParameterStore {\n public parameters: Record<string, any> = {};\n private index = 0;\n\n public add(value: any): string {\n const key = `cs_param_${this.index}`;\n this.index += 1;\n this.parameters[key] = value;\n\n return `$${key}`;\n }\n\n public set(key: string, value: any): string {\n this.parameters[key] = value;\n\n return `$${key}`;\n }\n}\n\nconst safeAlias = (alias: string): string => {\n return /^[A-Za-z_][A-Za-z0-9_]*$/.test(alias) ? alias : escapeIdentifier(alias);\n};\n\nconst keyspaceFromInclude = (include: IncludeDefinition, defaultKeyspace: string): string => {\n if (include.keyspace) {\n return include.keyspace;\n }\n\n if (typeof include.model === 'string') {\n return include.model;\n }\n\n if (include.model) {\n return include.model.keyspace();\n }\n\n return defaultKeyspace;\n};\n\nconst sourceField = (field: string, sourceAlias: string): string => {\n if (field.indexOf(`${sourceAlias}.`) === 0) {\n return field;\n }\n\n return `${sourceAlias}.${escapeReservedWords(field)}`;\n};\n\nconst includeOperator = (include: IncludeDefinition): string => {\n if (include.type === 'leftNest') {\n return 'LEFT NEST';\n }\n\n if (include.type === 'nest') {\n return include.optional ? 'LEFT NEST' : 'NEST';\n }\n\n if (include.type === 'leftJoin') {\n return 'LEFT JOIN';\n }\n\n if (include.keys) {\n return include.optional ? 'LEFT NEST' : 'NEST';\n }\n\n return include.optional ? 'LEFT JOIN' : 'JOIN';\n};\n\nexport const buildIncludeClauses = (\n keyspace: string,\n include: IncludeDefinition[] = [],\n sourceAlias = 'doc'\n): string => {\n return include\n .map((item) => {\n const key = item.key || item.keys;\n\n if (!key) {\n throw new Error(`include ${item.as} requires key or keys`);\n }\n\n const alias = safeAlias(item.as);\n\n return `${includeOperator(item)} ${keyspaceFromInclude(\n item,\n keyspace\n )} AS ${alias} ON KEYS ${sourceField(key, sourceAlias)}`;\n })\n .join(' ');\n};\n\nconst hasLogicalOperator = (clause: Record<string, any>): boolean => {\n return Object.keys(clause).some((key) => ['$and', '$or', '$not'].includes(key));\n};\n\nconst buildComparisonExpr = (\n fieldName: string,\n comparison: Record<string, any>,\n store: IncludeParameterStore,\n sourceAlias: string\n): string => {\n const field = sourceField(fieldName, sourceAlias);\n const expr = Object.keys(comparison)\n .map((operator) => {\n if (Object.prototype.hasOwnProperty.call(emptyComparisonOperators, operator)) {\n return `${field} ${emptyComparisonOperators[operator]}`;\n }\n\n if (Object.prototype.hasOwnProperty.call(comparisonOperators, operator)) {\n return `${field}${comparisonOperators[operator]}${store.add(comparison[operator])}`;\n }\n\n if (Object.prototype.hasOwnProperty.call(stringComparisonOperators, operator)) {\n return `${field} ${stringComparisonOperators[operator]} ${store.add(\n comparison[operator]\n )}`;\n }\n\n if (\n Object.prototype.hasOwnProperty.call(multipleComparisonOperators, operator) &&\n Array.isArray(comparison[operator])\n ) {\n const [from, to] = comparison[operator];\n\n return `${field} ${multipleComparisonOperators[operator]} ${store.add(\n from\n )} AND ${store.add(to)}`;\n }\n\n throw new Error(`Unsupported include where operator: ${operator}`);\n })\n .join(' AND ');\n\n return Object.keys(comparison).length > 1 ? `(${expr})` : expr;\n};\n\nconst buildFieldExpr = (\n field: Record<string, any>,\n store: IncludeParameterStore,\n sourceAlias: string\n): string => {\n return Object.keys(field)\n .map((fieldName) => {\n const value = field[fieldName];\n\n if (\n value &&\n typeof value === 'object' &&\n !Array.isArray(value) &&\n Object.keys(value).some((operator) => operator.indexOf('$') === 0)\n ) {\n return buildComparisonExpr(fieldName, value, store, sourceAlias);\n }\n\n if (fieldName.indexOf('$') === -1) {\n return `${sourceField(fieldName, sourceAlias)}=${store.add(value)}`;\n }\n\n throw new Error(`Unsupported include where field: ${fieldName}`);\n })\n .join(' AND ');\n};\n\nconst buildWhereClauseExpr = (\n clause: LogicalWhereExpr,\n store: IncludeParameterStore,\n sourceAlias: string\n): string => {\n if (!hasLogicalOperator(clause as Record<string, any>)) {\n return buildFieldExpr(clause as Record<string, any>, store, sourceAlias);\n }\n\n return Object.keys(clause)\n .map((key) => {\n const value = clause[key];\n\n if (\n Array.isArray(value) &&\n Object.prototype.hasOwnProperty.call(logicalOperators, key)\n ) {\n return `(${value\n .map((item) =>\n buildWhereClauseExpr(item as LogicalWhereExpr, store, sourceAlias)\n )\n .join(` ${logicalOperators[key]} `)})`;\n }\n\n if (key === '$not' && Array.isArray(value)) {\n return `NOT (${value\n .map((item) =>\n buildWhereClauseExpr(item as LogicalWhereExpr, store, sourceAlias)\n )\n .join(' AND ')})`;\n }\n\n return buildWhereClauseExpr({[key]: value} as LogicalWhereExpr, store, sourceAlias);\n })\n .join(' AND ');\n};\n\nconst buildWhereExpr = (\n expr: LogicalWhereExpr | undefined,\n store: IncludeParameterStore,\n sourceAlias: string\n): string => {\n return expr ? ` WHERE ${buildWhereClauseExpr(expr, store, sourceAlias)}` : '';\n};\n\nconst buildOrderByExpr = (\n orderBy: Record<string, SortType> | undefined,\n sourceAlias: string\n): string => {\n return orderBy\n ? ` ORDER BY ${Object.keys(orderBy)\n .map((field) => `${sourceField(field, sourceAlias)} ${orderBy[field]}`)\n .join(',')}`\n : '';\n};\n\nconst buildSelectExpr = (\n select: any[] | string | undefined,\n include: IncludeDefinition[],\n sourceAlias: string\n): {expr: string; selectAll: boolean; resultKey?: string} => {\n if (!select || select === '*') {\n const aliases = include.map((item) => safeAlias(item.as));\n const mergeObject = aliases.map((alias) => `${JSON.stringify(alias)}: ${alias}`).join(',');\n\n return {\n expr: `OBJECT_CONCAT(${sourceAlias}, {${mergeObject}}) AS ${sourceAlias}`,\n selectAll: true,\n resultKey: sourceAlias,\n };\n }\n\n const includeSelect = include.map((item) => {\n const alias = safeAlias(item.as);\n\n return `${alias} AS ${alias}`;\n });\n\n if (typeof select === 'string') {\n return {expr: [select, ...includeSelect].join(','), selectAll: false};\n }\n\n const modelSelect = select.map((item) => {\n return typeof item === 'string'\n ? sourceField(item, sourceAlias)\n : buildSelectArrayExpr([item]);\n });\n\n return {expr: [...modelSelect, ...includeSelect].join(','), selectAll: false};\n};\n\nexport const buildIncludedSelectionQuery = (\n args: IncludedSelectionQueryArgs\n): IncludedSelectionQuery => {\n const sourceAlias = safeAlias(args.sourceAlias || 'doc');\n const include = args.include || [];\n const store = new IncludeParameterStore();\n const limit = typeof args.limit === 'number' ? args.limit : 10;\n const page = typeof args.page === 'number' ? args.page : 0;\n const offset = typeof args.offset === 'number' ? args.offset : page * limit;\n const {expr, selectAll, resultKey} = buildSelectExpr(args.select, include, sourceAlias);\n const joins = buildIncludeClauses(args.keyspace, include, sourceAlias);\n const limitExpr = ` LIMIT ${store.set('cs_limit', limit)} OFFSET ${store.set(\n 'cs_offset',\n offset\n )}`;\n\n return {\n query: `SELECT ${expr} FROM ${args.keyspace} AS ${sourceAlias} ${joins}${buildWhereExpr(\n args.where,\n store,\n sourceAlias\n )}${buildOrderByExpr(args.orderBy, sourceAlias)}${limitExpr}`,\n parameters: store.parameters,\n resultKey,\n selectAll,\n };\n};\n"]}
1
+ {"version":3,"file":"include.js","sourceRoot":"","sources":["../../src/model/include.ts"],"names":[],"mappings":"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","sourcesContent":["import {LogicalWhereExpr, SortType} from '../query/interface/query.types';\n\nimport {escapeIdentifier} from './keyspace';\n\nexport type IncludeType = 'join' | 'leftJoin' | 'nest' | 'leftNest';\n\nexport interface IncludeDefinition {\n as: string;\n /** ANSI predicate; mutually exclusive with key/keys. */\n on?: JoinPredicate;\n /** Explicit trusted SQL++ escape hatch. Values still use positional placeholders. */\n onRaw?: {sql: string; values?: readonly unknown[]};\n /** Top-level fields retained from the related document. */\n select?: readonly string[];\n key?: string;\n keys?: string;\n keyspace?: string;\n model?:\n | string\n | {keyspace: () => string; parse?: <T>(data: T) => T; parseProjection?: <T>(data: T) => T};\n type?: IncludeType;\n optional?: boolean;\n}\n\n/** A field operand is explicit; bare strings are always parameter values. */\nexport interface JoinField {\n readonly $field: string;\n}\nexport type JoinPredicate =\n | {$and: readonly JoinPredicate[]}\n | {$or: readonly JoinPredicate[]}\n | {left: JoinField; op: '$eq' | '$neq' | '$gt' | '$gte' | '$lt' | '$lte'; right: unknown};\nexport const joinField = (path: string): JoinField => ({$field: path});\n\nconst identifier = (name: string): string => {\n if (!name || name.indexOf('\\0') !== -1) throw new Error('Empty or invalid identifier');\n return escapeIdentifier(name);\n};\nconst fieldPath = (path: string): string => path.split('.').map(identifier).join('.');\n\nexport interface IncludedSelectionQueryArgs {\n keyspace: string;\n collectionName: string;\n select?: readonly any[] | string;\n where?: LogicalWhereExpr;\n orderBy?: Record<string, SortType>;\n include?: readonly IncludeDefinition[];\n limit?: number;\n page?: number;\n offset?: number;\n sourceAlias?: string;\n}\n\nexport interface IncludedSelectionQuery {\n query: string;\n parameters: Record<string, any>;\n selectAll: boolean;\n resultKey?: string;\n}\n\nconst comparisonOperators: Record<string, string> = {\n $eq: '=',\n $neq: '!=',\n $gt: '>',\n $gte: '>=',\n $lt: '<',\n $lte: '<=',\n};\n\nconst stringComparisonOperators: Record<string, string> = {\n $like: 'LIKE',\n $notLike: 'NOT LIKE',\n};\n\nconst emptyComparisonOperators: Record<string, string> = {\n $isNull: 'IS NULL',\n $isNotNull: 'IS NOT NULL',\n $isMissing: 'IS MISSING',\n $isNotMissing: 'IS NOT MISSING',\n $isValued: 'IS VALUED',\n $isNotValued: 'IS NOT VALUED',\n};\n\nconst multipleComparisonOperators: Record<string, string> = {\n $btw: 'BETWEEN',\n $notBtw: 'NOT BETWEEN',\n};\n\nconst logicalOperators: Record<string, string> = {\n $and: 'AND',\n $or: 'OR',\n};\n\nclass IncludeParameterStore {\n public parameters: Record<string, any> = {};\n private index = 0;\n\n public add(value: any): string {\n const key = `cs_param_${this.index}`;\n this.index += 1;\n this.parameters[key] = value;\n\n return `$${key}`;\n }\n\n public set(key: string, value: any): string {\n this.parameters[key] = value;\n\n return `$${key}`;\n }\n}\n\nconst safeAlias = identifier;\n\nconst safeKeyspace = (target: string): string => {\n // Accept existing model.keyspace() output and simple dotted identifiers, never expressions.\n const token = '(?:`(?:[^`]|``)+`|[A-Za-z_][A-Za-z0-9_-]*)';\n if (!new RegExp(`^(?:default:)?${token}(?:\\\\.${token}){0,2}$`).test(target))\n throw new Error('Invalid include keyspace; use a model or identifier path');\n return target.replace(/[A-Za-z_][A-Za-z0-9_-]*|`(?:[^`]|``)+`/g, (part, offset) =>\n target.slice(offset + part.length, offset + part.length + 1) === ':' || part.startsWith('`')\n ? part\n : identifier(part)\n );\n};\nconst keyspaceFromInclude = (include: IncludeDefinition, defaultKeyspace: string): string => {\n const target =\n include.keyspace ||\n (typeof include.model === 'string' ? include.model : include.model?.keyspace()) ||\n defaultKeyspace;\n return safeKeyspace(target);\n};\n\nconst sourceField = (field: string, sourceAlias: string): string => {\n const prefix = `${sourceAlias}.`;\n return field.indexOf(prefix) === 0\n ? fieldPath(field)\n : `${identifier(sourceAlias)}.${fieldPath(field)}`;\n};\n\nexport const includeOperator = (include: IncludeDefinition): string => {\n if (include.type === 'leftNest') {\n return 'LEFT NEST';\n }\n\n if (include.type === 'nest') {\n return include.optional ? 'LEFT NEST' : 'NEST';\n }\n\n if (include.type === 'leftJoin') {\n return 'LEFT JOIN';\n }\n\n if (include.type === 'join') {\n return include.optional ? 'LEFT JOIN' : 'JOIN';\n }\n\n if (include.keys) {\n return include.optional ? 'LEFT NEST' : 'NEST';\n }\n\n return include.optional ? 'LEFT JOIN' : 'JOIN';\n};\n\nconst predicateExpr = (\n predicate: JoinPredicate,\n store: IncludeParameterStore,\n aliases: Set<string>\n): string => {\n if (!predicate || typeof predicate !== 'object') throw new Error('Invalid ON predicate');\n const keys = Object.keys(predicate);\n if (keys.length === 1 && (keys[0] === '$and' || keys[0] === '$or')) {\n const children = (predicate as any)[keys[0]];\n if (!Array.isArray(children) || !children.length)\n throw new Error('ON logical groups must be nonempty');\n return `(${children\n .map((child) => predicateExpr(child, store, aliases))\n .join(keys[0] === '$and' ? ' AND ' : ' OR ')})`;\n }\n const comparison = predicate as any;\n if (\n keys.length !== 3 ||\n !keys.includes('left') ||\n !keys.includes('right') ||\n !keys.includes('op') ||\n !Object.prototype.hasOwnProperty.call(comparisonOperators, comparison.op)\n )\n throw new Error('Unsupported ON comparison');\n const reference = (value: any): string => {\n if (!value || typeof value.$field !== 'string' || Object.keys(value).length !== 1)\n throw new Error('Expected explicit joinField reference');\n const parts = value.$field.split('.');\n if (parts.length < 2 || !aliases.has(parts[0]))\n throw new Error(`Unknown ON alias: ${parts[0]}`);\n return fieldPath(value.$field);\n };\n const right = comparison.right;\n return `${reference(comparison.left)} ${comparisonOperators[comparison.op]} ${\n right && typeof right === 'object' && Object.prototype.hasOwnProperty.call(right, '$field')\n ? reference(right)\n : store.add(right)\n }`;\n};\n\nexport const buildIncludeClauses = (\n keyspace: string,\n include: readonly IncludeDefinition[] = [],\n sourceAlias = 'doc',\n store = new IncludeParameterStore()\n): string => {\n const aliases = new Set([sourceAlias]);\n const reservedAliases = new Set(['__cs_root', '__proto__', 'constructor', 'prototype']);\n const modes = new Set(include.map((item) => (item.on || item.onRaw ? 'ansi' : 'keys')));\n // Couchbase does not permit mixing lookup and ANSI joins in the same FROM clause.\n if (modes.size > 1) throw new Error('Cannot mix ANSI ON and ON KEYS includes');\n return include\n .map((item) => {\n if (aliases.has(item.as) || reservedAliases.has(item.as))\n throw new Error(`Duplicate or reserved include alias: ${item.as}`);\n aliases.add(item.as);\n if (item.type && !['join', 'leftJoin', 'nest', 'leftNest'].includes(item.type))\n throw new Error('Unsupported include type');\n if (\n [\n item.key !== undefined,\n item.keys !== undefined,\n item.on !== undefined,\n item.onRaw !== undefined,\n ].filter(Boolean).length !== 1\n ) {\n throw new Error(`include ${item.as} requires exactly one of key, keys, on, onRaw`);\n }\n let condition: string;\n if (item.on) condition = `ON ${predicateExpr(item.on, store, aliases)}`;\n else if (item.onRaw) {\n const values = item.onRaw.values || [];\n let index = 0;\n if (!item.onRaw.sql.trim()) throw new Error('onRaw requires SQL');\n const sql = item.onRaw.sql.replace(/\\?/g, () => {\n if (index >= values.length) throw new Error('onRaw placeholder/value mismatch');\n return store.add(values[index++]);\n });\n if (index !== values.length) throw new Error('onRaw placeholder/value mismatch');\n condition = `ON (${sql})`;\n } else\n condition = `ON KEYS ${sourceField(\n (item.key || item.keys) as string,\n sourceAlias\n )}`;\n return `${includeOperator(item)} ${keyspaceFromInclude(item, keyspace)} AS ${safeAlias(\n item.as\n )} ${condition}`;\n })\n .join(' ');\n};\n\nconst hasLogicalOperator = (clause: Record<string, any>): boolean => {\n return Object.keys(clause).some((key) => ['$and', '$or', '$not'].includes(key));\n};\n\nconst buildComparisonExpr = (\n fieldName: string,\n comparison: Record<string, any>,\n store: IncludeParameterStore,\n sourceAlias: string\n): string => {\n const field = sourceField(fieldName, sourceAlias);\n const expr = Object.keys(comparison)\n .map((operator) => {\n if (Object.prototype.hasOwnProperty.call(emptyComparisonOperators, operator)) {\n return `${field} ${emptyComparisonOperators[operator]}`;\n }\n\n if (Object.prototype.hasOwnProperty.call(comparisonOperators, operator)) {\n return `${field}${comparisonOperators[operator]}${store.add(comparison[operator])}`;\n }\n\n if (Object.prototype.hasOwnProperty.call(stringComparisonOperators, operator)) {\n return `${field} ${stringComparisonOperators[operator]} ${store.add(\n comparison[operator]\n )}`;\n }\n\n if (\n Object.prototype.hasOwnProperty.call(multipleComparisonOperators, operator) &&\n Array.isArray(comparison[operator])\n ) {\n const [from, to] = comparison[operator];\n\n return `${field} ${multipleComparisonOperators[operator]} ${store.add(\n from\n )} AND ${store.add(to)}`;\n }\n\n throw new Error(`Unsupported include where operator: ${operator}`);\n })\n .join(' AND ');\n\n return Object.keys(comparison).length > 1 ? `(${expr})` : expr;\n};\n\nconst buildFieldExpr = (\n field: Record<string, any>,\n store: IncludeParameterStore,\n sourceAlias: string\n): string => {\n return Object.keys(field)\n .map((fieldName) => {\n const value = field[fieldName];\n\n if (\n value &&\n typeof value === 'object' &&\n !Array.isArray(value) &&\n Object.keys(value).some((operator) => operator.indexOf('$') === 0)\n ) {\n return buildComparisonExpr(fieldName, value, store, sourceAlias);\n }\n\n if (fieldName.indexOf('$') === -1) {\n return `${sourceField(fieldName, sourceAlias)}=${store.add(value)}`;\n }\n\n throw new Error(`Unsupported include where field: ${fieldName}`);\n })\n .join(' AND ');\n};\n\nconst buildWhereClauseExpr = (\n clause: LogicalWhereExpr,\n store: IncludeParameterStore,\n sourceAlias: string\n): string => {\n if (!hasLogicalOperator(clause as Record<string, any>)) {\n return buildFieldExpr(clause as Record<string, any>, store, sourceAlias);\n }\n\n return Object.keys(clause)\n .map((key) => {\n const value = clause[key];\n\n if (\n Array.isArray(value) &&\n Object.prototype.hasOwnProperty.call(logicalOperators, key)\n ) {\n return `(${value\n .map((item) =>\n buildWhereClauseExpr(item as LogicalWhereExpr, store, sourceAlias)\n )\n .join(` ${logicalOperators[key]} `)})`;\n }\n\n if (key === '$not' && Array.isArray(value)) {\n return `NOT (${value\n .map((item) =>\n buildWhereClauseExpr(item as LogicalWhereExpr, store, sourceAlias)\n )\n .join(' AND ')})`;\n }\n\n return buildWhereClauseExpr({[key]: value} as LogicalWhereExpr, store, sourceAlias);\n })\n .join(' AND ');\n};\n\nconst buildWhereExpr = (\n expr: LogicalWhereExpr | undefined,\n store: IncludeParameterStore,\n sourceAlias: string\n): string => {\n return expr ? ` WHERE ${buildWhereClauseExpr(expr, store, sourceAlias)}` : '';\n};\n\nconst buildOrderByExpr = (\n orderBy: Record<string, SortType> | undefined,\n sourceAlias: string\n): string => {\n return orderBy\n ? ` ORDER BY ${Object.keys(orderBy)\n .map((field) => {\n if (!['ASC', 'DESC'].includes(orderBy[field]))\n throw new Error('Unsupported order direction');\n return `${sourceField(field, sourceAlias)} ${orderBy[field]}`;\n })\n .join(',')}`\n : '';\n};\n\nconst selectedObject = (alias: string, fields?: readonly string[]): string => {\n if (!fields) return identifier(alias);\n if (!fields.length || new Set(fields).size !== fields.length)\n throw new Error('Projection must contain distinct fields');\n return `{${fields\n .map((field) => {\n if (field.includes('.'))\n throw new Error('Include projections support top-level fields only');\n return `${JSON.stringify(field)}: ${identifier(alias)}.${identifier(field)}`;\n })\n .join(', ')}}`;\n};\n\nconst buildSelectExpr = (\n select: readonly any[] | string | undefined,\n include: readonly IncludeDefinition[],\n sourceAlias: string\n): {expr: string; selectAll: boolean; resultKey?: string} => {\n const all = !select || select === '*';\n const structured =\n Array.isArray(select) &&\n select.every((field) => typeof field === 'string' && !field.includes('.'));\n const root = all\n ? identifier(sourceAlias)\n : structured\n ? selectedObject(sourceAlias, select as string[])\n : undefined;\n const relations = include.map((item) => {\n const alias = identifier(item.as);\n if (!item.select) return `${alias} AS ${alias}`;\n const object = selectedObject('__cs_item', item.select);\n const expression = includeOperator(item).includes('NEST')\n ? `ARRAY ${object} FOR ${identifier('__cs_item')} IN ${alias} END`\n : `CASE WHEN ${alias} IS MISSING THEN MISSING WHEN ${alias} IS NULL THEN NULL ELSE ${selectedObject(\n item.as,\n item.select\n )} END`;\n return `${expression} AS ${alias}`;\n });\n if (\n structured &&\n (select as string[]).some((field) => include.some((item) => item.as === field))\n )\n throw new Error('Include alias conflicts with projected root field');\n if (root)\n return {\n expr: [`${root} AS __cs_root`, ...relations].join(', '),\n selectAll: all,\n resultKey: '__cs_root',\n };\n throw new Error(\n 'Includes support only * or top-level field-array projections; use queryRows for arbitrary SQL++ projections'\n );\n};\n\nexport const buildIncludedSelectionQuery = (\n args: IncludedSelectionQueryArgs\n): IncludedSelectionQuery => {\n const sourceAlias = args.sourceAlias || 'doc';\n if (sourceAlias === '__cs_root') throw new Error('Reserved source alias');\n const include = args.include || [];\n const store = new IncludeParameterStore();\n const limit = typeof args.limit === 'number' ? args.limit : 10;\n const page = typeof args.page === 'number' ? args.page : 0;\n const offset = typeof args.offset === 'number' ? args.offset : page * limit;\n const {expr, selectAll, resultKey} = buildSelectExpr(args.select, include, sourceAlias);\n const joins = buildIncludeClauses(args.keyspace, include, sourceAlias, store);\n const limitExpr = ` LIMIT ${store.set('cs_limit', limit)} OFFSET ${store.set(\n 'cs_offset',\n offset\n )}`;\n\n return {\n query: `SELECT ${expr} FROM ${args.keyspace} AS ${identifier(\n sourceAlias\n )} ${joins}${buildWhereExpr(args.where, store, sourceAlias)}${buildOrderByExpr(\n args.orderBy,\n sourceAlias\n )}${limitExpr}`,\n parameters: store.parameters,\n resultKey,\n selectAll,\n };\n};\n"]}
@@ -27,7 +27,8 @@ export type { ModelPageResult, ModelReadArgs } from './read-helpers';
27
27
  export type { QueryLogger, QueryPageOptions, QueryPageResult, QueryParameters, SafeQueryOptions, } from './safe-query';
28
28
  export type { FindByIdWithMetaResult, PatchByIdArgs } from './write-helpers';
29
29
  export type { Hydrated } from './hydrated-document';
30
- export type { IncludeDefinition, IncludeType } from './include';
30
+ export type { IncludeDefinition, IncludeType, JoinField, JoinPredicate } from './include';
31
+ export { joinField } from './include';
31
32
  export type { EnsureIndexOptions, ModelIndexDefinition } from './indexes';
32
33
  export type { TtlOptions } from './ttl';
33
34
  export type { ParseHook, ValidationHook } from './validation';
@@ -234,6 +235,8 @@ export declare class Model {
234
235
  id: string;
235
236
  }>(data: T & AutoModelFields): Hydrated<T>;
236
237
  parse<T>(data: T): T;
238
+ /** Decode present projection fields without invoking full-document parse hooks. */
239
+ parseProjection<T>(data: T): T;
237
240
  /** @internal Used by the typed client before a document reaches the SDK. */
238
241
  serialize<T>(data: T): T;
239
242
  /** @internal Used by patch helpers and transaction-bound models. */
@@ -97,7 +97,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
97
97
  return (mod && mod.__esModule) ? mod : { "default": mod };
98
98
  };
99
99
  Object.defineProperty(exports, "__esModule", { value: true });
100
- exports.Model = void 0;
100
+ exports.Model = exports.joinField = void 0;
101
101
  var utils_1 = require("../utils");
102
102
  var connection_1 = __importDefault(require("../connection"));
103
103
  var default_scope_1 = require("./default-scope");
@@ -108,6 +108,8 @@ var write_helpers_1 = require("./write-helpers");
108
108
  var hydrated_document_1 = require("./hydrated-document");
109
109
  var indexes_1 = require("./indexes");
110
110
  var validation_1 = require("./validation");
111
+ var include_1 = require("./include");
112
+ Object.defineProperty(exports, "joinField", { enumerable: true, get: function () { return include_1.joinField; } });
111
113
  var Model = /** @class */ (function () {
112
114
  function Model(name, options, connection) {
113
115
  this.scope = '_default';
@@ -322,6 +324,7 @@ var Model = /** @class */ (function () {
322
324
  cluster: this.couchbaseConnection().cluster,
323
325
  parse: function (data) { return _this.parse(data); },
324
326
  resultKey: this.queryResultKey(),
327
+ parseProjection: function (data) { return _this.parseProjection(data); },
325
328
  };
326
329
  };
327
330
  Model.prototype.readArgs = function (args) {
@@ -756,6 +759,10 @@ var Model = /** @class */ (function () {
756
759
  var parsedDates = (0, validation_1.parseDateFields)(parsed, this.dateFields);
757
760
  return this.parseHook ? this.parseHook(parsedDates) : parsedDates;
758
761
  };
762
+ /** Decode present projection fields without invoking full-document parse hooks. */
763
+ Model.prototype.parseProjection = function (data) {
764
+ return (0, validation_1.parseDateFields)((0, utils_1.parseSchema)(this.schema, this.deserialize(data)), this.dateFields);
765
+ };
759
766
  /** @internal Used by the typed client before a document reaches the SDK. */
760
767
  Model.prototype.serialize = function (data) {
761
768
  var _this = this;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/model/index.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n Collection,\n Cluster,\n GetOptions,\n MutateInOptions,\n RemoveOptions,\n ReplaceOptions,\n} from 'couchbase';\n\nimport {SchemaTypes, parseSchema} from '../utils';\nimport CouchbaseConnection from '../connection';\n\nimport {applyDefaultWhere, DefaultWhereMode} from './default-scope';\nimport {\n count as countRows,\n exists as rowsExist,\n findMany as findManyRows,\n findOne as findOneRow,\n page as pageRows,\n} from './read-helpers';\nimport type {ModelPageResult, ModelReadArgs, ModelReadContext} from './read-helpers';\nimport {bucketIdentifier, fromTarget, keyspaceIdentifier} from './keyspace';\nimport {runQueryOne, runQueryPage, runQueryRows} from './safe-query';\nimport type {\n QueryPageOptions,\n QueryPageResult,\n QueryParameters,\n SafeQueryOptions,\n} from './safe-query';\nimport {\n findByIdWithMeta as findByIdWithMetaDoc,\n incrementById as incrementDocumentById,\n insert as insertDocument,\n mutateById as mutateDocumentById,\n patchById as patchDocumentById,\n prepareInsertDocument,\n prepareReplacementDocument,\n replaceById as replaceDocumentById,\n upsert as upsertDocument,\n} from './write-helpers';\nimport type {\n FindByIdWithMetaResult,\n InsertWriteOptions,\n ModelWriteContext,\n PatchByIdArgs,\n UpsertWriteOptions,\n} from './write-helpers';\nimport {hydrate as hydrateDocument, Hydrated} from './hydrated-document';\nimport {\n buildIndexQuery,\n ensureModelIndexes,\n EnsureIndexOptions,\n ModelIndexDefinition,\n} from './indexes';\nimport type {ParseHook, ValidationHook} from './validation';\nimport {parseDateFields, schemaFromDateFields} from './validation';\n\n/** A small connection surface used by client-bound models. */\nexport interface ModelConnection {\n bucket?: any;\n bucketName?: string;\n cluster: Cluster;\n getBucket(): string;\n getCollection(scopeName?: string, collectionName?: string): Collection;\n isConnected(): boolean;\n ready(): Promise<any>;\n shouldReconnect(error: any): boolean;\n markDisconnected(error: any): void;\n}\n\n/** Converts a field between the application's value and Couchbase JSON. */\nexport interface FieldCodec<T = any, TDatabase = any> {\n toDatabase(value: T): TDatabase;\n fromDatabase(value: TDatabase): T;\n}\n\nexport type {ModelPageResult, ModelReadArgs} from './read-helpers';\nexport type {\n QueryLogger,\n QueryPageOptions,\n QueryPageResult,\n QueryParameters,\n SafeQueryOptions,\n} from './safe-query';\nexport type {FindByIdWithMetaResult, PatchByIdArgs} from './write-helpers';\nexport type {Hydrated} from './hydrated-document';\nexport type {IncludeDefinition, IncludeType} from './include';\nexport type {EnsureIndexOptions, ModelIndexDefinition} from './indexes';\nexport type {TtlOptions} from './ttl';\nexport type {ParseHook, ValidationHook} from './validation';\n\nexport interface AutoModelFields {\n id: string;\n createdAt: Date;\n updatedAt?: Date;\n deleted?: Date;\n _type: string; // type for models/collections\n _scope: string; // scope for collections\n}\n\nexport interface UpdateOptions extends ReplaceOptions {\n silent?: boolean; // whether to updatedAt;\n}\n\nexport interface DeleteByIdOptions extends RemoveOptions {\n hard?: boolean;\n}\n\nexport interface ModalOptions {\n scope?: string;\n collection?: string;\n schema?: Record<string, SchemaTypes>;\n softDelete?: boolean;\n defaultWhere?: any;\n validateCreate?: ValidationHook;\n validateReplace?: ValidationHook;\n parse?: ParseHook;\n dateFields?: string[];\n /**\n * Explicit field transforms. A field cannot also be a dateFields/schema date\n * transform, since that makes the parse order ambiguous.\n */\n codecs?: Record<string, FieldCodec<any, any>>;\n indexes?: ModelIndexDefinition[];\n}\n\nexport type ConsumeOnceResult = {status: 'consumed'} | {status: 'missing'} | {status: 'conflict'};\n\ninterface CollectionTarget {\n scopeName?: string;\n collectionName?: string;\n}\n\nexport class Model {\n private static registeredModels: Model[] = [];\n\n collection: Collection;\n collectionName: string;\n scope = '_default';\n private scopeName?: string;\n private collectionTargetName?: string;\n private defaultWhere?: any;\n private defaultWhereMode: DefaultWhereMode = 'default';\n private softDelete = false;\n private validateCreateHook?: ValidationHook;\n private validateReplaceHook?: ValidationHook;\n private parseHook?: ParseHook;\n private dateFields?: string[];\n private codecs: Record<string, FieldCodec<any, any>> = {};\n private readonly connection?: ModelConnection;\n private indexes: ModelIndexDefinition[] = [];\n schema: Record<string, SchemaTypes> = {\n createdAt: 'date',\n updatedAt: 'date',\n };\n\n constructor(name: string, options?: ModalOptions, connection?: ModelConnection) {\n // this.collection = CouchbaseConnection.Instance.getCollection();\n this.collectionName = name;\n this.connection = connection;\n if (options) {\n const hasScope = Object.prototype.hasOwnProperty.call(options, 'scope');\n const hasCollection = Object.prototype.hasOwnProperty.call(options, 'collection');\n this.scope = (options && options.scope) || '_default';\n this.scopeName = hasScope ? this.scope : undefined;\n this.collectionTargetName = hasCollection\n ? options.collection || '_default'\n : undefined;\n this.softDelete = !!options.softDelete;\n this.defaultWhere = options.defaultWhere;\n this.validateCreateHook = options.validateCreate;\n this.validateReplaceHook = options.validateReplace;\n this.parseHook = options.parse;\n this.dateFields = options.dateFields;\n this.codecs = options.codecs || {};\n const dateFields = new Set(options.dateFields || []);\n Object.keys(this.codecs).forEach((field) => {\n if (dateFields.has(field) || options.schema?.[field] === 'date') {\n throw new Error(\n `codec for ${field} conflicts with dateFields or schema date; use one transform`\n );\n }\n });\n this.indexes = options.indexes || [];\n this.schema = {\n ...((options && options.schema) || {}),\n ...schemaFromDateFields(options.dateFields),\n createdAt: 'date',\n updatedAt: 'date',\n };\n }\n\n // Legacy models participate in the singleton registry. Client-bound\n // models are registered only by their owning CouchsetClient.\n if (this.indexes.length && !this.connection) {\n Model.registeredModels.push(this);\n }\n }\n\n /**\n * Ensure indexes for every constructed model with index declarations.\n */\n public static async ensureIndexes(options?: EnsureIndexOptions): Promise<string[]> {\n const queries: string[] = [];\n const seenQueries = new Set<string>();\n\n for (const model of Model.registeredModels) {\n await model.prepare();\n const statements = model.indexStatements(options);\n const pending = statements.filter((query) => !seenQueries.has(query));\n\n pending.forEach((query) => seenQueries.add(query));\n await ensureModelIndexes(\n model.couchbaseConnection().cluster,\n model.keyspace(),\n model.indexes.filter((index, indexPosition) =>\n pending.includes(statements[indexPosition])\n ),\n options\n );\n queries.push(...pending);\n }\n\n return queries;\n }\n\n /**\n * Refresh and get default collection from CouchbaseConnection\n * Because CouchbaseConnection is a singleton, sometimes it might be undefined depending when model was created\n * So we have to call it from all model methods\n * to avoid error `Cannot read property 'defaultCollection' of null`\n */\n private fresh(): void {\n // if couchbase connection has been init\n if (this.couchbaseConnection().isConnected()) {\n const target = this.collectionTarget();\n this.collection = this.couchbaseConnection().getCollection(\n target.scopeName,\n target.collectionName\n );\n }\n }\n\n private async prepare(): Promise<void> {\n const connection = this.couchbaseConnection();\n\n if (!connection.bucket) {\n await connection.ready();\n }\n\n const target = this.collectionTarget();\n this.collection = connection.getCollection(target.scopeName, target.collectionName);\n }\n\n private async withConnection<T>(operation: () => Promise<T>): Promise<T> {\n await this.prepare();\n\n try {\n return await operation();\n } catch (error) {\n const connection = this.couchbaseConnection();\n\n if (!connection.shouldReconnect(error)) {\n throw error;\n }\n\n connection.markDisconnected(error);\n await this.prepare();\n\n return operation();\n }\n }\n\n /** Get this collection\n * getCollection\n */\n private getBucketName(): string {\n const bucketName = this.couchbaseConnection().getBucket();\n\n if (!bucketName) {\n throw new Error('couchset is not connected; call couchset(args) first');\n }\n\n return bucketName;\n }\n\n /** Get this collection\n * getCollection\n */\n private couchbaseConnection(): ModelConnection {\n return this.connection || CouchbaseConnection.Instance;\n }\n\n /** Get this collection\n * getCollection\n */\n public getCollection(): Collection {\n this.fresh();\n return this.collection;\n }\n\n private collectionTarget(): CollectionTarget {\n if (!this.scopeName && !this.collectionTargetName) {\n return {};\n }\n\n return {\n scopeName: this.scopeName || '_default',\n collectionName: this.collectionTargetName || '_default',\n };\n }\n\n private queryResultKey(): string {\n const target = this.collectionTarget();\n\n return target.collectionName || this.getBucketName();\n }\n\n private readContext(): ModelReadContext {\n return {\n bucketName: this.keyspace(),\n collectionName: this.collectionName,\n cluster: this.couchbaseConnection().cluster,\n parse: <T>(data: T) => this.parse(data),\n resultKey: this.queryResultKey(),\n };\n }\n\n private readArgs(args: ModelReadArgs = {}): ModelReadArgs {\n return applyDefaultWhere(args, {\n defaultWhere: this.defaultWhere,\n mode: this.defaultWhereMode,\n softDelete: this.softDelete,\n });\n }\n\n private writeContext(): ModelWriteContext {\n return {\n collection: this.getCollection(),\n collectionName: this.collectionName,\n scope: this.scope,\n parse: <T>(data: T) => this.parse(data),\n serialize: <T>(data: T) => this.serialize(data),\n serializeField: (path: string, value: any) => this.serializeField(path, value),\n validateCreate: this.validateCreateHook,\n validateReplace: this.validateReplaceHook,\n };\n }\n\n private cloneWithDefaultWhereMode(mode: DefaultWhereMode): Model {\n const options: ModalOptions = {\n codecs: this.codecs,\n dateFields: this.dateFields,\n defaultWhere: this.defaultWhere,\n parse: this.parseHook,\n schema: this.schema,\n softDelete: this.softDelete,\n validateCreate: this.validateCreateHook,\n validateReplace: this.validateReplaceHook,\n };\n\n if (this.scopeName) {\n options.scope = this.scopeName;\n }\n\n if (this.collectionTargetName) {\n options.collection = this.collectionTargetName;\n }\n\n const model = new Model(this.collectionName, options, this.connection);\n model.defaultWhereMode = mode;\n\n return model;\n }\n\n /**\n * Return the active bucket as a SQL++ keyspace identifier.\n */\n public bucket(): string {\n return bucketIdentifier(this.getBucketName());\n }\n\n /**\n * Return this model's SQL++ keyspace target.\n */\n public keyspace(): string {\n const target = this.collectionTarget();\n\n return keyspaceIdentifier({\n bucketName: this.getBucketName(),\n scopeName: target.scopeName,\n collectionName: target.collectionName,\n });\n }\n\n /**\n * Return a SQL++ FROM target for this model's current bucket.\n */\n public from(alias?: string): string {\n return fromTarget(this.keyspace(), alias);\n }\n\n /**\n * Return CREATE INDEX statements for this model without executing them.\n */\n public indexStatements(options?: EnsureIndexOptions): string[] {\n return this.indexes.map((index) => buildIndexQuery(this.keyspace(), index, options));\n }\n\n /**\n * Create this model's declared indexes if Couchbase does not already have them.\n */\n public async ensureIndexes(options?: EnsureIndexOptions): Promise<string[]> {\n return this.withConnection(() =>\n ensureModelIndexes(\n this.couchbaseConnection().cluster,\n this.keyspace(),\n this.indexes,\n options\n )\n );\n }\n\n /**\n * Run a SQL++ query and return rows directly.\n */\n public async queryRows<T>(\n query: string,\n params?: QueryParameters,\n options?: SafeQueryOptions\n ): Promise<T[]> {\n return this.withConnection(() =>\n runQueryRows<T>(this.couchbaseConnection().cluster, query, params, options)\n );\n }\n\n /**\n * Run a SQL++ query and return the first row or null.\n */\n public async queryOne<T>(\n query: string,\n params?: QueryParameters,\n options?: SafeQueryOptions\n ): Promise<T | null> {\n return this.withConnection(() =>\n runQueryOne<T>(this.couchbaseConnection().cluster, query, params, options)\n );\n }\n\n /**\n * Run a SQL++ query using limit + 1 pagination.\n */\n public async queryPage<T>(\n query: string,\n params?: QueryParameters,\n options?: QueryPageOptions\n ): Promise<QueryPageResult<T>> {\n return this.withConnection(() =>\n runQueryPage<T>(this.couchbaseConnection().cluster, query, params, options)\n );\n }\n\n /**\n * Find many model-scoped documents.\n */\n public async findMany<T>(args: ModelReadArgs = {}): Promise<T[]> {\n return this.withConnection(() => findManyRows<T>(this.readContext(), this.readArgs(args)));\n }\n\n /**\n * Find the first matching model-scoped document.\n */\n public async findOne<T>(args: ModelReadArgs = {}): Promise<T | null> {\n return this.withConnection(() => findOneRow<T>(this.readContext(), this.readArgs(args)));\n }\n\n /**\n * Check whether at least one model-scoped document matches.\n */\n public async exists(args: ModelReadArgs = {}): Promise<boolean> {\n return this.withConnection(() => rowsExist(this.readContext(), this.readArgs(args)));\n }\n\n /**\n * Count model-scoped documents.\n */\n public async count(args: ModelReadArgs = {}): Promise<number> {\n return this.withConnection(() => countRows(this.readContext(), this.readArgs(args)));\n }\n\n /**\n * Fetch a limit + 1 page of model-scoped documents.\n */\n public async page<T>(args: ModelReadArgs = {}): Promise<ModelPageResult<T>> {\n return this.withConnection(() => pageRows<T>(this.readContext(), this.readArgs(args)));\n }\n\n public withDeleted(): Model {\n return this.cloneWithDefaultWhereMode('withDeleted');\n }\n\n public onlyDeleted(): Model {\n return this.cloneWithDefaultWhereMode('onlyDeleted');\n }\n\n public withoutDefaultWhere(): Model {\n return this.cloneWithDefaultWhereMode('none');\n }\n\n /**\n * Insert a new document and fail if the id already exists.\n */\n public async insert<T>(data: T, options?: InsertWriteOptions): Promise<T & AutoModelFields> {\n return this.withConnection(() => insertDocument<T>(this.writeContext(), data, options));\n }\n\n /** @internal Prepare a transaction insert without issuing a normal SDK write. */\n public prepareInsert<T>(data: T): Promise<T & AutoModelFields> {\n return prepareInsertDocument<T>(this.writeContext(), data);\n }\n\n /**\n * Explicit insert-or-replace write.\n */\n public async upsert<T>(data: T, options?: UpsertWriteOptions): Promise<T & AutoModelFields> {\n return this.withConnection(() => upsertDocument<T>(this.writeContext(), data, options));\n }\n\n public async getById<T>(id: string, options?: GetOptions): Promise<T & AutoModelFields> {\n return this.withConnection(async () => {\n const data = await this.collection.get(id, options);\n return this.parse<T & AutoModelFields>(data.content);\n });\n }\n\n public async findDocById<T extends {id: string}>(\n id: string,\n options?: GetOptions\n ): Promise<Hydrated<T>> {\n const data = await this.getById<T>(id, options);\n\n return this.hydrate<T>(data);\n }\n\n /**\n * Find a document with SDK metadata.\n */\n public async findByIdWithMeta<T>(\n id: string,\n options?: GetOptions\n ): Promise<FindByIdWithMetaResult<T>> {\n return this.withConnection(() => findByIdWithMetaDoc<T>(this.writeContext(), id, options));\n }\n\n /** Ergonomic alias for findByIdWithMeta, intended for CAS workflows. */\n public async getWithCas<T>(\n id: string,\n options?: GetOptions\n ): Promise<FindByIdWithMetaResult<T>> {\n return this.findByIdWithMeta<T>(id, options);\n }\n\n /**\n * Explicit full-document replace.\n */\n public async replaceById<T>(\n id: string,\n data: T,\n options?: UpdateOptions\n ): Promise<T & AutoModelFields> {\n return this.withConnection(() =>\n replaceDocumentById<T>(this.writeContext(), id, data, options)\n );\n }\n\n /** @internal Prepare a transaction replace without issuing a normal SDK write. */\n public prepareReplace<T>(\n id: string,\n data: T,\n options?: UpdateOptions\n ): Promise<T & AutoModelFields> {\n return prepareReplacementDocument<T>(this.writeContext(), id, data, options);\n }\n\n /**\n * Replace only when the supplied CAS still describes the current document.\n * CouchSet deliberately performs one SDK operation and never re-reads/retries\n * with a new CAS, because doing so would defeat the caller's concurrency check.\n */\n public async replaceIfCas<T>(\n id: string,\n data: T,\n cas: any,\n options?: UpdateOptions\n ): Promise<T & AutoModelFields> {\n return this.replaceById<T>(id, data, {...(options || {}), cas});\n }\n\n /**\n * Remove a one-time document with exactly the CAS supplied by the caller.\n * Missing and CAS-mismatch cases are normal outcomes; transport and ambiguous\n * failures are rethrown so callers never mistake an unknown commit for success.\n */\n public async consumeOnce(id: string, cas: any): Promise<ConsumeOnceResult> {\n await this.prepare();\n\n try {\n await this.collection.remove(id, {cas});\n return {status: 'consumed'};\n } catch (error) {\n const name = (error as any)?.name || '';\n const message = (error as any)?.message || '';\n\n if (/DocumentNotFound|not found/i.test(`${name} ${message}`)) {\n return {status: 'missing'};\n }\n\n if (/CasMismatch|cas mismatch/i.test(`${name} ${message}`)) {\n return {status: 'conflict'};\n }\n\n throw error;\n }\n }\n\n /**\n * Partial document mutation using common patch operators.\n */\n public async patchById<T>(\n id: string,\n patch: PatchByIdArgs,\n options?: MutateInOptions\n ): Promise<T & AutoModelFields> {\n return this.withConnection(() =>\n patchDocumentById<T>(this.writeContext(), id, patch, options)\n );\n }\n\n /**\n * Couchbase subdocument mutation escape hatch.\n */\n public async mutateById(id: string, specs: any[], options?: MutateInOptions): Promise<any> {\n return this.withConnection(() =>\n mutateDocumentById(this.writeContext(), id, specs, options)\n );\n }\n\n /**\n * Atomic numeric field increment.\n */\n public async incrementById<T>(\n id: string,\n field: string,\n delta: number,\n options?: MutateInOptions\n ): Promise<T & AutoModelFields> {\n return this.withConnection(() =>\n incrementDocumentById<T>(this.writeContext(), id, field, delta, options)\n );\n }\n\n public async softDeleteById<T>(\n id: string,\n options?: MutateInOptions\n ): Promise<T & AutoModelFields> {\n return this.patchById<T>(id, {$set: {deleted: true, deletedAt: new Date()}}, options);\n }\n\n public async restoreById<T>(\n id: string,\n options?: MutateInOptions\n ): Promise<T & AutoModelFields> {\n return this.patchById<T>(id, {$unset: ['deleted', 'deletedAt']}, options);\n }\n\n public async deleteById<T>(\n id: string,\n options?: DeleteByIdOptions\n ): Promise<boolean | (T & AutoModelFields)> {\n const {hard = false, ...removeOptions} = options || {};\n\n if (hard || !this.softDelete) {\n return this.withConnection(async () => {\n await this.collection.remove(id, removeOptions);\n return true;\n });\n }\n\n return this.softDeleteById<T>(id);\n }\n\n public async findDocOne<T extends {id: string}>(\n args: ModelReadArgs = {}\n ): Promise<Hydrated<T> | null> {\n const data = await this.findOne<T>(args);\n\n return data ? this.hydrate<T>(data as T & AutoModelFields) : null;\n }\n\n public hydrate<T extends {id: string}>(data: T & AutoModelFields): Hydrated<T> {\n return hydrateDocument<T>(this as any, this.parse(data));\n }\n\n public parse<T>(data: T): T {\n const decoded = this.deserialize(data);\n const parsed = parseSchema(this.schema, decoded);\n const parsedDates = parseDateFields(parsed, this.dateFields);\n\n return this.parseHook ? this.parseHook(parsedDates) : parsedDates;\n }\n\n /** @internal Used by the typed client before a document reaches the SDK. */\n public serialize<T>(data: T): T {\n const result: any = {...(data as any)};\n\n Object.keys(this.codecs).forEach((path) => {\n const current = getPath(result, path);\n if (current !== undefined) {\n setPath(result, path, this.codecs[path].toDatabase(current));\n }\n });\n\n return result;\n }\n\n /** @internal Used by patch helpers and transaction-bound models. */\n public serializeField(path: string, value: any): any {\n return this.codecs[path] ? this.codecs[path].toDatabase(value) : value;\n }\n\n private deserialize<T>(data: T): T {\n const result: any = {...(data as any)};\n\n Object.keys(this.codecs).forEach((path) => {\n const current = getPath(result, path);\n if (current !== undefined) {\n setPath(result, path, this.codecs[path].fromDatabase(current));\n }\n });\n\n return result;\n }\n}\n\nconst getPath = (data: any, path: string): any =>\n path.split('.').reduce((value, key) => (value == null ? undefined : value[key]), data);\n\nconst setPath = (data: any, path: string, value: any): void => {\n const parts = path.split('.');\n const key = parts.pop() as string;\n const target = parts.reduce((current, part) => {\n const existing = current[part];\n if (Array.isArray(existing)) {\n current[part] = existing.slice();\n } else if (existing && typeof existing === 'object') {\n // serialize/parse start with a shallow root copy. Clone every branch\n // we traverse so dotted codecs never mutate caller or SDK content.\n current[part] = {...existing};\n } else {\n current[part] = {};\n }\n return current[part];\n }, data);\n target[key] = value;\n};\n\nexport default Model;\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/model/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AASA,kCAAkD;AAClD,6DAAgD;AAEhD,iDAAoE;AACpE,+CAMwB;AAExB,uCAA4E;AAC5E,2CAAqE;AAOrE,iDAUyB;AAQzB,yDAAyE;AACzE,qCAKmB;AAEnB,2CAAmE;AAgCnE,qCAAoC;AAA5B,oGAAA,SAAS,OAAA;AA+CjB;IAuBI,eAAY,IAAY,EAAE,OAAsB,EAAE,UAA4B;QAlB9E,UAAK,GAAG,UAAU,CAAC;QAIX,qBAAgB,GAAqB,SAAS,CAAC;QAC/C,eAAU,GAAG,KAAK,CAAC;QAKnB,WAAM,GAAyC,EAAE,CAAC;QAElD,YAAO,GAA2B,EAAE,CAAC;QAC7C,WAAM,GAAgC;YAClC,SAAS,EAAE,MAAM;YACjB,SAAS,EAAE,MAAM;SACpB,CAAC;QAGE,kEAAkE;QAClE,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;QAC3B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,OAAO,EAAE,CAAC;YACV,IAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACxE,IAAM,aAAa,GAAG,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;YAClF,IAAI,CAAC,KAAK,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC;YACtD,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;YACnD,IAAI,CAAC,oBAAoB,GAAG,aAAa;gBACrC,CAAC,CAAC,OAAO,CAAC,UAAU,IAAI,UAAU;gBAClC,CAAC,CAAC,SAAS,CAAC;YAChB,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;YACvC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;YACzC,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC,cAAc,CAAC;YACjD,IAAI,CAAC,mBAAmB,GAAG,OAAO,CAAC,eAAe,CAAC;YACnD,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC;YAC/B,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;YACrC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC;YACnC,IAAM,YAAU,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;YACrD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,UAAC,KAAK;;gBACnC,IAAI,YAAU,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAA,MAAA,OAAO,CAAC,MAAM,0CAAG,KAAK,CAAC,MAAK,MAAM,EAAE,CAAC;oBAC9D,MAAM,IAAI,KAAK,CACX,oBAAa,KAAK,iEAA8D,CACnF,CAAC;gBACN,CAAC;YACL,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;YACrC,IAAI,CAAC,MAAM,kCACJ,CAAC,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,GACnC,IAAA,iCAAoB,EAAC,OAAO,CAAC,UAAU,CAAC,KAC3C,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GACpB,CAAC;QACN,CAAC;QAED,oEAAoE;QACpE,6DAA6D;QAC7D,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YAC1C,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtC,CAAC;IACL,CAAC;IAED;;OAEG;IACiB,mBAAa,GAAjC,UAAkC,OAA4B;;;;;;;wBACpD,OAAO,GAAa,EAAE,CAAC;wBACvB,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;4CAE3B,KAAK;;;;4CACZ,qBAAM,KAAK,CAAC,OAAO,EAAE,EAAA;;wCAArB,SAAqB,CAAC;wCAChB,UAAU,GAAG,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;wCAC5C,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,UAAC,KAAK,IAAK,OAAA,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAvB,CAAuB,CAAC,CAAC;wCAEtE,OAAO,CAAC,OAAO,CAAC,UAAC,KAAK,IAAK,OAAA,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAtB,CAAsB,CAAC,CAAC;wCACnD,qBAAM,IAAA,4BAAkB,EACpB,KAAK,CAAC,mBAAmB,EAAE,CAAC,OAAO,EACnC,KAAK,CAAC,QAAQ,EAAE,EAChB,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,UAAC,KAAK,EAAE,aAAa;gDACtC,OAAA,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;4CAA3C,CAA2C,CAC9C,EACD,OAAO,CACV,EAAA;;wCAPD,SAOC,CAAC;wCACF,OAAO,CAAC,IAAI,OAAZ,OAAO,2BAAS,OAAO,WAAE;;;;;;;;wBAdT,KAAA,SAAA,KAAK,CAAC,gBAAgB,CAAA;;;;wBAA/B,KAAK;sDAAL,KAAK;;;;;;;;;;;;;;;;;;4BAiBhB,sBAAO,OAAO,EAAC;;;;KAClB;IAED;;;;;OAKG;IACK,qBAAK,GAAb;QACI,wCAAwC;QACxC,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;YAC3C,IAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACvC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC,aAAa,CACtD,MAAM,CAAC,SAAS,EAChB,MAAM,CAAC,cAAc,CACxB,CAAC;QACN,CAAC;IACL,CAAC;IAEa,uBAAO,GAArB;;;;;;wBACU,UAAU,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;6BAE1C,CAAC,UAAU,CAAC,MAAM,EAAlB,wBAAkB;wBAClB,qBAAM,UAAU,CAAC,KAAK,EAAE,EAAA;;wBAAxB,SAAwB,CAAC;;;wBAGvB,MAAM,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;wBACvC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,aAAa,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC;;;;;KACvF;IAEa,8BAAc,GAA5B,UAAgC,SAA2B;;;;;4BACvD,qBAAM,IAAI,CAAC,OAAO,EAAE,EAAA;;wBAApB,SAAoB,CAAC;;;;wBAGV,qBAAM,SAAS,EAAE,EAAA;4BAAxB,sBAAO,SAAiB,EAAC;;;wBAEnB,UAAU,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;wBAE9C,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,OAAK,CAAC,EAAE,CAAC;4BACrC,MAAM,OAAK,CAAC;wBAChB,CAAC;wBAED,UAAU,CAAC,gBAAgB,CAAC,OAAK,CAAC,CAAC;wBACnC,qBAAM,IAAI,CAAC,OAAO,EAAE,EAAA;;wBAApB,SAAoB,CAAC;wBAErB,sBAAO,SAAS,EAAE,EAAC;;;;;KAE1B;IAED;;OAEG;IACK,6BAAa,GAArB;QACI,IAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC,SAAS,EAAE,CAAC;QAE1D,IAAI,CAAC,UAAU,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;QAC5E,CAAC;QAED,OAAO,UAAU,CAAC;IACtB,CAAC;IAED;;OAEG;IACK,mCAAmB,GAA3B;QACI,OAAO,IAAI,CAAC,UAAU,IAAI,oBAAmB,CAAC,QAAQ,CAAC;IAC3D,CAAC;IAED;;OAEG;IACI,6BAAa,GAApB;QACI,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,OAAO,IAAI,CAAC,UAAU,CAAC;IAC3B,CAAC;IAEO,gCAAgB,GAAxB;QACI,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAChD,OAAO,EAAE,CAAC;QACd,CAAC;QAED,OAAO;YACH,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,UAAU;YACvC,cAAc,EAAE,IAAI,CAAC,oBAAoB,IAAI,UAAU;SAC1D,CAAC;IACN,CAAC;IAEO,8BAAc,GAAtB;QACI,IAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAEvC,OAAO,MAAM,CAAC,cAAc,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;IACzD,CAAC;IAEO,2BAAW,GAAnB;QAAA,iBASC;QARG,OAAO;YACH,UAAU,EAAE,IAAI,CAAC,QAAQ,EAAE;YAC3B,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,OAAO,EAAE,IAAI,CAAC,mBAAmB,EAAE,CAAC,OAAO;YAC3C,KAAK,EAAE,UAAI,IAAO,IAAK,OAAA,KAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAhB,CAAgB;YACvC,SAAS,EAAE,IAAI,CAAC,cAAc,EAAE;YAChC,eAAe,EAAE,UAAI,IAAO,IAAK,OAAA,KAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAA1B,CAA0B;SAC9D,CAAC;IACN,CAAC;IAEO,wBAAQ,GAAhB,UAAiB,IAAwB;QAAxB,qBAAA,EAAA,SAAwB;QACrC,OAAO,IAAA,iCAAiB,EAAC,IAAI,EAAE;YAC3B,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,IAAI,EAAE,IAAI,CAAC,gBAAgB;YAC3B,UAAU,EAAE,IAAI,CAAC,UAAU;SAC9B,CAAC,CAAC;IACP,CAAC;IAEO,4BAAY,GAApB;QAAA,iBAWC;QAVG,OAAO;YACH,UAAU,EAAE,IAAI,CAAC,aAAa,EAAE;YAChC,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,KAAK,EAAE,UAAI,IAAO,IAAK,OAAA,KAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAhB,CAAgB;YACvC,SAAS,EAAE,UAAI,IAAO,IAAK,OAAA,KAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAApB,CAAoB;YAC/C,cAAc,EAAE,UAAC,IAAY,EAAE,KAAU,IAAK,OAAA,KAAI,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,EAAhC,CAAgC;YAC9E,cAAc,EAAE,IAAI,CAAC,kBAAkB;YACvC,eAAe,EAAE,IAAI,CAAC,mBAAmB;SAC5C,CAAC;IACN,CAAC;IAEO,yCAAyB,GAAjC,UAAkC,IAAsB;QACpD,IAAM,OAAO,GAAiB;YAC1B,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,KAAK,EAAE,IAAI,CAAC,SAAS;YACrB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,cAAc,EAAE,IAAI,CAAC,kBAAkB;YACvC,eAAe,EAAE,IAAI,CAAC,mBAAmB;SAC5C,CAAC;QAEF,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;QACnC,CAAC;QAED,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC5B,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,oBAAoB,CAAC;QACnD,CAAC;QAED,IAAM,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,cAAc,EAAE,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QACvE,KAAK,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAE9B,OAAO,KAAK,CAAC;IACjB,CAAC;IAED;;OAEG;IACI,sBAAM,GAAb;QACI,OAAO,IAAA,2BAAgB,EAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;IAClD,CAAC;IAED;;OAEG;IACI,wBAAQ,GAAf;QACI,IAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAEvC,OAAO,IAAA,6BAAkB,EAAC;YACtB,UAAU,EAAE,IAAI,CAAC,aAAa,EAAE;YAChC,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,cAAc,EAAE,MAAM,CAAC,cAAc;SACxC,CAAC,CAAC;IACP,CAAC;IAED;;OAEG;IACI,oBAAI,GAAX,UAAY,KAAc;QACtB,OAAO,IAAA,qBAAU,EAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,KAAK,CAAC,CAAC;IAC9C,CAAC;IAED;;OAEG;IACI,+BAAe,GAAtB,UAAuB,OAA4B;QAAnD,iBAEC;QADG,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAC,KAAK,IAAK,OAAA,IAAA,yBAAe,EAAC,KAAI,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,EAAhD,CAAgD,CAAC,CAAC;IACzF,CAAC;IAED;;OAEG;IACU,6BAAa,GAA1B,UAA2B,OAA4B;;;;gBACnD,sBAAO,IAAI,CAAC,cAAc,CAAC;wBACvB,OAAA,IAAA,4BAAkB,EACd,KAAI,CAAC,mBAAmB,EAAE,CAAC,OAAO,EAClC,KAAI,CAAC,QAAQ,EAAE,EACf,KAAI,CAAC,OAAO,EACZ,OAAO,CACV;oBALD,CAKC,CACJ,EAAC;;;KACL;IAED;;OAEG;IACU,yBAAS,GAAtB,UACI,KAAa,EACb,MAAwB,EACxB,OAA0B;;;;gBAE1B,sBAAO,IAAI,CAAC,cAAc,CAAC;wBACvB,OAAA,IAAA,yBAAY,EAAI,KAAI,CAAC,mBAAmB,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC;oBAA3E,CAA2E,CAC9E,EAAC;;;KACL;IAED;;OAEG;IACU,wBAAQ,GAArB,UACI,KAAa,EACb,MAAwB,EACxB,OAA0B;;;;gBAE1B,sBAAO,IAAI,CAAC,cAAc,CAAC;wBACvB,OAAA,IAAA,wBAAW,EAAI,KAAI,CAAC,mBAAmB,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC;oBAA1E,CAA0E,CAC7E,EAAC;;;KACL;IAED;;OAEG;IACU,yBAAS,GAAtB,UACI,KAAa,EACb,MAAwB,EACxB,OAA0B;;;;gBAE1B,sBAAO,IAAI,CAAC,cAAc,CAAC;wBACvB,OAAA,IAAA,yBAAY,EAAI,KAAI,CAAC,mBAAmB,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC;oBAA3E,CAA2E,CAC9E,EAAC;;;KACL;IAED;;OAEG;IACU,wBAAQ,GAArB;4DAAyB,IAAwB;;YAAxB,qBAAA,EAAA,SAAwB;;gBAC7C,sBAAO,IAAI,CAAC,cAAc,CAAC,cAAM,OAAA,IAAA,uBAAY,EAAI,KAAI,CAAC,WAAW,EAAE,EAAE,KAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAxD,CAAwD,CAAC,EAAC;;;KAC9F;IAED;;OAEG;IACU,uBAAO,GAApB;4DAAwB,IAAwB;;YAAxB,qBAAA,EAAA,SAAwB;;gBAC5C,sBAAO,IAAI,CAAC,cAAc,CAAC,cAAM,OAAA,IAAA,sBAAU,EAAI,KAAI,CAAC,WAAW,EAAE,EAAE,KAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAtD,CAAsD,CAAC,EAAC;;;KAC5F;IAED;;OAEG;IACU,sBAAM,GAAnB;4DAAoB,IAAwB;;YAAxB,qBAAA,EAAA,SAAwB;;gBACxC,sBAAO,IAAI,CAAC,cAAc,CAAC,cAAM,OAAA,IAAA,qBAAS,EAAC,KAAI,CAAC,WAAW,EAAE,EAAE,KAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAlD,CAAkD,CAAC,EAAC;;;KACxF;IAED;;OAEG;IACU,qBAAK,GAAlB;4DAAmB,IAAwB;;YAAxB,qBAAA,EAAA,SAAwB;;gBACvC,sBAAO,IAAI,CAAC,cAAc,CAAC,cAAM,OAAA,IAAA,oBAAS,EAAC,KAAI,CAAC,WAAW,EAAE,EAAE,KAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAlD,CAAkD,CAAC,EAAC;;;KACxF;IAED;;OAEG;IACU,oBAAI,GAAjB;4DAAqB,IAAwB;;YAAxB,qBAAA,EAAA,SAAwB;;gBACzC,sBAAO,IAAI,CAAC,cAAc,CAAC,cAAM,OAAA,IAAA,mBAAQ,EAAI,KAAI,CAAC,WAAW,EAAE,EAAE,KAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAApD,CAAoD,CAAC,EAAC;;;KAC1F;IAEM,2BAAW,GAAlB;QACI,OAAO,IAAI,CAAC,yBAAyB,CAAC,aAAa,CAAC,CAAC;IACzD,CAAC;IAEM,2BAAW,GAAlB;QACI,OAAO,IAAI,CAAC,yBAAyB,CAAC,aAAa,CAAC,CAAC;IACzD,CAAC;IAEM,mCAAmB,GAA1B;QACI,OAAO,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,CAAC;IAClD,CAAC;IAED;;OAEG;IACU,sBAAM,GAAnB,UAAuB,IAAO,EAAE,OAA4B;;;;gBACxD,sBAAO,IAAI,CAAC,cAAc,CAAC,cAAM,OAAA,IAAA,sBAAc,EAAI,KAAI,CAAC,YAAY,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,EAArD,CAAqD,CAAC,EAAC;;;KAC3F;IAED,iFAAiF;IAC1E,6BAAa,GAApB,UAAwB,IAAO;QAC3B,OAAO,IAAA,qCAAqB,EAAI,IAAI,CAAC,YAAY,EAAE,EAAE,IAAI,CAAC,CAAC;IAC/D,CAAC;IAED;;OAEG;IACU,sBAAM,GAAnB,UAAuB,IAAO,EAAE,OAA4B;;;;gBACxD,sBAAO,IAAI,CAAC,cAAc,CAAC,cAAM,OAAA,IAAA,sBAAc,EAAI,KAAI,CAAC,YAAY,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,EAArD,CAAqD,CAAC,EAAC;;;KAC3F;IAEY,uBAAO,GAApB,UAAwB,EAAU,EAAE,OAAoB;;;;gBACpD,sBAAO,IAAI,CAAC,cAAc,CAAC;;;;wCACV,qBAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,EAAA;;oCAA7C,IAAI,GAAG,SAAsC;oCACnD,sBAAO,IAAI,CAAC,KAAK,CAAsB,IAAI,CAAC,OAAO,CAAC,EAAC;;;yBACxD,CAAC,EAAC;;;KACN;IAEY,2BAAW,GAAxB,UACI,EAAU,EACV,OAAoB;;;;;4BAEP,qBAAM,IAAI,CAAC,OAAO,CAAI,EAAE,EAAE,OAAO,CAAC,EAAA;;wBAAzC,IAAI,GAAG,SAAkC;wBAE/C,sBAAO,IAAI,CAAC,OAAO,CAAI,IAAI,CAAC,EAAC;;;;KAChC;IAED;;OAEG;IACU,gCAAgB,GAA7B,UACI,EAAU,EACV,OAAoB;;;;gBAEpB,sBAAO,IAAI,CAAC,cAAc,CAAC,cAAM,OAAA,IAAA,gCAAmB,EAAI,KAAI,CAAC,YAAY,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,EAAxD,CAAwD,CAAC,EAAC;;;KAC9F;IAED,wEAAwE;IAC3D,0BAAU,GAAvB,UACI,EAAU,EACV,OAAoB;;;gBAEpB,sBAAO,IAAI,CAAC,gBAAgB,CAAI,EAAE,EAAE,OAAO,CAAC,EAAC;;;KAChD;IAED;;OAEG;IACU,2BAAW,GAAxB,UACI,EAAU,EACV,IAAO,EACP,OAAuB;;;;gBAEvB,sBAAO,IAAI,CAAC,cAAc,CAAC;wBACvB,OAAA,IAAA,2BAAmB,EAAI,KAAI,CAAC,YAAY,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC;oBAA9D,CAA8D,CACjE,EAAC;;;KACL;IAED,kFAAkF;IAC3E,8BAAc,GAArB,UACI,EAAU,EACV,IAAO,EACP,OAAuB;QAEvB,OAAO,IAAA,0CAA0B,EAAI,IAAI,CAAC,YAAY,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IACjF,CAAC;IAED;;;;OAIG;IACU,4BAAY,GAAzB,UACI,EAAU,EACV,IAAO,EACP,GAAQ,EACR,OAAuB;;;gBAEvB,sBAAO,IAAI,CAAC,WAAW,CAAI,EAAE,EAAE,IAAI,wBAAM,CAAC,OAAO,IAAI,EAAE,CAAC,KAAE,GAAG,KAAA,IAAE,EAAC;;;KACnE;IAED;;;;OAIG;IACU,2BAAW,GAAxB,UAAyB,EAAU,EAAE,GAAQ;;;;;4BACzC,qBAAM,IAAI,CAAC,OAAO,EAAE,EAAA;;wBAApB,SAAoB,CAAC;;;;wBAGjB,qBAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,EAAE,EAAC,GAAG,KAAA,EAAC,CAAC,EAAA;;wBAAvC,SAAuC,CAAC;wBACxC,sBAAO,EAAC,MAAM,EAAE,UAAU,EAAC,EAAC;;;wBAEtB,SAAO,CAAC,OAAa,aAAb,OAAK,uBAAL,OAAK,CAAU,IAAI,KAAI,EAAE,CAAC;wBAClC,OAAO,GAAG,CAAC,OAAa,aAAb,OAAK,uBAAL,OAAK,CAAU,OAAO,KAAI,EAAE,CAAC;wBAE9C,IAAI,6BAA6B,CAAC,IAAI,CAAC,UAAG,MAAI,cAAI,OAAO,CAAE,CAAC,EAAE,CAAC;4BAC3D,sBAAO,EAAC,MAAM,EAAE,SAAS,EAAC,EAAC;wBAC/B,CAAC;wBAED,IAAI,2BAA2B,CAAC,IAAI,CAAC,UAAG,MAAI,cAAI,OAAO,CAAE,CAAC,EAAE,CAAC;4BACzD,sBAAO,EAAC,MAAM,EAAE,UAAU,EAAC,EAAC;wBAChC,CAAC;wBAED,MAAM,OAAK,CAAC;;;;;KAEnB;IAED;;OAEG;IACU,yBAAS,GAAtB,UACI,EAAU,EACV,KAAoB,EACpB,OAAyB;;;;gBAEzB,sBAAO,IAAI,CAAC,cAAc,CAAC;wBACvB,OAAA,IAAA,yBAAiB,EAAI,KAAI,CAAC,YAAY,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC;oBAA7D,CAA6D,CAChE,EAAC;;;KACL;IAED;;OAEG;IACU,0BAAU,GAAvB,UAAwB,EAAU,EAAE,KAAY,EAAE,OAAyB;;;;gBACvE,sBAAO,IAAI,CAAC,cAAc,CAAC;wBACvB,OAAA,IAAA,0BAAkB,EAAC,KAAI,CAAC,YAAY,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC;oBAA3D,CAA2D,CAC9D,EAAC;;;KACL;IAED;;OAEG;IACU,6BAAa,GAA1B,UACI,EAAU,EACV,KAAa,EACb,KAAa,EACb,OAAyB;;;;gBAEzB,sBAAO,IAAI,CAAC,cAAc,CAAC;wBACvB,OAAA,IAAA,6BAAqB,EAAI,KAAI,CAAC,YAAY,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC;oBAAxE,CAAwE,CAC3E,EAAC;;;KACL;IAEY,8BAAc,GAA3B,UACI,EAAU,EACV,OAAyB;;;gBAEzB,sBAAO,IAAI,CAAC,SAAS,CAAI,EAAE,EAAE,EAAC,IAAI,EAAE,EAAC,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,EAAC,EAAC,EAAE,OAAO,CAAC,EAAC;;;KACzF;IAEY,2BAAW,GAAxB,UACI,EAAU,EACV,OAAyB;;;gBAEzB,sBAAO,IAAI,CAAC,SAAS,CAAI,EAAE,EAAE,EAAC,MAAM,EAAE,CAAC,SAAS,EAAE,WAAW,CAAC,EAAC,EAAE,OAAO,CAAC,EAAC;;;KAC7E;IAEY,0BAAU,GAAvB,UACI,EAAU,EACV,OAA2B;;;;;gBAErB,KAAmC,OAAO,IAAI,EAAE,EAA/C,YAAY,EAAZ,IAAI,mBAAG,KAAK,KAAA,EAAK,aAAa,cAA/B,QAAgC,CAAD,CAAkB;gBAEvD,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;oBAC3B,sBAAO,IAAI,CAAC,cAAc,CAAC;;;4CACvB,qBAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,EAAE,aAAa,CAAC,EAAA;;wCAA/C,SAA+C,CAAC;wCAChD,sBAAO,IAAI,EAAC;;;6BACf,CAAC,EAAC;gBACP,CAAC;gBAED,sBAAO,IAAI,CAAC,cAAc,CAAI,EAAE,CAAC,EAAC;;;KACrC;IAEY,0BAAU,GAAvB;4DACI,IAAwB;;YAAxB,qBAAA,EAAA,SAAwB;;;4BAEX,qBAAM,IAAI,CAAC,OAAO,CAAI,IAAI,CAAC,EAAA;;wBAAlC,IAAI,GAAG,SAA2B;wBAExC,sBAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAI,IAA2B,CAAC,CAAC,CAAC,CAAC,IAAI,EAAC;;;;KACrE;IAEM,uBAAO,GAAd,UAAuC,IAAyB;QAC5D,OAAO,IAAA,2BAAe,EAAI,IAAW,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7D,CAAC;IAEM,qBAAK,GAAZ,UAAgB,IAAO;QACnB,IAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACvC,IAAM,MAAM,GAAG,IAAA,mBAAW,EAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACjD,IAAM,WAAW,GAAG,IAAA,4BAAe,EAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAE7D,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;IACtE,CAAC;IAED,mFAAmF;IAC5E,+BAAe,GAAtB,UAA0B,IAAO;QAC7B,OAAO,IAAA,4BAAe,EAAC,IAAA,mBAAW,EAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IAC9F,CAAC;IAED,4EAA4E;IACrE,yBAAS,GAAhB,UAAoB,IAAO;QAA3B,iBAWC;QAVG,IAAM,MAAM,gBAAa,IAAY,CAAC,CAAC;QAEvC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,UAAC,IAAI;YAClC,IAAM,OAAO,GAAG,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACtC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBACxB,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,KAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;YACjE,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,oEAAoE;IAC7D,8BAAc,GAArB,UAAsB,IAAY,EAAE,KAAU;QAC1C,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAC3E,CAAC;IAEO,2BAAW,GAAnB,UAAuB,IAAO;QAA9B,iBAWC;QAVG,IAAM,MAAM,gBAAa,IAAY,CAAC,CAAC;QAEvC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,UAAC,IAAI;YAClC,IAAM,OAAO,GAAG,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACtC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBACxB,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,KAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;YACnE,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IAClB,CAAC;IArmBc,sBAAgB,GAAY,EAAE,AAAd,CAAe;IAsmBlD,YAAC;CAAA,AAvmBD,IAumBC;AAvmBY,sBAAK;AAymBlB,IAAM,OAAO,GAAG,UAAC,IAAS,EAAE,IAAY;IACpC,OAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,UAAC,KAAK,EAAE,GAAG,IAAK,OAAA,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAxC,CAAwC,EAAE,IAAI,CAAC;AAAtF,CAAsF,CAAC;AAE3F,IAAM,OAAO,GAAG,UAAC,IAAS,EAAE,IAAY,EAAE,KAAU;IAChD,IAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAM,GAAG,GAAG,KAAK,CAAC,GAAG,EAAY,CAAC;IAClC,IAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,UAAC,OAAO,EAAE,IAAI;QACtC,IAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,OAAO,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC;QACrC,CAAC;aAAM,IAAI,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAClD,qEAAqE;YACrE,mEAAmE;YACnE,OAAO,CAAC,IAAI,CAAC,gBAAO,QAAQ,CAAC,CAAC;QAClC,CAAC;aAAM,CAAC;YACJ,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,CAAC;QACD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC,EAAE,IAAI,CAAC,CAAC;IACT,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AACxB,CAAC,CAAC;AAEF,kBAAe,KAAK,CAAC","sourcesContent":["import type {\n Collection,\n Cluster,\n GetOptions,\n MutateInOptions,\n RemoveOptions,\n ReplaceOptions,\n} from 'couchbase';\n\nimport {SchemaTypes, parseSchema} from '../utils';\nimport CouchbaseConnection from '../connection';\n\nimport {applyDefaultWhere, DefaultWhereMode} from './default-scope';\nimport {\n count as countRows,\n exists as rowsExist,\n findMany as findManyRows,\n findOne as findOneRow,\n page as pageRows,\n} from './read-helpers';\nimport type {ModelPageResult, ModelReadArgs, ModelReadContext} from './read-helpers';\nimport {bucketIdentifier, fromTarget, keyspaceIdentifier} from './keyspace';\nimport {runQueryOne, runQueryPage, runQueryRows} from './safe-query';\nimport type {\n QueryPageOptions,\n QueryPageResult,\n QueryParameters,\n SafeQueryOptions,\n} from './safe-query';\nimport {\n findByIdWithMeta as findByIdWithMetaDoc,\n incrementById as incrementDocumentById,\n insert as insertDocument,\n mutateById as mutateDocumentById,\n patchById as patchDocumentById,\n prepareInsertDocument,\n prepareReplacementDocument,\n replaceById as replaceDocumentById,\n upsert as upsertDocument,\n} from './write-helpers';\nimport type {\n FindByIdWithMetaResult,\n InsertWriteOptions,\n ModelWriteContext,\n PatchByIdArgs,\n UpsertWriteOptions,\n} from './write-helpers';\nimport {hydrate as hydrateDocument, Hydrated} from './hydrated-document';\nimport {\n buildIndexQuery,\n ensureModelIndexes,\n EnsureIndexOptions,\n ModelIndexDefinition,\n} from './indexes';\nimport type {ParseHook, ValidationHook} from './validation';\nimport {parseDateFields, schemaFromDateFields} from './validation';\n\n/** A small connection surface used by client-bound models. */\nexport interface ModelConnection {\n bucket?: any;\n bucketName?: string;\n cluster: Cluster;\n getBucket(): string;\n getCollection(scopeName?: string, collectionName?: string): Collection;\n isConnected(): boolean;\n ready(): Promise<any>;\n shouldReconnect(error: any): boolean;\n markDisconnected(error: any): void;\n}\n\n/** Converts a field between the application's value and Couchbase JSON. */\nexport interface FieldCodec<T = any, TDatabase = any> {\n toDatabase(value: T): TDatabase;\n fromDatabase(value: TDatabase): T;\n}\n\nexport type {ModelPageResult, ModelReadArgs} from './read-helpers';\nexport type {\n QueryLogger,\n QueryPageOptions,\n QueryPageResult,\n QueryParameters,\n SafeQueryOptions,\n} from './safe-query';\nexport type {FindByIdWithMetaResult, PatchByIdArgs} from './write-helpers';\nexport type {Hydrated} from './hydrated-document';\nexport type {IncludeDefinition, IncludeType, JoinField, JoinPredicate} from './include';\nexport {joinField} from './include';\nexport type {EnsureIndexOptions, ModelIndexDefinition} from './indexes';\nexport type {TtlOptions} from './ttl';\nexport type {ParseHook, ValidationHook} from './validation';\n\nexport interface AutoModelFields {\n id: string;\n createdAt: Date;\n updatedAt?: Date;\n deleted?: Date;\n _type: string; // type for models/collections\n _scope: string; // scope for collections\n}\n\nexport interface UpdateOptions extends ReplaceOptions {\n silent?: boolean; // whether to updatedAt;\n}\n\nexport interface DeleteByIdOptions extends RemoveOptions {\n hard?: boolean;\n}\n\nexport interface ModalOptions {\n scope?: string;\n collection?: string;\n schema?: Record<string, SchemaTypes>;\n softDelete?: boolean;\n defaultWhere?: any;\n validateCreate?: ValidationHook;\n validateReplace?: ValidationHook;\n parse?: ParseHook;\n dateFields?: string[];\n /**\n * Explicit field transforms. A field cannot also be a dateFields/schema date\n * transform, since that makes the parse order ambiguous.\n */\n codecs?: Record<string, FieldCodec<any, any>>;\n indexes?: ModelIndexDefinition[];\n}\n\nexport type ConsumeOnceResult = {status: 'consumed'} | {status: 'missing'} | {status: 'conflict'};\n\ninterface CollectionTarget {\n scopeName?: string;\n collectionName?: string;\n}\n\nexport class Model {\n private static registeredModels: Model[] = [];\n\n collection: Collection;\n collectionName: string;\n scope = '_default';\n private scopeName?: string;\n private collectionTargetName?: string;\n private defaultWhere?: any;\n private defaultWhereMode: DefaultWhereMode = 'default';\n private softDelete = false;\n private validateCreateHook?: ValidationHook;\n private validateReplaceHook?: ValidationHook;\n private parseHook?: ParseHook;\n private dateFields?: string[];\n private codecs: Record<string, FieldCodec<any, any>> = {};\n private readonly connection?: ModelConnection;\n private indexes: ModelIndexDefinition[] = [];\n schema: Record<string, SchemaTypes> = {\n createdAt: 'date',\n updatedAt: 'date',\n };\n\n constructor(name: string, options?: ModalOptions, connection?: ModelConnection) {\n // this.collection = CouchbaseConnection.Instance.getCollection();\n this.collectionName = name;\n this.connection = connection;\n if (options) {\n const hasScope = Object.prototype.hasOwnProperty.call(options, 'scope');\n const hasCollection = Object.prototype.hasOwnProperty.call(options, 'collection');\n this.scope = (options && options.scope) || '_default';\n this.scopeName = hasScope ? this.scope : undefined;\n this.collectionTargetName = hasCollection\n ? options.collection || '_default'\n : undefined;\n this.softDelete = !!options.softDelete;\n this.defaultWhere = options.defaultWhere;\n this.validateCreateHook = options.validateCreate;\n this.validateReplaceHook = options.validateReplace;\n this.parseHook = options.parse;\n this.dateFields = options.dateFields;\n this.codecs = options.codecs || {};\n const dateFields = new Set(options.dateFields || []);\n Object.keys(this.codecs).forEach((field) => {\n if (dateFields.has(field) || options.schema?.[field] === 'date') {\n throw new Error(\n `codec for ${field} conflicts with dateFields or schema date; use one transform`\n );\n }\n });\n this.indexes = options.indexes || [];\n this.schema = {\n ...((options && options.schema) || {}),\n ...schemaFromDateFields(options.dateFields),\n createdAt: 'date',\n updatedAt: 'date',\n };\n }\n\n // Legacy models participate in the singleton registry. Client-bound\n // models are registered only by their owning CouchsetClient.\n if (this.indexes.length && !this.connection) {\n Model.registeredModels.push(this);\n }\n }\n\n /**\n * Ensure indexes for every constructed model with index declarations.\n */\n public static async ensureIndexes(options?: EnsureIndexOptions): Promise<string[]> {\n const queries: string[] = [];\n const seenQueries = new Set<string>();\n\n for (const model of Model.registeredModels) {\n await model.prepare();\n const statements = model.indexStatements(options);\n const pending = statements.filter((query) => !seenQueries.has(query));\n\n pending.forEach((query) => seenQueries.add(query));\n await ensureModelIndexes(\n model.couchbaseConnection().cluster,\n model.keyspace(),\n model.indexes.filter((index, indexPosition) =>\n pending.includes(statements[indexPosition])\n ),\n options\n );\n queries.push(...pending);\n }\n\n return queries;\n }\n\n /**\n * Refresh and get default collection from CouchbaseConnection\n * Because CouchbaseConnection is a singleton, sometimes it might be undefined depending when model was created\n * So we have to call it from all model methods\n * to avoid error `Cannot read property 'defaultCollection' of null`\n */\n private fresh(): void {\n // if couchbase connection has been init\n if (this.couchbaseConnection().isConnected()) {\n const target = this.collectionTarget();\n this.collection = this.couchbaseConnection().getCollection(\n target.scopeName,\n target.collectionName\n );\n }\n }\n\n private async prepare(): Promise<void> {\n const connection = this.couchbaseConnection();\n\n if (!connection.bucket) {\n await connection.ready();\n }\n\n const target = this.collectionTarget();\n this.collection = connection.getCollection(target.scopeName, target.collectionName);\n }\n\n private async withConnection<T>(operation: () => Promise<T>): Promise<T> {\n await this.prepare();\n\n try {\n return await operation();\n } catch (error) {\n const connection = this.couchbaseConnection();\n\n if (!connection.shouldReconnect(error)) {\n throw error;\n }\n\n connection.markDisconnected(error);\n await this.prepare();\n\n return operation();\n }\n }\n\n /** Get this collection\n * getCollection\n */\n private getBucketName(): string {\n const bucketName = this.couchbaseConnection().getBucket();\n\n if (!bucketName) {\n throw new Error('couchset is not connected; call couchset(args) first');\n }\n\n return bucketName;\n }\n\n /** Get this collection\n * getCollection\n */\n private couchbaseConnection(): ModelConnection {\n return this.connection || CouchbaseConnection.Instance;\n }\n\n /** Get this collection\n * getCollection\n */\n public getCollection(): Collection {\n this.fresh();\n return this.collection;\n }\n\n private collectionTarget(): CollectionTarget {\n if (!this.scopeName && !this.collectionTargetName) {\n return {};\n }\n\n return {\n scopeName: this.scopeName || '_default',\n collectionName: this.collectionTargetName || '_default',\n };\n }\n\n private queryResultKey(): string {\n const target = this.collectionTarget();\n\n return target.collectionName || this.getBucketName();\n }\n\n private readContext(): ModelReadContext {\n return {\n bucketName: this.keyspace(),\n collectionName: this.collectionName,\n cluster: this.couchbaseConnection().cluster,\n parse: <T>(data: T) => this.parse(data),\n resultKey: this.queryResultKey(),\n parseProjection: <T>(data: T) => this.parseProjection(data),\n };\n }\n\n private readArgs(args: ModelReadArgs = {}): ModelReadArgs {\n return applyDefaultWhere(args, {\n defaultWhere: this.defaultWhere,\n mode: this.defaultWhereMode,\n softDelete: this.softDelete,\n });\n }\n\n private writeContext(): ModelWriteContext {\n return {\n collection: this.getCollection(),\n collectionName: this.collectionName,\n scope: this.scope,\n parse: <T>(data: T) => this.parse(data),\n serialize: <T>(data: T) => this.serialize(data),\n serializeField: (path: string, value: any) => this.serializeField(path, value),\n validateCreate: this.validateCreateHook,\n validateReplace: this.validateReplaceHook,\n };\n }\n\n private cloneWithDefaultWhereMode(mode: DefaultWhereMode): Model {\n const options: ModalOptions = {\n codecs: this.codecs,\n dateFields: this.dateFields,\n defaultWhere: this.defaultWhere,\n parse: this.parseHook,\n schema: this.schema,\n softDelete: this.softDelete,\n validateCreate: this.validateCreateHook,\n validateReplace: this.validateReplaceHook,\n };\n\n if (this.scopeName) {\n options.scope = this.scopeName;\n }\n\n if (this.collectionTargetName) {\n options.collection = this.collectionTargetName;\n }\n\n const model = new Model(this.collectionName, options, this.connection);\n model.defaultWhereMode = mode;\n\n return model;\n }\n\n /**\n * Return the active bucket as a SQL++ keyspace identifier.\n */\n public bucket(): string {\n return bucketIdentifier(this.getBucketName());\n }\n\n /**\n * Return this model's SQL++ keyspace target.\n */\n public keyspace(): string {\n const target = this.collectionTarget();\n\n return keyspaceIdentifier({\n bucketName: this.getBucketName(),\n scopeName: target.scopeName,\n collectionName: target.collectionName,\n });\n }\n\n /**\n * Return a SQL++ FROM target for this model's current bucket.\n */\n public from(alias?: string): string {\n return fromTarget(this.keyspace(), alias);\n }\n\n /**\n * Return CREATE INDEX statements for this model without executing them.\n */\n public indexStatements(options?: EnsureIndexOptions): string[] {\n return this.indexes.map((index) => buildIndexQuery(this.keyspace(), index, options));\n }\n\n /**\n * Create this model's declared indexes if Couchbase does not already have them.\n */\n public async ensureIndexes(options?: EnsureIndexOptions): Promise<string[]> {\n return this.withConnection(() =>\n ensureModelIndexes(\n this.couchbaseConnection().cluster,\n this.keyspace(),\n this.indexes,\n options\n )\n );\n }\n\n /**\n * Run a SQL++ query and return rows directly.\n */\n public async queryRows<T>(\n query: string,\n params?: QueryParameters,\n options?: SafeQueryOptions\n ): Promise<T[]> {\n return this.withConnection(() =>\n runQueryRows<T>(this.couchbaseConnection().cluster, query, params, options)\n );\n }\n\n /**\n * Run a SQL++ query and return the first row or null.\n */\n public async queryOne<T>(\n query: string,\n params?: QueryParameters,\n options?: SafeQueryOptions\n ): Promise<T | null> {\n return this.withConnection(() =>\n runQueryOne<T>(this.couchbaseConnection().cluster, query, params, options)\n );\n }\n\n /**\n * Run a SQL++ query using limit + 1 pagination.\n */\n public async queryPage<T>(\n query: string,\n params?: QueryParameters,\n options?: QueryPageOptions\n ): Promise<QueryPageResult<T>> {\n return this.withConnection(() =>\n runQueryPage<T>(this.couchbaseConnection().cluster, query, params, options)\n );\n }\n\n /**\n * Find many model-scoped documents.\n */\n public async findMany<T>(args: ModelReadArgs = {}): Promise<T[]> {\n return this.withConnection(() => findManyRows<T>(this.readContext(), this.readArgs(args)));\n }\n\n /**\n * Find the first matching model-scoped document.\n */\n public async findOne<T>(args: ModelReadArgs = {}): Promise<T | null> {\n return this.withConnection(() => findOneRow<T>(this.readContext(), this.readArgs(args)));\n }\n\n /**\n * Check whether at least one model-scoped document matches.\n */\n public async exists(args: ModelReadArgs = {}): Promise<boolean> {\n return this.withConnection(() => rowsExist(this.readContext(), this.readArgs(args)));\n }\n\n /**\n * Count model-scoped documents.\n */\n public async count(args: ModelReadArgs = {}): Promise<number> {\n return this.withConnection(() => countRows(this.readContext(), this.readArgs(args)));\n }\n\n /**\n * Fetch a limit + 1 page of model-scoped documents.\n */\n public async page<T>(args: ModelReadArgs = {}): Promise<ModelPageResult<T>> {\n return this.withConnection(() => pageRows<T>(this.readContext(), this.readArgs(args)));\n }\n\n public withDeleted(): Model {\n return this.cloneWithDefaultWhereMode('withDeleted');\n }\n\n public onlyDeleted(): Model {\n return this.cloneWithDefaultWhereMode('onlyDeleted');\n }\n\n public withoutDefaultWhere(): Model {\n return this.cloneWithDefaultWhereMode('none');\n }\n\n /**\n * Insert a new document and fail if the id already exists.\n */\n public async insert<T>(data: T, options?: InsertWriteOptions): Promise<T & AutoModelFields> {\n return this.withConnection(() => insertDocument<T>(this.writeContext(), data, options));\n }\n\n /** @internal Prepare a transaction insert without issuing a normal SDK write. */\n public prepareInsert<T>(data: T): Promise<T & AutoModelFields> {\n return prepareInsertDocument<T>(this.writeContext(), data);\n }\n\n /**\n * Explicit insert-or-replace write.\n */\n public async upsert<T>(data: T, options?: UpsertWriteOptions): Promise<T & AutoModelFields> {\n return this.withConnection(() => upsertDocument<T>(this.writeContext(), data, options));\n }\n\n public async getById<T>(id: string, options?: GetOptions): Promise<T & AutoModelFields> {\n return this.withConnection(async () => {\n const data = await this.collection.get(id, options);\n return this.parse<T & AutoModelFields>(data.content);\n });\n }\n\n public async findDocById<T extends {id: string}>(\n id: string,\n options?: GetOptions\n ): Promise<Hydrated<T>> {\n const data = await this.getById<T>(id, options);\n\n return this.hydrate<T>(data);\n }\n\n /**\n * Find a document with SDK metadata.\n */\n public async findByIdWithMeta<T>(\n id: string,\n options?: GetOptions\n ): Promise<FindByIdWithMetaResult<T>> {\n return this.withConnection(() => findByIdWithMetaDoc<T>(this.writeContext(), id, options));\n }\n\n /** Ergonomic alias for findByIdWithMeta, intended for CAS workflows. */\n public async getWithCas<T>(\n id: string,\n options?: GetOptions\n ): Promise<FindByIdWithMetaResult<T>> {\n return this.findByIdWithMeta<T>(id, options);\n }\n\n /**\n * Explicit full-document replace.\n */\n public async replaceById<T>(\n id: string,\n data: T,\n options?: UpdateOptions\n ): Promise<T & AutoModelFields> {\n return this.withConnection(() =>\n replaceDocumentById<T>(this.writeContext(), id, data, options)\n );\n }\n\n /** @internal Prepare a transaction replace without issuing a normal SDK write. */\n public prepareReplace<T>(\n id: string,\n data: T,\n options?: UpdateOptions\n ): Promise<T & AutoModelFields> {\n return prepareReplacementDocument<T>(this.writeContext(), id, data, options);\n }\n\n /**\n * Replace only when the supplied CAS still describes the current document.\n * CouchSet deliberately performs one SDK operation and never re-reads/retries\n * with a new CAS, because doing so would defeat the caller's concurrency check.\n */\n public async replaceIfCas<T>(\n id: string,\n data: T,\n cas: any,\n options?: UpdateOptions\n ): Promise<T & AutoModelFields> {\n return this.replaceById<T>(id, data, {...(options || {}), cas});\n }\n\n /**\n * Remove a one-time document with exactly the CAS supplied by the caller.\n * Missing and CAS-mismatch cases are normal outcomes; transport and ambiguous\n * failures are rethrown so callers never mistake an unknown commit for success.\n */\n public async consumeOnce(id: string, cas: any): Promise<ConsumeOnceResult> {\n await this.prepare();\n\n try {\n await this.collection.remove(id, {cas});\n return {status: 'consumed'};\n } catch (error) {\n const name = (error as any)?.name || '';\n const message = (error as any)?.message || '';\n\n if (/DocumentNotFound|not found/i.test(`${name} ${message}`)) {\n return {status: 'missing'};\n }\n\n if (/CasMismatch|cas mismatch/i.test(`${name} ${message}`)) {\n return {status: 'conflict'};\n }\n\n throw error;\n }\n }\n\n /**\n * Partial document mutation using common patch operators.\n */\n public async patchById<T>(\n id: string,\n patch: PatchByIdArgs,\n options?: MutateInOptions\n ): Promise<T & AutoModelFields> {\n return this.withConnection(() =>\n patchDocumentById<T>(this.writeContext(), id, patch, options)\n );\n }\n\n /**\n * Couchbase subdocument mutation escape hatch.\n */\n public async mutateById(id: string, specs: any[], options?: MutateInOptions): Promise<any> {\n return this.withConnection(() =>\n mutateDocumentById(this.writeContext(), id, specs, options)\n );\n }\n\n /**\n * Atomic numeric field increment.\n */\n public async incrementById<T>(\n id: string,\n field: string,\n delta: number,\n options?: MutateInOptions\n ): Promise<T & AutoModelFields> {\n return this.withConnection(() =>\n incrementDocumentById<T>(this.writeContext(), id, field, delta, options)\n );\n }\n\n public async softDeleteById<T>(\n id: string,\n options?: MutateInOptions\n ): Promise<T & AutoModelFields> {\n return this.patchById<T>(id, {$set: {deleted: true, deletedAt: new Date()}}, options);\n }\n\n public async restoreById<T>(\n id: string,\n options?: MutateInOptions\n ): Promise<T & AutoModelFields> {\n return this.patchById<T>(id, {$unset: ['deleted', 'deletedAt']}, options);\n }\n\n public async deleteById<T>(\n id: string,\n options?: DeleteByIdOptions\n ): Promise<boolean | (T & AutoModelFields)> {\n const {hard = false, ...removeOptions} = options || {};\n\n if (hard || !this.softDelete) {\n return this.withConnection(async () => {\n await this.collection.remove(id, removeOptions);\n return true;\n });\n }\n\n return this.softDeleteById<T>(id);\n }\n\n public async findDocOne<T extends {id: string}>(\n args: ModelReadArgs = {}\n ): Promise<Hydrated<T> | null> {\n const data = await this.findOne<T>(args);\n\n return data ? this.hydrate<T>(data as T & AutoModelFields) : null;\n }\n\n public hydrate<T extends {id: string}>(data: T & AutoModelFields): Hydrated<T> {\n return hydrateDocument<T>(this as any, this.parse(data));\n }\n\n public parse<T>(data: T): T {\n const decoded = this.deserialize(data);\n const parsed = parseSchema(this.schema, decoded);\n const parsedDates = parseDateFields(parsed, this.dateFields);\n\n return this.parseHook ? this.parseHook(parsedDates) : parsedDates;\n }\n\n /** Decode present projection fields without invoking full-document parse hooks. */\n public parseProjection<T>(data: T): T {\n return parseDateFields(parseSchema(this.schema, this.deserialize(data)), this.dateFields);\n }\n\n /** @internal Used by the typed client before a document reaches the SDK. */\n public serialize<T>(data: T): T {\n const result: any = {...(data as any)};\n\n Object.keys(this.codecs).forEach((path) => {\n const current = getPath(result, path);\n if (current !== undefined) {\n setPath(result, path, this.codecs[path].toDatabase(current));\n }\n });\n\n return result;\n }\n\n /** @internal Used by patch helpers and transaction-bound models. */\n public serializeField(path: string, value: any): any {\n return this.codecs[path] ? this.codecs[path].toDatabase(value) : value;\n }\n\n private deserialize<T>(data: T): T {\n const result: any = {...(data as any)};\n\n Object.keys(this.codecs).forEach((path) => {\n const current = getPath(result, path);\n if (current !== undefined) {\n setPath(result, path, this.codecs[path].fromDatabase(current));\n }\n });\n\n return result;\n }\n}\n\nconst getPath = (data: any, path: string): any =>\n path.split('.').reduce((value, key) => (value == null ? undefined : value[key]), data);\n\nconst setPath = (data: any, path: string, value: any): void => {\n const parts = path.split('.');\n const key = parts.pop() as string;\n const target = parts.reduce((current, part) => {\n const existing = current[part];\n if (Array.isArray(existing)) {\n current[part] = existing.slice();\n } else if (existing && typeof existing === 'object') {\n // serialize/parse start with a shallow root copy. Clone every branch\n // we traverse so dotted codecs never mutate caller or SDK content.\n current[part] = {...existing};\n } else {\n current[part] = {};\n }\n return current[part];\n }, data);\n target[key] = value;\n};\n\nexport default Model;\n"]}
@@ -1,14 +1,17 @@
1
1
  import type { Cluster } from 'couchbase';
2
2
  import { IncludeDefinition } from './include';
3
+ import { SafeQueryOptions } from './safe-query';
3
4
  export interface ModelReadArgs {
4
- select?: any[] | string;
5
+ select?: readonly any[] | string;
5
6
  where?: any;
6
7
  orderBy?: any;
7
8
  limit?: number;
8
9
  page?: number;
9
10
  offset?: number;
10
11
  throwOnError?: boolean;
11
- include?: IncludeDefinition[];
12
+ include?: readonly IncludeDefinition[];
13
+ sourceAlias?: string;
14
+ queryOptions?: SafeQueryOptions;
12
15
  }
13
16
  export interface ModelPageInfo {
14
17
  limit: number;
@@ -28,6 +31,7 @@ export interface ModelReadContext {
28
31
  cluster: Cluster;
29
32
  parse: <T>(data: T) => T;
30
33
  resultKey?: string;
34
+ parseProjection?: <T>(data: T) => T;
31
35
  }
32
36
  export declare const findMany: <T>(context: ModelReadContext, args?: ModelReadArgs) => Promise<T[]>;
33
37
  export declare const findOne: <T>(context: ModelReadContext, args?: ModelReadArgs) => Promise<T | null>;
@@ -46,6 +46,17 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
46
46
  if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
47
47
  }
48
48
  };
49
+ var __values = (this && this.__values) || function(o) {
50
+ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
51
+ if (m) return m.call(o);
52
+ if (o && typeof o.length === "number") return {
53
+ next: function () {
54
+ if (o && i >= o.length) o = void 0;
55
+ return { value: o && o[i++], done: !o };
56
+ }
57
+ };
58
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
59
+ };
49
60
  var __read = (this && this.__read) || function (o, n) {
50
61
  var m = typeof Symbol === "function" && o[Symbol.iterator];
51
62
  if (!m) return o;
@@ -75,6 +86,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
75
86
  exports.page = exports.count = exports.exists = exports.findOne = exports.findMany = void 0;
76
87
  var safe_pagination_1 = require("../pagination/safe-pagination");
77
88
  var include_1 = require("./include");
89
+ var safe_query_1 = require("./safe-query");
78
90
  var scopedWhere = function (collectionName, where) {
79
91
  var typeWhere = { _type: { $eq: collectionName } };
80
92
  if (!where || !Object.keys(where).length) {
@@ -83,14 +95,65 @@ var scopedWhere = function (collectionName, where) {
83
95
  return { $and: [typeWhere, where] };
84
96
  };
85
97
  var shouldThrow = function (args) { return args.throwOnError !== false; };
86
- var unwrapRows = function (rows, bucketName, selectAll, parse) {
98
+ var decodeRows = function (rows, context, args, selectAll, resultKey) {
99
+ var includes = args.include || [];
100
+ var structured = Array.isArray(args.select) &&
101
+ args.select.every(function (field) { return typeof field === 'string' && !field.includes('.'); });
87
102
  return rows.map(function (row) {
88
- var data = selectAll ? row[bucketName] : row;
89
- return parse(data);
103
+ var e_1, _a;
104
+ var root;
105
+ if (resultKey === '__cs_root')
106
+ root = row.__cs_root;
107
+ else
108
+ root = selectAll ? row[context.resultKey || context.bucketName] : row;
109
+ // Raw/computed projections have unknown shape and must not run document codecs.
110
+ var parse = selectAll ? context.parse : structured ? context.parseProjection : undefined;
111
+ if (!includes.length && !parse)
112
+ return root;
113
+ var result = parse ? parse(root) : __assign({}, root);
114
+ var _loop_1 = function (item) {
115
+ if (resultKey === '__cs_root' &&
116
+ (Object.prototype.hasOwnProperty.call(root, item.as) ||
117
+ Object.prototype.hasOwnProperty.call(result, item.as))) {
118
+ throw new Error("Include alias ".concat(item.as, " would overwrite a root field; choose another alias"));
119
+ }
120
+ if (!Object.prototype.hasOwnProperty.call(row, item.as)) {
121
+ if ((0, include_1.includeOperator)(item).includes('NEST'))
122
+ result[item.as] = [];
123
+ return "continue";
124
+ }
125
+ var value = row[item.as];
126
+ if ((0, include_1.includeOperator)(item).includes('NEST') && (value === null || value === undefined)) {
127
+ result[item.as] = [];
128
+ return "continue";
129
+ }
130
+ var model = typeof item.model === 'object' ? item.model : undefined;
131
+ var decode = item.select ? model === null || model === void 0 ? void 0 : model.parseProjection : model === null || model === void 0 ? void 0 : model.parse;
132
+ result[item.as] =
133
+ value === null || value === undefined || !decode
134
+ ? value
135
+ : Array.isArray(value)
136
+ ? value.map(function (document) { return decode.call(model, document); })
137
+ : decode.call(model, value);
138
+ };
139
+ try {
140
+ for (var includes_1 = __values(includes), includes_1_1 = includes_1.next(); !includes_1_1.done; includes_1_1 = includes_1.next()) {
141
+ var item = includes_1_1.value;
142
+ _loop_1(item);
143
+ }
144
+ }
145
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
146
+ finally {
147
+ try {
148
+ if (includes_1_1 && !includes_1_1.done && (_a = includes_1.return)) _a.call(includes_1);
149
+ }
150
+ finally { if (e_1) throw e_1.error; }
151
+ }
152
+ return result;
90
153
  });
91
154
  };
92
155
  var runReadQuery = function (context, args, queryArgs) { return __awaiter(void 0, void 0, void 0, function () {
93
- var hasIncludes, builtQuery, query, parameters, selectAll, resultKey, _a, rows, error_1;
156
+ var hasIncludes, builtQuery, query, parameters, selectAll, resultKey, options, _a, rows, error_1;
94
157
  return __generator(this, function (_b) {
95
158
  switch (_b.label) {
96
159
  case 0:
@@ -106,10 +169,11 @@ var runReadQuery = function (context, args, queryArgs) { return __awaiter(void 0
106
169
  offset: queryArgs.offset,
107
170
  orderBy: queryArgs.orderBy,
108
171
  include: queryArgs.include,
172
+ sourceAlias: queryArgs.sourceAlias,
109
173
  })
110
174
  : __assign(__assign({}, (0, safe_pagination_1.buildSelectionQuery)({
111
175
  bucketName: context.bucketName,
112
- select: queryArgs.select || '*',
176
+ select: (queryArgs.select || '*'),
113
177
  where: { where: scopedWhere(context.collectionName, queryArgs.where) },
114
178
  limit: queryArgs.limit,
115
179
  page: queryArgs.page,
@@ -117,13 +181,14 @@ var runReadQuery = function (context, args, queryArgs) { return __awaiter(void 0
117
181
  orderBy: queryArgs.orderBy,
118
182
  }, { includeLimitOffset: true })), { resultKey: undefined });
119
183
  query = builtQuery.query, parameters = builtQuery.parameters, selectAll = builtQuery.selectAll, resultKey = builtQuery.resultKey;
184
+ options = (0, safe_query_1.queryOptionsWithParameters)(parameters, args.queryOptions);
120
185
  _b.label = 1;
121
186
  case 1:
122
187
  _b.trys.push([1, 3, , 4]);
123
- return [4 /*yield*/, context.cluster.query(query, { parameters: parameters })];
188
+ return [4 /*yield*/, context.cluster.query(query, options)];
124
189
  case 2:
125
190
  _a = (_b.sent()).rows, rows = _a === void 0 ? [] : _a;
126
- return [2 /*return*/, unwrapRows(rows, resultKey || context.resultKey || context.bucketName, selectAll, context.parse)];
191
+ return [2 /*return*/, decodeRows(rows, context, queryArgs, selectAll, resultKey)];
127
192
  case 3:
128
193
  error_1 = _b.sent();
129
194
  if (shouldThrow(args)) {
@@ -172,11 +237,14 @@ var exists = function (context_1) {
172
237
  args_1[_i - 1] = arguments[_i];
173
238
  }
174
239
  return __awaiter(void 0, __spreadArray([context_1], __read(args_1), false), void 0, function (context, args) {
175
- var _a, query, parameters, _b, rows, error_2;
240
+ var _a, query, parameters, options, _b, rows, error_2;
241
+ var _c;
176
242
  if (args === void 0) { args = {}; }
177
- return __generator(this, function (_c) {
178
- switch (_c.label) {
243
+ return __generator(this, function (_d) {
244
+ switch (_d.label) {
179
245
  case 0:
246
+ if ((_c = args.include) === null || _c === void 0 ? void 0 : _c.length)
247
+ throw new Error('count/exists do not support includes; use findMany/page for joined rows');
180
248
  _a = (0, safe_pagination_1.buildSelectionQuery)({
181
249
  bucketName: context.bucketName,
182
250
  select: 'RAW 1',
@@ -184,15 +252,16 @@ var exists = function (context_1) {
184
252
  limit: 1,
185
253
  page: 0,
186
254
  }, { includeLimitOffset: true }), query = _a.query, parameters = _a.parameters;
187
- _c.label = 1;
255
+ options = (0, safe_query_1.queryOptionsWithParameters)(parameters, args.queryOptions);
256
+ _d.label = 1;
188
257
  case 1:
189
- _c.trys.push([1, 3, , 4]);
190
- return [4 /*yield*/, context.cluster.query(query, { parameters: parameters })];
258
+ _d.trys.push([1, 3, , 4]);
259
+ return [4 /*yield*/, context.cluster.query(query, options)];
191
260
  case 2:
192
- _b = (_c.sent()).rows, rows = _b === void 0 ? [] : _b;
261
+ _b = (_d.sent()).rows, rows = _b === void 0 ? [] : _b;
193
262
  return [2 /*return*/, rows.length > 0];
194
263
  case 3:
195
- error_2 = _c.sent();
264
+ error_2 = _d.sent();
196
265
  if (shouldThrow(args)) {
197
266
  throw error_2;
198
267
  }
@@ -209,25 +278,29 @@ var count = function (context_1) {
209
278
  args_1[_i - 1] = arguments[_i];
210
279
  }
211
280
  return __awaiter(void 0, __spreadArray([context_1], __read(args_1), false), void 0, function (context, args) {
212
- var _a, query, parameters, _b, rows, error_3;
281
+ var _a, query, parameters, options, _b, rows, error_3;
282
+ var _c;
213
283
  if (args === void 0) { args = {}; }
214
- return __generator(this, function (_c) {
215
- switch (_c.label) {
284
+ return __generator(this, function (_d) {
285
+ switch (_d.label) {
216
286
  case 0:
287
+ if ((_c = args.include) === null || _c === void 0 ? void 0 : _c.length)
288
+ throw new Error('count/exists do not support includes; use findMany/page for joined rows');
217
289
  _a = (0, safe_pagination_1.buildSelectionQuery)({
218
290
  bucketName: context.bucketName,
219
291
  select: 'RAW COUNT(1)',
220
292
  where: { where: scopedWhere(context.collectionName, args.where) },
221
293
  }), query = _a.query, parameters = _a.parameters;
222
- _c.label = 1;
294
+ options = (0, safe_query_1.queryOptionsWithParameters)(parameters, args.queryOptions);
295
+ _d.label = 1;
223
296
  case 1:
224
- _c.trys.push([1, 3, , 4]);
225
- return [4 /*yield*/, context.cluster.query(query, { parameters: parameters })];
297
+ _d.trys.push([1, 3, , 4]);
298
+ return [4 /*yield*/, context.cluster.query(query, options)];
226
299
  case 2:
227
- _b = (_c.sent()).rows, rows = _b === void 0 ? [] : _b;
300
+ _b = (_d.sent()).rows, rows = _b === void 0 ? [] : _b;
228
301
  return [2 /*return*/, Number(rows[0] || 0)];
229
302
  case 3:
230
- error_3 = _c.sent();
303
+ error_3 = _d.sent();
231
304
  if (shouldThrow(args)) {
232
305
  throw error_3;
233
306
  }