crud-query-parser 0.0.3 → 1.0.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.
- package/README.md +144 -36
- package/dist/adapters/array/index.d.mts +90 -0
- package/dist/adapters/array/index.d.ts +90 -0
- package/dist/adapters/array/index.js +2 -0
- package/dist/adapters/array/index.js.map +1 -0
- package/dist/adapters/array/index.mjs +2 -0
- package/dist/adapters/array/index.mjs.map +1 -0
- package/dist/adapters/dynamodb/index.d.mts +239 -0
- package/dist/adapters/dynamodb/index.d.ts +239 -0
- package/dist/adapters/dynamodb/index.js +2 -0
- package/dist/adapters/dynamodb/index.js.map +1 -0
- package/dist/adapters/dynamodb/index.mjs +2 -0
- package/dist/adapters/dynamodb/index.mjs.map +1 -0
- package/dist/adapters/mongodb/index.d.mts +163 -0
- package/dist/adapters/mongodb/index.d.ts +163 -0
- package/dist/adapters/mongodb/index.js +2 -0
- package/dist/adapters/mongodb/index.js.map +1 -0
- package/dist/adapters/mongodb/index.mjs +2 -0
- package/dist/adapters/mongodb/index.mjs.map +1 -0
- package/dist/adapters/typeorm/index.d.mts +87 -10
- package/dist/adapters/typeorm/index.d.ts +87 -10
- package/dist/adapters/typeorm/index.js +1 -1
- package/dist/adapters/typeorm/index.js.map +1 -1
- package/dist/adapters/typeorm/index.mjs +1 -1
- package/dist/adapters/typeorm/index.mjs.map +1 -1
- package/dist/{crud-request-CvDKp6Iy.d.mts → crud-request-DLo0ZuzD.d.mts} +42 -1
- package/dist/{crud-request-CvDKp6Iy.d.ts → crud-request-DLo0ZuzD.d.ts} +42 -1
- package/dist/{crud-request-where.builder-mP8y-fQp.d.mts → crud-request-where.builder-CBx-JZhl.d.mts} +1 -1
- package/dist/{crud-request-where.builder-D60W-QEd.d.ts → crud-request-where.builder-CqbP5LT9.d.ts} +1 -1
- package/dist/filters/index.d.mts +11 -2
- package/dist/filters/index.d.ts +11 -2
- package/dist/filters/index.js +1 -1
- package/dist/filters/index.js.map +1 -1
- package/dist/filters/index.mjs +1 -1
- package/dist/filters/index.mjs.map +1 -1
- package/dist/helpers/express/index.d.mts +30 -0
- package/dist/helpers/express/index.d.ts +30 -0
- package/dist/helpers/express/index.js +2 -0
- package/dist/helpers/express/index.js.map +1 -0
- package/dist/helpers/express/index.mjs +2 -0
- package/dist/helpers/express/index.mjs.map +1 -0
- package/dist/helpers/nestjs/index.d.mts +4 -3
- package/dist/helpers/nestjs/index.d.ts +4 -3
- package/dist/helpers/nestjs/index.js +1 -1
- package/dist/helpers/nestjs/index.js.map +1 -1
- package/dist/helpers/nestjs/index.mjs +1 -1
- package/dist/helpers/nestjs/index.mjs.map +1 -1
- package/dist/index.d.mts +12 -4
- package/dist/index.d.ts +12 -4
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/dist/parsers/crud/index.d.mts +73 -10
- package/dist/parsers/crud/index.d.ts +73 -10
- package/dist/parsers/crud/index.js +1 -1
- package/dist/parsers/crud/index.js.map +1 -1
- package/dist/parsers/crud/index.mjs +1 -1
- package/dist/parsers/crud/index.mjs.map +1 -1
- package/dist/{query-adapter-Vebxws3V.d.ts → query-adapter-CZhPC1aq.d.ts} +3 -3
- package/dist/{query-adapter-BliD9hJN.d.mts → query-adapter-sgeUb8CV.d.mts} +3 -3
- package/dist/{request-parser-B-fK5GnP.d.ts → request-parser-Cr3cxMRw.d.ts} +4 -4
- package/dist/{request-parser-WaQBZsYG.d.mts → request-parser-DzuXbRsB.d.mts} +4 -4
- package/package.json +211 -133
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../../src/helpers/nestjs/index.ts","../../../src/helpers/nestjs/decorators.ts","../../../src/helpers/nestjs/utils.ts"],"sourcesContent":["\r\nexport * from './decorators';\r\n","import { applyDecorators, createParamDecorator,
|
1
|
+
{"version":3,"sources":["../../../src/helpers/nestjs/index.ts","../../../src/helpers/nestjs/decorators.ts","../../../src/utils/functions.ts","../../../src/helpers/nestjs/utils.ts","../../../src/utils/objects.ts"],"sourcesContent":["\r\nexport * from './decorators';\r\n","import { applyDecorators, createParamDecorator, SetMetadata, Type } from '@nestjs/common';\r\nimport { RequestParser } from '../../models/request-parser';\r\nimport { createInstance } from '../../utils/functions';\r\nimport { ApiQuery, CRUD_QUERY_PARSER, parseCrudRequest } from './utils';\r\n\r\nexport { CRUD_QUERY_PARSER } from './utils';\r\n\r\n/**\r\n * Defines which parser will be used for parsing the request. This also adds the OpenAPI query parameters.\r\n *\r\n * @param parserContract The parser that will be used\r\n */\r\nexport function Crud(parserContract: RequestParser | Type<RequestParser>): MethodDecorator & ClassDecorator {\r\n const parser = createInstance(parserContract);\r\n\r\n if (!parser) {\r\n throw new Error('The request parser passed to @Crud() is invalid');\r\n }\r\n\r\n const openApi = parser.getOpenAPIParameters().map(param => ApiQuery(param));\r\n\r\n return applyDecorators(\r\n SetMetadata(CRUD_QUERY_PARSER, parser),\r\n ...openApi,\r\n );\r\n}\r\n\r\n/**\r\n * A parameter decorator that converts the query string into a `CrudRequest` object\r\n */\r\nexport const ParseCrudRequest = createParamDecorator<RequestParser | Type<RequestParser>>(parseCrudRequest);\r\n","export function ensurePrimitive(fieldName: string, data: any): number | string | boolean | Date {\r\n if (typeof data === 'number' || typeof data === 'string' || typeof data === 'boolean' || data instanceof Date)\r\n return data;\r\n\r\n throw new Error(`${fieldName} must be a string, number or boolean`);\r\n}\r\n\r\nexport function ensurePrimitiveOrNull(fieldName: string, data: any): number | string | boolean | Date | undefined | null {\r\n if (data === null || data === undefined)\r\n return data;\r\n\r\n if (typeof data === 'number' || typeof data === 'string' || typeof data === 'boolean' || data instanceof Date)\r\n return data;\r\n\r\n throw new Error(`${fieldName} must be a string, number, boolean or null`);\r\n}\r\n\r\nexport function ensureString(fieldName: string, data: any): string {\r\n if (typeof data === 'string')\r\n return data;\r\n\r\n throw new Error(`${fieldName} must be a string`);\r\n}\r\n\r\nexport function ensureArray<T>(fieldName: string, data: T[] | any, minLength: number = 0): T[] {\r\n if (!Array.isArray(data) || data.length < minLength)\r\n throw new Error(`${fieldName} must be an array with at least ${minLength} items`);\r\n\r\n return data;\r\n}\r\n\r\nexport function ensureEmpty(fieldName: string, data: any) {\r\n if (isValid(data) && data !== true)\r\n throw new Error(`${fieldName} must be true, null or undefined`);\r\n}\r\n\r\nexport function isValid<T>(value: T | undefined | null): value is T {\r\n return value !== null && value !== undefined;\r\n}\r\n\r\nexport function getOffset(offset: number | undefined, limit?: number, page?: number): number {\r\n return offset ?? (limit && page ? limit * (page - 1) : 0);\r\n}\r\n\r\nexport interface Type<T> extends Function { new (... args: any[]): T; }\r\n\r\nexport function createInstance<T extends object>(clazzOrInstance: T | Type<T> | undefined): T | undefined {\r\n if (typeof clazzOrInstance === 'function')\r\n return new clazzOrInstance();\r\n\r\n if (typeof clazzOrInstance === 'object')\r\n return clazzOrInstance as T;\r\n\r\n return undefined;\r\n}\r\n\r\nexport function escapeRegex(str: string): string {\r\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\r\n}\r\n","import { ExecutionContext, Logger, Type } from '@nestjs/common';\r\nimport { OpenAPIParameter } from '../../models/openapi-parameter';\r\nimport { RequestParser } from '../../models/request-parser';\r\nimport { CrudRequest } from '../../models/crud-request';\r\nimport { createInstance } from '../../utils/functions';\r\nimport { createCrudRequest } from '../../utils/objects';\r\n\r\nexport const CRUD_QUERY_PARSER = 'crud-query-parser';\r\n\r\nexport const ApiQuery = (() => {\r\n try {\r\n return require('@nestjs/swagger').ApiQuery; // TODO ES6 imports?\r\n } catch (error) {\r\n return (options: OpenAPIParameter): MethodDecorator => {\r\n return () => {};\r\n };\r\n }\r\n})();\r\n\r\nexport function getMetadataFromContext<T>(context: ExecutionContext, key: string): T | undefined {\r\n const targets = [\r\n context.getHandler(),\r\n context.getClass(),\r\n ];\r\n\r\n for (const target of targets) {\r\n const data = Reflect.getMetadata(key, target);\r\n\r\n if (data)\r\n return data;\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\nexport function parseCrudRequest(data: RequestParser | Type<RequestParser> | undefined, ctx: ExecutionContext): CrudRequest {\r\n const request = ctx.switchToHttp().getRequest();\r\n const parser = data ? createInstance(data) : getMetadataFromContext<RequestParser>(ctx, CRUD_QUERY_PARSER);\r\n\r\n if (!parser) {\r\n new Logger('ParseCrudRequest').warn(`No crud request parser found. Please, define one with @Crud() or pass to @ParseCrudRequest()`);\r\n\r\n return createCrudRequest();\r\n }\r\n\r\n return parser.parse(request.query);\r\n}\r\n","import { GetManyResult } from '../models/get-many-result';\r\nimport { CrudRequest } from '../models/crud-request';\r\n\r\n/**\r\n * Creates a CrudRequest object, filling required missing properties with empty values\r\n */\r\nexport function createCrudRequest(crudRequest?: Partial<CrudRequest>): CrudRequest {\r\n return {\r\n select: [],\r\n relations: [],\r\n order: [],\r\n where: { and: [] },\r\n ...crudRequest,\r\n };\r\n}\r\n\r\n/**\r\n * Creates a GetManyResult object\r\n *\r\n * @param data The entity list to be returned\r\n * @param total The total amount of entities in the database\r\n * @param offset The offset used for querying\r\n * @param limit The limit used for querying\r\n */\r\nexport function createGetManyResult<T>(data: T[], total: number, offset: number, limit?: number): GetManyResult<T> {\r\n const count = data.length;\r\n const actualLimit = limit ?? total;\r\n const page = actualLimit > 0 ? Math.floor(offset / actualLimit) + 1 : 1;\r\n const pageCount = actualLimit > 0 ? Math.ceil(total / actualLimit) : 0;\r\n\r\n return {\r\n data,\r\n count,\r\n total,\r\n page,\r\n pageCount,\r\n };\r\n}\r\n"],"mappings":"4dAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,uBAAAE,EAAA,SAAAC,EAAA,qBAAAC,IAAA,eAAAC,EAAAL,GCAA,IAAAM,EAAyE,0BC8ClE,SAASC,EAAiCC,EAAyD,CACxG,GAAI,OAAOA,GAAoB,WAC7B,OAAO,IAAIA,EAEb,GAAI,OAAOA,GAAoB,SAC7B,OAAOA,CAGX,CARgBC,EAAAF,EAAA,kBC9ChB,IAAAG,EAA+C,0BCMxC,SAASC,EAAkBC,EAAiD,CACjF,MAAO,CACL,OAAQ,CAAC,EACT,UAAW,CAAC,EACZ,MAAO,CAAC,EACR,MAAO,CAAE,IAAK,CAAC,CAAE,EACjB,GAAGA,CACL,CACF,CARgBC,EAAAF,EAAA,qBDCT,IAAMG,EAAoB,oBAEpBC,GAAY,IAAM,CAC7B,GAAI,CACF,MAAO,SAAQ,iBAAiB,EAAE,QACpC,MAAgB,CACd,OAAQC,GACC,IAAM,CAAC,CAElB,CACF,GAAG,EAEI,SAASC,EAA0BC,EAA2BC,EAA4B,CAC/F,IAAMC,EAAU,CACdF,EAAQ,WAAW,EACnBA,EAAQ,SAAS,CACnB,EAEA,QAAWG,KAAUD,EAAS,CAC5B,IAAME,EAAO,QAAQ,YAAYH,EAAKE,CAAM,EAE5C,GAAIC,EACF,OAAOA,CACX,CAGF,CAdgBC,EAAAN,EAAA,0BAgBT,SAASO,EAAiBF,EAAuDG,EAAoC,CAC1H,IAAMC,EAAUD,EAAI,aAAa,EAAE,WAAW,EACxCE,EAASL,EAAOM,EAAeN,CAAI,EAAIL,EAAsCQ,EAAKX,CAAiB,EAEzG,OAAKa,EAMEA,EAAO,MAAMD,EAAQ,KAAK,GAL/B,IAAI,SAAO,kBAAkB,EAAE,KAAK,8FAA8F,EAE3HG,EAAkB,EAI7B,CAXgBN,EAAAC,EAAA,oBFvBT,SAASM,EAAKC,EAAuF,CAC1G,IAAMC,EAASC,EAAeF,CAAc,EAE5C,GAAI,CAACC,EACH,MAAM,IAAI,MAAM,iDAAiD,EAGnE,IAAME,EAAUF,EAAO,qBAAqB,EAAE,IAAIG,GAASC,EAASD,CAAK,CAAC,EAE1E,SAAO,sBACL,eAAYE,EAAmBL,CAAM,EACrC,GAAGE,CACL,CACF,CAbgBI,EAAAR,EAAA,QAkBT,IAAMS,KAAmB,wBAA0DC,CAAgB","names":["nestjs_exports","__export","CRUD_QUERY_PARSER","Crud","ParseCrudRequest","__toCommonJS","import_common","createInstance","clazzOrInstance","__name","import_common","createCrudRequest","crudRequest","__name","CRUD_QUERY_PARSER","ApiQuery","options","getMetadataFromContext","context","key","targets","target","data","__name","parseCrudRequest","ctx","request","parser","createInstance","createCrudRequest","Crud","parserContract","parser","createInstance","openApi","param","ApiQuery","CRUD_QUERY_PARSER","__name","ParseCrudRequest","parseCrudRequest"]}
|
@@ -1,2 +1,2 @@
|
|
1
|
-
var c=Object.defineProperty;var
|
1
|
+
var c=Object.defineProperty;var t=(e,r)=>c(e,"name",{value:r,configurable:!0}),m=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(r,n)=>(typeof require<"u"?require:r)[n]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});import{applyDecorators as y,createParamDecorator as l,SetMetadata as g}from"@nestjs/common";function u(e){if(typeof e=="function")return new e;if(typeof e=="object")return e}t(u,"createInstance");import{Logger as d}from"@nestjs/common";function p(e){return{select:[],relations:[],order:[],where:{and:[]},...e}}t(p,"createCrudRequest");var s="crud-query-parser",a=(()=>{try{return m("@nestjs/swagger").ApiQuery}catch{return r=>()=>{}}})();function R(e,r){let n=[e.getHandler(),e.getClass()];for(let o of n){let i=Reflect.getMetadata(r,o);if(i)return i}}t(R,"getMetadataFromContext");function f(e,r){let n=r.switchToHttp().getRequest(),o=e?u(e):R(r,s);return o?o.parse(n.query):(new d("ParseCrudRequest").warn("No crud request parser found. Please, define one with @Crud() or pass to @ParseCrudRequest()"),p())}t(f,"parseCrudRequest");function S(e){let r=u(e);if(!r)throw new Error("The request parser passed to @Crud() is invalid");let n=r.getOpenAPIParameters().map(o=>a(o));return y(g(s,r),...n)}t(S,"Crud");var v=l(f);export{s as CRUD_QUERY_PARSER,S as Crud,v as ParseCrudRequest};
|
2
2
|
//# sourceMappingURL=index.mjs.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../../src/helpers/nestjs/decorators.ts","../../../src/helpers/nestjs/utils.ts"],"sourcesContent":["import { applyDecorators, createParamDecorator,
|
1
|
+
{"version":3,"sources":["../../../src/helpers/nestjs/decorators.ts","../../../src/utils/functions.ts","../../../src/helpers/nestjs/utils.ts","../../../src/utils/objects.ts"],"sourcesContent":["import { applyDecorators, createParamDecorator, SetMetadata, Type } from '@nestjs/common';\r\nimport { RequestParser } from '../../models/request-parser';\r\nimport { createInstance } from '../../utils/functions';\r\nimport { ApiQuery, CRUD_QUERY_PARSER, parseCrudRequest } from './utils';\r\n\r\nexport { CRUD_QUERY_PARSER } from './utils';\r\n\r\n/**\r\n * Defines which parser will be used for parsing the request. This also adds the OpenAPI query parameters.\r\n *\r\n * @param parserContract The parser that will be used\r\n */\r\nexport function Crud(parserContract: RequestParser | Type<RequestParser>): MethodDecorator & ClassDecorator {\r\n const parser = createInstance(parserContract);\r\n\r\n if (!parser) {\r\n throw new Error('The request parser passed to @Crud() is invalid');\r\n }\r\n\r\n const openApi = parser.getOpenAPIParameters().map(param => ApiQuery(param));\r\n\r\n return applyDecorators(\r\n SetMetadata(CRUD_QUERY_PARSER, parser),\r\n ...openApi,\r\n );\r\n}\r\n\r\n/**\r\n * A parameter decorator that converts the query string into a `CrudRequest` object\r\n */\r\nexport const ParseCrudRequest = createParamDecorator<RequestParser | Type<RequestParser>>(parseCrudRequest);\r\n","export function ensurePrimitive(fieldName: string, data: any): number | string | boolean | Date {\r\n if (typeof data === 'number' || typeof data === 'string' || typeof data === 'boolean' || data instanceof Date)\r\n return data;\r\n\r\n throw new Error(`${fieldName} must be a string, number or boolean`);\r\n}\r\n\r\nexport function ensurePrimitiveOrNull(fieldName: string, data: any): number | string | boolean | Date | undefined | null {\r\n if (data === null || data === undefined)\r\n return data;\r\n\r\n if (typeof data === 'number' || typeof data === 'string' || typeof data === 'boolean' || data instanceof Date)\r\n return data;\r\n\r\n throw new Error(`${fieldName} must be a string, number, boolean or null`);\r\n}\r\n\r\nexport function ensureString(fieldName: string, data: any): string {\r\n if (typeof data === 'string')\r\n return data;\r\n\r\n throw new Error(`${fieldName} must be a string`);\r\n}\r\n\r\nexport function ensureArray<T>(fieldName: string, data: T[] | any, minLength: number = 0): T[] {\r\n if (!Array.isArray(data) || data.length < minLength)\r\n throw new Error(`${fieldName} must be an array with at least ${minLength} items`);\r\n\r\n return data;\r\n}\r\n\r\nexport function ensureEmpty(fieldName: string, data: any) {\r\n if (isValid(data) && data !== true)\r\n throw new Error(`${fieldName} must be true, null or undefined`);\r\n}\r\n\r\nexport function isValid<T>(value: T | undefined | null): value is T {\r\n return value !== null && value !== undefined;\r\n}\r\n\r\nexport function getOffset(offset: number | undefined, limit?: number, page?: number): number {\r\n return offset ?? (limit && page ? limit * (page - 1) : 0);\r\n}\r\n\r\nexport interface Type<T> extends Function { new (... args: any[]): T; }\r\n\r\nexport function createInstance<T extends object>(clazzOrInstance: T | Type<T> | undefined): T | undefined {\r\n if (typeof clazzOrInstance === 'function')\r\n return new clazzOrInstance();\r\n\r\n if (typeof clazzOrInstance === 'object')\r\n return clazzOrInstance as T;\r\n\r\n return undefined;\r\n}\r\n\r\nexport function escapeRegex(str: string): string {\r\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\r\n}\r\n","import { ExecutionContext, Logger, Type } from '@nestjs/common';\r\nimport { OpenAPIParameter } from '../../models/openapi-parameter';\r\nimport { RequestParser } from '../../models/request-parser';\r\nimport { CrudRequest } from '../../models/crud-request';\r\nimport { createInstance } from '../../utils/functions';\r\nimport { createCrudRequest } from '../../utils/objects';\r\n\r\nexport const CRUD_QUERY_PARSER = 'crud-query-parser';\r\n\r\nexport const ApiQuery = (() => {\r\n try {\r\n return require('@nestjs/swagger').ApiQuery; // TODO ES6 imports?\r\n } catch (error) {\r\n return (options: OpenAPIParameter): MethodDecorator => {\r\n return () => {};\r\n };\r\n }\r\n})();\r\n\r\nexport function getMetadataFromContext<T>(context: ExecutionContext, key: string): T | undefined {\r\n const targets = [\r\n context.getHandler(),\r\n context.getClass(),\r\n ];\r\n\r\n for (const target of targets) {\r\n const data = Reflect.getMetadata(key, target);\r\n\r\n if (data)\r\n return data;\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\nexport function parseCrudRequest(data: RequestParser | Type<RequestParser> | undefined, ctx: ExecutionContext): CrudRequest {\r\n const request = ctx.switchToHttp().getRequest();\r\n const parser = data ? createInstance(data) : getMetadataFromContext<RequestParser>(ctx, CRUD_QUERY_PARSER);\r\n\r\n if (!parser) {\r\n new Logger('ParseCrudRequest').warn(`No crud request parser found. Please, define one with @Crud() or pass to @ParseCrudRequest()`);\r\n\r\n return createCrudRequest();\r\n }\r\n\r\n return parser.parse(request.query);\r\n}\r\n","import { GetManyResult } from '../models/get-many-result';\r\nimport { CrudRequest } from '../models/crud-request';\r\n\r\n/**\r\n * Creates a CrudRequest object, filling required missing properties with empty values\r\n */\r\nexport function createCrudRequest(crudRequest?: Partial<CrudRequest>): CrudRequest {\r\n return {\r\n select: [],\r\n relations: [],\r\n order: [],\r\n where: { and: [] },\r\n ...crudRequest,\r\n };\r\n}\r\n\r\n/**\r\n * Creates a GetManyResult object\r\n *\r\n * @param data The entity list to be returned\r\n * @param total The total amount of entities in the database\r\n * @param offset The offset used for querying\r\n * @param limit The limit used for querying\r\n */\r\nexport function createGetManyResult<T>(data: T[], total: number, offset: number, limit?: number): GetManyResult<T> {\r\n const count = data.length;\r\n const actualLimit = limit ?? total;\r\n const page = actualLimit > 0 ? Math.floor(offset / actualLimit) + 1 : 1;\r\n const pageCount = actualLimit > 0 ? Math.ceil(total / actualLimit) : 0;\r\n\r\n return {\r\n data,\r\n count,\r\n total,\r\n page,\r\n pageCount,\r\n };\r\n}\r\n"],"mappings":"oUAAA,OAAS,mBAAAA,EAAiB,wBAAAC,EAAsB,eAAAC,MAAyB,iBC8ClE,SAASC,EAAiCC,EAAyD,CACxG,GAAI,OAAOA,GAAoB,WAC7B,OAAO,IAAIA,EAEb,GAAI,OAAOA,GAAoB,SAC7B,OAAOA,CAGX,CARgBC,EAAAF,EAAA,kBC9ChB,OAA2B,UAAAG,MAAoB,iBCMxC,SAASC,EAAkBC,EAAiD,CACjF,MAAO,CACL,OAAQ,CAAC,EACT,UAAW,CAAC,EACZ,MAAO,CAAC,EACR,MAAO,CAAE,IAAK,CAAC,CAAE,EACjB,GAAGA,CACL,CACF,CARgBC,EAAAF,EAAA,qBDCT,IAAMG,EAAoB,oBAEpBC,GAAY,IAAM,CAC7B,GAAI,CACF,MAAO,GAAQ,iBAAiB,EAAE,QACpC,MAAgB,CACd,OAAQC,GACC,IAAM,CAAC,CAElB,CACF,GAAG,EAEI,SAASC,EAA0BC,EAA2BC,EAA4B,CAC/F,IAAMC,EAAU,CACdF,EAAQ,WAAW,EACnBA,EAAQ,SAAS,CACnB,EAEA,QAAWG,KAAUD,EAAS,CAC5B,IAAME,EAAO,QAAQ,YAAYH,EAAKE,CAAM,EAE5C,GAAIC,EACF,OAAOA,CACX,CAGF,CAdgBC,EAAAN,EAAA,0BAgBT,SAASO,EAAiBF,EAAuDG,EAAoC,CAC1H,IAAMC,EAAUD,EAAI,aAAa,EAAE,WAAW,EACxCE,EAASL,EAAOM,EAAeN,CAAI,EAAIL,EAAsCQ,EAAKX,CAAiB,EAEzG,OAAKa,EAMEA,EAAO,MAAMD,EAAQ,KAAK,GAL/B,IAAIG,EAAO,kBAAkB,EAAE,KAAK,8FAA8F,EAE3HC,EAAkB,EAI7B,CAXgBP,EAAAC,EAAA,oBFvBT,SAASO,EAAKC,EAAuF,CAC1G,IAAMC,EAASC,EAAeF,CAAc,EAE5C,GAAI,CAACC,EACH,MAAM,IAAI,MAAM,iDAAiD,EAGnE,IAAME,EAAUF,EAAO,qBAAqB,EAAE,IAAIG,GAASC,EAASD,CAAK,CAAC,EAE1E,OAAOE,EACLC,EAAYC,EAAmBP,CAAM,EACrC,GAAGE,CACL,CACF,CAbgBM,EAAAV,EAAA,QAkBT,IAAMW,EAAmBC,EAA0DC,CAAgB","names":["applyDecorators","createParamDecorator","SetMetadata","createInstance","clazzOrInstance","__name","Logger","createCrudRequest","crudRequest","__name","CRUD_QUERY_PARSER","ApiQuery","options","getMetadataFromContext","context","key","targets","target","data","__name","parseCrudRequest","ctx","request","parser","createInstance","Logger","createCrudRequest","Crud","parserContract","parser","createInstance","openApi","param","ApiQuery","applyDecorators","SetMetadata","CRUD_QUERY_PARSER","__name","ParseCrudRequest","createParamDecorator","parseCrudRequest"]}
|
package/dist/index.d.mts
CHANGED
@@ -1,4 +1,12 @@
|
|
1
|
-
export { G as GetManyResult, Q as QueryAdapter } from './query-adapter-
|
2
|
-
export { R as RequestParamValue, a as RequestParser } from './request-parser-
|
3
|
-
|
4
|
-
export {
|
1
|
+
export { G as GetManyResult, Q as QueryAdapter } from './query-adapter-sgeUb8CV.mjs';
|
2
|
+
export { R as RequestParamValue, a as RequestParser } from './request-parser-DzuXbRsB.mjs';
|
3
|
+
import { C as CrudRequest } from './crud-request-DLo0ZuzD.mjs';
|
4
|
+
export { a as CrudRequestFields, c as CrudRequestOrder, b as CrudRequestRelation, d as CrudRequestWhere, e as CrudRequestWhereAND, g as CrudRequestWhereField, f as CrudRequestWhereOR, i as CrudRequestWhereOperator, h as CrudRequestWhereValueType, F as FieldPath, P as ParsedRequestSelect } from './crud-request-DLo0ZuzD.mjs';
|
5
|
+
export { C as CrudRequestWhereBuilder } from './crud-request-where.builder-CBx-JZhl.mjs';
|
6
|
+
|
7
|
+
/**
|
8
|
+
* Creates a CrudRequest object, filling required missing properties with empty values
|
9
|
+
*/
|
10
|
+
declare function createCrudRequest(crudRequest?: Partial<CrudRequest>): CrudRequest;
|
11
|
+
|
12
|
+
export { CrudRequest, createCrudRequest };
|
package/dist/index.d.ts
CHANGED
@@ -1,4 +1,12 @@
|
|
1
|
-
export { G as GetManyResult, Q as QueryAdapter } from './query-adapter-
|
2
|
-
export { R as RequestParamValue, a as RequestParser } from './request-parser-
|
3
|
-
|
4
|
-
export {
|
1
|
+
export { G as GetManyResult, Q as QueryAdapter } from './query-adapter-CZhPC1aq.js';
|
2
|
+
export { R as RequestParamValue, a as RequestParser } from './request-parser-Cr3cxMRw.js';
|
3
|
+
import { C as CrudRequest } from './crud-request-DLo0ZuzD.js';
|
4
|
+
export { a as CrudRequestFields, c as CrudRequestOrder, b as CrudRequestRelation, d as CrudRequestWhere, e as CrudRequestWhereAND, g as CrudRequestWhereField, f as CrudRequestWhereOR, i as CrudRequestWhereOperator, h as CrudRequestWhereValueType, F as FieldPath, P as ParsedRequestSelect } from './crud-request-DLo0ZuzD.js';
|
5
|
+
export { C as CrudRequestWhereBuilder } from './crud-request-where.builder-CqbP5LT9.js';
|
6
|
+
|
7
|
+
/**
|
8
|
+
* Creates a CrudRequest object, filling required missing properties with empty values
|
9
|
+
*/
|
10
|
+
declare function createCrudRequest(crudRequest?: Partial<CrudRequest>): CrudRequest;
|
11
|
+
|
12
|
+
export { CrudRequest, createCrudRequest };
|
package/dist/index.js
CHANGED
@@ -1,2 +1,2 @@
|
|
1
|
-
"use strict";var l=Object.defineProperty;var R=Object.getOwnPropertyDescriptor;var d=Object.getOwnPropertyNames;var E=Object.prototype.hasOwnProperty;var o=(r,e)=>l(r,"name",{value:e,configurable:!0});var
|
1
|
+
"use strict";var l=Object.defineProperty;var R=Object.getOwnPropertyDescriptor;var d=Object.getOwnPropertyNames;var E=Object.prototype.hasOwnProperty;var o=(r,e)=>l(r,"name",{value:e,configurable:!0});var y=(r,e)=>{for(var n in e)l(r,n,{get:e[n],enumerable:!0})},W=(r,e,n,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let u of d(e))!E.call(r,u)&&u!==n&&l(r,u,{get:()=>e[u],enumerable:!(i=R(e,u))||i.enumerable});return r};var N=r=>W(l({},"__esModule",{value:!0}),r);var V={};y(V,{CrudRequestWhereBuilder:()=>T,CrudRequestWhereOperator:()=>s,createCrudRequest:()=>I});module.exports=N(V);var s=(t=>(t.EQ="eq",t.NEQ="neq",t.GT="gt",t.GTE="gte",t.LT="lt",t.LTE="lte",t.STARTS="starts",t.ENDS="ends",t.CONTAINS="contains",t.NOT_CONTAINS="not_contains",t.IN="in",t.NOT_IN="not_in",t.BETWEEN="between",t.IS_NULL="is_null",t.NOT_NULL="not_null",t.EQ_LOWER="eq_lower",t.NEQ_LOWER="neq_lower",t.STARTS_LOWER="starts_lower",t.ENDS_LOWER="ends_lower",t.CONTAINS_LOWER="contains_lower",t.NOT_CONTAINS_LOWER="not_contains_lower",t.IN_LOWER="in_lower",t.NOT_IN_LOWER="not_in_lower",t))(s||{});function p(r,e){if(e==null||typeof e=="number"||typeof e=="string"||typeof e=="boolean"||e instanceof Date)return e;throw new Error(`${r} must be a string, number, boolean or null`)}o(p,"ensurePrimitiveOrNull");function a(r,e,n=0){if(!Array.isArray(e)||e.length<n)throw new Error(`${r} must be an array with at least ${n} items`);return e}o(a,"ensureArray");function h(r,e){if(c(e)&&e!==!0)throw new Error(`${r} must be true, null or undefined`)}o(h,"ensureEmpty");function c(r){return r!=null}o(c,"isValid");var m={eq:"primitive",neq:"primitive",gt:"primitive",lt:"primitive",gte:"primitive",lte:"primitive",starts:"primitive",ends:"primitive",contains:"primitive",not_contains:"primitive",in:"array",not_in:"array",between:"array",is_null:"empty",not_null:"empty",eq_lower:"primitive",neq_lower:"primitive",starts_lower:"primitive",ends_lower:"primitive",contains_lower:"primitive",not_contains_lower:"primitive",in_lower:"primitive",not_in_lower:"primitive"};function f(r){let e=m[r.operator],n="The value of the operator "+r.operator;if(e==="primitive"){p(n,r.value);return}if(e==="array"){a(n,r.value).forEach(u=>p(n+" children",u));return}if(e==="empty"){h(n,r.value);return}}o(f,"validateWhereField");var T=class r{constructor(e={and:[]},n){this.where=e;this.parent=n}static{o(this,"CrudRequestWhereBuilder")}addAnd(){if(!this.where.or)return this;let e={and:[]},n=new r(e,this);return this.where.or.push(e),n}addOr(){if(!this.where.and)return this;let e={or:[]},n=new r(e,this);return this.where.and.push(e),n}addField(e,n,i){let u={field:e,operator:n,value:i};if(f(u),this.where.and)this.where.and.push(u);else if(this.where.or)this.where.or.push(u);else throw new Error("Invalid where");return this}build(){return this.parent?this.parent.build():this.where}};function I(r){return{select:[],relations:[],order:[],where:{and:[]},...r}}o(I,"createCrudRequest");0&&(module.exports={CrudRequestWhereBuilder,CrudRequestWhereOperator,createCrudRequest});
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/models/crud-request-where.ts","../src/utils/functions.ts","../src/utils/where.ts","../src/utils/crud-request-where.builder.ts"],"sourcesContent":["// Models\r\nexport * from './models/query-adapter';\r\nexport * from './models/request-parser';\r\n\r\nexport * from './models/get-many-result';\r\nexport * from './models/field-path';\r\nexport * from './models/crud-request';\r\nexport * from './models/crud-request-where';\r\n\r\n// Utilities\r\nexport * from './utils/crud-request-where.builder';\r\n\r\n","import { FieldPath } from './field-path';\r\n\r\nexport type CrudRequestWhere = CrudRequestWhereAND | CrudRequestWhereOR | CrudRequestWhereField;\r\n\r\nexport interface CrudRequestWhereAND {\r\n field?: never;\r\n or?: never;\r\n and: CrudRequestWhere[];\r\n}\r\n\r\nexport interface CrudRequestWhereOR {\r\n field?: never;\r\n or: CrudRequestWhere[];\r\n and?: never;\r\n}\r\n\r\nexport interface CrudRequestWhereField {\r\n\r\n /**\r\n * Field path\r\n *\r\n * For post.category.name, this would be [\"post\", \"category\", \"name\"]\r\n */\r\n field: FieldPath;\r\n\r\n /**\r\n * The operator of the comparison\r\n */\r\n operator: CrudRequestWhereOperator;\r\n\r\n /**\r\n * The value to compare\r\n */\r\n value: CrudRequestWhereValueType | CrudRequestWhereValueType[];\r\n\r\n or?: never;\r\n and?: never;\r\n}\r\n\r\nexport type CrudRequestWhereValueType = string | number | boolean | Date | null | undefined;\r\n\r\nexport enum CrudRequestWhereOperator {\r\n EQ = 'eq',\r\n NEQ = 'neq',\r\n GT = 'gt',\r\n GTE = 'gte',\r\n LT = 'lt',\r\n LTE = 'lte',\r\n STARTS = 'starts',\r\n ENDS = 'ends',\r\n CONTAINS = 'contains',\r\n NOT_CONTAINS = 'not_contains',\r\n IN = 'in',\r\n NOT_IN = 'not_in',\r\n BETWEEN = 'between',\r\n IS_NULL = 'is_null',\r\n NOT_NULL = 'not_null',\r\n EQ_LOWER = 'eq_lower',\r\n NEQ_LOWER = 'neq_lower',\r\n STARTS_LOWER = 'starts_lower',\r\n ENDS_LOWER = 'ends_lower',\r\n CONTAINS_LOWER = 'contains_lower',\r\n NOT_CONTAINS_LOWER = 'not_contains_lower',\r\n IN_LOWER = 'in_lower',\r\n NOT_IN_LOWER = 'not_in_lower',\r\n}\r\n","import { CrudRequestFields } from '../models/crud-request';\r\n\r\n/*export function setFieldByPath<T>(obj: ParsedRequestFields<T>, field: string, value: T): void {\r\n const parts = field.split('.');\r\n\r\n while (parts.length > 1) {\r\n const name = parts.shift();\r\n\r\n if (!Array.isArray(obj[name]))\r\n obj[name] = {};\r\n\r\n obj = obj[name] as ParsedRequestFields<T>;\r\n }\r\n\r\n obj[parts.shift()] = value;\r\n}*/\r\n\r\nexport function ensurePrimitive(fieldName: string, data: any) {\r\n if (data === null || data === undefined)\r\n return;\r\n\r\n if (typeof data === 'number' || typeof data === 'string' || typeof data === 'boolean')\r\n return;\r\n\r\n if (data instanceof Date)\r\n return;\r\n\r\n throw new Error(`${fieldName} must be a string, number, boolean or null`);\r\n}\r\n\r\nexport function ensureArray<T>(fieldName: string, data: T[] | any, minLength: number = 0): T[] {\r\n if (!Array.isArray(data) || data.length < minLength)\r\n throw new Error(`${fieldName} must be an array with at least ${minLength} items`);\r\n\r\n return data;\r\n}\r\n\r\nexport function ensureFalsy(fieldName: string, data: any) {\r\n if (data)\r\n throw new Error(`${fieldName} must be null`);\r\n}\r\n\r\nexport function isValid<T>(value: T | undefined | null): value is T {\r\n return value !== null && value !== undefined;\r\n}\r\n","import { CrudRequestWhereField, CrudRequestWhereOperator } from '../models/crud-request-where';\r\nimport { ensureArray, ensureFalsy, ensurePrimitive } from './functions';\r\n\r\nexport enum WhereOperatorValueType {\r\n PRIMITIVE = 'primitive',\r\n ARRAY = 'array',\r\n EMPTY = 'empty'\r\n}\r\n\r\nconst operatorValueTypes: Record<CrudRequestWhereOperator, WhereOperatorValueType> = {\r\n [CrudRequestWhereOperator.EQ]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.NEQ]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.GT]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.LT]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.GTE]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.LTE]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.STARTS]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.ENDS]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.CONTAINS]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.NOT_CONTAINS]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.IN]: WhereOperatorValueType.ARRAY,\r\n [CrudRequestWhereOperator.NOT_IN]: WhereOperatorValueType.ARRAY,\r\n [CrudRequestWhereOperator.BETWEEN]: WhereOperatorValueType.ARRAY,\r\n [CrudRequestWhereOperator.IS_NULL]: WhereOperatorValueType.EMPTY,\r\n [CrudRequestWhereOperator.NOT_NULL]: WhereOperatorValueType.EMPTY,\r\n [CrudRequestWhereOperator.EQ_LOWER]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.NEQ_LOWER]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.STARTS_LOWER]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.ENDS_LOWER]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.CONTAINS_LOWER]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.NOT_CONTAINS_LOWER]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.IN_LOWER]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.NOT_IN_LOWER]: WhereOperatorValueType.PRIMITIVE,\r\n};\r\n\r\nexport function getWhereOperatorValueType(op: CrudRequestWhereOperator): WhereOperatorValueType {\r\n return operatorValueTypes[op];\r\n}\r\n\r\nexport function validateWhereField(where: CrudRequestWhereField): void {\r\n const type = operatorValueTypes[where.operator];\r\n const name = 'The value of the operator ' + where.operator;\r\n\r\n if (type === WhereOperatorValueType.PRIMITIVE) {\r\n ensurePrimitive(name, where.value);\r\n\r\n return;\r\n }\r\n\r\n if (type === WhereOperatorValueType.ARRAY) {\r\n const items = ensureArray(name, where.value);\r\n\r\n items.forEach(item => ensurePrimitive(name + ' children', item));\r\n\r\n return;\r\n }\r\n\r\n if (type === WhereOperatorValueType.EMPTY) {\r\n ensureFalsy(name, where.value);\r\n\r\n return;\r\n }\r\n}\r\n","import {\r\n CrudRequestWhere,\r\n CrudRequestWhereAND,\r\n CrudRequestWhereField,\r\n CrudRequestWhereOperator,\r\n CrudRequestWhereOR,\r\n CrudRequestWhereValueType\r\n} from '../models/crud-request-where';\r\nimport { validateWhereField } from './where';\r\n\r\n/**\r\n * A helper class that makes it easier to create a CrudRequestWhere\r\n */\r\nexport class CrudRequestWhereBuilder {\r\n\r\n constructor(\r\n private readonly where: CrudRequestWhereAND | CrudRequestWhereOR = { and: [] },\r\n private readonly parent?: CrudRequestWhereBuilder,\r\n ) { }\r\n\r\n /**\r\n * Adds an AND bracket\r\n */\r\n public addAnd(): CrudRequestWhereBuilder {\r\n if (!this.where.or) {\r\n return this;\r\n }\r\n\r\n const inside: CrudRequestWhereAND = { and: [] };\r\n const builder = new CrudRequestWhereBuilder(inside, this);\r\n\r\n this.where.or.push(inside);\r\n\r\n return builder;\r\n }\r\n\r\n /**\r\n * Adds an OR bracket\r\n */\r\n public addOr(): CrudRequestWhereBuilder {\r\n if (!this.where.and) {\r\n return this;\r\n }\r\n\r\n const inside: CrudRequestWhereOR = { or: [] };\r\n const builder = new CrudRequestWhereBuilder(inside, this);\r\n\r\n this.where.and.push(inside);\r\n\r\n return builder;\r\n }\r\n\r\n /**\r\n * Adds a field comparison\r\n *\r\n * @param field The field path\r\n * @param operator The comparison operator\r\n * @param value The value to compare\r\n */\r\n public addField(\r\n field: string[],\r\n operator: CrudRequestWhereOperator,\r\n value: CrudRequestWhereValueType | CrudRequestWhereValueType[],\r\n ): CrudRequestWhereBuilder {\r\n const whereField: CrudRequestWhereField = {\r\n field,\r\n operator,\r\n value,\r\n };\r\n\r\n validateWhereField(whereField);\r\n\r\n if (this.where.and) {\r\n this.where.and.push(whereField);\r\n } else if (this.where.or) {\r\n this.where.or.push(whereField);\r\n } else {\r\n throw new Error('Invalid where');\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Constructs the final where condition\r\n */\r\n public build(): CrudRequestWhere {\r\n if (this.parent) {\r\n return this.parent.build();\r\n }\r\n\r\n return this.where;\r\n }\r\n\r\n}\r\n"],"mappings":"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","names":["src_exports","__export","CrudRequestWhereBuilder","CrudRequestWhereOperator","__toCommonJS","CrudRequestWhereOperator","ensurePrimitive","fieldName","data","__name","ensureArray","minLength","ensureFalsy","operatorValueTypes","validateWhereField","where","type","operatorValueTypes","name","ensurePrimitive","ensureArray","item","ensureFalsy","__name","CrudRequestWhereBuilder","_CrudRequestWhereBuilder","where","parent","__name","inside","builder","field","operator","value","whereField","validateWhereField"]}
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/models/crud-request-where.ts","../src/utils/functions.ts","../src/utils/where.ts","../src/utils/crud-request-where.builder.ts","../src/utils/objects.ts"],"sourcesContent":["// Models\r\nexport * from './models/query-adapter';\r\nexport * from './models/request-parser';\r\n\r\nexport * from './models/get-many-result';\r\nexport * from './models/field-path';\r\nexport * from './models/crud-request';\r\nexport * from './models/crud-request-where';\r\n\r\n// Utilities\r\nexport * from './utils/crud-request-where.builder';\r\nexport { createCrudRequest } from './utils/objects';\r\n\r\n","import { FieldPath } from './field-path';\r\n\r\nexport type CrudRequestWhere = CrudRequestWhereAND | CrudRequestWhereOR | CrudRequestWhereField;\r\n\r\nexport interface CrudRequestWhereAND {\r\n field?: never;\r\n or?: never;\r\n and: CrudRequestWhere[];\r\n}\r\n\r\nexport interface CrudRequestWhereOR {\r\n field?: never;\r\n or: CrudRequestWhere[];\r\n and?: never;\r\n}\r\n\r\nexport interface CrudRequestWhereField {\r\n\r\n /**\r\n * Field path\r\n *\r\n * For post.category.name, this would be [\"post\", \"category\", \"name\"]\r\n */\r\n field: FieldPath;\r\n\r\n /**\r\n * The operator of the comparison\r\n */\r\n operator: CrudRequestWhereOperator;\r\n\r\n /**\r\n * The value to compare\r\n */\r\n value: CrudRequestWhereValueType | CrudRequestWhereValueType[];\r\n\r\n or?: never;\r\n and?: never;\r\n}\r\n\r\nexport type CrudRequestWhereValueType = string | number | boolean | Date | null | undefined;\r\n\r\nexport enum CrudRequestWhereOperator {\r\n EQ = 'eq',\r\n NEQ = 'neq',\r\n GT = 'gt',\r\n GTE = 'gte',\r\n LT = 'lt',\r\n LTE = 'lte',\r\n STARTS = 'starts',\r\n ENDS = 'ends',\r\n CONTAINS = 'contains',\r\n NOT_CONTAINS = 'not_contains',\r\n IN = 'in',\r\n NOT_IN = 'not_in',\r\n BETWEEN = 'between',\r\n IS_NULL = 'is_null',\r\n NOT_NULL = 'not_null',\r\n EQ_LOWER = 'eq_lower',\r\n NEQ_LOWER = 'neq_lower',\r\n STARTS_LOWER = 'starts_lower',\r\n ENDS_LOWER = 'ends_lower',\r\n CONTAINS_LOWER = 'contains_lower',\r\n NOT_CONTAINS_LOWER = 'not_contains_lower',\r\n IN_LOWER = 'in_lower',\r\n NOT_IN_LOWER = 'not_in_lower',\r\n}\r\n","export function ensurePrimitive(fieldName: string, data: any): number | string | boolean | Date {\r\n if (typeof data === 'number' || typeof data === 'string' || typeof data === 'boolean' || data instanceof Date)\r\n return data;\r\n\r\n throw new Error(`${fieldName} must be a string, number or boolean`);\r\n}\r\n\r\nexport function ensurePrimitiveOrNull(fieldName: string, data: any): number | string | boolean | Date | undefined | null {\r\n if (data === null || data === undefined)\r\n return data;\r\n\r\n if (typeof data === 'number' || typeof data === 'string' || typeof data === 'boolean' || data instanceof Date)\r\n return data;\r\n\r\n throw new Error(`${fieldName} must be a string, number, boolean or null`);\r\n}\r\n\r\nexport function ensureString(fieldName: string, data: any): string {\r\n if (typeof data === 'string')\r\n return data;\r\n\r\n throw new Error(`${fieldName} must be a string`);\r\n}\r\n\r\nexport function ensureArray<T>(fieldName: string, data: T[] | any, minLength: number = 0): T[] {\r\n if (!Array.isArray(data) || data.length < minLength)\r\n throw new Error(`${fieldName} must be an array with at least ${minLength} items`);\r\n\r\n return data;\r\n}\r\n\r\nexport function ensureEmpty(fieldName: string, data: any) {\r\n if (isValid(data) && data !== true)\r\n throw new Error(`${fieldName} must be true, null or undefined`);\r\n}\r\n\r\nexport function isValid<T>(value: T | undefined | null): value is T {\r\n return value !== null && value !== undefined;\r\n}\r\n\r\nexport function getOffset(offset: number | undefined, limit?: number, page?: number): number {\r\n return offset ?? (limit && page ? limit * (page - 1) : 0);\r\n}\r\n\r\nexport interface Type<T> extends Function { new (... args: any[]): T; }\r\n\r\nexport function createInstance<T extends object>(clazzOrInstance: T | Type<T> | undefined): T | undefined {\r\n if (typeof clazzOrInstance === 'function')\r\n return new clazzOrInstance();\r\n\r\n if (typeof clazzOrInstance === 'object')\r\n return clazzOrInstance as T;\r\n\r\n return undefined;\r\n}\r\n\r\nexport function escapeRegex(str: string): string {\r\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\r\n}\r\n","import { CrudRequestWhereField, CrudRequestWhereOperator } from '../models/crud-request-where';\r\nimport { ensureArray, ensureEmpty, ensurePrimitiveOrNull } from './functions';\r\n\r\nexport enum WhereOperatorValueType {\r\n PRIMITIVE = 'primitive',\r\n ARRAY = 'array',\r\n EMPTY = 'empty'\r\n}\r\n\r\nconst operatorValueTypes: Record<CrudRequestWhereOperator, WhereOperatorValueType> = {\r\n [CrudRequestWhereOperator.EQ]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.NEQ]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.GT]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.LT]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.GTE]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.LTE]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.STARTS]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.ENDS]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.CONTAINS]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.NOT_CONTAINS]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.IN]: WhereOperatorValueType.ARRAY,\r\n [CrudRequestWhereOperator.NOT_IN]: WhereOperatorValueType.ARRAY,\r\n [CrudRequestWhereOperator.BETWEEN]: WhereOperatorValueType.ARRAY,\r\n [CrudRequestWhereOperator.IS_NULL]: WhereOperatorValueType.EMPTY,\r\n [CrudRequestWhereOperator.NOT_NULL]: WhereOperatorValueType.EMPTY,\r\n [CrudRequestWhereOperator.EQ_LOWER]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.NEQ_LOWER]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.STARTS_LOWER]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.ENDS_LOWER]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.CONTAINS_LOWER]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.NOT_CONTAINS_LOWER]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.IN_LOWER]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.NOT_IN_LOWER]: WhereOperatorValueType.PRIMITIVE,\r\n};\r\n\r\nexport function validateWhereField(where: CrudRequestWhereField): void {\r\n const type = operatorValueTypes[where.operator];\r\n const name = 'The value of the operator ' + where.operator;\r\n\r\n if (type === WhereOperatorValueType.PRIMITIVE) {\r\n ensurePrimitiveOrNull(name, where.value);\r\n\r\n return;\r\n }\r\n\r\n if (type === WhereOperatorValueType.ARRAY) {\r\n const items = ensureArray(name, where.value);\r\n\r\n items.forEach(item => ensurePrimitiveOrNull(name + ' children', item));\r\n\r\n return;\r\n }\r\n\r\n if (type === WhereOperatorValueType.EMPTY) {\r\n ensureEmpty(name, where.value);\r\n\r\n return;\r\n }\r\n}\r\n","import {\r\n CrudRequestWhere,\r\n CrudRequestWhereAND,\r\n CrudRequestWhereField,\r\n CrudRequestWhereOperator,\r\n CrudRequestWhereOR,\r\n CrudRequestWhereValueType\r\n} from '../models/crud-request-where';\r\nimport { validateWhereField } from './where';\r\n\r\n/**\r\n * A helper class that makes it easier to create a CrudRequestWhere\r\n */\r\nexport class CrudRequestWhereBuilder {\r\n\r\n constructor(\r\n private readonly where: CrudRequestWhereAND | CrudRequestWhereOR = { and: [] },\r\n private readonly parent?: CrudRequestWhereBuilder,\r\n ) { }\r\n\r\n /**\r\n * Adds an AND bracket\r\n */\r\n public addAnd(): CrudRequestWhereBuilder {\r\n if (!this.where.or) {\r\n return this;\r\n }\r\n\r\n const inside: CrudRequestWhereAND = { and: [] };\r\n const builder = new CrudRequestWhereBuilder(inside, this);\r\n\r\n this.where.or.push(inside);\r\n\r\n return builder;\r\n }\r\n\r\n /**\r\n * Adds an OR bracket\r\n */\r\n public addOr(): CrudRequestWhereBuilder {\r\n if (!this.where.and) {\r\n return this;\r\n }\r\n\r\n const inside: CrudRequestWhereOR = { or: [] };\r\n const builder = new CrudRequestWhereBuilder(inside, this);\r\n\r\n this.where.and.push(inside);\r\n\r\n return builder;\r\n }\r\n\r\n /**\r\n * Adds a field comparison\r\n *\r\n * @param field The field path\r\n * @param operator The comparison operator\r\n * @param value The value to compare\r\n */\r\n public addField(\r\n field: string[],\r\n operator: CrudRequestWhereOperator,\r\n value: CrudRequestWhereValueType | CrudRequestWhereValueType[],\r\n ): CrudRequestWhereBuilder {\r\n const whereField: CrudRequestWhereField = {\r\n field,\r\n operator,\r\n value,\r\n };\r\n\r\n validateWhereField(whereField);\r\n\r\n if (this.where.and) {\r\n this.where.and.push(whereField);\r\n } else if (this.where.or) {\r\n this.where.or.push(whereField);\r\n } else {\r\n throw new Error('Invalid where');\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Constructs the final where condition\r\n */\r\n public build(): CrudRequestWhere {\r\n if (this.parent) {\r\n return this.parent.build();\r\n }\r\n\r\n return this.where;\r\n }\r\n\r\n}\r\n","import { GetManyResult } from '../models/get-many-result';\r\nimport { CrudRequest } from '../models/crud-request';\r\n\r\n/**\r\n * Creates a CrudRequest object, filling required missing properties with empty values\r\n */\r\nexport function createCrudRequest(crudRequest?: Partial<CrudRequest>): CrudRequest {\r\n return {\r\n select: [],\r\n relations: [],\r\n order: [],\r\n where: { and: [] },\r\n ...crudRequest,\r\n };\r\n}\r\n\r\n/**\r\n * Creates a GetManyResult object\r\n *\r\n * @param data The entity list to be returned\r\n * @param total The total amount of entities in the database\r\n * @param offset The offset used for querying\r\n * @param limit The limit used for querying\r\n */\r\nexport function createGetManyResult<T>(data: T[], total: number, offset: number, limit?: number): GetManyResult<T> {\r\n const count = data.length;\r\n const actualLimit = limit ?? total;\r\n const page = actualLimit > 0 ? Math.floor(offset / actualLimit) + 1 : 1;\r\n const pageCount = actualLimit > 0 ? Math.ceil(total / actualLimit) : 0;\r\n\r\n return {\r\n data,\r\n count,\r\n total,\r\n page,\r\n pageCount,\r\n };\r\n}\r\n"],"mappings":"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","names":["src_exports","__export","CrudRequestWhereBuilder","CrudRequestWhereOperator","createCrudRequest","__toCommonJS","CrudRequestWhereOperator","ensurePrimitiveOrNull","fieldName","data","__name","ensureArray","fieldName","data","minLength","__name","ensureEmpty","isValid","value","operatorValueTypes","validateWhereField","where","type","name","ensurePrimitiveOrNull","ensureArray","item","ensureEmpty","__name","CrudRequestWhereBuilder","_CrudRequestWhereBuilder","where","parent","__name","inside","builder","field","operator","value","whereField","validateWhereField","createCrudRequest","crudRequest","__name"]}
|
package/dist/index.mjs
CHANGED
@@ -1,2 +1,2 @@
|
|
1
|
-
var
|
1
|
+
var f=Object.defineProperty;var u=(t,e)=>f(t,"name",{value:e,configurable:!0});var s=(r=>(r.EQ="eq",r.NEQ="neq",r.GT="gt",r.GTE="gte",r.LT="lt",r.LTE="lte",r.STARTS="starts",r.ENDS="ends",r.CONTAINS="contains",r.NOT_CONTAINS="not_contains",r.IN="in",r.NOT_IN="not_in",r.BETWEEN="between",r.IS_NULL="is_null",r.NOT_NULL="not_null",r.EQ_LOWER="eq_lower",r.NEQ_LOWER="neq_lower",r.STARTS_LOWER="starts_lower",r.ENDS_LOWER="ends_lower",r.CONTAINS_LOWER="contains_lower",r.NOT_CONTAINS_LOWER="not_contains_lower",r.IN_LOWER="in_lower",r.NOT_IN_LOWER="not_in_lower",r))(s||{});function i(t,e){if(e==null||typeof e=="number"||typeof e=="string"||typeof e=="boolean"||e instanceof Date)return e;throw new Error(`${t} must be a string, number, boolean or null`)}u(i,"ensurePrimitiveOrNull");function p(t,e,n=0){if(!Array.isArray(e)||e.length<n)throw new Error(`${t} must be an array with at least ${n} items`);return e}u(p,"ensureArray");function T(t,e){if(I(e)&&e!==!0)throw new Error(`${t} must be true, null or undefined`)}u(T,"ensureEmpty");function I(t){return t!=null}u(I,"isValid");var R={eq:"primitive",neq:"primitive",gt:"primitive",lt:"primitive",gte:"primitive",lte:"primitive",starts:"primitive",ends:"primitive",contains:"primitive",not_contains:"primitive",in:"array",not_in:"array",between:"array",is_null:"empty",not_null:"empty",eq_lower:"primitive",neq_lower:"primitive",starts_lower:"primitive",ends_lower:"primitive",contains_lower:"primitive",not_contains_lower:"primitive",in_lower:"primitive",not_in_lower:"primitive"};function a(t){let e=R[t.operator],n="The value of the operator "+t.operator;if(e==="primitive"){i(n,t.value);return}if(e==="array"){p(n,t.value).forEach(o=>i(n+" children",o));return}if(e==="empty"){T(n,t.value);return}}u(a,"validateWhereField");var h=class t{constructor(e={and:[]},n){this.where=e;this.parent=n}static{u(this,"CrudRequestWhereBuilder")}addAnd(){if(!this.where.or)return this;let e={and:[]},n=new t(e,this);return this.where.or.push(e),n}addOr(){if(!this.where.and)return this;let e={or:[]},n=new t(e,this);return this.where.and.push(e),n}addField(e,n,l){let o={field:e,operator:n,value:l};if(a(o),this.where.and)this.where.and.push(o);else if(this.where.or)this.where.or.push(o);else throw new Error("Invalid where");return this}build(){return this.parent?this.parent.build():this.where}};function d(t){return{select:[],relations:[],order:[],where:{and:[]},...t}}u(d,"createCrudRequest");export{h as CrudRequestWhereBuilder,s as CrudRequestWhereOperator,d as createCrudRequest};
|
2
2
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../src/models/crud-request-where.ts","../src/utils/functions.ts","../src/utils/where.ts","../src/utils/crud-request-where.builder.ts"],"sourcesContent":["import { FieldPath } from './field-path';\r\n\r\nexport type CrudRequestWhere = CrudRequestWhereAND | CrudRequestWhereOR | CrudRequestWhereField;\r\n\r\nexport interface CrudRequestWhereAND {\r\n field?: never;\r\n or?: never;\r\n and: CrudRequestWhere[];\r\n}\r\n\r\nexport interface CrudRequestWhereOR {\r\n field?: never;\r\n or: CrudRequestWhere[];\r\n and?: never;\r\n}\r\n\r\nexport interface CrudRequestWhereField {\r\n\r\n /**\r\n * Field path\r\n *\r\n * For post.category.name, this would be [\"post\", \"category\", \"name\"]\r\n */\r\n field: FieldPath;\r\n\r\n /**\r\n * The operator of the comparison\r\n */\r\n operator: CrudRequestWhereOperator;\r\n\r\n /**\r\n * The value to compare\r\n */\r\n value: CrudRequestWhereValueType | CrudRequestWhereValueType[];\r\n\r\n or?: never;\r\n and?: never;\r\n}\r\n\r\nexport type CrudRequestWhereValueType = string | number | boolean | Date | null | undefined;\r\n\r\nexport enum CrudRequestWhereOperator {\r\n EQ = 'eq',\r\n NEQ = 'neq',\r\n GT = 'gt',\r\n GTE = 'gte',\r\n LT = 'lt',\r\n LTE = 'lte',\r\n STARTS = 'starts',\r\n ENDS = 'ends',\r\n CONTAINS = 'contains',\r\n NOT_CONTAINS = 'not_contains',\r\n IN = 'in',\r\n NOT_IN = 'not_in',\r\n BETWEEN = 'between',\r\n IS_NULL = 'is_null',\r\n NOT_NULL = 'not_null',\r\n EQ_LOWER = 'eq_lower',\r\n NEQ_LOWER = 'neq_lower',\r\n STARTS_LOWER = 'starts_lower',\r\n ENDS_LOWER = 'ends_lower',\r\n CONTAINS_LOWER = 'contains_lower',\r\n NOT_CONTAINS_LOWER = 'not_contains_lower',\r\n IN_LOWER = 'in_lower',\r\n NOT_IN_LOWER = 'not_in_lower',\r\n}\r\n","import { CrudRequestFields } from '../models/crud-request';\r\n\r\n/*export function setFieldByPath<T>(obj: ParsedRequestFields<T>, field: string, value: T): void {\r\n const parts = field.split('.');\r\n\r\n while (parts.length > 1) {\r\n const name = parts.shift();\r\n\r\n if (!Array.isArray(obj[name]))\r\n obj[name] = {};\r\n\r\n obj = obj[name] as ParsedRequestFields<T>;\r\n }\r\n\r\n obj[parts.shift()] = value;\r\n}*/\r\n\r\nexport function ensurePrimitive(fieldName: string, data: any) {\r\n if (data === null || data === undefined)\r\n return;\r\n\r\n if (typeof data === 'number' || typeof data === 'string' || typeof data === 'boolean')\r\n return;\r\n\r\n if (data instanceof Date)\r\n return;\r\n\r\n throw new Error(`${fieldName} must be a string, number, boolean or null`);\r\n}\r\n\r\nexport function ensureArray<T>(fieldName: string, data: T[] | any, minLength: number = 0): T[] {\r\n if (!Array.isArray(data) || data.length < minLength)\r\n throw new Error(`${fieldName} must be an array with at least ${minLength} items`);\r\n\r\n return data;\r\n}\r\n\r\nexport function ensureFalsy(fieldName: string, data: any) {\r\n if (data)\r\n throw new Error(`${fieldName} must be null`);\r\n}\r\n\r\nexport function isValid<T>(value: T | undefined | null): value is T {\r\n return value !== null && value !== undefined;\r\n}\r\n","import { CrudRequestWhereField, CrudRequestWhereOperator } from '../models/crud-request-where';\r\nimport { ensureArray, ensureFalsy, ensurePrimitive } from './functions';\r\n\r\nexport enum WhereOperatorValueType {\r\n PRIMITIVE = 'primitive',\r\n ARRAY = 'array',\r\n EMPTY = 'empty'\r\n}\r\n\r\nconst operatorValueTypes: Record<CrudRequestWhereOperator, WhereOperatorValueType> = {\r\n [CrudRequestWhereOperator.EQ]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.NEQ]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.GT]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.LT]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.GTE]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.LTE]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.STARTS]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.ENDS]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.CONTAINS]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.NOT_CONTAINS]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.IN]: WhereOperatorValueType.ARRAY,\r\n [CrudRequestWhereOperator.NOT_IN]: WhereOperatorValueType.ARRAY,\r\n [CrudRequestWhereOperator.BETWEEN]: WhereOperatorValueType.ARRAY,\r\n [CrudRequestWhereOperator.IS_NULL]: WhereOperatorValueType.EMPTY,\r\n [CrudRequestWhereOperator.NOT_NULL]: WhereOperatorValueType.EMPTY,\r\n [CrudRequestWhereOperator.EQ_LOWER]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.NEQ_LOWER]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.STARTS_LOWER]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.ENDS_LOWER]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.CONTAINS_LOWER]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.NOT_CONTAINS_LOWER]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.IN_LOWER]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.NOT_IN_LOWER]: WhereOperatorValueType.PRIMITIVE,\r\n};\r\n\r\nexport function getWhereOperatorValueType(op: CrudRequestWhereOperator): WhereOperatorValueType {\r\n return operatorValueTypes[op];\r\n}\r\n\r\nexport function validateWhereField(where: CrudRequestWhereField): void {\r\n const type = operatorValueTypes[where.operator];\r\n const name = 'The value of the operator ' + where.operator;\r\n\r\n if (type === WhereOperatorValueType.PRIMITIVE) {\r\n ensurePrimitive(name, where.value);\r\n\r\n return;\r\n }\r\n\r\n if (type === WhereOperatorValueType.ARRAY) {\r\n const items = ensureArray(name, where.value);\r\n\r\n items.forEach(item => ensurePrimitive(name + ' children', item));\r\n\r\n return;\r\n }\r\n\r\n if (type === WhereOperatorValueType.EMPTY) {\r\n ensureFalsy(name, where.value);\r\n\r\n return;\r\n }\r\n}\r\n","import {\r\n CrudRequestWhere,\r\n CrudRequestWhereAND,\r\n CrudRequestWhereField,\r\n CrudRequestWhereOperator,\r\n CrudRequestWhereOR,\r\n CrudRequestWhereValueType\r\n} from '../models/crud-request-where';\r\nimport { validateWhereField } from './where';\r\n\r\n/**\r\n * A helper class that makes it easier to create a CrudRequestWhere\r\n */\r\nexport class CrudRequestWhereBuilder {\r\n\r\n constructor(\r\n private readonly where: CrudRequestWhereAND | CrudRequestWhereOR = { and: [] },\r\n private readonly parent?: CrudRequestWhereBuilder,\r\n ) { }\r\n\r\n /**\r\n * Adds an AND bracket\r\n */\r\n public addAnd(): CrudRequestWhereBuilder {\r\n if (!this.where.or) {\r\n return this;\r\n }\r\n\r\n const inside: CrudRequestWhereAND = { and: [] };\r\n const builder = new CrudRequestWhereBuilder(inside, this);\r\n\r\n this.where.or.push(inside);\r\n\r\n return builder;\r\n }\r\n\r\n /**\r\n * Adds an OR bracket\r\n */\r\n public addOr(): CrudRequestWhereBuilder {\r\n if (!this.where.and) {\r\n return this;\r\n }\r\n\r\n const inside: CrudRequestWhereOR = { or: [] };\r\n const builder = new CrudRequestWhereBuilder(inside, this);\r\n\r\n this.where.and.push(inside);\r\n\r\n return builder;\r\n }\r\n\r\n /**\r\n * Adds a field comparison\r\n *\r\n * @param field The field path\r\n * @param operator The comparison operator\r\n * @param value The value to compare\r\n */\r\n public addField(\r\n field: string[],\r\n operator: CrudRequestWhereOperator,\r\n value: CrudRequestWhereValueType | CrudRequestWhereValueType[],\r\n ): CrudRequestWhereBuilder {\r\n const whereField: CrudRequestWhereField = {\r\n field,\r\n operator,\r\n value,\r\n };\r\n\r\n validateWhereField(whereField);\r\n\r\n if (this.where.and) {\r\n this.where.and.push(whereField);\r\n } else if (this.where.or) {\r\n this.where.or.push(whereField);\r\n } else {\r\n throw new Error('Invalid where');\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Constructs the final where condition\r\n */\r\n public build(): CrudRequestWhere {\r\n if (this.parent) {\r\n return this.parent.build();\r\n }\r\n\r\n return this.where;\r\n }\r\n\r\n}\r\n"],"mappings":"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","names":["CrudRequestWhereOperator","ensurePrimitive","fieldName","data","__name","ensureArray","minLength","ensureFalsy","operatorValueTypes","validateWhereField","where","type","operatorValueTypes","name","ensurePrimitive","ensureArray","item","ensureFalsy","__name","CrudRequestWhereBuilder","_CrudRequestWhereBuilder","where","parent","__name","inside","builder","field","operator","value","whereField","validateWhereField"]}
|
1
|
+
{"version":3,"sources":["../src/models/crud-request-where.ts","../src/utils/functions.ts","../src/utils/where.ts","../src/utils/crud-request-where.builder.ts","../src/utils/objects.ts"],"sourcesContent":["import { FieldPath } from './field-path';\r\n\r\nexport type CrudRequestWhere = CrudRequestWhereAND | CrudRequestWhereOR | CrudRequestWhereField;\r\n\r\nexport interface CrudRequestWhereAND {\r\n field?: never;\r\n or?: never;\r\n and: CrudRequestWhere[];\r\n}\r\n\r\nexport interface CrudRequestWhereOR {\r\n field?: never;\r\n or: CrudRequestWhere[];\r\n and?: never;\r\n}\r\n\r\nexport interface CrudRequestWhereField {\r\n\r\n /**\r\n * Field path\r\n *\r\n * For post.category.name, this would be [\"post\", \"category\", \"name\"]\r\n */\r\n field: FieldPath;\r\n\r\n /**\r\n * The operator of the comparison\r\n */\r\n operator: CrudRequestWhereOperator;\r\n\r\n /**\r\n * The value to compare\r\n */\r\n value: CrudRequestWhereValueType | CrudRequestWhereValueType[];\r\n\r\n or?: never;\r\n and?: never;\r\n}\r\n\r\nexport type CrudRequestWhereValueType = string | number | boolean | Date | null | undefined;\r\n\r\nexport enum CrudRequestWhereOperator {\r\n EQ = 'eq',\r\n NEQ = 'neq',\r\n GT = 'gt',\r\n GTE = 'gte',\r\n LT = 'lt',\r\n LTE = 'lte',\r\n STARTS = 'starts',\r\n ENDS = 'ends',\r\n CONTAINS = 'contains',\r\n NOT_CONTAINS = 'not_contains',\r\n IN = 'in',\r\n NOT_IN = 'not_in',\r\n BETWEEN = 'between',\r\n IS_NULL = 'is_null',\r\n NOT_NULL = 'not_null',\r\n EQ_LOWER = 'eq_lower',\r\n NEQ_LOWER = 'neq_lower',\r\n STARTS_LOWER = 'starts_lower',\r\n ENDS_LOWER = 'ends_lower',\r\n CONTAINS_LOWER = 'contains_lower',\r\n NOT_CONTAINS_LOWER = 'not_contains_lower',\r\n IN_LOWER = 'in_lower',\r\n NOT_IN_LOWER = 'not_in_lower',\r\n}\r\n","export function ensurePrimitive(fieldName: string, data: any): number | string | boolean | Date {\r\n if (typeof data === 'number' || typeof data === 'string' || typeof data === 'boolean' || data instanceof Date)\r\n return data;\r\n\r\n throw new Error(`${fieldName} must be a string, number or boolean`);\r\n}\r\n\r\nexport function ensurePrimitiveOrNull(fieldName: string, data: any): number | string | boolean | Date | undefined | null {\r\n if (data === null || data === undefined)\r\n return data;\r\n\r\n if (typeof data === 'number' || typeof data === 'string' || typeof data === 'boolean' || data instanceof Date)\r\n return data;\r\n\r\n throw new Error(`${fieldName} must be a string, number, boolean or null`);\r\n}\r\n\r\nexport function ensureString(fieldName: string, data: any): string {\r\n if (typeof data === 'string')\r\n return data;\r\n\r\n throw new Error(`${fieldName} must be a string`);\r\n}\r\n\r\nexport function ensureArray<T>(fieldName: string, data: T[] | any, minLength: number = 0): T[] {\r\n if (!Array.isArray(data) || data.length < minLength)\r\n throw new Error(`${fieldName} must be an array with at least ${minLength} items`);\r\n\r\n return data;\r\n}\r\n\r\nexport function ensureEmpty(fieldName: string, data: any) {\r\n if (isValid(data) && data !== true)\r\n throw new Error(`${fieldName} must be true, null or undefined`);\r\n}\r\n\r\nexport function isValid<T>(value: T | undefined | null): value is T {\r\n return value !== null && value !== undefined;\r\n}\r\n\r\nexport function getOffset(offset: number | undefined, limit?: number, page?: number): number {\r\n return offset ?? (limit && page ? limit * (page - 1) : 0);\r\n}\r\n\r\nexport interface Type<T> extends Function { new (... args: any[]): T; }\r\n\r\nexport function createInstance<T extends object>(clazzOrInstance: T | Type<T> | undefined): T | undefined {\r\n if (typeof clazzOrInstance === 'function')\r\n return new clazzOrInstance();\r\n\r\n if (typeof clazzOrInstance === 'object')\r\n return clazzOrInstance as T;\r\n\r\n return undefined;\r\n}\r\n\r\nexport function escapeRegex(str: string): string {\r\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\r\n}\r\n","import { CrudRequestWhereField, CrudRequestWhereOperator } from '../models/crud-request-where';\r\nimport { ensureArray, ensureEmpty, ensurePrimitiveOrNull } from './functions';\r\n\r\nexport enum WhereOperatorValueType {\r\n PRIMITIVE = 'primitive',\r\n ARRAY = 'array',\r\n EMPTY = 'empty'\r\n}\r\n\r\nconst operatorValueTypes: Record<CrudRequestWhereOperator, WhereOperatorValueType> = {\r\n [CrudRequestWhereOperator.EQ]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.NEQ]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.GT]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.LT]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.GTE]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.LTE]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.STARTS]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.ENDS]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.CONTAINS]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.NOT_CONTAINS]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.IN]: WhereOperatorValueType.ARRAY,\r\n [CrudRequestWhereOperator.NOT_IN]: WhereOperatorValueType.ARRAY,\r\n [CrudRequestWhereOperator.BETWEEN]: WhereOperatorValueType.ARRAY,\r\n [CrudRequestWhereOperator.IS_NULL]: WhereOperatorValueType.EMPTY,\r\n [CrudRequestWhereOperator.NOT_NULL]: WhereOperatorValueType.EMPTY,\r\n [CrudRequestWhereOperator.EQ_LOWER]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.NEQ_LOWER]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.STARTS_LOWER]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.ENDS_LOWER]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.CONTAINS_LOWER]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.NOT_CONTAINS_LOWER]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.IN_LOWER]: WhereOperatorValueType.PRIMITIVE,\r\n [CrudRequestWhereOperator.NOT_IN_LOWER]: WhereOperatorValueType.PRIMITIVE,\r\n};\r\n\r\nexport function validateWhereField(where: CrudRequestWhereField): void {\r\n const type = operatorValueTypes[where.operator];\r\n const name = 'The value of the operator ' + where.operator;\r\n\r\n if (type === WhereOperatorValueType.PRIMITIVE) {\r\n ensurePrimitiveOrNull(name, where.value);\r\n\r\n return;\r\n }\r\n\r\n if (type === WhereOperatorValueType.ARRAY) {\r\n const items = ensureArray(name, where.value);\r\n\r\n items.forEach(item => ensurePrimitiveOrNull(name + ' children', item));\r\n\r\n return;\r\n }\r\n\r\n if (type === WhereOperatorValueType.EMPTY) {\r\n ensureEmpty(name, where.value);\r\n\r\n return;\r\n }\r\n}\r\n","import {\r\n CrudRequestWhere,\r\n CrudRequestWhereAND,\r\n CrudRequestWhereField,\r\n CrudRequestWhereOperator,\r\n CrudRequestWhereOR,\r\n CrudRequestWhereValueType\r\n} from '../models/crud-request-where';\r\nimport { validateWhereField } from './where';\r\n\r\n/**\r\n * A helper class that makes it easier to create a CrudRequestWhere\r\n */\r\nexport class CrudRequestWhereBuilder {\r\n\r\n constructor(\r\n private readonly where: CrudRequestWhereAND | CrudRequestWhereOR = { and: [] },\r\n private readonly parent?: CrudRequestWhereBuilder,\r\n ) { }\r\n\r\n /**\r\n * Adds an AND bracket\r\n */\r\n public addAnd(): CrudRequestWhereBuilder {\r\n if (!this.where.or) {\r\n return this;\r\n }\r\n\r\n const inside: CrudRequestWhereAND = { and: [] };\r\n const builder = new CrudRequestWhereBuilder(inside, this);\r\n\r\n this.where.or.push(inside);\r\n\r\n return builder;\r\n }\r\n\r\n /**\r\n * Adds an OR bracket\r\n */\r\n public addOr(): CrudRequestWhereBuilder {\r\n if (!this.where.and) {\r\n return this;\r\n }\r\n\r\n const inside: CrudRequestWhereOR = { or: [] };\r\n const builder = new CrudRequestWhereBuilder(inside, this);\r\n\r\n this.where.and.push(inside);\r\n\r\n return builder;\r\n }\r\n\r\n /**\r\n * Adds a field comparison\r\n *\r\n * @param field The field path\r\n * @param operator The comparison operator\r\n * @param value The value to compare\r\n */\r\n public addField(\r\n field: string[],\r\n operator: CrudRequestWhereOperator,\r\n value: CrudRequestWhereValueType | CrudRequestWhereValueType[],\r\n ): CrudRequestWhereBuilder {\r\n const whereField: CrudRequestWhereField = {\r\n field,\r\n operator,\r\n value,\r\n };\r\n\r\n validateWhereField(whereField);\r\n\r\n if (this.where.and) {\r\n this.where.and.push(whereField);\r\n } else if (this.where.or) {\r\n this.where.or.push(whereField);\r\n } else {\r\n throw new Error('Invalid where');\r\n }\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Constructs the final where condition\r\n */\r\n public build(): CrudRequestWhere {\r\n if (this.parent) {\r\n return this.parent.build();\r\n }\r\n\r\n return this.where;\r\n }\r\n\r\n}\r\n","import { GetManyResult } from '../models/get-many-result';\r\nimport { CrudRequest } from '../models/crud-request';\r\n\r\n/**\r\n * Creates a CrudRequest object, filling required missing properties with empty values\r\n */\r\nexport function createCrudRequest(crudRequest?: Partial<CrudRequest>): CrudRequest {\r\n return {\r\n select: [],\r\n relations: [],\r\n order: [],\r\n where: { and: [] },\r\n ...crudRequest,\r\n };\r\n}\r\n\r\n/**\r\n * Creates a GetManyResult object\r\n *\r\n * @param data The entity list to be returned\r\n * @param total The total amount of entities in the database\r\n * @param offset The offset used for querying\r\n * @param limit The limit used for querying\r\n */\r\nexport function createGetManyResult<T>(data: T[], total: number, offset: number, limit?: number): GetManyResult<T> {\r\n const count = data.length;\r\n const actualLimit = limit ?? total;\r\n const page = actualLimit > 0 ? Math.floor(offset / actualLimit) + 1 : 1;\r\n const pageCount = actualLimit > 0 ? Math.ceil(total / actualLimit) : 0;\r\n\r\n return {\r\n data,\r\n count,\r\n total,\r\n page,\r\n pageCount,\r\n };\r\n}\r\n"],"mappings":"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","names":["CrudRequestWhereOperator","ensurePrimitiveOrNull","fieldName","data","__name","ensureArray","fieldName","data","minLength","__name","ensureEmpty","isValid","value","operatorValueTypes","validateWhereField","where","type","name","ensurePrimitiveOrNull","ensureArray","item","ensureEmpty","__name","CrudRequestWhereBuilder","_CrudRequestWhereBuilder","where","parent","__name","inside","builder","field","operator","value","whereField","validateWhereField","createCrudRequest","crudRequest","__name"]}
|
@@ -1,23 +1,86 @@
|
|
1
|
-
import { a as RequestParser, O as OpenAPIParameter, R as RequestParamValue } from '../../request-parser-
|
2
|
-
import {
|
3
|
-
import { C as CrudRequestWhereBuilder } from '../../crud-request-where.builder-
|
1
|
+
import { a as RequestParser, O as OpenAPIParameter, R as RequestParamValue } from '../../request-parser-DzuXbRsB.mjs';
|
2
|
+
import { C as CrudRequest, P as ParsedRequestSelect, b as CrudRequestRelation, c as CrudRequestOrder } from '../../crud-request-DLo0ZuzD.mjs';
|
3
|
+
import { C as CrudRequestWhereBuilder } from '../../crud-request-where.builder-CBx-JZhl.mjs';
|
4
4
|
|
5
|
+
interface CrudRequestParserOptions {
|
6
|
+
/**
|
7
|
+
* Whether the `fields` and `select` parameters will be disabled
|
8
|
+
*/
|
9
|
+
disableSelect?: boolean;
|
10
|
+
/**
|
11
|
+
* Whether the `s`, `filter` and `or` parameters will be disabled
|
12
|
+
*/
|
13
|
+
disableWhere?: boolean;
|
14
|
+
/**
|
15
|
+
* Whether the `sort` parameter will be disabled
|
16
|
+
*/
|
17
|
+
disableOrder?: boolean;
|
18
|
+
/**
|
19
|
+
* Whether the `join` parameter will be disabled
|
20
|
+
*/
|
21
|
+
disableRelations?: boolean;
|
22
|
+
/**
|
23
|
+
* Whether the `limit` and `per_page` parameters will be disabled
|
24
|
+
*/
|
25
|
+
disableLimit?: boolean;
|
26
|
+
/**
|
27
|
+
* Whether the `offset` and `page` parameters will be disabled
|
28
|
+
*/
|
29
|
+
disableOffset?: boolean;
|
30
|
+
}
|
5
31
|
/**
|
6
32
|
* Parses a request based on the @nestjsx/crud format.
|
7
33
|
*/
|
8
34
|
declare class CrudRequestParser implements RequestParser {
|
35
|
+
protected readonly options: CrudRequestParserOptions;
|
36
|
+
constructor(options?: CrudRequestParserOptions);
|
37
|
+
/**
|
38
|
+
* @inheritDoc
|
39
|
+
*/
|
9
40
|
getOpenAPIParameters(): OpenAPIParameter[];
|
10
|
-
|
41
|
+
/**
|
42
|
+
* @inheritDoc
|
43
|
+
*/
|
44
|
+
parse(query: Record<string, RequestParamValue> | URLSearchParams): CrudRequest;
|
45
|
+
/**
|
46
|
+
* Parses the select query parameter
|
47
|
+
*
|
48
|
+
* @param select The parsed select array
|
49
|
+
* @param rawSelect The query parameter
|
50
|
+
*/
|
11
51
|
protected parseSelect(select: ParsedRequestSelect, rawSelect: RequestParamValue): void;
|
52
|
+
/**
|
53
|
+
* Parses the join query parameter
|
54
|
+
*
|
55
|
+
* @param requestFields The parsed select array
|
56
|
+
* @param relations The parsed relations array
|
57
|
+
* @param rawJoin The query parameter
|
58
|
+
*/
|
12
59
|
protected parseJoin(requestFields: ParsedRequestSelect, relations: CrudRequestRelation[], rawJoin: RequestParamValue): void;
|
60
|
+
/**
|
61
|
+
* Parses the order query parameter
|
62
|
+
*
|
63
|
+
* @param ordering The order array
|
64
|
+
* @param rawOrder The query parameter
|
65
|
+
*/
|
13
66
|
protected parseOrder(ordering: CrudRequestOrder[], rawOrder: RequestParamValue): void;
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
67
|
+
/**
|
68
|
+
* Parses the search query parameter
|
69
|
+
*
|
70
|
+
* @param builder The condition builder
|
71
|
+
* @param rawSearch The "search" query parameter
|
72
|
+
* @param rawFilter The "filter" query parameter
|
73
|
+
* @param rawOr The "or" query parameter
|
74
|
+
*/
|
19
75
|
protected parseSearch(builder: CrudRequestWhereBuilder, rawSearch: RequestParamValue, rawFilter: RequestParamValue, rawOr: RequestParamValue): void;
|
76
|
+
/**
|
77
|
+
* Parses the filter query parameter
|
78
|
+
*
|
79
|
+
* @param builder The condition builder
|
80
|
+
* @param rawFilter The "filter" query parameter
|
81
|
+
* @param rawOr The "or" query parameter
|
82
|
+
*/
|
20
83
|
protected parseFilter(builder: CrudRequestWhereBuilder, rawFilter: RequestParamValue, rawOr: RequestParamValue): void;
|
21
84
|
}
|
22
85
|
|
23
|
-
export { CrudRequestParser };
|
86
|
+
export { CrudRequestParser, type CrudRequestParserOptions };
|
@@ -1,23 +1,86 @@
|
|
1
|
-
import { a as RequestParser, O as OpenAPIParameter, R as RequestParamValue } from '../../request-parser-
|
2
|
-
import {
|
3
|
-
import { C as CrudRequestWhereBuilder } from '../../crud-request-where.builder-
|
1
|
+
import { a as RequestParser, O as OpenAPIParameter, R as RequestParamValue } from '../../request-parser-Cr3cxMRw.js';
|
2
|
+
import { C as CrudRequest, P as ParsedRequestSelect, b as CrudRequestRelation, c as CrudRequestOrder } from '../../crud-request-DLo0ZuzD.js';
|
3
|
+
import { C as CrudRequestWhereBuilder } from '../../crud-request-where.builder-CqbP5LT9.js';
|
4
4
|
|
5
|
+
interface CrudRequestParserOptions {
|
6
|
+
/**
|
7
|
+
* Whether the `fields` and `select` parameters will be disabled
|
8
|
+
*/
|
9
|
+
disableSelect?: boolean;
|
10
|
+
/**
|
11
|
+
* Whether the `s`, `filter` and `or` parameters will be disabled
|
12
|
+
*/
|
13
|
+
disableWhere?: boolean;
|
14
|
+
/**
|
15
|
+
* Whether the `sort` parameter will be disabled
|
16
|
+
*/
|
17
|
+
disableOrder?: boolean;
|
18
|
+
/**
|
19
|
+
* Whether the `join` parameter will be disabled
|
20
|
+
*/
|
21
|
+
disableRelations?: boolean;
|
22
|
+
/**
|
23
|
+
* Whether the `limit` and `per_page` parameters will be disabled
|
24
|
+
*/
|
25
|
+
disableLimit?: boolean;
|
26
|
+
/**
|
27
|
+
* Whether the `offset` and `page` parameters will be disabled
|
28
|
+
*/
|
29
|
+
disableOffset?: boolean;
|
30
|
+
}
|
5
31
|
/**
|
6
32
|
* Parses a request based on the @nestjsx/crud format.
|
7
33
|
*/
|
8
34
|
declare class CrudRequestParser implements RequestParser {
|
35
|
+
protected readonly options: CrudRequestParserOptions;
|
36
|
+
constructor(options?: CrudRequestParserOptions);
|
37
|
+
/**
|
38
|
+
* @inheritDoc
|
39
|
+
*/
|
9
40
|
getOpenAPIParameters(): OpenAPIParameter[];
|
10
|
-
|
41
|
+
/**
|
42
|
+
* @inheritDoc
|
43
|
+
*/
|
44
|
+
parse(query: Record<string, RequestParamValue> | URLSearchParams): CrudRequest;
|
45
|
+
/**
|
46
|
+
* Parses the select query parameter
|
47
|
+
*
|
48
|
+
* @param select The parsed select array
|
49
|
+
* @param rawSelect The query parameter
|
50
|
+
*/
|
11
51
|
protected parseSelect(select: ParsedRequestSelect, rawSelect: RequestParamValue): void;
|
52
|
+
/**
|
53
|
+
* Parses the join query parameter
|
54
|
+
*
|
55
|
+
* @param requestFields The parsed select array
|
56
|
+
* @param relations The parsed relations array
|
57
|
+
* @param rawJoin The query parameter
|
58
|
+
*/
|
12
59
|
protected parseJoin(requestFields: ParsedRequestSelect, relations: CrudRequestRelation[], rawJoin: RequestParamValue): void;
|
60
|
+
/**
|
61
|
+
* Parses the order query parameter
|
62
|
+
*
|
63
|
+
* @param ordering The order array
|
64
|
+
* @param rawOrder The query parameter
|
65
|
+
*/
|
13
66
|
protected parseOrder(ordering: CrudRequestOrder[], rawOrder: RequestParamValue): void;
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
67
|
+
/**
|
68
|
+
* Parses the search query parameter
|
69
|
+
*
|
70
|
+
* @param builder The condition builder
|
71
|
+
* @param rawSearch The "search" query parameter
|
72
|
+
* @param rawFilter The "filter" query parameter
|
73
|
+
* @param rawOr The "or" query parameter
|
74
|
+
*/
|
19
75
|
protected parseSearch(builder: CrudRequestWhereBuilder, rawSearch: RequestParamValue, rawFilter: RequestParamValue, rawOr: RequestParamValue): void;
|
76
|
+
/**
|
77
|
+
* Parses the filter query parameter
|
78
|
+
*
|
79
|
+
* @param builder The condition builder
|
80
|
+
* @param rawFilter The "filter" query parameter
|
81
|
+
* @param rawOr The "or" query parameter
|
82
|
+
*/
|
20
83
|
protected parseFilter(builder: CrudRequestWhereBuilder, rawFilter: RequestParamValue, rawOr: RequestParamValue): void;
|
21
84
|
}
|
22
85
|
|
23
|
-
export { CrudRequestParser };
|
86
|
+
export { CrudRequestParser, type CrudRequestParserOptions };
|
@@ -1,2 +1,2 @@
|
|
1
|
-
"use strict";var
|
1
|
+
"use strict";var h=Object.defineProperty;var A=Object.getOwnPropertyDescriptor;var C=Object.getOwnPropertyNames;var L=Object.prototype.hasOwnProperty;var s=(r,e)=>h(r,"name",{value:e,configurable:!0});var _=(r,e)=>{for(var t in e)h(r,t,{get:e[t],enumerable:!0})},$=(r,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of C(e))!L.call(r,n)&&n!==t&&h(r,n,{get:()=>e[n],enumerable:!(i=A(e,n))||i.enumerable});return r};var w=r=>$(h({},"__esModule",{value:!0}),r);var M={};_(M,{CrudRequestParser:()=>I});module.exports=w(M);function O(r,e){if(e==null||typeof e=="number"||typeof e=="string"||typeof e=="boolean"||e instanceof Date)return e;throw new Error(`${r} must be a string, number, boolean or null`)}s(O,"ensurePrimitiveOrNull");function N(r,e,t=0){if(!Array.isArray(e)||e.length<t)throw new Error(`${r} must be an array with at least ${t} items`);return e}s(N,"ensureArray");function g(r,e){if(f(e)&&e!==!0)throw new Error(`${r} must be true, null or undefined`)}s(g,"ensureEmpty");function f(r){return r!=null}s(f,"isValid");var x={eq:"primitive",neq:"primitive",gt:"primitive",lt:"primitive",gte:"primitive",lte:"primitive",starts:"primitive",ends:"primitive",contains:"primitive",not_contains:"primitive",in:"array",not_in:"array",between:"array",is_null:"empty",not_null:"empty",eq_lower:"primitive",neq_lower:"primitive",starts_lower:"primitive",ends_lower:"primitive",contains_lower:"primitive",not_contains_lower:"primitive",in_lower:"primitive",not_in_lower:"primitive"};function S(r){let e=x[r.operator],t="The value of the operator "+r.operator;if(e==="primitive"){O(t,r.value);return}if(e==="array"){N(t,r.value).forEach(n=>O(t+" children",n));return}if(e==="empty"){g(t,r.value);return}}s(S,"validateWhereField");var m=class r{constructor(e={and:[]},t){this.where=e;this.parent=t}static{s(this,"CrudRequestWhereBuilder")}addAnd(){if(!this.where.or)return this;let e={and:[]},t=new r(e,this);return this.where.or.push(e),t}addOr(){if(!this.where.and)return this;let e={or:[]},t=new r(e,this);return this.where.and.push(e),t}addField(e,t,i){let n={field:e,operator:t,value:i};if(S(n),this.where.and)this.where.and.push(n);else if(this.where.or)this.where.or.push(n);else throw new Error("Invalid where");return this}build(){return this.parent?this.parent.build():this.where}};function W(r){return r instanceof URLSearchParams?r.get.bind(r):e=>r[e]??null}s(W,"createParamGetter");function l(r,e){return Array.isArray(r)?r.filter(t=>typeof t=="string"):typeof r=="string"?e?r.split(e):[r]:[]}s(l,"getParamStringArray");function R(r){if(Array.isArray(r)&&(r=r.length>0?r[0]:void 0),!f(r))return;let e=Number(r);return isNaN(e)?void 0:e}s(R,"getParamNumber");function P(r){if(Array.isArray(r)&&(r=r.length>0?r[0]:void 0),typeof r=="string")return JSON.parse(r);if(typeof r=="object")return r}s(P,"getParamJSON");var E={$eq:"eq",$ne:"neq",$gt:"gt",$lt:"lt",$gte:"gte",$lte:"lte",$starts:"starts",$ends:"ends",$cont:"contains",$excl:"not_contains",$in:"in",$notin:"not_in",$between:"between",$isnull:"is_null",$notnull:"not_null",$eqL:"eq_lower",$neL:"neq_lower",$startsL:"starts_lower",$endsL:"ends_lower",$contL:"contains_lower",$exclL:"not_contains_lower",$inL:"in_lower",$notinL:"not_in_lower"};function p(r,e,t=[]){if(typeof e!="object")return;let i=Object.keys(e);if(i.length===0)return;let{$or:n,$and:o,...a}=e;if(o){let u=o.length>1||i.length>1?r.addAnd():r;o.forEach(d=>p(u,d,t)),y(u,a,t);return}if(n&&i.length===1){let u=n.length>1?r.addOr():r;n.forEach(d=>p(u,d,t));return}if(n){let u=r.addAnd(),d=n.length>1?u.addOr():u;y(u,a,t),n.forEach(c=>p(d,c,t));return}i.length>1&&(r=r.addAnd()),y(r,a,t)}s(p,"parseCrudSearch");function y(r,e,t){for(let i of Object.keys(e)){let n=e[i];if(!f(n))continue;let o=[...t,...i.split(".")];if(Array.isArray(n)){n.forEach(a=>p(r,a,o));continue}V(r,o,n)}}s(y,"parseCrudSearchFields");function V(r,e,t){if(typeof t!="object"){r.addField(e,"eq",t);return}let i=Object.keys(t);for(let n of i)E[n]&&r.addField(e,E[n],t[n]);t.$or&&V(r.addOr(),e,t.$or)}s(V,"parseCrudSearchField");function q(r,e,t){if(e.length>0&&t.length>0){let i=r.addOr();T(i.addAnd(),e),T(i.addAnd(),t);return}if(t.length>0){T(r.addOr(),t);return}if(e.length>0){T(r.addAnd(),e);return}}s(q,"parseCrudFilters");function T(r,e){for(let t of e){let[i,n,o]=t.toString().split("||",3),a=E[n];a&&r.addField(i.split("."),a,o)}}s(T,"parseCrudFilter");var I=class{constructor(e={}){this.options=e}static{s(this,"CrudRequestParser")}getOpenAPIParameters(){let e={type:"array",items:{type:"string"}},t=[];return this.options.disableSelect||t.push({name:"fields",description:"Selects resource fields",required:!1,schema:e,style:"form",explode:!1}),this.options.disableWhere||t.push({name:"s",description:"Search condition",required:!1,schema:{type:"string"}}),this.options.disableOrder||t.push({name:"sort",description:"Sorting",required:!1,schema:e,style:"form",explode:!0}),this.options.disableRelations||t.push({name:"join",description:"Relations",required:!1,schema:e,style:"form",explode:!0}),this.options.disableLimit||t.push({name:"limit",description:"Page limit",required:!1,schema:{type:"integer"}}),this.options.disableOffset||t.push({name:"offset",description:"Offset amount",required:!1,schema:{type:"integer"}},{name:"page",description:"Page number",required:!1,schema:{type:"integer"}}),t}parse(e){let t=W(e),i=[],n=[],o=[],a=new m;this.options.disableSelect||this.parseSelect(i,t("fields")||t("select")),this.options.disableRelations||this.parseJoin(i,n,t("join")),this.options.disableOrder||this.parseOrder(o,t("sort")),this.options.disableWhere||this.parseSearch(a,t("s"),t("filter"),t("or"));let u=this.options.disableLimit?void 0:R(t("limit")||t("per_page")),d=this.options.disableOffset?void 0:R(t("offset")),c=this.options.disableOffset?void 0:R(t("page"));return{select:i,relations:n,order:o,where:a.build(),limit:u,offset:d,page:c}}parseSelect(e,t){l(t,",").forEach(n=>{e.push({field:n.split(".")})})}parseJoin(e,t,i){let n=l(i);for(let o of n){let[a,u]=o.split("||",2),d=a.split(".");t.push({field:d}),u&&u.split(",").forEach(b=>{e.push({field:[...d,b]})})}}parseOrder(e,t){let i=l(t);for(let n of i){let[o,a]=n.split(",");e.push({field:o.split("."),order:a?.toUpperCase()==="DESC"?"DESC":"ASC"})}}parseSearch(e,t,i,n){let o=P(t);if(!o){this.parseFilter(e,i,n);return}p(e,o)}parseFilter(e,t,i){let n=l(t),o=l(i);q(e,n,o)}};0&&(module.exports={CrudRequestParser});
|
2
2
|
//# sourceMappingURL=index.js.map
|