couchset 0.2.6 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (108) hide show
  1. package/README.md +284 -153
  2. package/dist/connection/connection.d.ts +68 -0
  3. package/dist/connection/connection.js +485 -0
  4. package/dist/connection/connection.js.map +1 -0
  5. package/dist/connection/env.d.ts +2 -0
  6. package/dist/connection/env.js +16 -0
  7. package/dist/connection/env.js.map +1 -0
  8. package/dist/connection/index.d.ts +3 -0
  9. package/dist/connection/index.js +25 -0
  10. package/dist/connection/index.js.map +1 -0
  11. package/dist/connection/types.d.ts +25 -0
  12. package/dist/connection/types.js +3 -0
  13. package/dist/connection/types.js.map +1 -0
  14. package/dist/database.d.ts +9 -0
  15. package/dist/database.js +196 -0
  16. package/dist/database.js.map +1 -0
  17. package/dist/index.d.ts +18 -6
  18. package/dist/index.js +53 -8
  19. package/dist/index.js.map +1 -1
  20. package/dist/legacy/connection.d.ts +2 -0
  21. package/dist/legacy/connection.js +24 -0
  22. package/dist/legacy/connection.js.map +1 -0
  23. package/dist/legacy/index.d.ts +10 -0
  24. package/dist/legacy/index.js +93 -0
  25. package/dist/legacy/index.js.map +1 -0
  26. package/dist/legacy/model.d.ts +55 -0
  27. package/dist/legacy/model.js +282 -0
  28. package/dist/legacy/model.js.map +1 -0
  29. package/dist/legacy/pagination/index.d.ts +1 -0
  30. package/dist/legacy/pagination/index.js +18 -0
  31. package/dist/legacy/pagination/index.js.map +1 -0
  32. package/dist/legacy/pagination/pagination.d.ts +12 -0
  33. package/dist/legacy/pagination/pagination.js +85 -0
  34. package/dist/legacy/pagination/pagination.js.map +1 -0
  35. package/dist/legacy/search/customQuery.d.ts +13 -0
  36. package/dist/legacy/search/customQuery.js +73 -0
  37. package/dist/legacy/search/customQuery.js.map +1 -0
  38. package/dist/legacy/search/index.d.ts +1 -0
  39. package/dist/legacy/search/index.js +18 -0
  40. package/dist/legacy/search/index.js.map +1 -0
  41. package/dist/model/default-scope.d.ts +10 -0
  42. package/dist/model/default-scope.js +47 -0
  43. package/dist/model/default-scope.js.map +1 -0
  44. package/dist/model/hydrated-document.d.ts +30 -0
  45. package/dist/model/hydrated-document.js +118 -0
  46. package/dist/model/hydrated-document.js.map +1 -0
  47. package/dist/model/include.d.ts +33 -0
  48. package/dist/model/include.js +250 -0
  49. package/dist/model/include.js.map +1 -0
  50. package/dist/model/index.d.ts +137 -51
  51. package/dist/model/index.js +519 -174
  52. package/dist/model/index.js.map +1 -1
  53. package/dist/model/indexes.d.ts +16 -0
  54. package/dist/model/indexes.js +155 -0
  55. package/dist/model/indexes.js.map +1 -0
  56. package/dist/model/keyspace.d.ts +9 -0
  57. package/dist/model/keyspace.js +28 -0
  58. package/dist/model/keyspace.js.map +1 -0
  59. package/dist/model/read-helpers.d.ts +36 -0
  60. package/dist/model/read-helpers.js +275 -0
  61. package/dist/model/read-helpers.js.map +1 -0
  62. package/dist/model/safe-query.d.ts +23 -0
  63. package/dist/model/safe-query.js +138 -0
  64. package/dist/model/safe-query.js.map +1 -0
  65. package/dist/model/ttl.d.ts +9 -0
  66. package/dist/model/ttl.js +73 -0
  67. package/dist/model/ttl.js.map +1 -0
  68. package/dist/model/validation.d.ts +5 -0
  69. package/dist/model/validation.js +104 -0
  70. package/dist/model/validation.js.map +1 -0
  71. package/dist/model/write-helpers.d.ts +31 -0
  72. package/dist/model/write-helpers.js +220 -0
  73. package/dist/model/write-helpers.js.map +1 -0
  74. package/dist/pagination/index.d.ts +1 -0
  75. package/dist/pagination/index.js +1 -0
  76. package/dist/pagination/index.js.map +1 -1
  77. package/dist/pagination/pagination.d.ts +1 -8
  78. package/dist/pagination/pagination.js +16 -29
  79. package/dist/pagination/pagination.js.map +1 -1
  80. package/dist/pagination/safe-pagination.d.ts +15 -0
  81. package/dist/pagination/safe-pagination.js +221 -0
  82. package/dist/pagination/safe-pagination.js.map +1 -0
  83. package/dist/pagination/types.d.ts +11 -0
  84. package/dist/pagination/types.js +3 -0
  85. package/dist/pagination/types.js.map +1 -0
  86. package/dist/search/customQuery.d.ts +10 -3
  87. package/dist/search/customQuery.js +17 -18
  88. package/dist/search/customQuery.js.map +1 -1
  89. package/dist/shared/common.model.js +2 -2
  90. package/dist/shared/common.model.js.map +1 -1
  91. package/dist/timeseries/index.d.ts +1 -0
  92. package/dist/timeseries/index.js +18 -0
  93. package/dist/timeseries/index.js.map +1 -0
  94. package/dist/timeseries/time-series-model.d.ts +60 -0
  95. package/dist/timeseries/time-series-model.js +267 -0
  96. package/dist/timeseries/time-series-model.js.map +1 -0
  97. package/dist/utils/awaitTo.d.ts +1 -1
  98. package/dist/utils/awaitTo.js +1 -1
  99. package/dist/utils/awaitTo.js.map +1 -1
  100. package/docs/beta-migration.md +175 -0
  101. package/legacy/index.js +1 -0
  102. package/legacy/package.json +4 -0
  103. package/next/index.js +1 -0
  104. package/next/package.json +4 -0
  105. package/package.json +13 -8
  106. package/dist/connection.d.ts +0 -42
  107. package/dist/connection.js +0 -156
  108. package/dist/connection.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/model/index.ts"],"names":[],"mappings":"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","sourcesContent":["import type {Collection, GetOptions, RemoveOptions, ReplaceOptions, UpsertOptions} from 'couchbase';\n\n// import {AutomaticMethodOptions, AutomaticOutput, automateImplementation} from '../automate';\nimport {CustomQuery, CustomQueryPagination} from '../search';\nimport {SchemaTypes, parseSchema} from '../utils';\nimport CouchbaseConnection from '../connection';\nimport {Pagination} from '../pagination';\nimport {generateUUID} from '../uuid';\n\nexport interface AutoModelFields {\n id: string;\n createdAt: Date;\n updatedAt?: Date;\n deleted?: Date;\n _type: string; // type for models/collections\n _scope: string; // scope for collections\n}\n\nexport interface UpdateOptions extends ReplaceOptions {\n silent?: boolean; // whether to updatedAt;\n}\n\nexport interface ModalOptions {\n scope?: string;\n schema?: Record<string, SchemaTypes>;\n graphqlType?: any;\n}\n\nexport class Model {\n collection: Collection;\n collectionName: string;\n scope = '_default';\n schema: Record<string, SchemaTypes> = {\n createdAt: 'date',\n updatedAt: 'date',\n };\n graphqlType = null;\n\n constructor(name: string, options?: ModalOptions) {\n // this.collection = CouchbaseConnection.Instance.getCollection();\n this.collectionName = name;\n if (options) {\n this.graphqlType = (options && options.graphqlType) || null;\n this.scope = (options && options.scope) || '_default';\n this.schema = {\n ...((options && options.schema) || {}),\n createdAt: 'date',\n updatedAt: 'date',\n };\n }\n }\n\n /**\n * Set setGraphqlType\n * setGraphqlType\n */\n public setGraphqlType(gqlType: any): Model {\n this.graphqlType = gqlType;\n return this;\n }\n\n /**\n * Refresh and get default collection from CouchbaseConnection\n * Because CouchbaseConnection is a singleton, sometimes it might be undefined depending when model was created\n * So we have to call it from all model methods\n * to avoid error `Cannot read property 'defaultCollection' of null`\n */\n public fresh(): void {\n // if couchbase connection has been init\n if (CouchbaseConnection.Instance.bucketName) {\n this.collection = CouchbaseConnection.Instance.getCollection();\n }\n }\n\n /** Get this collection\n * getCollection\n */\n public getBucketName(): string {\n return CouchbaseConnection.Instance?.getBucket();\n }\n\n /** Get this collection\n * getCollection\n */\n public couchbaseConnection(): CouchbaseConnection {\n return CouchbaseConnection.Instance;\n }\n\n /** Get this collection\n * getCollection\n */\n public getCollection(): Collection {\n this.fresh();\n return this.collection;\n }\n\n /**\n * create\n */\n public async create<T>(data: T, options?: UpsertOptions): Promise<T & AutoModelFields> {\n this.fresh();\n const id = generateUUID();\n const createdData = {\n id, // let id be override\n ...data,\n createdAt: new Date(),\n updatedAt: new Date(), // same as created at\n _type: this.collectionName,\n _scope: this.scope,\n };\n\n try {\n await this.collection.upsert(createdData.id, createdData, options);\n return parseSchema(this.schema, createdData);\n } catch (error) {\n throw error;\n }\n }\n\n /**\n * findById\n */\n public async findById(id: string, options?: GetOptions): Promise<any & AutoModelFields> {\n this.fresh();\n try {\n const data = await this.collection.get(id, options);\n return parseSchema(this.schema, data.content);\n } catch (error) {\n throw error;\n }\n }\n\n /**\n * update\n */\n public async updateById<T>(id: string, data: T, opt?: UpdateOptions): Promise<T> {\n this.fresh();\n\n const {silent = false, ...options} = opt || {};\n\n const updatedDocument: any = {\n ...data,\n id,\n _type: this.collectionName, // type and scope must be defined\n _scope: this.scope,\n };\n\n if (!silent) {\n updatedDocument.updatedAt = new Date();\n }\n\n try {\n await this.collection.replace(id, updatedDocument, options);\n return parseSchema(this.schema, updatedDocument);\n } catch (error) {\n throw error;\n }\n }\n\n /**\n * save\n */\n public async save<T>(data: T & {id: string}, opt?: UpdateOptions): Promise<T> {\n this.fresh();\n\n const id = data && data.id;\n\n const {silent = false, ...options} = opt || {};\n\n const updatedDocument: any = {\n ...data,\n id,\n _type: this.collectionName, // type and scope must be defined\n _scope: this.scope,\n };\n\n if (!silent) {\n updatedDocument.updatedAt = new Date();\n }\n\n try {\n if (!id) {\n throw new Error('document must have id');\n }\n await this.collection.replace(id, updatedDocument, options);\n return parseSchema(this.schema, updatedDocument);\n } catch (error) {\n console.error(error);\n throw error;\n }\n }\n\n public async delete(id: string, options?: RemoveOptions): Promise<boolean> {\n this.fresh();\n try {\n await this.collection.remove(id, options);\n return true;\n } catch (error) {\n throw error;\n }\n }\n\n /**\n * Pagination\n * \n select = ['id', 'createdAt']\n where = {\n where: { owner: { $eq: \"stoqey\" }, _type: { $eq: \"Trade\" } },\n },\n page = 0,\n limit = 10,\n orderBy = { createdAt: \"DESC\" },\n * @param args PaginationArgs\n */\n public async pagination({\n select,\n where,\n orderBy,\n limit,\n page,\n customQuery = {},\n }: {\n select?: any[] | string;\n where?: any;\n orderBy?: any;\n limit?: number;\n page?: number;\n customQuery?: any; // can be $and or any other valid quries\n }): Promise<any[]> {\n this.fresh(); // refresh\n // Where begins here\n let whereEx = {_type: {$eq: this.collectionName}};\n\n if (where) {\n whereEx = {\n ...whereEx,\n ...where,\n };\n }\n\n const bucketName = CouchbaseConnection.Instance.bucketName;\n\n const rows = await Pagination({\n bucketName,\n select,\n where: {where: whereEx, ...customQuery},\n limit,\n page,\n orderBy,\n });\n\n return rows.map((r) => parseSchema(this.schema, r));\n }\n\n /**\n * Run a custom query with model parsing\n * @param { select, query }\n * @returns\n */\n public async customQuery<T>({\n params,\n limit,\n query,\n }: {\n params: any;\n limit: number;\n query: string;\n }): Promise<[T[], CustomQueryPagination]> {\n this.fresh(); // refresh\n // Where begins here\n\n const response = await CustomQuery<T>({\n limit,\n params,\n query,\n });\n\n return response;\n }\n\n public parse<T>(data: T): T {\n this.fresh(); // refresh\n return parseSchema(this.schema, data);\n }\n\n // /**\n // *\n // * @param args AutomaticModelOptions\n // * @returns\n // */\n // public automate(args?: Partial<AutomaticMethodOptions>): AutomaticOutput {\n // this.fresh(); // refresh\n // return automateImplementation(this.graphqlType, {model: this, ...args});\n // }\n}\n\nexport default Model;\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/model/index.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n Collection,\n GetOptions,\n MutateInOptions,\n RemoveOptions,\n ReplaceOptions,\n} from 'couchbase';\n\nimport {SchemaTypes, parseSchema} from '../utils';\nimport CouchbaseConnection from '../connection';\n\nimport {applyDefaultWhere, DefaultWhereMode} from './default-scope';\nimport {\n count as countRows,\n exists as rowsExist,\n findMany as findManyRows,\n findOne as findOneRow,\n page as pageRows,\n} from './read-helpers';\nimport type {ModelPageResult, ModelReadArgs, ModelReadContext} from './read-helpers';\nimport {bucketIdentifier, fromTarget, keyspaceIdentifier} from './keyspace';\nimport {runQueryOne, runQueryPage, runQueryRows} from './safe-query';\nimport type {\n QueryPageOptions,\n QueryPageResult,\n QueryParameters,\n SafeQueryOptions,\n} from './safe-query';\nimport {\n findByIdWithMeta as findByIdWithMetaDoc,\n incrementById as incrementDocumentById,\n insert as insertDocument,\n mutateById as mutateDocumentById,\n patchById as patchDocumentById,\n replaceById as replaceDocumentById,\n upsert as upsertDocument,\n} from './write-helpers';\nimport type {\n FindByIdWithMetaResult,\n InsertWriteOptions,\n ModelWriteContext,\n PatchByIdArgs,\n UpsertWriteOptions,\n} from './write-helpers';\nimport {hydrate as hydrateDocument, Hydrated} from './hydrated-document';\nimport {\n buildIndexQuery,\n ensureModelIndexes,\n EnsureIndexOptions,\n ModelIndexDefinition,\n} from './indexes';\nimport type {ParseHook, ValidationHook} from './validation';\nimport {parseDateFields, schemaFromDateFields} from './validation';\n\nexport type {ModelPageResult, ModelReadArgs} from './read-helpers';\nexport type {\n QueryLogger,\n QueryPageOptions,\n QueryPageResult,\n QueryParameters,\n SafeQueryOptions,\n} from './safe-query';\nexport type {FindByIdWithMetaResult, PatchByIdArgs} from './write-helpers';\nexport type {Hydrated} from './hydrated-document';\nexport type {IncludeDefinition, IncludeType} from './include';\nexport type {EnsureIndexOptions, ModelIndexDefinition} from './indexes';\nexport type {TtlOptions} from './ttl';\nexport type {ParseHook, ValidationHook} from './validation';\n\nexport interface AutoModelFields {\n id: string;\n createdAt: Date;\n updatedAt?: Date;\n deleted?: Date;\n _type: string; // type for models/collections\n _scope: string; // scope for collections\n}\n\nexport interface UpdateOptions extends ReplaceOptions {\n silent?: boolean; // whether to updatedAt;\n}\n\nexport interface DeleteByIdOptions extends RemoveOptions {\n hard?: boolean;\n}\n\nexport interface ModalOptions {\n scope?: string;\n collection?: string;\n schema?: Record<string, SchemaTypes>;\n softDelete?: boolean;\n defaultWhere?: any;\n validateCreate?: ValidationHook;\n validateReplace?: ValidationHook;\n parse?: ParseHook;\n dateFields?: string[];\n indexes?: ModelIndexDefinition[];\n}\n\ninterface CollectionTarget {\n scopeName?: string;\n collectionName?: string;\n}\n\nexport class Model {\n private static registeredModels: Model[] = [];\n\n collection: Collection;\n collectionName: string;\n scope = '_default';\n private scopeName?: string;\n private collectionTargetName?: string;\n private defaultWhere?: any;\n private defaultWhereMode: DefaultWhereMode = 'default';\n private softDelete = false;\n private validateCreateHook?: ValidationHook;\n private validateReplaceHook?: ValidationHook;\n private parseHook?: ParseHook;\n private dateFields?: string[];\n private indexes: ModelIndexDefinition[] = [];\n schema: Record<string, SchemaTypes> = {\n createdAt: 'date',\n updatedAt: 'date',\n };\n\n constructor(name: string, options?: ModalOptions) {\n // this.collection = CouchbaseConnection.Instance.getCollection();\n this.collectionName = name;\n if (options) {\n const hasScope = Object.prototype.hasOwnProperty.call(options, 'scope');\n const hasCollection = Object.prototype.hasOwnProperty.call(options, 'collection');\n this.scope = (options && options.scope) || '_default';\n this.scopeName = hasScope ? this.scope : undefined;\n this.collectionTargetName = hasCollection\n ? options.collection || '_default'\n : undefined;\n this.softDelete = !!options.softDelete;\n this.defaultWhere = options.defaultWhere;\n this.validateCreateHook = options.validateCreate;\n this.validateReplaceHook = options.validateReplace;\n this.parseHook = options.parse;\n this.dateFields = options.dateFields;\n this.indexes = options.indexes || [];\n this.schema = {\n ...((options && options.schema) || {}),\n ...schemaFromDateFields(options.dateFields),\n createdAt: 'date',\n updatedAt: 'date',\n };\n }\n\n if (this.indexes.length) {\n Model.registeredModels.push(this);\n }\n }\n\n /**\n * Ensure indexes for every constructed model with index declarations.\n */\n public static async ensureIndexes(options?: EnsureIndexOptions): Promise<string[]> {\n const queries: string[] = [];\n const seenQueries = new Set<string>();\n\n for (const model of Model.registeredModels) {\n await model.prepare();\n const statements = model.indexStatements(options);\n const pending = statements.filter((query) => !seenQueries.has(query));\n\n pending.forEach((query) => seenQueries.add(query));\n await ensureModelIndexes(\n model.couchbaseConnection().cluster,\n model.keyspace(),\n model.indexes.filter((index, indexPosition) =>\n pending.includes(statements[indexPosition])\n ),\n options\n );\n queries.push(...pending);\n }\n\n return queries;\n }\n\n /**\n * Refresh and get default collection from CouchbaseConnection\n * Because CouchbaseConnection is a singleton, sometimes it might be undefined depending when model was created\n * So we have to call it from all model methods\n * to avoid error `Cannot read property 'defaultCollection' of null`\n */\n private fresh(): void {\n // if couchbase connection has been init\n if (CouchbaseConnection.Instance.isConnected()) {\n const target = this.collectionTarget();\n this.collection = CouchbaseConnection.Instance.getCollection(\n target.scopeName,\n target.collectionName\n );\n }\n }\n\n private async prepare(): Promise<void> {\n const connection = this.couchbaseConnection();\n\n if (!connection.bucket) {\n await connection.ready();\n }\n\n const target = this.collectionTarget();\n this.collection = connection.getCollection(target.scopeName, target.collectionName);\n }\n\n private async withConnection<T>(operation: () => Promise<T>): Promise<T> {\n await this.prepare();\n\n try {\n return await operation();\n } catch (error) {\n const connection = this.couchbaseConnection();\n\n if (!connection.shouldReconnect(error)) {\n throw error;\n }\n\n connection.markDisconnected(error);\n await this.prepare();\n\n return operation();\n }\n }\n\n /** Get this collection\n * getCollection\n */\n private getBucketName(): string {\n const bucketName = CouchbaseConnection.Instance?.getBucket();\n\n if (!bucketName) {\n throw new Error('couchset is not connected; call couchset(args) first');\n }\n\n return bucketName;\n }\n\n /** Get this collection\n * getCollection\n */\n private couchbaseConnection(): CouchbaseConnection {\n return CouchbaseConnection.Instance;\n }\n\n /** Get this collection\n * getCollection\n */\n public getCollection(): Collection {\n this.fresh();\n return this.collection;\n }\n\n private collectionTarget(): CollectionTarget {\n if (!this.scopeName && !this.collectionTargetName) {\n return {};\n }\n\n return {\n scopeName: this.scopeName || '_default',\n collectionName: this.collectionTargetName || '_default',\n };\n }\n\n private queryResultKey(): string {\n const target = this.collectionTarget();\n\n return target.collectionName || this.getBucketName();\n }\n\n private readContext(): ModelReadContext {\n return {\n bucketName: this.keyspace(),\n collectionName: this.collectionName,\n cluster: this.couchbaseConnection().cluster,\n parse: <T>(data: T) => this.parse(data),\n resultKey: this.queryResultKey(),\n };\n }\n\n private readArgs(args: ModelReadArgs = {}): ModelReadArgs {\n return applyDefaultWhere(args, {\n defaultWhere: this.defaultWhere,\n mode: this.defaultWhereMode,\n softDelete: this.softDelete,\n });\n }\n\n private writeContext(): ModelWriteContext {\n return {\n collection: this.getCollection(),\n collectionName: this.collectionName,\n scope: this.scope,\n parse: <T>(data: T) => this.parse(data),\n validateCreate: this.validateCreateHook,\n validateReplace: this.validateReplaceHook,\n };\n }\n\n private cloneWithDefaultWhereMode(mode: DefaultWhereMode): Model {\n const options: ModalOptions = {\n dateFields: this.dateFields,\n defaultWhere: this.defaultWhere,\n parse: this.parseHook,\n schema: this.schema,\n softDelete: this.softDelete,\n validateCreate: this.validateCreateHook,\n validateReplace: this.validateReplaceHook,\n };\n\n if (this.scopeName) {\n options.scope = this.scopeName;\n }\n\n if (this.collectionTargetName) {\n options.collection = this.collectionTargetName;\n }\n\n const model = new Model(this.collectionName, options);\n model.defaultWhereMode = mode;\n\n return model;\n }\n\n /**\n * Return the active bucket as a SQL++ keyspace identifier.\n */\n public bucket(): string {\n return bucketIdentifier(this.getBucketName());\n }\n\n /**\n * Return this model's SQL++ keyspace target.\n */\n public keyspace(): string {\n const target = this.collectionTarget();\n\n return keyspaceIdentifier({\n bucketName: this.getBucketName(),\n scopeName: target.scopeName,\n collectionName: target.collectionName,\n });\n }\n\n /**\n * Return a SQL++ FROM target for this model's current bucket.\n */\n public from(alias?: string): string {\n return fromTarget(this.keyspace(), alias);\n }\n\n /**\n * Return CREATE INDEX statements for this model without executing them.\n */\n public indexStatements(options?: EnsureIndexOptions): string[] {\n return this.indexes.map((index) => buildIndexQuery(this.keyspace(), index, options));\n }\n\n /**\n * Create this model's declared indexes if Couchbase does not already have them.\n */\n public async ensureIndexes(options?: EnsureIndexOptions): Promise<string[]> {\n return this.withConnection(() =>\n ensureModelIndexes(\n this.couchbaseConnection().cluster,\n this.keyspace(),\n this.indexes,\n options\n )\n );\n }\n\n /**\n * Run a SQL++ query and return rows directly.\n */\n public async queryRows<T>(\n query: string,\n params?: QueryParameters,\n options?: SafeQueryOptions\n ): Promise<T[]> {\n return this.withConnection(() =>\n runQueryRows<T>(this.couchbaseConnection().cluster, query, params, options)\n );\n }\n\n /**\n * Run a SQL++ query and return the first row or null.\n */\n public async queryOne<T>(\n query: string,\n params?: QueryParameters,\n options?: SafeQueryOptions\n ): Promise<T | null> {\n return this.withConnection(() =>\n runQueryOne<T>(this.couchbaseConnection().cluster, query, params, options)\n );\n }\n\n /**\n * Run a SQL++ query using limit + 1 pagination.\n */\n public async queryPage<T>(\n query: string,\n params?: QueryParameters,\n options?: QueryPageOptions\n ): Promise<QueryPageResult<T>> {\n return this.withConnection(() =>\n runQueryPage<T>(this.couchbaseConnection().cluster, query, params, options)\n );\n }\n\n /**\n * Find many model-scoped documents.\n */\n public async findMany<T>(args: ModelReadArgs = {}): Promise<T[]> {\n return this.withConnection(() => findManyRows<T>(this.readContext(), this.readArgs(args)));\n }\n\n /**\n * Find the first matching model-scoped document.\n */\n public async findOne<T>(args: ModelReadArgs = {}): Promise<T | null> {\n return this.withConnection(() => findOneRow<T>(this.readContext(), this.readArgs(args)));\n }\n\n /**\n * Check whether at least one model-scoped document matches.\n */\n public async exists(args: ModelReadArgs = {}): Promise<boolean> {\n return this.withConnection(() => rowsExist(this.readContext(), this.readArgs(args)));\n }\n\n /**\n * Count model-scoped documents.\n */\n public async count(args: ModelReadArgs = {}): Promise<number> {\n return this.withConnection(() => countRows(this.readContext(), this.readArgs(args)));\n }\n\n /**\n * Fetch a limit + 1 page of model-scoped documents.\n */\n public async page<T>(args: ModelReadArgs = {}): Promise<ModelPageResult<T>> {\n return this.withConnection(() => pageRows<T>(this.readContext(), this.readArgs(args)));\n }\n\n public withDeleted(): Model {\n return this.cloneWithDefaultWhereMode('withDeleted');\n }\n\n public onlyDeleted(): Model {\n return this.cloneWithDefaultWhereMode('onlyDeleted');\n }\n\n public withoutDefaultWhere(): Model {\n return this.cloneWithDefaultWhereMode('none');\n }\n\n /**\n * Insert a new document and fail if the id already exists.\n */\n public async insert<T>(data: T, options?: InsertWriteOptions): Promise<T & AutoModelFields> {\n return this.withConnection(() => insertDocument<T>(this.writeContext(), data, options));\n }\n\n /**\n * Explicit insert-or-replace write.\n */\n public async upsert<T>(data: T, options?: UpsertWriteOptions): Promise<T & AutoModelFields> {\n return this.withConnection(() => upsertDocument<T>(this.writeContext(), data, options));\n }\n\n public async getById<T>(id: string, options?: GetOptions): Promise<T & AutoModelFields> {\n return this.withConnection(async () => {\n const data = await this.collection.get(id, options);\n return this.parse<T & AutoModelFields>(data.content);\n });\n }\n\n public async findDocById<T extends {id: string}>(\n id: string,\n options?: GetOptions\n ): Promise<Hydrated<T>> {\n const data = await this.getById<T>(id, options);\n\n return this.hydrate<T>(data);\n }\n\n /**\n * Find a document with SDK metadata.\n */\n public async findByIdWithMeta<T>(\n id: string,\n options?: GetOptions\n ): Promise<FindByIdWithMetaResult<T>> {\n return this.withConnection(() => findByIdWithMetaDoc<T>(this.writeContext(), id, options));\n }\n\n /**\n * Explicit full-document replace.\n */\n public async replaceById<T>(\n id: string,\n data: T,\n options?: UpdateOptions\n ): Promise<T & AutoModelFields> {\n return this.withConnection(() =>\n replaceDocumentById<T>(this.writeContext(), id, data, options)\n );\n }\n\n /**\n * Partial document mutation using common patch operators.\n */\n public async patchById<T>(\n id: string,\n patch: PatchByIdArgs,\n options?: MutateInOptions\n ): Promise<T & AutoModelFields> {\n return this.withConnection(() =>\n patchDocumentById<T>(this.writeContext(), id, patch, options)\n );\n }\n\n /**\n * Couchbase subdocument mutation escape hatch.\n */\n public async mutateById(id: string, specs: any[], options?: MutateInOptions): Promise<any> {\n return this.withConnection(() =>\n mutateDocumentById(this.writeContext(), id, specs, options)\n );\n }\n\n /**\n * Atomic numeric field increment.\n */\n public async incrementById<T>(\n id: string,\n field: string,\n delta: number,\n options?: MutateInOptions\n ): Promise<T & AutoModelFields> {\n return this.withConnection(() =>\n incrementDocumentById<T>(this.writeContext(), id, field, delta, options)\n );\n }\n\n public async softDeleteById<T>(\n id: string,\n options?: MutateInOptions\n ): Promise<T & AutoModelFields> {\n return this.patchById<T>(id, {$set: {deleted: true, deletedAt: new Date()}}, options);\n }\n\n public async restoreById<T>(\n id: string,\n options?: MutateInOptions\n ): Promise<T & AutoModelFields> {\n return this.patchById<T>(id, {$unset: ['deleted', 'deletedAt']}, options);\n }\n\n public async deleteById<T>(\n id: string,\n options?: DeleteByIdOptions\n ): Promise<boolean | (T & AutoModelFields)> {\n const {hard = false, ...removeOptions} = options || {};\n\n if (hard || !this.softDelete) {\n return this.withConnection(async () => {\n await this.collection.remove(id, removeOptions);\n return true;\n });\n }\n\n return this.softDeleteById<T>(id);\n }\n\n public async findDocOne<T extends {id: string}>(\n args: ModelReadArgs = {}\n ): Promise<Hydrated<T> | null> {\n const data = await this.findOne<T>(args);\n\n return data ? this.hydrate<T>(data as T & AutoModelFields) : null;\n }\n\n public hydrate<T extends {id: string}>(data: T & AutoModelFields): Hydrated<T> {\n return hydrateDocument<T>(this as any, this.parse(data));\n }\n\n public parse<T>(data: T): T {\n const parsed = parseSchema(this.schema, data);\n const parsedDates = parseDateFields(parsed, this.dateFields);\n\n return this.parseHook ? this.parseHook(parsedDates) : parsedDates;\n }\n}\n\nexport default Model;\n"]}
@@ -0,0 +1,16 @@
1
+ import type { Cluster } from 'couchbase';
2
+ import { LogicalWhereExpr, SortType } from '../query/interface/query.types';
3
+ export type IndexField = string | Record<string, SortType>;
4
+ export interface ModelIndexDefinition {
5
+ name: string;
6
+ fields?: IndexField[];
7
+ where?: LogicalWhereExpr;
8
+ deferred?: boolean;
9
+ numReplica?: number;
10
+ primary?: boolean;
11
+ }
12
+ export interface EnsureIndexOptions {
13
+ deferred?: boolean;
14
+ }
15
+ export declare const buildIndexQuery: (keyspace: string, index: ModelIndexDefinition, options?: EnsureIndexOptions) => string;
16
+ export declare const ensureModelIndexes: (cluster: Cluster, keyspace: string, indexes?: ModelIndexDefinition[], options?: EnsureIndexOptions) => Promise<string[]>;
@@ -0,0 +1,155 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
13
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ var __read = (this && this.__read) || function (o, n) {
39
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
40
+ if (!m) return o;
41
+ var i = m.call(o), r, ar = [], e;
42
+ try {
43
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
44
+ }
45
+ catch (error) { e = { error: error }; }
46
+ finally {
47
+ try {
48
+ if (r && !r.done && (m = i["return"])) m.call(i);
49
+ }
50
+ finally { if (e) throw e.error; }
51
+ }
52
+ return ar;
53
+ };
54
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
55
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
56
+ if (ar || !(i in from)) {
57
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
58
+ ar[i] = from[i];
59
+ }
60
+ }
61
+ return to.concat(ar || Array.prototype.slice.call(from));
62
+ };
63
+ var __values = (this && this.__values) || function(o) {
64
+ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
65
+ if (m) return m.call(o);
66
+ if (o && typeof o.length === "number") return {
67
+ next: function () {
68
+ if (o && i >= o.length) o = void 0;
69
+ return { value: o && o[i++], done: !o };
70
+ }
71
+ };
72
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
73
+ };
74
+ Object.defineProperty(exports, "__esModule", { value: true });
75
+ exports.ensureModelIndexes = exports.buildIndexQuery = void 0;
76
+ var builders_1 = require("../query/helpers/builders");
77
+ var utils_1 = require("../query/utils");
78
+ var indexName = function (name) { return "`".concat(name.replace(/`/g, '``'), "`"); };
79
+ var buildIndexField = function (field) {
80
+ if (typeof field === 'string') {
81
+ return (0, utils_1.escapeReservedWords)(field);
82
+ }
83
+ var key = Object.keys(field)[0];
84
+ return "".concat((0, utils_1.escapeReservedWords)(key), " ").concat(field[key]);
85
+ };
86
+ var buildWithExpr = function (index, options) {
87
+ var _a;
88
+ var deferred = (_a = options === null || options === void 0 ? void 0 : options.deferred) !== null && _a !== void 0 ? _a : index.deferred;
89
+ var withOptions = [];
90
+ if (deferred) {
91
+ withOptions.push('"defer_build": true');
92
+ }
93
+ if (typeof index.numReplica === 'number') {
94
+ withOptions.push("\"num_replica\": ".concat(index.numReplica));
95
+ }
96
+ return withOptions.length ? " WITH {".concat(withOptions.join(','), "}") : '';
97
+ };
98
+ var buildIndexQuery = function (keyspace, index, options) {
99
+ if (index.primary) {
100
+ return "CREATE PRIMARY INDEX IF NOT EXISTS ".concat(indexName(index.name), " ON ").concat(keyspace).concat(buildWithExpr(index, options));
101
+ }
102
+ if (!index.fields || !index.fields.length) {
103
+ throw new Error("index ".concat(index.name, " requires at least one field"));
104
+ }
105
+ return "CREATE INDEX IF NOT EXISTS ".concat(indexName(index.name), " ON ").concat(keyspace, "(").concat(index.fields
106
+ .map(buildIndexField)
107
+ .join(','), ")").concat((0, builders_1.buildWhereExpr)(index.where)).concat(buildWithExpr(index, options));
108
+ };
109
+ exports.buildIndexQuery = buildIndexQuery;
110
+ var ensureModelIndexes = function (cluster_1, keyspace_1) {
111
+ var args_1 = [];
112
+ for (var _i = 2; _i < arguments.length; _i++) {
113
+ args_1[_i - 2] = arguments[_i];
114
+ }
115
+ return __awaiter(void 0, __spreadArray([cluster_1, keyspace_1], __read(args_1), false), void 0, function (cluster, keyspace, indexes, options) {
116
+ var queries, queries_1, queries_1_1, query, e_1_1;
117
+ var e_1, _a;
118
+ if (indexes === void 0) { indexes = []; }
119
+ return __generator(this, function (_b) {
120
+ switch (_b.label) {
121
+ case 0:
122
+ queries = indexes.map(function (index) { return (0, exports.buildIndexQuery)(keyspace, index, options); });
123
+ _b.label = 1;
124
+ case 1:
125
+ _b.trys.push([1, 6, 7, 8]);
126
+ queries_1 = __values(queries), queries_1_1 = queries_1.next();
127
+ _b.label = 2;
128
+ case 2:
129
+ if (!!queries_1_1.done) return [3 /*break*/, 5];
130
+ query = queries_1_1.value;
131
+ return [4 /*yield*/, cluster.query(query)];
132
+ case 3:
133
+ _b.sent();
134
+ _b.label = 4;
135
+ case 4:
136
+ queries_1_1 = queries_1.next();
137
+ return [3 /*break*/, 2];
138
+ case 5: return [3 /*break*/, 8];
139
+ case 6:
140
+ e_1_1 = _b.sent();
141
+ e_1 = { error: e_1_1 };
142
+ return [3 /*break*/, 8];
143
+ case 7:
144
+ try {
145
+ if (queries_1_1 && !queries_1_1.done && (_a = queries_1.return)) _a.call(queries_1);
146
+ }
147
+ finally { if (e_1) throw e_1.error; }
148
+ return [7 /*endfinally*/];
149
+ case 8: return [2 /*return*/, queries];
150
+ }
151
+ });
152
+ });
153
+ };
154
+ exports.ensureModelIndexes = ensureModelIndexes;
155
+ //# sourceMappingURL=indexes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indexes.js","sourceRoot":"","sources":["../../src/model/indexes.ts"],"names":[],"mappings":"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","sourcesContent":["import type {Cluster} from 'couchbase';\n\nimport {buildWhereExpr} from '../query/helpers/builders';\nimport {LogicalWhereExpr, SortType} from '../query/interface/query.types';\nimport {escapeReservedWords} from '../query/utils';\n\nexport type IndexField = string | Record<string, SortType>;\n\nexport interface ModelIndexDefinition {\n name: string;\n fields?: IndexField[];\n where?: LogicalWhereExpr;\n deferred?: boolean;\n numReplica?: number;\n primary?: boolean;\n}\n\nexport interface EnsureIndexOptions {\n deferred?: boolean;\n}\n\nconst indexName = (name: string): string => `\\`${name.replace(/`/g, '``')}\\``;\n\nconst buildIndexField = (field: IndexField): string => {\n if (typeof field === 'string') {\n return escapeReservedWords(field);\n }\n\n const key = Object.keys(field)[0];\n\n return `${escapeReservedWords(key)} ${field[key]}`;\n};\n\nconst buildWithExpr = (index: ModelIndexDefinition, options?: EnsureIndexOptions): string => {\n const deferred = options?.deferred ?? index.deferred;\n const withOptions: string[] = [];\n\n if (deferred) {\n withOptions.push('\"defer_build\": true');\n }\n\n if (typeof index.numReplica === 'number') {\n withOptions.push(`\"num_replica\": ${index.numReplica}`);\n }\n\n return withOptions.length ? ` WITH {${withOptions.join(',')}}` : '';\n};\n\nexport const buildIndexQuery = (\n keyspace: string,\n index: ModelIndexDefinition,\n options?: EnsureIndexOptions\n): string => {\n if (index.primary) {\n return `CREATE PRIMARY INDEX IF NOT EXISTS ${indexName(\n index.name\n )} ON ${keyspace}${buildWithExpr(index, options)}`;\n }\n\n if (!index.fields || !index.fields.length) {\n throw new Error(`index ${index.name} requires at least one field`);\n }\n\n return `CREATE INDEX IF NOT EXISTS ${indexName(index.name)} ON ${keyspace}(${index.fields\n .map(buildIndexField)\n .join(',')})${buildWhereExpr(index.where)}${buildWithExpr(index, options)}`;\n};\n\nexport const ensureModelIndexes = async (\n cluster: Cluster,\n keyspace: string,\n indexes: ModelIndexDefinition[] = [],\n options?: EnsureIndexOptions\n): Promise<string[]> => {\n const queries = indexes.map((index) => buildIndexQuery(keyspace, index, options));\n\n for (const query of queries) {\n await cluster.query(query);\n }\n\n return queries;\n};\n"]}
@@ -0,0 +1,9 @@
1
+ export interface ModelKeyspaceTarget {
2
+ bucketName: string;
3
+ scopeName?: string;
4
+ collectionName?: string;
5
+ }
6
+ export declare const escapeIdentifier: (identifier: string) => string;
7
+ export declare const bucketIdentifier: (bucketName: string) => string;
8
+ export declare const keyspaceIdentifier: ({ bucketName, scopeName, collectionName, }: ModelKeyspaceTarget) => string;
9
+ export declare const fromTarget: (keyspace: string, alias?: string) => string;
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.fromTarget = exports.keyspaceIdentifier = exports.bucketIdentifier = exports.escapeIdentifier = void 0;
4
+ var escapeIdentifier = function (identifier) {
5
+ return "`".concat(identifier.replace(/`/g, '``'), "`");
6
+ };
7
+ exports.escapeIdentifier = escapeIdentifier;
8
+ var safeAlias = function (alias) {
9
+ return /^[A-Za-z_][A-Za-z0-9_]*$/.test(alias) ? alias : (0, exports.escapeIdentifier)(alias);
10
+ };
11
+ var bucketIdentifier = function (bucketName) { return (0, exports.escapeIdentifier)(bucketName); };
12
+ exports.bucketIdentifier = bucketIdentifier;
13
+ var keyspaceIdentifier = function (_a) {
14
+ var bucketName = _a.bucketName, scopeName = _a.scopeName, collectionName = _a.collectionName;
15
+ if (!scopeName && !collectionName) {
16
+ return (0, exports.bucketIdentifier)(bucketName);
17
+ }
18
+ return "default:".concat((0, exports.bucketIdentifier)(bucketName), ".").concat((0, exports.escapeIdentifier)(scopeName || '_default'), ".").concat((0, exports.escapeIdentifier)(collectionName || '_default'));
19
+ };
20
+ exports.keyspaceIdentifier = keyspaceIdentifier;
21
+ var fromTarget = function (keyspace, alias) {
22
+ if (!alias) {
23
+ return keyspace;
24
+ }
25
+ return "".concat(keyspace, " AS ").concat(safeAlias(alias));
26
+ };
27
+ exports.fromTarget = fromTarget;
28
+ //# sourceMappingURL=keyspace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keyspace.js","sourceRoot":"","sources":["../../src/model/keyspace.ts"],"names":[],"mappings":";;;AAMO,IAAM,gBAAgB,GAAG,UAAC,UAAkB;IAC/C,OAAA,WAAK,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,MAAI;AAAvC,CAAuC,CAAC;AAD/B,QAAA,gBAAgB,oBACe;AAE5C,IAAM,SAAS,GAAG,UAAC,KAAa;IAC5B,OAAO,0BAA0B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAA,wBAAgB,EAAC,KAAK,CAAC,CAAC;AACpF,CAAC,CAAC;AAEK,IAAM,gBAAgB,GAAG,UAAC,UAAkB,IAAa,OAAA,IAAA,wBAAgB,EAAC,UAAU,CAAC,EAA5B,CAA4B,CAAC;AAAhF,QAAA,gBAAgB,oBAAgE;AAEtF,IAAM,kBAAkB,GAAG,UAAC,EAIb;QAHlB,UAAU,gBAAA,EACV,SAAS,eAAA,EACT,cAAc,oBAAA;IAEd,IAAI,CAAC,SAAS,IAAI,CAAC,cAAc,EAAE,CAAC;QAChC,OAAO,IAAA,wBAAgB,EAAC,UAAU,CAAC,CAAC;IACxC,CAAC;IAED,OAAO,kBAAW,IAAA,wBAAgB,EAAC,UAAU,CAAC,cAAI,IAAA,wBAAgB,EAC9D,SAAS,IAAI,UAAU,CAC1B,cAAI,IAAA,wBAAgB,EAAC,cAAc,IAAI,UAAU,CAAC,CAAE,CAAC;AAC1D,CAAC,CAAC;AAZW,QAAA,kBAAkB,sBAY7B;AAEK,IAAM,UAAU,GAAG,UAAC,QAAgB,EAAE,KAAc;IACvD,IAAI,CAAC,KAAK,EAAE,CAAC;QACT,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED,OAAO,UAAG,QAAQ,iBAAO,SAAS,CAAC,KAAK,CAAC,CAAE,CAAC;AAChD,CAAC,CAAC;AANW,QAAA,UAAU,cAMrB","sourcesContent":["export interface ModelKeyspaceTarget {\n bucketName: string;\n scopeName?: string;\n collectionName?: string;\n}\n\nexport const escapeIdentifier = (identifier: string): string =>\n `\\`${identifier.replace(/`/g, '``')}\\``;\n\nconst safeAlias = (alias: string): string => {\n return /^[A-Za-z_][A-Za-z0-9_]*$/.test(alias) ? alias : escapeIdentifier(alias);\n};\n\nexport const bucketIdentifier = (bucketName: string): string => escapeIdentifier(bucketName);\n\nexport const keyspaceIdentifier = ({\n bucketName,\n scopeName,\n collectionName,\n}: ModelKeyspaceTarget): string => {\n if (!scopeName && !collectionName) {\n return bucketIdentifier(bucketName);\n }\n\n return `default:${bucketIdentifier(bucketName)}.${escapeIdentifier(\n scopeName || '_default'\n )}.${escapeIdentifier(collectionName || '_default')}`;\n};\n\nexport const fromTarget = (keyspace: string, alias?: string): string => {\n if (!alias) {\n return keyspace;\n }\n\n return `${keyspace} AS ${safeAlias(alias)}`;\n};\n"]}
@@ -0,0 +1,36 @@
1
+ import type { Cluster } from 'couchbase';
2
+ import { IncludeDefinition } from './include';
3
+ export interface ModelReadArgs {
4
+ select?: any[] | string;
5
+ where?: any;
6
+ orderBy?: any;
7
+ limit?: number;
8
+ page?: number;
9
+ offset?: number;
10
+ throwOnError?: boolean;
11
+ include?: IncludeDefinition[];
12
+ }
13
+ export interface ModelPageInfo {
14
+ limit: number;
15
+ page: number;
16
+ offset: number;
17
+ nextPage: number | null;
18
+ nextOffset: number | null;
19
+ }
20
+ export interface ModelPageResult<T> {
21
+ items: T[];
22
+ hasNext: boolean;
23
+ pageInfo: ModelPageInfo;
24
+ }
25
+ export interface ModelReadContext {
26
+ bucketName: string;
27
+ collectionName: string;
28
+ cluster: Cluster;
29
+ parse: <T>(data: T) => T;
30
+ resultKey?: string;
31
+ }
32
+ export declare const findMany: <T>(context: ModelReadContext, args?: ModelReadArgs) => Promise<T[]>;
33
+ export declare const findOne: <T>(context: ModelReadContext, args?: ModelReadArgs) => Promise<T | null>;
34
+ export declare const exists: (context: ModelReadContext, args?: ModelReadArgs) => Promise<boolean>;
35
+ export declare const count: (context: ModelReadContext, args?: ModelReadArgs) => Promise<number>;
36
+ export declare const page: <T>(context: ModelReadContext, args?: ModelReadArgs) => Promise<ModelPageResult<T>>;
@@ -0,0 +1,275 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
14
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
15
+ return new (P || (P = Promise))(function (resolve, reject) {
16
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
17
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
18
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
19
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
20
+ });
21
+ };
22
+ var __generator = (this && this.__generator) || function (thisArg, body) {
23
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
24
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
25
+ function verb(n) { return function (v) { return step([n, v]); }; }
26
+ function step(op) {
27
+ if (f) throw new TypeError("Generator is already executing.");
28
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
29
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
30
+ if (y = 0, t) op = [op[0] & 2, t.value];
31
+ switch (op[0]) {
32
+ case 0: case 1: t = op; break;
33
+ case 4: _.label++; return { value: op[1], done: false };
34
+ case 5: _.label++; y = op[1]; op = [0]; continue;
35
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
36
+ default:
37
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
38
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
39
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
40
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
41
+ if (t[2]) _.ops.pop();
42
+ _.trys.pop(); continue;
43
+ }
44
+ op = body.call(thisArg, _);
45
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
46
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
47
+ }
48
+ };
49
+ var __read = (this && this.__read) || function (o, n) {
50
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
51
+ if (!m) return o;
52
+ var i = m.call(o), r, ar = [], e;
53
+ try {
54
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
55
+ }
56
+ catch (error) { e = { error: error }; }
57
+ finally {
58
+ try {
59
+ if (r && !r.done && (m = i["return"])) m.call(i);
60
+ }
61
+ finally { if (e) throw e.error; }
62
+ }
63
+ return ar;
64
+ };
65
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
66
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
67
+ if (ar || !(i in from)) {
68
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
69
+ ar[i] = from[i];
70
+ }
71
+ }
72
+ return to.concat(ar || Array.prototype.slice.call(from));
73
+ };
74
+ Object.defineProperty(exports, "__esModule", { value: true });
75
+ exports.page = exports.count = exports.exists = exports.findOne = exports.findMany = void 0;
76
+ var safe_pagination_1 = require("../pagination/safe-pagination");
77
+ var include_1 = require("./include");
78
+ var scopedWhere = function (collectionName, where) {
79
+ var typeWhere = { _type: { $eq: collectionName } };
80
+ if (!where || !Object.keys(where).length) {
81
+ return typeWhere;
82
+ }
83
+ return { $and: [typeWhere, where] };
84
+ };
85
+ var shouldThrow = function (args) { return args.throwOnError !== false; };
86
+ var unwrapRows = function (rows, bucketName, selectAll, parse) {
87
+ return rows.map(function (row) {
88
+ var data = selectAll ? row[bucketName] : row;
89
+ return parse(data);
90
+ });
91
+ };
92
+ 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;
94
+ return __generator(this, function (_b) {
95
+ switch (_b.label) {
96
+ case 0:
97
+ hasIncludes = Array.isArray(queryArgs.include) && queryArgs.include.length > 0;
98
+ builtQuery = hasIncludes
99
+ ? (0, include_1.buildIncludedSelectionQuery)({
100
+ keyspace: context.bucketName,
101
+ collectionName: context.collectionName,
102
+ select: queryArgs.select || '*',
103
+ where: scopedWhere(context.collectionName, queryArgs.where),
104
+ limit: queryArgs.limit,
105
+ page: queryArgs.page,
106
+ offset: queryArgs.offset,
107
+ orderBy: queryArgs.orderBy,
108
+ include: queryArgs.include,
109
+ })
110
+ : __assign(__assign({}, (0, safe_pagination_1.buildSelectionQuery)({
111
+ bucketName: context.bucketName,
112
+ select: queryArgs.select || '*',
113
+ where: { where: scopedWhere(context.collectionName, queryArgs.where) },
114
+ limit: queryArgs.limit,
115
+ page: queryArgs.page,
116
+ offset: queryArgs.offset,
117
+ orderBy: queryArgs.orderBy,
118
+ }, { includeLimitOffset: true })), { resultKey: undefined });
119
+ query = builtQuery.query, parameters = builtQuery.parameters, selectAll = builtQuery.selectAll, resultKey = builtQuery.resultKey;
120
+ _b.label = 1;
121
+ case 1:
122
+ _b.trys.push([1, 3, , 4]);
123
+ return [4 /*yield*/, context.cluster.query(query, { parameters: parameters })];
124
+ case 2:
125
+ _a = (_b.sent()).rows, rows = _a === void 0 ? [] : _a;
126
+ return [2 /*return*/, unwrapRows(rows, resultKey || context.resultKey || context.bucketName, selectAll, context.parse)];
127
+ case 3:
128
+ error_1 = _b.sent();
129
+ if (shouldThrow(args)) {
130
+ throw error_1;
131
+ }
132
+ return [2 /*return*/, []];
133
+ case 4: return [2 /*return*/];
134
+ }
135
+ });
136
+ }); };
137
+ var findMany = function (context_1) {
138
+ var args_1 = [];
139
+ for (var _i = 1; _i < arguments.length; _i++) {
140
+ args_1[_i - 1] = arguments[_i];
141
+ }
142
+ return __awaiter(void 0, __spreadArray([context_1], __read(args_1), false), void 0, function (context, args) {
143
+ if (args === void 0) { args = {}; }
144
+ return __generator(this, function (_a) {
145
+ return [2 /*return*/, runReadQuery(context, args, __assign(__assign({}, args), { limit: typeof args.limit === 'number' ? args.limit : 10, page: typeof args.page === 'number' ? args.page : 0 }))];
146
+ });
147
+ });
148
+ };
149
+ exports.findMany = findMany;
150
+ var findOne = function (context_1) {
151
+ var args_1 = [];
152
+ for (var _i = 1; _i < arguments.length; _i++) {
153
+ args_1[_i - 1] = arguments[_i];
154
+ }
155
+ return __awaiter(void 0, __spreadArray([context_1], __read(args_1), false), void 0, function (context, args) {
156
+ var rows;
157
+ if (args === void 0) { args = {}; }
158
+ return __generator(this, function (_a) {
159
+ switch (_a.label) {
160
+ case 0: return [4 /*yield*/, runReadQuery(context, args, __assign(__assign({}, args), { limit: 1, page: 0, offset: args.offset }))];
161
+ case 1:
162
+ rows = _a.sent();
163
+ return [2 /*return*/, rows.length ? rows[0] : null];
164
+ }
165
+ });
166
+ });
167
+ };
168
+ exports.findOne = findOne;
169
+ var exists = function (context_1) {
170
+ var args_1 = [];
171
+ for (var _i = 1; _i < arguments.length; _i++) {
172
+ args_1[_i - 1] = arguments[_i];
173
+ }
174
+ 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;
176
+ if (args === void 0) { args = {}; }
177
+ return __generator(this, function (_c) {
178
+ switch (_c.label) {
179
+ case 0:
180
+ _a = (0, safe_pagination_1.buildSelectionQuery)({
181
+ bucketName: context.bucketName,
182
+ select: 'RAW 1',
183
+ where: { where: scopedWhere(context.collectionName, args.where) },
184
+ limit: 1,
185
+ page: 0,
186
+ }, { includeLimitOffset: true }), query = _a.query, parameters = _a.parameters;
187
+ _c.label = 1;
188
+ case 1:
189
+ _c.trys.push([1, 3, , 4]);
190
+ return [4 /*yield*/, context.cluster.query(query, { parameters: parameters })];
191
+ case 2:
192
+ _b = (_c.sent()).rows, rows = _b === void 0 ? [] : _b;
193
+ return [2 /*return*/, rows.length > 0];
194
+ case 3:
195
+ error_2 = _c.sent();
196
+ if (shouldThrow(args)) {
197
+ throw error_2;
198
+ }
199
+ return [2 /*return*/, false];
200
+ case 4: return [2 /*return*/];
201
+ }
202
+ });
203
+ });
204
+ };
205
+ exports.exists = exists;
206
+ var count = function (context_1) {
207
+ var args_1 = [];
208
+ for (var _i = 1; _i < arguments.length; _i++) {
209
+ args_1[_i - 1] = arguments[_i];
210
+ }
211
+ 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;
213
+ if (args === void 0) { args = {}; }
214
+ return __generator(this, function (_c) {
215
+ switch (_c.label) {
216
+ case 0:
217
+ _a = (0, safe_pagination_1.buildSelectionQuery)({
218
+ bucketName: context.bucketName,
219
+ select: 'RAW COUNT(1)',
220
+ where: { where: scopedWhere(context.collectionName, args.where) },
221
+ }), query = _a.query, parameters = _a.parameters;
222
+ _c.label = 1;
223
+ case 1:
224
+ _c.trys.push([1, 3, , 4]);
225
+ return [4 /*yield*/, context.cluster.query(query, { parameters: parameters })];
226
+ case 2:
227
+ _b = (_c.sent()).rows, rows = _b === void 0 ? [] : _b;
228
+ return [2 /*return*/, Number(rows[0] || 0)];
229
+ case 3:
230
+ error_3 = _c.sent();
231
+ if (shouldThrow(args)) {
232
+ throw error_3;
233
+ }
234
+ return [2 /*return*/, 0];
235
+ case 4: return [2 /*return*/];
236
+ }
237
+ });
238
+ });
239
+ };
240
+ exports.count = count;
241
+ var page = function (context_1) {
242
+ var args_1 = [];
243
+ for (var _i = 1; _i < arguments.length; _i++) {
244
+ args_1[_i - 1] = arguments[_i];
245
+ }
246
+ return __awaiter(void 0, __spreadArray([context_1], __read(args_1), false), void 0, function (context, args) {
247
+ var limit, pageNumber, offset, rows, hasNext;
248
+ if (args === void 0) { args = {}; }
249
+ return __generator(this, function (_a) {
250
+ switch (_a.label) {
251
+ case 0:
252
+ limit = typeof args.limit === 'number' ? args.limit : 10;
253
+ pageNumber = typeof args.page === 'number' ? args.page : 0;
254
+ offset = typeof args.offset === 'number' ? args.offset : pageNumber * limit;
255
+ return [4 /*yield*/, runReadQuery(context, args, __assign(__assign({}, args), { limit: limit + 1, page: pageNumber, offset: offset }))];
256
+ case 1:
257
+ rows = _a.sent();
258
+ hasNext = rows.length > limit;
259
+ return [2 /*return*/, {
260
+ items: hasNext ? rows.slice(0, limit) : rows,
261
+ hasNext: hasNext,
262
+ pageInfo: {
263
+ limit: limit,
264
+ page: pageNumber,
265
+ offset: offset,
266
+ nextPage: hasNext ? pageNumber + 1 : null,
267
+ nextOffset: hasNext ? offset + limit : null,
268
+ },
269
+ }];
270
+ }
271
+ });
272
+ });
273
+ };
274
+ exports.page = page;
275
+ //# sourceMappingURL=read-helpers.js.map