couchset 0.0.16 → 0.0.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/model/index.js +16 -16
- package/dist/model/index.js.map +1 -1
- package/package.json +1 -1
package/dist/model/index.js
CHANGED
|
@@ -181,25 +181,25 @@ var Model = /** @class */ (function () {
|
|
|
181
181
|
*/
|
|
182
182
|
Model.prototype.updateById = function (id, data, opt) {
|
|
183
183
|
return __awaiter(this, void 0, void 0, function () {
|
|
184
|
-
var _a, silent, options, updatedDocument, error_3;
|
|
185
|
-
return __generator(this, function (
|
|
186
|
-
switch (
|
|
184
|
+
var _a, _b, silent, options, updatedDocument, error_3;
|
|
185
|
+
return __generator(this, function (_c) {
|
|
186
|
+
switch (_c.label) {
|
|
187
187
|
case 0:
|
|
188
188
|
this.fresh();
|
|
189
|
-
_a = opt.silent, silent =
|
|
189
|
+
_a = opt || {}, _b = _a.silent, silent = _b === void 0 ? false : _b, options = __rest(_a, ["silent"]);
|
|
190
190
|
updatedDocument = __assign(__assign({}, data), { id: id, _type: this.collectionName, _scope: this.scope });
|
|
191
191
|
if (!silent) {
|
|
192
192
|
updatedDocument.updatedAt = new Date();
|
|
193
193
|
}
|
|
194
|
-
|
|
194
|
+
_c.label = 1;
|
|
195
195
|
case 1:
|
|
196
|
-
|
|
196
|
+
_c.trys.push([1, 3, , 4]);
|
|
197
197
|
return [4 /*yield*/, this.collection.replace(id, updatedDocument, options)];
|
|
198
198
|
case 2:
|
|
199
|
-
|
|
199
|
+
_c.sent();
|
|
200
200
|
return [2 /*return*/, (0, utils_1.parseSchema)(this.schema, updatedDocument)];
|
|
201
201
|
case 3:
|
|
202
|
-
error_3 =
|
|
202
|
+
error_3 = _c.sent();
|
|
203
203
|
throw error_3;
|
|
204
204
|
case 4: return [2 /*return*/];
|
|
205
205
|
}
|
|
@@ -211,29 +211,29 @@ var Model = /** @class */ (function () {
|
|
|
211
211
|
*/
|
|
212
212
|
Model.prototype.save = function (data, opt) {
|
|
213
213
|
return __awaiter(this, void 0, void 0, function () {
|
|
214
|
-
var id, _a, silent, options, updatedDocument, error_4;
|
|
215
|
-
return __generator(this, function (
|
|
216
|
-
switch (
|
|
214
|
+
var id, _a, _b, silent, options, updatedDocument, error_4;
|
|
215
|
+
return __generator(this, function (_c) {
|
|
216
|
+
switch (_c.label) {
|
|
217
217
|
case 0:
|
|
218
218
|
this.fresh();
|
|
219
219
|
id = data && data.id;
|
|
220
|
-
_a = opt.silent, silent =
|
|
220
|
+
_a = opt || {}, _b = _a.silent, silent = _b === void 0 ? false : _b, options = __rest(_a, ["silent"]);
|
|
221
221
|
updatedDocument = __assign(__assign({}, data), { id: id, _type: this.collectionName, _scope: this.scope });
|
|
222
222
|
if (!silent) {
|
|
223
223
|
updatedDocument.updatedAt = new Date();
|
|
224
224
|
}
|
|
225
|
-
|
|
225
|
+
_c.label = 1;
|
|
226
226
|
case 1:
|
|
227
|
-
|
|
227
|
+
_c.trys.push([1, 3, , 4]);
|
|
228
228
|
if (!id) {
|
|
229
229
|
throw new Error('document must have id');
|
|
230
230
|
}
|
|
231
231
|
return [4 /*yield*/, this.collection.replace(id, updatedDocument, options)];
|
|
232
232
|
case 2:
|
|
233
|
-
|
|
233
|
+
_c.sent();
|
|
234
234
|
return [2 /*return*/, (0, utils_1.parseSchema)(this.schema, updatedDocument)];
|
|
235
235
|
case 3:
|
|
236
|
-
error_4 =
|
|
236
|
+
error_4 = _c.sent();
|
|
237
237
|
console.error(error_4);
|
|
238
238
|
throw error_4;
|
|
239
239
|
case 4: return [2 /*return*/];
|
package/dist/model/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/model/index.ts"],"names":[],"mappings":"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","sourcesContent":["import {Collection, GetOptions, RemoveOptions, ReplaceOptions, UpsertOptions} from 'couchbase';\n\nimport {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 {Collection, GetOptions, RemoveOptions, ReplaceOptions, UpsertOptions} from 'couchbase';\n\nimport {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"]}
|