@visulima/crud 2.0.32 → 2.0.33

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/CHANGELOG.md CHANGED
@@ -1,3 +1,22 @@
1
+ ## @visulima/crud [2.0.33](https://github.com/visulima/visulima/compare/@visulima/crud@2.0.32...@visulima/crud@2.0.33) (2024-12-12)
2
+
3
+ ### Bug Fixes
4
+
5
+ * added missing placeholder variables into LICENSE.md file ([cef32c6](https://github.com/visulima/visulima/commit/cef32c6eb19dc3215a835e848ef12223a8fa05e0))
6
+ * allow node v23 ([8ca929a](https://github.com/visulima/visulima/commit/8ca929af311ce8036cbbfde68b6db05381b860a5))
7
+ * allowed node 23, updated dev dependencies ([f99d34e](https://github.com/visulima/visulima/commit/f99d34e01f6b13be8586a1b5d37dc8b8df0a5817))
8
+ * **crud:** updated path-to-regexp to 8.2.0 ([2c030cc](https://github.com/visulima/visulima/commit/2c030cc5eeae698a9b9871c0a6e6ebd920eee3ce))
9
+
10
+ ### Miscellaneous Chores
11
+
12
+ * updated dev dependencies ([a916944](https://github.com/visulima/visulima/commit/a916944b888bb34c34b0c54328b38d29e4399857))
13
+
14
+
15
+ ### Dependencies
16
+
17
+ * **@visulima/pagination:** upgraded to 3.0.24
18
+ * **@visulima/prisma-dmmf-transformer:** upgraded to 2.0.24
19
+
1
20
  ## @visulima/crud [2.0.32](https://github.com/visulima/visulima/compare/@visulima/crud@2.0.31...@visulima/crud@2.0.32) (2024-10-05)
2
21
 
3
22
  ### Bug Fixes
package/LICENSE.md CHANGED
@@ -19,3 +19,9 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
19
  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
20
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
21
  SOFTWARE.
22
+
23
+ <!-- DEPENDENCIES -->
24
+ <!-- /DEPENDENCIES -->
25
+
26
+ <!-- TYPE_DEPENDENCIES -->
27
+ <!-- /TYPE_DEPENDENCIES -->
package/README.md CHANGED
@@ -115,8 +115,8 @@ If you would like to help take a look at the [list of issues](https://github.com
115
115
 
116
116
  ## Credits
117
117
 
118
- - [Daniel Bannert](https://github.com/prisis)
119
- - [All Contributors](https://github.com/visulima/visulima/graphs/contributors)
118
+ - [Daniel Bannert](https://github.com/prisis)
119
+ - [All Contributors](https://github.com/visulima/visulima/graphs/contributors)
120
120
 
121
121
  ## License
122
122
 
@@ -0,0 +1,2 @@
1
+ 'use strict';var l=Object.create;var s=Object.defineProperty;var p=Object.getOwnPropertyDescriptor;var u=Object.getOwnPropertyNames;var m=Object.getPrototypeOf,c=Object.prototype.hasOwnProperty;var g=(e,r)=>()=>(e&&(r=e(e=0)),r);var E=(e,r)=>()=>(r||e((r={exports:{}}).exports,r),r.exports),P=(e,r)=>{for(var t in r)s(e,t,{get:r[t],enumerable:!0});},d=(e,r,t,n)=>{if(r&&typeof r=="object"||typeof r=="function")for(let o of u(r))!c.call(e,o)&&o!==t&&s(e,o,{get:()=>r[o],enumerable:!(n=p(r,o))||n.enumerable});return e};var x=(e,r,t)=>(t=e!=null?l(m(e)):{},d(r||!e||!e.__esModule?s(t,"default",{value:e,enumerable:!0}):t,e)),C=e=>d(s({},"__esModule",{value:!0}),e);var a=g(()=>{});a();var f=(i=>(i.CREATE="CREATE",i.DELETE="DELETE",i.READ_ALL="READ_ALL",i.READ_ONE="READ_ONE",i.UPDATE="UPDATE",i))(f||{});a();var R=(e,r,t="all")=>{let n=t==="none"?[]:["READ_ALL","READ_ONE","UPDATE","DELETE","CREATE"];return Array.isArray(e)&&(n=e),r?.length&&(n=n.filter(o=>!r.includes(o))),n},h=R;exports.a=g;exports.b=E;exports.c=P;exports.d=x;exports.e=C;exports.f=a;exports.g=f;exports.h=h;//# sourceMappingURL=chunk-FCOMMYT5.js.map
2
+ //# sourceMappingURL=chunk-FCOMMYT5.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../node_modules/.pnpm/tsup@8.3.5_@swc+core@1.6.7_@swc+helpers@0.5.15__jiti@2.4.0_postcss@8.4.49_tsx@4.19.2_typescript@5.4.5_yaml@2.6.1/node_modules/tsup/assets/cjs_shims.js","../src/types.ts","../src/utils/get-accessible-routes.ts"],"names":["init_cjs_shims","__esmMin","RouteType","getAccessibleRoutes","only","exclude","defaultExposeStrategy","accessibleRoutes","element","get_accessible_routes_default"],"mappings":"aAAA,IAAA,CAAA,CAAA,MAAA,CAAA,MAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,wBAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,mBAAA,CAAA,IAAA,CAAA,CAAA,MAAA,CAAA,cAAA,CAAA,CAAA,CAAA,MAAA,CAAA,SAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,KAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,KAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAA,CAAA,EAAA,CAAA,EAAA,OAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,IAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,UAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,GAAA,CAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,OAAA,CAAA,EAAA,UAAA,CAAA,IAAA,IAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,GAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,UAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,UAAA,CAAA,CAAA,CAAA,OAAA,CAAA,EAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA,CAAA,CAAA,EAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,UAAA,CAAA,CAAA,CAAA,CAAA,CAAA,SAAA,CAAA,CAAA,KAAA,CAAA,CAAA,CAAA,UAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,YAAA,CAAA,CAAA,KAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,IAAAA,CAAAC,CAAAA,CAAAA,CAAA,ICAAD,CAAAA,CAAAA,EAAAA,CAAAA,EAAAA,CAMYE,IAAAA,CAAAA,CAAAA,CAAAA,CAAAA,GACRA,CAAA,CAAA,MAAA,CAAS,QACTA,CAAAA,CAAAA,CAAA,MAAS,CAAA,QAAA,CACTA,CAAA,CAAA,QAAA,CAAW,UACXA,CAAAA,CAAAA,CAAA,QAAW,CAAA,UAAA,CACXA,CAAA,CAAA,MAAA,CAAS,QALDA,CAAAA,CAAAA,CAAAA,EAAAA,CAAAA,EAAA,ECNZF,EAAAA,CAAAA,EAAAA,CAEMG,IAAAA,CAAAA,CAAsB,CAACC,CAAAA,CAAoBC,CAAuBC,CAAAA,CAAAA,CAAwC,KAAuB,GAAA,CACnI,IAAIC,CAAAA,CACAD,CAA0B,GAAA,MAAA,CAAS,EAAC,CAAI,CAA6F,UAAA,CAAA,UAAA,CAAA,QAAA,CAAA,QAAA,CAAA,QAAA,CAAA,CAEzI,OAAI,KAAA,CAAM,OAAQF,CAAAA,CAAI,CAClBG,GAAAA,CAAAA,CAAmBH,CAGnBC,CAAAA,CAAAA,CAAAA,EAAS,MACTE,GAAAA,CAAAA,CAAmBA,CAAiB,CAAA,MAAA,CAAQC,CAAY,EAAA,CAACH,CAAQ,CAAA,QAAA,CAASG,CAAO,CAAC,CAG/ED,CAAAA,CAAAA,CACX,EAEOE,CAAQN,CAAAA","file":"chunk-FCOMMYT5.js","sourcesContent":["// Shim globals in cjs bundle\n// There's a weird bug that esbuild will always inject importMetaUrl\n// if we export it as `const importMetaUrl = ... __filename ...`\n// But using a function will not cause this issue\n\nconst getImportMetaUrl = () =>\n typeof document === 'undefined'\n ? new URL(`file:${__filename}`).href\n : (document.currentScript && document.currentScript.src) ||\n new URL('main.js', document.baseURI).href\n\nexport const importMetaUrl = /* @__PURE__ */ getImportMetaUrl()\n","import type { Handler as CreateHandler } from \"./handler/create\";\nimport type { Handler as DeleteHandler } from \"./handler/delete\";\nimport type { Handler as ListHandler } from \"./handler/list\";\nimport type { Handler as GetHandler } from \"./handler/read\";\nimport type { Handler as UpdateHandler } from \"./handler/update\";\n\nexport enum RouteType {\n CREATE = \"CREATE\",\n DELETE = \"DELETE\",\n READ_ALL = \"READ_ALL\",\n READ_ONE = \"READ_ONE\",\n UPDATE = \"UPDATE\",\n}\n\nexport interface ModelOption {\n exclude?: RouteType[];\n formatResourceId?: (resourceId: string) => number | string;\n name?: string;\n only?: RouteType[];\n}\n\nexport type ModelsOptions<M extends string = string> = {\n [key in M]?: ModelOption;\n};\n\nexport interface HandlerOptions<M extends string = string> {\n exposeStrategy?: \"all\" | \"none\";\n formatResourceId?: (resourceId: string) => number | string;\n handlers?: {\n create?: CreateHandler;\n delete?: DeleteHandler;\n get?: GetHandler;\n list?: ListHandler;\n update?: UpdateHandler;\n };\n models?: ModelsOptions<M>;\n pagination?: PaginationConfig;\n}\n\nexport interface PaginationConfig {\n perPage: number;\n}\n\nexport interface HandlerParameters<T, Q> {\n adapter: Adapter<T, Q>;\n query: Q;\n resourceName: string;\n}\n\nexport interface UniqueResourceHandlerParameters<T, Q> {\n adapter: Adapter<T, Q>;\n query: Q;\n resourceId: number | string;\n resourceName: string;\n}\n\nexport interface Adapter<T, Q, M extends string = string> {\n connect?: () => Promise<void>;\n create: (resourceName: M, data: any, query: Q) => Promise<T>;\n delete: (resourceName: M, resourceId: number | string, query: Q) => Promise<T>;\n disconnect?: () => Promise<void>;\n getAll: (resourceName: M, query: Q) => Promise<T[]>;\n getModels: () => M[];\n getOne: (resourceName: M, resourceId: number | string, query: Q) => Promise<T>;\n getPaginationData: (resourceName: M, query: Q) => Promise<PaginationData>;\n handleError?: (error: Error) => void;\n init?: () => Promise<void>;\n mapModelsToRouteNames?: () => Promise<{ [key in M]?: string }>;\n models?: M[];\n parseQuery: (resourceName: M, query: ParsedQueryParameters) => Q;\n update: (resourceName: M, resourceId: number | string, data: any, query: Q) => Promise<T>;\n}\n\nexport interface PaginationData {\n page: number;\n pageCount: number;\n total: number;\n}\n\nexport type RecursiveField = Record<string, Record<string, boolean> | boolean>;\n\nexport type WhereOperator = \"$cont\" | \"$ends\" | \"$eq\" | \"$gt\" | \"$gte\" | \"$in\" | \"$isnull\" | \"$lt\" | \"$lte\" | \"$neq\" | \"$notin\" | \"$starts\";\n\nexport type SearchCondition = Date | boolean | number | string | null;\n\nexport type WhereCondition = {\n [key in WhereOperator]?: SearchCondition;\n};\n\nexport type Condition = { [key: string]: Condition | SearchCondition | WhereCondition };\n\nexport type WhereField = Condition & {\n $and?: Condition | Condition[];\n $not?: Condition | Condition[];\n $or?: Condition | Condition[];\n};\n\nexport type OrderByOperator = \"$asc\" | \"$desc\";\n\nexport type OrderByField = Record<string, OrderByOperator>;\n\nexport interface ParsedQueryParameters {\n distinct?: string;\n include?: RecursiveField;\n limit?: number | undefined;\n orderBy?: OrderByField;\n originalQuery?: Record<string, any>;\n page?: number | undefined;\n select?: RecursiveField;\n skip?: number | undefined;\n where?: WhereField;\n}\n\nexport type ExecuteHandler<Request, Response> = (request: Request, response: Response) => Promise<void>;\n\nexport interface FakePrismaClient {\n $connect: () => void;\n $disconnect: () => Promise<void>;\n [key: string]: any;\n _dmmf?: any;\n\n _getDmmf?: () => any;\n}\n","import { RouteType } from \"../types\";\n\nconst getAccessibleRoutes = (only?: RouteType[], exclude?: RouteType[], defaultExposeStrategy: \"all\" | \"none\" = \"all\"): RouteType[] => {\n let accessibleRoutes: RouteType[] =\n defaultExposeStrategy === \"none\" ? [] : [RouteType.READ_ALL, RouteType.READ_ONE, RouteType.UPDATE, RouteType.DELETE, RouteType.CREATE];\n\n if (Array.isArray(only)) {\n accessibleRoutes = only;\n }\n\n if (exclude?.length) {\n accessibleRoutes = accessibleRoutes.filter((element) => !exclude.includes(element));\n }\n\n return accessibleRoutes;\n};\n\nexport default getAccessibleRoutes;\n"]}
@@ -0,0 +1,2 @@
1
+ import {fileURLToPath}from'url';import E from'path';var p=Object.create;var s=Object.defineProperty;var m=Object.getOwnPropertyDescriptor;var u=Object.getOwnPropertyNames;var c=Object.getPrototypeOf,g=Object.prototype.hasOwnProperty;var y=(e,r)=>()=>(e&&(r=e(e=0)),r);var A=(e,r)=>()=>(r||e((r={exports:{}}).exports,r),r.exports),M=(e,r)=>{for(var t in r)s(e,t,{get:r[t],enumerable:!0});},d=(e,r,t,n)=>{if(r&&typeof r=="object"||typeof r=="function")for(let o of u(r))!g.call(e,o)&&o!==t&&s(e,o,{get:()=>r[o],enumerable:!(n=m(r,o))||n.enumerable});return e};var h=(e,r,t)=>(t=e!=null?p(c(e)):{},d(r||!e||!e.__esModule?s(t,"default",{value:e,enumerable:!0}):t,e)),D=e=>d(s({},"__esModule",{value:!0}),e);var P,R,l,a=y(()=>{P=()=>fileURLToPath(import.meta.url),R=()=>E.dirname(P()),l=R();});a();var C=(i=>(i.CREATE="CREATE",i.DELETE="DELETE",i.READ_ALL="READ_ALL",i.READ_ONE="READ_ONE",i.UPDATE="UPDATE",i))(C||{});a();var T=(e,r,t="all")=>{let n=t==="none"?[]:["READ_ALL","READ_ONE","UPDATE","DELETE","CREATE"];return Array.isArray(e)&&(n=e),r?.length&&(n=n.filter(o=>!r.includes(o))),n},N=T;export{y as a,A as b,M as c,h as d,D as e,l as f,a as g,C as h,N as i};//# sourceMappingURL=chunk-VHKHKVSW.mjs.map
2
+ //# sourceMappingURL=chunk-VHKHKVSW.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../node_modules/.pnpm/tsup@8.3.5_@swc+core@1.6.7_@swc+helpers@0.5.15__jiti@2.4.0_postcss@8.4.49_tsx@4.19.2_typescript@5.4.5_yaml@2.6.1/node_modules/tsup/assets/esm_shims.js","../src/types.ts","../src/utils/get-accessible-routes.ts"],"names":["getFilename","getDirname","__dirname","init_esm_shims","__esmMin","fileURLToPath","path","RouteType","getAccessibleRoutes","only","exclude","defaultExposeStrategy","accessibleRoutes","element","get_accessible_routes_default"],"mappings":"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","file":"chunk-VHKHKVSW.mjs","sourcesContent":["// Shim globals in esm bundle\nimport { fileURLToPath } from 'url'\nimport path from 'path'\n\nconst getFilename = () => fileURLToPath(import.meta.url)\nconst getDirname = () => path.dirname(getFilename())\n\nexport const __dirname = /* @__PURE__ */ getDirname()\nexport const __filename = /* @__PURE__ */ getFilename()\n","import type { Handler as CreateHandler } from \"./handler/create\";\nimport type { Handler as DeleteHandler } from \"./handler/delete\";\nimport type { Handler as ListHandler } from \"./handler/list\";\nimport type { Handler as GetHandler } from \"./handler/read\";\nimport type { Handler as UpdateHandler } from \"./handler/update\";\n\nexport enum RouteType {\n CREATE = \"CREATE\",\n DELETE = \"DELETE\",\n READ_ALL = \"READ_ALL\",\n READ_ONE = \"READ_ONE\",\n UPDATE = \"UPDATE\",\n}\n\nexport interface ModelOption {\n exclude?: RouteType[];\n formatResourceId?: (resourceId: string) => number | string;\n name?: string;\n only?: RouteType[];\n}\n\nexport type ModelsOptions<M extends string = string> = {\n [key in M]?: ModelOption;\n};\n\nexport interface HandlerOptions<M extends string = string> {\n exposeStrategy?: \"all\" | \"none\";\n formatResourceId?: (resourceId: string) => number | string;\n handlers?: {\n create?: CreateHandler;\n delete?: DeleteHandler;\n get?: GetHandler;\n list?: ListHandler;\n update?: UpdateHandler;\n };\n models?: ModelsOptions<M>;\n pagination?: PaginationConfig;\n}\n\nexport interface PaginationConfig {\n perPage: number;\n}\n\nexport interface HandlerParameters<T, Q> {\n adapter: Adapter<T, Q>;\n query: Q;\n resourceName: string;\n}\n\nexport interface UniqueResourceHandlerParameters<T, Q> {\n adapter: Adapter<T, Q>;\n query: Q;\n resourceId: number | string;\n resourceName: string;\n}\n\nexport interface Adapter<T, Q, M extends string = string> {\n connect?: () => Promise<void>;\n create: (resourceName: M, data: any, query: Q) => Promise<T>;\n delete: (resourceName: M, resourceId: number | string, query: Q) => Promise<T>;\n disconnect?: () => Promise<void>;\n getAll: (resourceName: M, query: Q) => Promise<T[]>;\n getModels: () => M[];\n getOne: (resourceName: M, resourceId: number | string, query: Q) => Promise<T>;\n getPaginationData: (resourceName: M, query: Q) => Promise<PaginationData>;\n handleError?: (error: Error) => void;\n init?: () => Promise<void>;\n mapModelsToRouteNames?: () => Promise<{ [key in M]?: string }>;\n models?: M[];\n parseQuery: (resourceName: M, query: ParsedQueryParameters) => Q;\n update: (resourceName: M, resourceId: number | string, data: any, query: Q) => Promise<T>;\n}\n\nexport interface PaginationData {\n page: number;\n pageCount: number;\n total: number;\n}\n\nexport type RecursiveField = Record<string, Record<string, boolean> | boolean>;\n\nexport type WhereOperator = \"$cont\" | \"$ends\" | \"$eq\" | \"$gt\" | \"$gte\" | \"$in\" | \"$isnull\" | \"$lt\" | \"$lte\" | \"$neq\" | \"$notin\" | \"$starts\";\n\nexport type SearchCondition = Date | boolean | number | string | null;\n\nexport type WhereCondition = {\n [key in WhereOperator]?: SearchCondition;\n};\n\nexport type Condition = { [key: string]: Condition | SearchCondition | WhereCondition };\n\nexport type WhereField = Condition & {\n $and?: Condition | Condition[];\n $not?: Condition | Condition[];\n $or?: Condition | Condition[];\n};\n\nexport type OrderByOperator = \"$asc\" | \"$desc\";\n\nexport type OrderByField = Record<string, OrderByOperator>;\n\nexport interface ParsedQueryParameters {\n distinct?: string;\n include?: RecursiveField;\n limit?: number | undefined;\n orderBy?: OrderByField;\n originalQuery?: Record<string, any>;\n page?: number | undefined;\n select?: RecursiveField;\n skip?: number | undefined;\n where?: WhereField;\n}\n\nexport type ExecuteHandler<Request, Response> = (request: Request, response: Response) => Promise<void>;\n\nexport interface FakePrismaClient {\n $connect: () => void;\n $disconnect: () => Promise<void>;\n [key: string]: any;\n _dmmf?: any;\n\n _getDmmf?: () => any;\n}\n","import { RouteType } from \"../types\";\n\nconst getAccessibleRoutes = (only?: RouteType[], exclude?: RouteType[], defaultExposeStrategy: \"all\" | \"none\" = \"all\"): RouteType[] => {\n let accessibleRoutes: RouteType[] =\n defaultExposeStrategy === \"none\" ? [] : [RouteType.READ_ALL, RouteType.READ_ONE, RouteType.UPDATE, RouteType.DELETE, RouteType.CREATE];\n\n if (Array.isArray(only)) {\n accessibleRoutes = only;\n }\n\n if (exclude?.length) {\n accessibleRoutes = accessibleRoutes.filter((element) => !exclude.includes(element));\n }\n\n return accessibleRoutes;\n};\n\nexport default getAccessibleRoutes;\n"]}
package/dist/index.js CHANGED
@@ -1,21 +1,3 @@
1
- 'use strict';
2
-
3
- var chunkOB6VZSP6_js = require('./chunk-OB6VZSP6.js');
4
- var _ = require('http-errors');
5
- var pagination = require('@visulima/pagination');
6
- var prismaDmmfTransformer = require('@visulima/prisma-dmmf-transformer');
7
-
8
- function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
9
-
10
- var ___default = /*#__PURE__*/_interopDefault(_);
11
-
12
- chunkOB6VZSP6_js.f();chunkOB6VZSP6_js.f();chunkOB6VZSP6_js.f();var N=(s,e)=>{let t={};return e.forEach(r=>{t[r]=s[r].plural;}),t},j=N;chunkOB6VZSP6_js.f();chunkOB6VZSP6_js.f();var q=new Set(["string","boolean","number"]),ee=s=>q.has(typeof s),M=ee;var te=s=>{let e={};if(Object.keys(s).forEach(t=>{let r=s[t];M(r)&&(e[t]=r);}),Object.keys(e).length!==1)throw new Error("cursor needs to be an object with exactly 1 property with a primitive value");return e},D=te;chunkOB6VZSP6_js.f();var re={$asc:"asc",$desc:"desc"},se=s=>{let e={};return Object.keys(s).forEach(t=>{let r=s[t];e[t]=re[r];}),e},F=se;chunkOB6VZSP6_js.f();var k=(s,e)=>{let t={};return Object.keys(s).forEach(r=>{t[r]=s[r]===!0?!0:{[e]:k(s[r],e)};}),t},S=k;chunkOB6VZSP6_js.f();var w=s=>s instanceof Object,ne={$cont:"contains",$ends:"endsWith",$eq:"equals",$gt:"gt",$gte:"gte",$in:"in",$lt:"lt",$lte:"lte",$neq:"not",$notin:"notIn",$starts:"startsWith"},ie=s=>/^\d{4}-[01]\d-[0-3]\d(?:T[0-2](?:\d:[0-5]){2}\d(?:\.\d+)?(?:Z|[+-][0-2]\d(?::?[0-5]\d)?)?)?$/g.test(s),ae=s=>ie(s)?new Date(s):typeof s=="string"&&s==="$isnull"?null:s,V=(s,e)=>{let t=s.split(".");return t.splice(-1,1),e.includes(t.join("."))},v=s=>{let e=Object.keys(s)[0],t=ne[e];if(t)return {[t]:s[e]}},B=(s,e,t,r)=>{let n=e.split(".").reverse(),a={};n.forEach((m,c)=>{c===0?W(s,m,a,r):a={[m]:{some:a}};});let i=n.reverse()[0],o=t[i];t[i]={some:{...o?.some,...a[i]?.some}};},A=(s,e)=>{let t={};return Object.keys(s).forEach(r=>{let n=s[r];if(V(r,e))B(n,r,t,e);else if(M(n))t[r]=n;else if(w(n)){let a=v(n);a&&(t[r]=a);}}),t},W=(s,e,t,r)=>{if(M(s))t[e]=ae(s);else switch(e){case"$or":{w(s)&&(t.OR=A(s,r));break}case"$and":{w(s)&&(t.AND=A(s,r));break}case"$not":{w(s)&&(t.NOT=A(s,r));break}default:{t[e]=v(s);break}}},oe=(s,e)=>{let t={};return Object.keys(s).forEach(r=>{let n=s[r];V(r,e)?B(n,r,t,e):W(n,r,t,e);}),t},Q=oe;var C=class{models;ctorModels;dmmf;manyRelations;primaryKey;prismaClient;constructor({manyRelations:e={},models:t,primaryKey:r="id",prismaClient:n}){this.prismaClient=n,this.primaryKey=r,this.manyRelations=e,this.ctorModels=t;}async connect(){this.prismaClient.$connect();}async create(e,t,r){return await this.getPrismaDelegate(e).create({data:t,include:r.include,select:r.select})}async delete(e,t,r){return await this.getPrismaDelegate(e).delete({include:r.include,select:r.select,where:{[this.primaryKey]:t}})}async disconnect(){await this.prismaClient.$disconnect();}async getAll(e,t){return await this.getPrismaDelegate(e).findMany({cursor:t.cursor,distinct:t.distinct,include:t.include,orderBy:t.orderBy,select:t.select,skip:t.skip,take:t.take,where:t.where})}getModels(){return this.models??[]}async getOne(e,t,r){let n=this.getPrismaDelegate(e);return await(n.findUnique??n.findOne)({include:r.include,select:r.select,where:{[this.primaryKey]:t}})}async getPaginationData(e,t){let r=await this.getPrismaDelegate(e).count({distinct:t.distinct,where:t.where});return {page:Math.ceil((t.skip??0)/(t.take??0))+1,pageCount:Math.ceil(r/(t.take??0)),total:r}}handleError(e){throw console.error(e),e instanceof Error&&e.stack&&console.error(e.stack),e.constructor.name==="PrismaClientKnownRequestError"||e.constructor.name==="PrismaClientValidationError"?___default.default(400,"invalid request, check your server logs for more info"):___default.default(500,"an unknown error occured, check your server logs for more info")}async init(){let e=this.ctorModels,t=await this.getPrismaClientModels();e!==void 0&&e.forEach(r=>{if(!Object.keys(t).includes(r))throw new Error(`Model name ${r} is invalid.`)}),this.models=e??Object.keys(t);}async mapModelsToRouteNames(){return j(await this.getPrismaClientModels(),this.getModels())}parseQuery(e,t){let r={};return t.select&&(r.select=S(t.select,"select")),t.include&&(r.include=S(t.include,"include")),t.originalQuery?.where&&(r.where=Q(JSON.parse(t.originalQuery.where),this.manyRelations[e]??[])),t.orderBy&&(r.orderBy=F(t.orderBy)),t.limit!==void 0&&(r.take=t.limit),t.skip!==void 0&&(r.skip=t.skip),t.originalQuery?.cursor&&(r.cursor=D(JSON.parse(t.originalQuery.cursor))),t.distinct&&(r.distinct=t.distinct),r}async update(e,t,r,n){return await this.getPrismaDelegate(e).update({data:r,include:n.include,select:n.select,where:{[this.primaryKey]:t}})}get client(){return this.prismaClient}getPrismaClientModels=async()=>{if(this.prismaClient._dmmf!==void 0)return this.dmmf=this.prismaClient._dmmf,this.dmmf?.mappingsMap;if(this.prismaClient._getDmmf!==void 0)return this.dmmf=await this.prismaClient._getDmmf(),this.dmmf.mappingsMap;throw new Error("Couldn't get prisma client models")};getPrismaDelegate(e){return this.prismaClient[`${e.charAt(0).toLowerCase()}${e.slice(1)}`]}};chunkOB6VZSP6_js.f();chunkOB6VZSP6_js.f();chunkOB6VZSP6_js.f();var ce=s=>`#/components/schemas/${s}`,y=ce;var L=s=>{switch(s){case"Int":case"BigInt":return "integer";case"DateTime":case"Bytes":case"String":return "string";case"Float":case"Decimal":return "number";case"Json":return "object";case"Boolean":return "boolean";case"Null":return "null";default:return ""}},T="PaginationData",le=[{methodStart:"createOne",schemaNameStart:"Create"},{methodStart:"updateOne",schemaNameStart:"Update"}],x=class{constructor(e){this.dmmf=e;}schemaInputTypes=new Map;formatInputTypeData(e){if(e.kind==="object"){let r=y(e.type.name);return e.isList?{items:{$ref:r},type:"array",xml:{name:e.type.name,wrapped:!0}}:{$ref:r}}let t=L(e.type);return e.isList?{items:{type:t},type:"array",xml:{name:e.type.name,wrapped:!0}}:{type:t}}getExampleModelsSchemas(e,t){let r=i=>{let o=i.replace("#/components/schemas/",""),m=t[o],c={};return Object.entries(m.properties??{}).forEach(([u,l])=>{let d=l.type;c[u]=d==="array"?[a(l.items)]:d;}),c},n=i=>{let o={};return Object.entries(i).forEach(([m,c])=>{o[m]=c.$ref===void 0?c.type:r(c.$ref);}),o},a=i=>{let o={};return Object.entries(i).forEach(([m,c])=>{c.items.$ref!==void 0?o[m]=[r(c.items.$ref)]:c.type==="array"?o[m]=[a(c.items)]:c.type==="object"?o[m]=n(c.properties):o[m]=c.type;}),o};return e.reduce((i,o)=>{let m={},c=t[o];Object.entries(c.properties).forEach(([d,f])=>{let h=f.type;h==="array"?m[d]=[r(f.items.$ref)]:h==="object"?m[d]=n(f.properties):m[d]=h;});let u=this.getPaginationDataSchema()[T],l={};return Object.entries(u.properties).forEach(([d,f])=>{l[d]=f.type;}),{...i,[`${o}Page`]:{value:{data:[m],meta:l}},[`${o}s`]:{value:[m]},[o]:{value:m}}},{})}getPaginatedModelsSchemas(e){return e.reduce((t,r)=>({...t,[`${r}Page`]:{properties:{data:{items:{$ref:y(r)},type:"array",xml:{name:"data",wrapped:!0}},meta:{$ref:y(T)}},type:"object",xml:{name:`${r}Page`}}}),{})}getPaginationDataSchema(){return pagination.createPaginationMetaSchemaObject(T)}parseInputTypes(e){let t=e.reduce((r,n)=>(le.map(i=>({name:`${i.methodStart}${n}`,schemaName:`${i.schemaNameStart}${n}`})).forEach(({name:i,schemaName:o})=>{let m=this.dmmf.mutationType.fieldMap[i].args[0].inputTypes[0].type.fields,c=[],u=m.reduce((l,d)=>{if(d.inputTypes[0].kind==="scalar"){let f=prismaDmmfTransformer.getJSONSchemaProperty(this.dmmf.datamodel,{})({name:d.name,...d.inputTypes[0]}),{type:h}=f[1];h&&Array.isArray(h)?h.includes("null")&&(l[d.name]={...h,nullable:!0,type:h.filter(R=>R!=="null")},l[d.name].type.length===1&&(l[d.name]={...l[d.name],type:l[d.name].type[0]})):l[d.name]=f[1];}else {let f=this.parseObjectInputType(d.inputTypes[0]);l[d.name]={...f,nullable:d.isNullable};}return d.isRequired&&c.push(d.name),l},{});r[o]={properties:u,type:"object",xml:{name:o}},c.length>0&&(r[o].required=c);}),r),{});return this.schemaInputTypes.forEach((r,n)=>{t[n]={properties:r,type:"object",xml:{name:n}};}),t}parseModels(){let e=prismaDmmfTransformer.transformDMMF(this.dmmf).definitions;return Object.keys(e).forEach(t=>{let{properties:r}=e[t];Object.keys(r).forEach(n=>{Array.isArray(r[n].type)&&r[n].type.includes("null")&&(r[n].type=r[n].type.filter(a=>a!=="null"),r[n].type.length===1&&(r[n].type=r[n].type[0]),r[n].nullable=!0);});}),e}parseObjectInputType(e){return e.kind==="object"?(this.schemaInputTypes.has(e.type.name)||(this.schemaInputTypes.set(e.type.name,{}),e.type.fields.forEach(t=>{let r={};if(t.inputTypes.length>1){let n=!1,a=t.inputTypes.map(i=>{let o=this.formatInputTypeData(i);if(o.type==="null"){n=!0;return}return o}).filter(Boolean);a.length===1?r=a[0]:r.anyOf=a,n&&(r.nullable=!0);}else {let n=t.inputTypes[0];r=this.formatInputTypeData(n);}this.schemaInputTypes.set(e.type.name,{...this.schemaInputTypes.get(e.type.name),[t.name]:r}),t.inputTypes.forEach(n=>{n.kind==="object"&&this.parseObjectInputType(n);});})),{$ref:y(e.type.name)}):{type:L(e.type)}}},U=x;chunkOB6VZSP6_js.f();var ge=(s,e,t="all")=>s.reduce((r,n)=>e?.[n]?{...r,[n]:chunkOB6VZSP6_js.h(e[n].only,e[n].exclude,t)}:{...r,[n]:chunkOB6VZSP6_js.h(void 0,void 0,t)},{}),H=ge;chunkOB6VZSP6_js.f();chunkOB6VZSP6_js.f();var P={distinct:{description:"Fields to distinctively retrieve",name:"distinct",schema:{type:"string"}},include:{description:"Include relations, same as select",name:"include",schema:{type:"string"}},limit:{description:"Maximum number of elements to retrieve",name:"limit",schema:{minimum:0,type:"integer"}},orderBy:{description:'Field on which to order by a direction. See <a href="https://next-crud.js.org/query-params#orderBy">the docs</a>',name:"orderBy",schema:{type:"string"}},page:{description:"Page number. Use only for pagination.",name:"page",schema:{minimum:1,type:"integer"}},select:{description:"Fields to select. For nested fields, chain them separated with a dot, eg: user.posts",name:"select",schema:{type:"string"}},skip:{description:"Number of rows to skip",name:"skip",schema:{minimum:0,type:"integer"}},where:{description:'Fields to filter. See <a href="https://next-crud.js.org/query-params#where">the docs</a>',name:"where",schema:{type:"string"}}},J=[P.select,P.include],ue=[...J,P.limit,P.skip,P.where,P.orderBy,P.page,P.distinct],G=(s,e=[])=>s==="READ_ALL"?[...ue,...e].filter(Boolean):[...J,...e].filter(Boolean);chunkOB6VZSP6_js.f();var fe=s=>`#/components/examples/${s}`,O=fe;var b=(s,e)=>e?{items:{$ref:y(s)},type:"array"}:{$ref:y(s)},he=(s,e)=>{if(s==="CREATE")return {content:{content:{"application/json":{example:O(e),schema:b(e)}},description:`${e} created`},statusCode:201};if(s==="DELETE")return {content:{content:{"application/json":{example:O(e),schema:b(e)}},description:`${e} item deleted`},statusCode:200};if(s==="READ_ALL")return {content:{content:{"application/json":{examples:{Default:{$ref:O(`${e}s`)},Pagination:{$ref:O(`${e}Page`)}},schema:{oneOf:[b(e,!0),b(`${e}Page`,!1)]}}},description:`${e} list retrieved`},statusCode:200};if(s==="READ_ONE")return {content:{content:{"application/json":{example:O(e),schema:b(e)}},description:`${e} item retrieved`},statusCode:200};if(s==="UPDATE")return {content:{content:{"application/json":{example:O(e),schema:b(e)}},description:`${e} item updated`},statusCode:200}},K=(s,e)=>({content:{"application/json":{schema:{$ref:y(`${s}${e}`)}}}}),ye=s=>{switch(s){case"CREATE":return "post";case"READ_ALL":case"READ_ONE":return "get";case"UPDATE":return "put";case"DELETE":return "delete";default:throw new TypeError(`Method for route type ${s} was not found.`)}},Z=({hasId:s,modelName:e,modelsConfig:t,routeTypes:r,tag:n})=>{let a={};return r.forEach(i=>{if(r.includes(i)){let o=t?.[e]?.routeTypes?.[i]?.response.name??t?.[e]?.type?.name??e,m=ye(i),c=he(i,o);if(c===void 0)throw new TypeError(`Route type ${i}; response config was not found.`);a[m]={parameters:G(i).map(u=>({...u,in:"query"})),responses:{[c.statusCode]:c.content,...t?.[e]?.routeTypes?.[i]?.responses},summary:t?.[e]?.routeTypes?.[i]?.summary,tags:[n]},s&&a[m].parameters.push({description:`ID of the ${e}`,in:"path",name:"id",required:!0,schema:{type:"string"}}),i==="UPDATE"?a[m].requestBody=K("Update",o):i==="CREATE"&&(a[m].requestBody=K("Create",o));}}),a},Pe=({models:s,modelsConfig:e,routes:t,routesMap:r})=>Object.keys(t).reduce((n,a)=>{let i=t[a],o=s?.[a]?.name?s[a].name:r?.[a]??a,m=e?.[a]?.tag.name??a;if(i.includes("CREATE")||i.includes("READ_ALL")){let c=`/${o}`,u=["READ_ALL","CREATE"].filter(l=>i.includes(l));n[c]=Z({modelName:a,modelsConfig:e,routeTypes:u,tag:m});}if(i.includes("READ_ONE")||i.includes("UPDATE")||i.includes("DELETE")){let c=`/${o}/{id}`,u=["READ_ONE","UPDATE","DELETE"].filter(l=>i.includes(l));n[c]=Z({hasId:!0,modelName:a,modelsConfig:e,routeTypes:u,tag:m});}return n},{}),z=Pe;chunkOB6VZSP6_js.f();var Oe=(s,e)=>s.map(t=>e?.[t]?.tag?e[t].tag:{name:t}),X=Oe;var be=(s,e)=>(Object.values(s).forEach(t=>{Object.values(t).forEach(r=>{typeof r.responses=="object"&&Object.values(r.responses).forEach(n=>{typeof n.content=="object"&&Object.values(n.content).forEach(a=>{if(typeof a.example=="string"){let i=a.example.replace("#/components/examples/","");e[i]?.value!==void 0&&(a.example=e[i].value);}});});});}),s),Me=async({crud:s={models:{}},defaultExposeStrategy:e="all",models:t,prismaClient:r,swagger:n={allowedMediaTypes:{"application/json":!0},models:{}}})=>{let a,i;if(r._dmmf!==void 0?(a=r._dmmf,i=a?.mappingsMap):r._getDmmf!==void 0&&(a=await r._getDmmf(),i=a.mappingsMap),a===void 0)throw new TypeError("Couldn't get prisma client models");let o=new U(a),m=o.parseModels(),c=Object.keys(m),u=JSON.stringify({...m,...o.parseInputTypes(c),...o.getPaginationDataSchema(),...o.getPaginatedModelsSchemas(c)});t!==void 0&&t.forEach(I=>{if(!Object.keys(i).includes(I))throw new Error(`Model name ${I} is invalid.`)});let l=t??Object.keys(i),d=H(l,s.models,e),f=X(l,n.models),h=z({models:s.models,modelsConfig:n.models,routes:d,routesMap:j(i,l)}),R=JSON.parse(u.replaceAll("#/definitions","#/components/schemas")),$=o.getExampleModelsSchemas(c,R);return {examples:$,paths:be(h,$),schemas:R,tags:f}},Re=Me;
13
-
14
- Object.defineProperty(exports, "RouteType", {
15
- enumerable: true,
16
- get: function () { return chunkOB6VZSP6_js.g; }
17
- });
18
- exports.PrismaAdapter = C;
19
- exports.modelsToOpenApi = Re;
20
- //# sourceMappingURL=index.js.map
1
+ 'use strict';var chunkFCOMMYT5_js=require('./chunk-FCOMMYT5.js'),_=require('http-errors'),pagination=require('@visulima/pagination'),prismaDmmfTransformer=require('@visulima/prisma-dmmf-transformer');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var ___default=/*#__PURE__*/_interopDefault(_);chunkFCOMMYT5_js.f();chunkFCOMMYT5_js.f();chunkFCOMMYT5_js.f();var N=(s,e)=>{let t={};return e.forEach(r=>{t[r]=s[r].plural;}),t},j=N;chunkFCOMMYT5_js.f();chunkFCOMMYT5_js.f();var q=new Set(["string","boolean","number"]),ee=s=>q.has(typeof s),M=ee;var te=s=>{let e={};if(Object.keys(s).forEach(t=>{let r=s[t];M(r)&&(e[t]=r);}),Object.keys(e).length!==1)throw new Error("cursor needs to be an object with exactly 1 property with a primitive value");return e},D=te;chunkFCOMMYT5_js.f();var re={$asc:"asc",$desc:"desc"},se=s=>{let e={};return Object.keys(s).forEach(t=>{let r=s[t];e[t]=re[r];}),e},F=se;chunkFCOMMYT5_js.f();var k=(s,e)=>{let t={};return Object.keys(s).forEach(r=>{t[r]=s[r]===!0?!0:{[e]:k(s[r],e)};}),t},S=k;chunkFCOMMYT5_js.f();var w=s=>s instanceof Object,ne={$cont:"contains",$ends:"endsWith",$eq:"equals",$gt:"gt",$gte:"gte",$in:"in",$lt:"lt",$lte:"lte",$neq:"not",$notin:"notIn",$starts:"startsWith"},ie=s=>/^\d{4}-[01]\d-[0-3]\d(?:T[0-2](?:\d:[0-5]){2}\d(?:\.\d+)?(?:Z|[+-][0-2]\d(?::?[0-5]\d)?)?)?$/g.test(s),ae=s=>ie(s)?new Date(s):typeof s=="string"&&s==="$isnull"?null:s,V=(s,e)=>{let t=s.split(".");return t.splice(-1,1),e.includes(t.join("."))},v=s=>{let e=Object.keys(s)[0],t=ne[e];if(t)return {[t]:s[e]}},B=(s,e,t,r)=>{let n=e.split(".").reverse(),a={};n.forEach((m,c)=>{c===0?W(s,m,a,r):a={[m]:{some:a}};});let i=n.reverse()[0],o=t[i];t[i]={some:{...o?.some,...a[i]?.some}};},A=(s,e)=>{let t={};return Object.keys(s).forEach(r=>{let n=s[r];if(V(r,e))B(n,r,t,e);else if(M(n))t[r]=n;else if(w(n)){let a=v(n);a&&(t[r]=a);}}),t},W=(s,e,t,r)=>{if(M(s))t[e]=ae(s);else switch(e){case"$or":{w(s)&&(t.OR=A(s,r));break}case"$and":{w(s)&&(t.AND=A(s,r));break}case"$not":{w(s)&&(t.NOT=A(s,r));break}default:{t[e]=v(s);break}}},oe=(s,e)=>{let t={};return Object.keys(s).forEach(r=>{let n=s[r];V(r,e)?B(n,r,t,e):W(n,r,t,e);}),t},Q=oe;var C=class{models;ctorModels;dmmf;manyRelations;primaryKey;prismaClient;constructor({manyRelations:e={},models:t,primaryKey:r="id",prismaClient:n}){this.prismaClient=n,this.primaryKey=r,this.manyRelations=e,this.ctorModels=t;}async connect(){this.prismaClient.$connect();}async create(e,t,r){return await this.getPrismaDelegate(e).create({data:t,include:r.include,select:r.select})}async delete(e,t,r){return await this.getPrismaDelegate(e).delete({include:r.include,select:r.select,where:{[this.primaryKey]:t}})}async disconnect(){await this.prismaClient.$disconnect();}async getAll(e,t){return await this.getPrismaDelegate(e).findMany({cursor:t.cursor,distinct:t.distinct,include:t.include,orderBy:t.orderBy,select:t.select,skip:t.skip,take:t.take,where:t.where})}getModels(){return this.models??[]}async getOne(e,t,r){let n=this.getPrismaDelegate(e);return await(n.findUnique??n.findOne)({include:r.include,select:r.select,where:{[this.primaryKey]:t}})}async getPaginationData(e,t){let r=await this.getPrismaDelegate(e).count({distinct:t.distinct,where:t.where});return {page:Math.ceil((t.skip??0)/(t.take??0))+1,pageCount:Math.ceil(r/(t.take??0)),total:r}}handleError(e){throw console.error(e),e instanceof Error&&e.stack&&console.error(e.stack),e.constructor.name==="PrismaClientKnownRequestError"||e.constructor.name==="PrismaClientValidationError"?___default.default(400,"invalid request, check your server logs for more info"):___default.default(500,"an unknown error occured, check your server logs for more info")}async init(){let e=this.ctorModels,t=await this.getPrismaClientModels();e!==void 0&&e.forEach(r=>{if(!Object.keys(t).includes(r))throw new Error(`Model name ${r} is invalid.`)}),this.models=e??Object.keys(t);}async mapModelsToRouteNames(){return j(await this.getPrismaClientModels(),this.getModels())}parseQuery(e,t){let r={};return t.select&&(r.select=S(t.select,"select")),t.include&&(r.include=S(t.include,"include")),t.originalQuery?.where&&(r.where=Q(JSON.parse(t.originalQuery.where),this.manyRelations[e]??[])),t.orderBy&&(r.orderBy=F(t.orderBy)),t.limit!==void 0&&(r.take=t.limit),t.skip!==void 0&&(r.skip=t.skip),t.originalQuery?.cursor&&(r.cursor=D(JSON.parse(t.originalQuery.cursor))),t.distinct&&(r.distinct=t.distinct),r}async update(e,t,r,n){return await this.getPrismaDelegate(e).update({data:r,include:n.include,select:n.select,where:{[this.primaryKey]:t}})}get client(){return this.prismaClient}getPrismaClientModels=async()=>{if(this.prismaClient._dmmf!==void 0)return this.dmmf=this.prismaClient._dmmf,this.dmmf?.mappingsMap;if(this.prismaClient._getDmmf!==void 0)return this.dmmf=await this.prismaClient._getDmmf(),this.dmmf.mappingsMap;throw new Error("Couldn't get prisma client models")};getPrismaDelegate(e){return this.prismaClient[`${e.charAt(0).toLowerCase()}${e.slice(1)}`]}};chunkFCOMMYT5_js.f();chunkFCOMMYT5_js.f();chunkFCOMMYT5_js.f();var ce=s=>`#/components/schemas/${s}`,y=ce;var L=s=>{switch(s){case"Int":case"BigInt":return "integer";case"DateTime":case"Bytes":case"String":return "string";case"Float":case"Decimal":return "number";case"Json":return "object";case"Boolean":return "boolean";case"Null":return "null";default:return ""}},T="PaginationData",le=[{methodStart:"createOne",schemaNameStart:"Create"},{methodStart:"updateOne",schemaNameStart:"Update"}],x=class{constructor(e){this.dmmf=e;}schemaInputTypes=new Map;formatInputTypeData(e){if(e.kind==="object"){let r=y(e.type.name);return e.isList?{items:{$ref:r},type:"array",xml:{name:e.type.name,wrapped:!0}}:{$ref:r}}let t=L(e.type);return e.isList?{items:{type:t},type:"array",xml:{name:e.type.name,wrapped:!0}}:{type:t}}getExampleModelsSchemas(e,t){let r=i=>{let o=i.replace("#/components/schemas/",""),m=t[o],c={};return Object.entries(m.properties??{}).forEach(([u,l])=>{let d=l.type;c[u]=d==="array"?[a(l.items)]:d;}),c},n=i=>{let o={};return Object.entries(i).forEach(([m,c])=>{o[m]=c.$ref===void 0?c.type:r(c.$ref);}),o},a=i=>{let o={};return Object.entries(i).forEach(([m,c])=>{c.items.$ref!==void 0?o[m]=[r(c.items.$ref)]:c.type==="array"?o[m]=[a(c.items)]:c.type==="object"?o[m]=n(c.properties):o[m]=c.type;}),o};return e.reduce((i,o)=>{let m={},c=t[o];Object.entries(c.properties).forEach(([d,f])=>{let h=f.type;h==="array"?m[d]=[r(f.items.$ref)]:h==="object"?m[d]=n(f.properties):m[d]=h;});let u=this.getPaginationDataSchema()[T],l={};return Object.entries(u.properties).forEach(([d,f])=>{l[d]=f.type;}),{...i,[`${o}Page`]:{value:{data:[m],meta:l}},[`${o}s`]:{value:[m]},[o]:{value:m}}},{})}getPaginatedModelsSchemas(e){return e.reduce((t,r)=>({...t,[`${r}Page`]:{properties:{data:{items:{$ref:y(r)},type:"array",xml:{name:"data",wrapped:!0}},meta:{$ref:y(T)}},type:"object",xml:{name:`${r}Page`}}}),{})}getPaginationDataSchema(){return pagination.createPaginationMetaSchemaObject(T)}parseInputTypes(e){let t=e.reduce((r,n)=>(le.map(i=>({name:`${i.methodStart}${n}`,schemaName:`${i.schemaNameStart}${n}`})).forEach(({name:i,schemaName:o})=>{let m=this.dmmf.mutationType.fieldMap[i].args[0].inputTypes[0].type.fields,c=[],u=m.reduce((l,d)=>{if(d.inputTypes[0].kind==="scalar"){let f=prismaDmmfTransformer.getJSONSchemaProperty(this.dmmf.datamodel,{})({name:d.name,...d.inputTypes[0]}),{type:h}=f[1];h&&Array.isArray(h)?h.includes("null")&&(l[d.name]={...h,nullable:!0,type:h.filter(R=>R!=="null")},l[d.name].type.length===1&&(l[d.name]={...l[d.name],type:l[d.name].type[0]})):l[d.name]=f[1];}else {let f=this.parseObjectInputType(d.inputTypes[0]);l[d.name]={...f,nullable:d.isNullable};}return d.isRequired&&c.push(d.name),l},{});r[o]={properties:u,type:"object",xml:{name:o}},c.length>0&&(r[o].required=c);}),r),{});return this.schemaInputTypes.forEach((r,n)=>{t[n]={properties:r,type:"object",xml:{name:n}};}),t}parseModels(){let e=prismaDmmfTransformer.transformDMMF(this.dmmf).definitions;return Object.keys(e).forEach(t=>{let{properties:r}=e[t];Object.keys(r).forEach(n=>{Array.isArray(r[n].type)&&r[n].type.includes("null")&&(r[n].type=r[n].type.filter(a=>a!=="null"),r[n].type.length===1&&(r[n].type=r[n].type[0]),r[n].nullable=!0);});}),e}parseObjectInputType(e){return e.kind==="object"?(this.schemaInputTypes.has(e.type.name)||(this.schemaInputTypes.set(e.type.name,{}),e.type.fields.forEach(t=>{let r={};if(t.inputTypes.length>1){let n=!1,a=t.inputTypes.map(i=>{let o=this.formatInputTypeData(i);if(o.type==="null"){n=!0;return}return o}).filter(Boolean);a.length===1?r=a[0]:r.anyOf=a,n&&(r.nullable=!0);}else {let n=t.inputTypes[0];r=this.formatInputTypeData(n);}this.schemaInputTypes.set(e.type.name,{...this.schemaInputTypes.get(e.type.name),[t.name]:r}),t.inputTypes.forEach(n=>{n.kind==="object"&&this.parseObjectInputType(n);});})),{$ref:y(e.type.name)}):{type:L(e.type)}}},U=x;chunkFCOMMYT5_js.f();var ge=(s,e,t="all")=>s.reduce((r,n)=>e?.[n]?{...r,[n]:chunkFCOMMYT5_js.h(e[n].only,e[n].exclude,t)}:{...r,[n]:chunkFCOMMYT5_js.h(void 0,void 0,t)},{}),H=ge;chunkFCOMMYT5_js.f();chunkFCOMMYT5_js.f();var P={distinct:{description:"Fields to distinctively retrieve",name:"distinct",schema:{type:"string"}},include:{description:"Include relations, same as select",name:"include",schema:{type:"string"}},limit:{description:"Maximum number of elements to retrieve",name:"limit",schema:{minimum:0,type:"integer"}},orderBy:{description:'Field on which to order by a direction. See <a href="https://next-crud.js.org/query-params#orderBy">the docs</a>',name:"orderBy",schema:{type:"string"}},page:{description:"Page number. Use only for pagination.",name:"page",schema:{minimum:1,type:"integer"}},select:{description:"Fields to select. For nested fields, chain them separated with a dot, eg: user.posts",name:"select",schema:{type:"string"}},skip:{description:"Number of rows to skip",name:"skip",schema:{minimum:0,type:"integer"}},where:{description:'Fields to filter. See <a href="https://next-crud.js.org/query-params#where">the docs</a>',name:"where",schema:{type:"string"}}},J=[P.select,P.include],ue=[...J,P.limit,P.skip,P.where,P.orderBy,P.page,P.distinct],G=(s,e=[])=>s==="READ_ALL"?[...ue,...e].filter(Boolean):[...J,...e].filter(Boolean);chunkFCOMMYT5_js.f();var fe=s=>`#/components/examples/${s}`,O=fe;var b=(s,e)=>e?{items:{$ref:y(s)},type:"array"}:{$ref:y(s)},he=(s,e)=>{if(s==="CREATE")return {content:{content:{"application/json":{example:O(e),schema:b(e)}},description:`${e} created`},statusCode:201};if(s==="DELETE")return {content:{content:{"application/json":{example:O(e),schema:b(e)}},description:`${e} item deleted`},statusCode:200};if(s==="READ_ALL")return {content:{content:{"application/json":{examples:{Default:{$ref:O(`${e}s`)},Pagination:{$ref:O(`${e}Page`)}},schema:{oneOf:[b(e,!0),b(`${e}Page`,!1)]}}},description:`${e} list retrieved`},statusCode:200};if(s==="READ_ONE")return {content:{content:{"application/json":{example:O(e),schema:b(e)}},description:`${e} item retrieved`},statusCode:200};if(s==="UPDATE")return {content:{content:{"application/json":{example:O(e),schema:b(e)}},description:`${e} item updated`},statusCode:200}},K=(s,e)=>({content:{"application/json":{schema:{$ref:y(`${s}${e}`)}}}}),ye=s=>{switch(s){case"CREATE":return "post";case"READ_ALL":case"READ_ONE":return "get";case"UPDATE":return "put";case"DELETE":return "delete";default:throw new TypeError(`Method for route type ${s} was not found.`)}},Z=({hasId:s,modelName:e,modelsConfig:t,routeTypes:r,tag:n})=>{let a={};return r.forEach(i=>{if(r.includes(i)){let o=t?.[e]?.routeTypes?.[i]?.response.name??t?.[e]?.type?.name??e,m=ye(i),c=he(i,o);if(c===void 0)throw new TypeError(`Route type ${i}; response config was not found.`);a[m]={parameters:G(i).map(u=>({...u,in:"query"})),responses:{[c.statusCode]:c.content,...t?.[e]?.routeTypes?.[i]?.responses},summary:t?.[e]?.routeTypes?.[i]?.summary,tags:[n]},s&&a[m].parameters.push({description:`ID of the ${e}`,in:"path",name:"id",required:!0,schema:{type:"string"}}),i==="UPDATE"?a[m].requestBody=K("Update",o):i==="CREATE"&&(a[m].requestBody=K("Create",o));}}),a},Pe=({models:s,modelsConfig:e,routes:t,routesMap:r})=>Object.keys(t).reduce((n,a)=>{let i=t[a],o=s?.[a]?.name?s[a].name:r?.[a]??a,m=e?.[a]?.tag.name??a;if(i.includes("CREATE")||i.includes("READ_ALL")){let c=`/${o}`,u=["READ_ALL","CREATE"].filter(l=>i.includes(l));n[c]=Z({modelName:a,modelsConfig:e,routeTypes:u,tag:m});}if(i.includes("READ_ONE")||i.includes("UPDATE")||i.includes("DELETE")){let c=`/${o}/{id}`,u=["READ_ONE","UPDATE","DELETE"].filter(l=>i.includes(l));n[c]=Z({hasId:!0,modelName:a,modelsConfig:e,routeTypes:u,tag:m});}return n},{}),z=Pe;chunkFCOMMYT5_js.f();var Oe=(s,e)=>s.map(t=>e?.[t]?.tag?e[t].tag:{name:t}),X=Oe;var be=(s,e)=>(Object.values(s).forEach(t=>{Object.values(t).forEach(r=>{typeof r.responses=="object"&&Object.values(r.responses).forEach(n=>{typeof n.content=="object"&&Object.values(n.content).forEach(a=>{if(typeof a.example=="string"){let i=a.example.replace("#/components/examples/","");e[i]?.value!==void 0&&(a.example=e[i].value);}});});});}),s),Me=async({crud:s={models:{}},defaultExposeStrategy:e="all",models:t,prismaClient:r,swagger:n={allowedMediaTypes:{"application/json":!0},models:{}}})=>{let a,i;if(r._dmmf!==void 0?(a=r._dmmf,i=a?.mappingsMap):r._getDmmf!==void 0&&(a=await r._getDmmf(),i=a.mappingsMap),a===void 0)throw new TypeError("Couldn't get prisma client models");let o=new U(a),m=o.parseModels(),c=Object.keys(m),u=JSON.stringify({...m,...o.parseInputTypes(c),...o.getPaginationDataSchema(),...o.getPaginatedModelsSchemas(c)});t!==void 0&&t.forEach(I=>{if(!Object.keys(i).includes(I))throw new Error(`Model name ${I} is invalid.`)});let l=t??Object.keys(i),d=H(l,s.models,e),f=X(l,n.models),h=z({models:s.models,modelsConfig:n.models,routes:d,routesMap:j(i,l)}),R=JSON.parse(u.replaceAll("#/definitions","#/components/schemas")),$=o.getExampleModelsSchemas(c,R);return {examples:$,paths:be(h,$),schemas:R,tags:f}},Re=Me;
2
+ Object.defineProperty(exports,"RouteType",{enumerable:true,get:function(){return chunkFCOMMYT5_js.g}});exports.PrismaAdapter=C;exports.modelsToOpenApi=Re;//# sourceMappingURL=index.js.map
21
3
  //# sourceMappingURL=index.js.map