diff --git a/dist/package-shared/types/index.d.ts b/dist/package-shared/types/index.d.ts index 4777470..bb7b47e 100644 --- a/dist/package-shared/types/index.d.ts +++ b/dist/package-shared/types/index.d.ts @@ -1313,9 +1313,10 @@ export type DsqlCrudTransformFunction = ({ data, existingData, user, }: { +}> = ({ data, query, existingData, user, }: { user?: DATASQUIREL_LoggedInUser; - data: T; + data?: T; + query?: DsqlCrudQueryObject; existingData?: T; reqMethod: (typeof DataCrudRequestMethods)[number]; }) => Promise; diff --git a/dist/package-shared/utils/data-fetching/method-crud.js b/dist/package-shared/utils/data-fetching/method-crud.js index 30cdad6..7b03a9b 100644 --- a/dist/package-shared/utils/data-fetching/method-crud.js +++ b/dist/package-shared/utils/data-fetching/method-crud.js @@ -13,6 +13,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) { }; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = dsqlMethodCrud; +const lodash_1 = __importDefault(require("lodash")); const deserialize_query_1 = __importDefault(require("../deserialize-query")); const ejson_1 = __importDefault(require("../ejson")); const numberfy_1 = __importDefault(require("../numberfy")); @@ -29,36 +30,46 @@ function dsqlMethodCrud(_a) { let PAGE = 1; let OFFSET = (PAGE - 1) * LIMIT; if (finalQuery) { - Object.keys(finalQuery).forEach((key) => { - const value = finalQuery[key]; + const newFinalQuery = lodash_1.default.cloneDeep(finalQuery); + Object.keys(newFinalQuery).forEach((key) => { + const value = newFinalQuery[key]; if (typeof value == "string" && value.match(/^\{|^\[/)) { - finalQuery[key] = ejson_1.default.stringify(value); + newFinalQuery[key] = ejson_1.default.stringify(value); } if (value == "true") { - finalQuery[key] = true; + newFinalQuery[key] = true; } if (value == "false") { - finalQuery[key] = false; + newFinalQuery[key] = false; } }); - if (finalQuery.limit) - LIMIT = (0, numberfy_1.default)(finalQuery.limit); - if (finalQuery.page) - PAGE = (0, numberfy_1.default)(finalQuery.page); + if (newFinalQuery.limit) + LIMIT = (0, numberfy_1.default)(newFinalQuery.limit); + if (newFinalQuery.page) + PAGE = (0, numberfy_1.default)(newFinalQuery.page); OFFSET = (PAGE - 1) * LIMIT; + finalQuery = newFinalQuery; + } + else { + finalQuery = {}; } let finalData = finalBody ? Object.assign(Object.assign({}, finalBody), extraData) - : undefined; - if (finalData && (user === null || user === void 0 ? void 0 : user.id) && addUser) { + : {}; + if ((user === null || user === void 0 ? void 0 : user.id) && addUser) { finalData = Object.assign(Object.assign({}, finalData), { [addUser.field]: String(user.id) }); } - if (transform && finalData) { - finalData = yield transform({ + if (transform) { + finalData = (yield transform({ data: finalData, existingData: existingData, user, reqMethod: method, + })); + finalQuery = yield transform({ + query: finalQuery, + user, + reqMethod: method, }); } switch (method) { diff --git a/package-shared/types/index.ts b/package-shared/types/index.ts index b959ca1..dd3c6e6 100644 --- a/package-shared/types/index.ts +++ b/package-shared/types/index.ts @@ -1489,11 +1489,13 @@ export type DsqlCrudTransformFunction< T extends { [key: string]: any } = { [key: string]: any } > = ({ data, + query, existingData, user, }: { user?: DATASQUIREL_LoggedInUser; - data: T; + data?: T; + query?: DsqlCrudQueryObject; existingData?: T; reqMethod: (typeof DataCrudRequestMethods)[number]; }) => Promise; diff --git a/package-shared/utils/data-fetching/method-crud.ts b/package-shared/utils/data-fetching/method-crud.ts index 004ee24..6ac085b 100644 --- a/package-shared/utils/data-fetching/method-crud.ts +++ b/package-shared/utils/data-fetching/method-crud.ts @@ -1,3 +1,4 @@ +import _ from "lodash"; import sqlGenerator from "../../functions/dsql/sql/sql-generator"; import { DsqlCrudQueryObject, @@ -52,22 +53,28 @@ export default async function dsqlMethodCrud< let OFFSET = (PAGE - 1) * LIMIT; if (finalQuery) { - Object.keys(finalQuery).forEach((key) => { - const value = finalQuery[key]; + const newFinalQuery = _.cloneDeep(finalQuery); + + Object.keys(newFinalQuery).forEach((key) => { + const value = newFinalQuery[key]; if (typeof value == "string" && value.match(/^\{|^\[/)) { - finalQuery[key] = EJSON.stringify(value); + newFinalQuery[key] = EJSON.stringify(value); } if (value == "true") { - finalQuery[key] = true; + newFinalQuery[key] = true; } if (value == "false") { - finalQuery[key] = false; + newFinalQuery[key] = false; } }); - if (finalQuery.limit) LIMIT = numberfy(finalQuery.limit); - if (finalQuery.page) PAGE = numberfy(finalQuery.page); + if (newFinalQuery.limit) LIMIT = numberfy(newFinalQuery.limit); + if (newFinalQuery.page) PAGE = numberfy(newFinalQuery.page); OFFSET = (PAGE - 1) * LIMIT; + + finalQuery = newFinalQuery; + } else { + finalQuery = {}; } let finalData = finalBody @@ -75,21 +82,27 @@ export default async function dsqlMethodCrud< ...finalBody, ...extraData, } as T) - : undefined; + : ({} as T); - if (finalData && user?.id && addUser) { + if (user?.id && addUser) { finalData = { ...finalData, [addUser.field]: String(user.id), - }; + } as T; } - if (transform && finalData) { - finalData = await transform({ + if (transform) { + finalData = (await transform({ data: finalData, existingData: existingData, user, reqMethod: method, + })) as T; + + finalQuery = await transform({ + query: finalQuery, + user, + reqMethod: method, }); } diff --git a/package.json b/package.json index ba3ee30..b198ddd 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@moduletrace/datasquirel", - "version": "3.9.9", + "version": "4.0.0", "description": "Cloud-based SQL data management tool", "main": "dist/index.js", "bin": {