@visulima/crud 1.0.12 → 1.0.14
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 +30 -0
- package/dist/chunk-54HHLITU.mjs +5 -0
- package/dist/chunk-54HHLITU.mjs.map +1 -0
- package/dist/chunk-DOLZ4YNP.js +8 -0
- package/dist/chunk-DOLZ4YNP.js.map +1 -0
- package/dist/index.d.mts +141 -0
- package/dist/index.d.ts +59 -69
- package/dist/index.js +4 -4
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +5 -5
- package/dist/index.mjs.map +1 -1
- package/dist/next/index.d.mts +8 -0
- package/dist/next/index.d.ts +3 -3
- package/dist/next/index.js +4 -4
- package/dist/next/index.js.map +1 -1
- package/dist/next/index.mjs +3 -3
- package/dist/next/index.mjs.map +1 -1
- package/dist/{types.d-1fe34cff.d.ts → types.d-21565c86.d.ts} +52 -53
- package/next/package.json +1 -1
- package/package.json +40 -34
- package/dist/chunk-UEL6WWTI.mjs +0 -5
- package/dist/chunk-UEL6WWTI.mjs.map +0 -1
- package/dist/chunk-YZ63YP4Q.js +0 -8
- package/dist/chunk-YZ63YP4Q.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,33 @@
|
|
|
1
|
+
## @visulima/crud [1.0.14](https://github.com/visulima/visulima/compare/@visulima/crud@1.0.13...@visulima/crud@1.0.14) (2023-07-28)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* Update eslint rules and dependencies ([01a4bef](https://github.com/visulima/visulima/commit/01a4beff467091ac2d2fc6f342d274d282391842))
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
### Dependencies
|
|
11
|
+
|
|
12
|
+
* **@visulima/pagination:** upgraded to 2.0.6
|
|
13
|
+
* **@visulima/prisma-dmmf-transformer:** upgraded to 1.0.9
|
|
14
|
+
|
|
15
|
+
## @visulima/crud [1.0.13](https://github.com/visulima/visulima/compare/@visulima/crud@1.0.12...@visulima/crud@1.0.13) (2023-07-26)
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
### Bug Fixes
|
|
19
|
+
|
|
20
|
+
* Update @anolilab/eslint-config version in devDependencies ([72eee78](https://github.com/visulima/visulima/commit/72eee78215bd25429befb37d44179bda0356e954))
|
|
21
|
+
* Update eslint-config version to 10.0.6 across multiple packages ([391238a](https://github.com/visulima/visulima/commit/391238ab4d00335e4ad47d7b705960d0af9a5412))
|
|
22
|
+
* updated all deps and fixed some found issues from eslint ([aca1c2b](https://github.com/visulima/visulima/commit/aca1c2b0e8dd86f3d66b4bbbb7755179035180f3))
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
### Dependencies
|
|
27
|
+
|
|
28
|
+
* **@visulima/pagination:** upgraded to 2.0.5
|
|
29
|
+
* **@visulima/prisma-dmmf-transformer:** upgraded to 1.0.8
|
|
30
|
+
|
|
1
31
|
## @visulima/crud [1.0.12](https://github.com/visulima/visulima/compare/@visulima/crud@1.0.11...@visulima/crud@1.0.12) (2023-06-06)
|
|
2
32
|
|
|
3
33
|
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
var a=(e=>(e.CREATE="CREATE",e.DELETE="DELETE",e.READ_ALL="READ_ALL",e.READ_ONE="READ_ONE",e.UPDATE="UPDATE",e))(a||{});var s=(t,n,o="all")=>{let r=o==="none"?[]:["READ_ALL","READ_ONE","UPDATE","DELETE","CREATE"];return Array.isArray(t)&&(r=t),n?.length&&(r=r.filter(i=>!n.includes(i))),r},l=s;
|
|
2
|
+
|
|
3
|
+
export { a, l as b };
|
|
4
|
+
//# sourceMappingURL=out.js.map
|
|
5
|
+
//# sourceMappingURL=chunk-54HHLITU.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/types.d.ts","../src/utils/get-accessible-routes.ts"],"names":["RouteType","getAccessibleRoutes","only","exclude","defaultExposeStrategy","accessibleRoutes","element","get_accessible_routes_default"],"mappings":"AAOO,IAAKA,OACRA,EAAA,OAAS,SACTA,EAAA,OAAS,SACTA,EAAA,SAAW,WACXA,EAAA,SAAW,WACXA,EAAA,OAAS,SALDA,OAAA,ICLZ,IAAMC,EAAsB,CAACC,EAAoBC,EAAuBC,EAAwC,QAAuB,CACnI,IAAIC,EACAD,IAA0B,OAAS,CAAC,EAAI,iDAA6F,EAEzI,OAAI,MAAM,QAAQF,CAAI,IAClBG,EAAmBH,GAGnBC,GAAS,SACTE,EAAmBA,EAAiB,OAAQC,GAAY,CAACH,EAAQ,SAASG,CAAO,CAAC,GAG/ED,CACX,EAEOE,EAAQN","sourcesContent":["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\n// eslint-disable-next-line no-shadow\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\n// TODO: find the correct way to type this\n// eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\nexport type Condition = Record<string, Condition | SearchCondition | WhereCondition>;\n\n// eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\nexport type WhereField = Condition & {\n // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n $and?: Condition | Condition[];\n // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n $not?: Condition | Condition[];\n // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n $or?: Condition | Condition[];\n};\n\nexport type OrderByOperator = \"$asc\" | \"$desc\";\n\nexport type OrderByField = Record<string, TOrderByOperator>;\n\nexport interface ParsedQueryParameters {\n distinct?: string;\n include?: RecursiveField;\n limit?: number;\n orderBy?: OrderByField;\n originalQuery?: Record<string, any>;\n page?: number;\n select?: RecursiveField;\n skip?: number;\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.d\";\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,8 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var a=(e=>(e.CREATE="CREATE",e.DELETE="DELETE",e.READ_ALL="READ_ALL",e.READ_ONE="READ_ONE",e.UPDATE="UPDATE",e))(a||{});var s=(t,n,o="all")=>{let r=o==="none"?[]:["READ_ALL","READ_ONE","UPDATE","DELETE","CREATE"];return Array.isArray(t)&&(r=t),n?.length&&(r=r.filter(i=>!n.includes(i))),r},l=s;
|
|
4
|
+
|
|
5
|
+
exports.a = a;
|
|
6
|
+
exports.b = l;
|
|
7
|
+
//# sourceMappingURL=out.js.map
|
|
8
|
+
//# sourceMappingURL=chunk-DOLZ4YNP.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/types.d.ts","../src/utils/get-accessible-routes.ts"],"names":["RouteType","getAccessibleRoutes","only","exclude","defaultExposeStrategy","accessibleRoutes","element","get_accessible_routes_default"],"mappings":"AAOO,IAAKA,OACRA,EAAA,OAAS,SACTA,EAAA,OAAS,SACTA,EAAA,SAAW,WACXA,EAAA,SAAW,WACXA,EAAA,OAAS,SALDA,OAAA,ICLZ,IAAMC,EAAsB,CAACC,EAAoBC,EAAuBC,EAAwC,QAAuB,CACnI,IAAIC,EACAD,IAA0B,OAAS,CAAC,EAAI,iDAA6F,EAEzI,OAAI,MAAM,QAAQF,CAAI,IAClBG,EAAmBH,GAGnBC,GAAS,SACTE,EAAmBA,EAAiB,OAAQC,GAAY,CAACH,EAAQ,SAASG,CAAO,CAAC,GAG/ED,CACX,EAEOE,EAAQN","sourcesContent":["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\n// eslint-disable-next-line no-shadow\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\n// TODO: find the correct way to type this\n// eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\nexport type Condition = Record<string, Condition | SearchCondition | WhereCondition>;\n\n// eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\nexport type WhereField = Condition & {\n // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n $and?: Condition | Condition[];\n // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n $not?: Condition | Condition[];\n // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n $or?: Condition | Condition[];\n};\n\nexport type OrderByOperator = \"$asc\" | \"$desc\";\n\nexport type OrderByField = Record<string, TOrderByOperator>;\n\nexport interface ParsedQueryParameters {\n distinct?: string;\n include?: RecursiveField;\n limit?: number;\n orderBy?: OrderByField;\n originalQuery?: Record<string, any>;\n page?: number;\n select?: RecursiveField;\n skip?: number;\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.d\";\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.d.mts
ADDED
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import { HttpError } from 'http-errors';
|
|
2
|
+
import { C as Condition, S as SearchCondition, A as Adapter, F as FakePrismaClient, P as PaginationData, a as ParsedQueryParameters, R as RouteType, M as ModelsOptions } from './types.d-21565c86.js';
|
|
3
|
+
export { H as CrudHandlerOptions, b as HandlerParameters, c as ModelOption, O as OrderByField, d as OrderByOperator, e as PaginationConfig, f as RecursiveField, U as UniqueResourceHandlerParameters, W as WhereCondition, g as WhereField, h as WhereOperator } from './types.d-21565c86.js';
|
|
4
|
+
import { OpenAPIV3 } from 'openapi-types';
|
|
5
|
+
|
|
6
|
+
type PrismaRecursiveField = "include" | "select";
|
|
7
|
+
|
|
8
|
+
type PrismaRecursive<T extends PrismaRecursiveField> = Record<string, boolean | { [key in T]: PrismaRecursive<T> }>;
|
|
9
|
+
|
|
10
|
+
type PrismaWhereOperator = "contains" | "endsWith" | "equals" | "gt" | "gte" | "in" | "lt" | "lte" | "not" | "notIn" | "startsWith";
|
|
11
|
+
|
|
12
|
+
type PrismaOrderByOperator = "asc" | "desc";
|
|
13
|
+
|
|
14
|
+
type PrismaFieldFilterOperator = {
|
|
15
|
+
[key in PrismaWhereOperator]?: SearchCondition;
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
// eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents
|
|
19
|
+
type PrismaFieldFilter = Record<string, Condition | PrismaFieldFilterOperator | PrismaRelationFilter | SearchCondition | undefined>;
|
|
20
|
+
|
|
21
|
+
type PrismaWhereField = PrismaFieldFilter & {
|
|
22
|
+
AND?: PrismaFieldFilter;
|
|
23
|
+
NOT?: PrismaFieldFilter;
|
|
24
|
+
OR?: PrismaFieldFilter;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
interface PrismaRelationFilter {
|
|
28
|
+
some?: PrismaFieldFilter | SearchCondition;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
type PrismaOrderBy = Record<string, PrismaOrderByOperator>;
|
|
32
|
+
|
|
33
|
+
type PrismaCursor = Record<string, boolean | number | string>;
|
|
34
|
+
|
|
35
|
+
interface PrismaParsedQueryParameters {
|
|
36
|
+
cursor?: PrismaCursor;
|
|
37
|
+
distinct?: string;
|
|
38
|
+
include?: PrismaRecursive<"include">;
|
|
39
|
+
orderBy?: PrismaOrderBy;
|
|
40
|
+
select?: PrismaRecursive<"select">;
|
|
41
|
+
skip?: number;
|
|
42
|
+
take?: number;
|
|
43
|
+
where?: PrismaWhereField;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
interface AdapterCtorArguments<M extends string, PrismaClient> {
|
|
47
|
+
manyRelations?: {
|
|
48
|
+
[key in M]?: string[];
|
|
49
|
+
};
|
|
50
|
+
models?: M[];
|
|
51
|
+
primaryKey?: string;
|
|
52
|
+
prismaClient: PrismaClient;
|
|
53
|
+
}
|
|
54
|
+
declare class PrismaAdapter<T, M extends string, PrismaClient> implements Adapter<T, PrismaParsedQueryParameters, M> {
|
|
55
|
+
private readonly ctorModels?;
|
|
56
|
+
private dmmf;
|
|
57
|
+
private readonly getPrismaClientModels;
|
|
58
|
+
private readonly manyRelations;
|
|
59
|
+
private readonly primaryKey;
|
|
60
|
+
private readonly prismaClient;
|
|
61
|
+
models?: M[];
|
|
62
|
+
constructor({ manyRelations, models, primaryKey, prismaClient }: AdapterCtorArguments<M, FakePrismaClient & PrismaClient>);
|
|
63
|
+
private getPrismaDelegate;
|
|
64
|
+
get client(): PrismaClient;
|
|
65
|
+
connect(): Promise<void>;
|
|
66
|
+
create(resourceName: M, data: unknown, query: PrismaParsedQueryParameters): Promise<T>;
|
|
67
|
+
delete(resourceName: M, resourceId: number | string, query: PrismaParsedQueryParameters): Promise<T>;
|
|
68
|
+
disconnect(): Promise<void>;
|
|
69
|
+
getAll(resourceName: M, query: PrismaParsedQueryParameters): Promise<T[]>;
|
|
70
|
+
getModels(): M[];
|
|
71
|
+
getOne(resourceName: M, resourceId: number | string, query: PrismaParsedQueryParameters): Promise<T>;
|
|
72
|
+
getPaginationData(resourceName: M, query: PrismaParsedQueryParameters): Promise<PaginationData>;
|
|
73
|
+
handleError(error: Error): HttpError;
|
|
74
|
+
init(): Promise<void>;
|
|
75
|
+
mapModelsToRouteNames(): Promise<{
|
|
76
|
+
[key in M]?: string;
|
|
77
|
+
}>;
|
|
78
|
+
parseQuery(resourceName: M, query: ParsedQueryParameters): PrismaParsedQueryParameters;
|
|
79
|
+
update(resourceName: M, resourceId: number | string, data: unknown, query: PrismaParsedQueryParameters): Promise<T>;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
interface SwaggerType {
|
|
83
|
+
description?: string;
|
|
84
|
+
isArray?: boolean;
|
|
85
|
+
name: string;
|
|
86
|
+
required?: boolean;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
interface SwaggerOperation {
|
|
90
|
+
body?: SwaggerType;
|
|
91
|
+
response: SwaggerType;
|
|
92
|
+
responses?: Record<number, any>;
|
|
93
|
+
summary?: string;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
interface SwaggerParameter {
|
|
97
|
+
description?: string;
|
|
98
|
+
name: string;
|
|
99
|
+
// eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents
|
|
100
|
+
schema: any & {
|
|
101
|
+
type: string;
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
interface ModelsConfig {
|
|
106
|
+
additionalQueryParams?: SwaggerParameter[];
|
|
107
|
+
routeTypes?: {
|
|
108
|
+
[RouteType.CREATE]?: SwaggerOperation;
|
|
109
|
+
[RouteType.DELETE]?: SwaggerOperation;
|
|
110
|
+
[RouteType.READ_ALL]?: SwaggerOperation;
|
|
111
|
+
[RouteType.READ_ONE]?: SwaggerOperation;
|
|
112
|
+
[RouteType.UPDATE]?: SwaggerOperation;
|
|
113
|
+
};
|
|
114
|
+
tag: OpenAPIV3.TagObject;
|
|
115
|
+
type?: SwaggerType;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
type SwaggerModelsConfig<M extends string> = {
|
|
119
|
+
[key in M]?: ModelsConfig;
|
|
120
|
+
};
|
|
121
|
+
|
|
122
|
+
declare const modelsToOpenApi: <M extends string = string, PrismaClient = FakePrismaClient>({ crud, defaultExposeStrategy, models: ctorModels, prismaClient, swagger, }: ModelsToOpenApiParameters<M, PrismaClient>) => Promise<{
|
|
123
|
+
examples: Record<string, OpenAPIV3.ExampleObject | OpenAPIV3.ReferenceObject>;
|
|
124
|
+
paths: OpenAPIV3.PathsObject;
|
|
125
|
+
schemas: Record<string, OpenAPIV3.ReferenceObject | OpenAPIV3.SchemaObject>;
|
|
126
|
+
tags: OpenAPIV3.TagObject[];
|
|
127
|
+
}>;
|
|
128
|
+
interface ModelsToOpenApiParameters<M extends string, PrismaClient> {
|
|
129
|
+
crud?: {
|
|
130
|
+
models: ModelsOptions<M>;
|
|
131
|
+
};
|
|
132
|
+
defaultExposeStrategy?: "all" | "none";
|
|
133
|
+
models?: M[];
|
|
134
|
+
prismaClient: FakePrismaClient & PrismaClient;
|
|
135
|
+
swagger?: Partial<{
|
|
136
|
+
allowedMediaTypes: Record<string, boolean>;
|
|
137
|
+
models: SwaggerModelsConfig<M>;
|
|
138
|
+
}>;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
export { Adapter, Condition, ModelsOptions, ModelsToOpenApiParameters, PaginationData, ParsedQueryParameters, PrismaAdapter, RouteType, SearchCondition, SwaggerModelsConfig, modelsToOpenApi };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { HttpError } from 'http-errors';
|
|
2
|
-
import { C as Condition, S as SearchCondition, A as Adapter, F as FakePrismaClient, P as PaginationData, a as ParsedQueryParameters, R as RouteType, M as ModelsOptions } from './types.d-
|
|
3
|
-
export {
|
|
2
|
+
import { C as Condition, S as SearchCondition, A as Adapter, F as FakePrismaClient, P as PaginationData, a as ParsedQueryParameters, R as RouteType, M as ModelsOptions } from './types.d-21565c86.js';
|
|
3
|
+
export { H as CrudHandlerOptions, b as HandlerParameters, c as ModelOption, O as OrderByField, d as OrderByOperator, e as PaginationConfig, f as RecursiveField, U as UniqueResourceHandlerParameters, W as WhereCondition, g as WhereField, h as WhereOperator } from './types.d-21565c86.js';
|
|
4
4
|
import { OpenAPIV3 } from 'openapi-types';
|
|
5
5
|
|
|
6
6
|
type PrismaRecursiveField = "include" | "select";
|
|
@@ -15,137 +15,127 @@ type PrismaFieldFilterOperator = {
|
|
|
15
15
|
[key in PrismaWhereOperator]?: SearchCondition;
|
|
16
16
|
};
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
};
|
|
18
|
+
// eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents
|
|
19
|
+
type PrismaFieldFilter = Record<string, Condition | PrismaFieldFilterOperator | PrismaRelationFilter | SearchCondition | undefined>;
|
|
21
20
|
|
|
22
21
|
type PrismaWhereField = PrismaFieldFilter & {
|
|
23
22
|
AND?: PrismaFieldFilter;
|
|
24
|
-
OR?: PrismaFieldFilter;
|
|
25
23
|
NOT?: PrismaFieldFilter;
|
|
24
|
+
OR?: PrismaFieldFilter;
|
|
26
25
|
};
|
|
27
26
|
|
|
28
|
-
|
|
27
|
+
interface PrismaRelationFilter {
|
|
29
28
|
some?: PrismaFieldFilter | SearchCondition;
|
|
30
|
-
}
|
|
29
|
+
}
|
|
31
30
|
|
|
32
|
-
type PrismaOrderBy =
|
|
33
|
-
[key: string]: PrismaOrderByOperator;
|
|
34
|
-
};
|
|
31
|
+
type PrismaOrderBy = Record<string, PrismaOrderByOperator>;
|
|
35
32
|
|
|
36
|
-
type PrismaCursor =
|
|
37
|
-
[key: string]: boolean | number | string;
|
|
38
|
-
};
|
|
33
|
+
type PrismaCursor = Record<string, boolean | number | string>;
|
|
39
34
|
|
|
40
35
|
interface PrismaParsedQueryParameters {
|
|
41
|
-
|
|
36
|
+
cursor?: PrismaCursor;
|
|
37
|
+
distinct?: string;
|
|
42
38
|
include?: PrismaRecursive<"include">;
|
|
43
|
-
where?: PrismaWhereField;
|
|
44
39
|
orderBy?: PrismaOrderBy;
|
|
45
|
-
|
|
40
|
+
select?: PrismaRecursive<"select">;
|
|
46
41
|
skip?: number;
|
|
47
|
-
|
|
48
|
-
|
|
42
|
+
take?: number;
|
|
43
|
+
where?: PrismaWhereField;
|
|
49
44
|
}
|
|
50
45
|
|
|
51
46
|
interface AdapterCtorArguments<M extends string, PrismaClient> {
|
|
52
|
-
primaryKey?: string;
|
|
53
47
|
manyRelations?: {
|
|
54
48
|
[key in M]?: string[];
|
|
55
49
|
};
|
|
56
|
-
prismaClient: PrismaClient;
|
|
57
50
|
models?: M[];
|
|
51
|
+
primaryKey?: string;
|
|
52
|
+
prismaClient: PrismaClient;
|
|
58
53
|
}
|
|
59
54
|
declare class PrismaAdapter<T, M extends string, PrismaClient> implements Adapter<T, PrismaParsedQueryParameters, M> {
|
|
60
|
-
private readonly
|
|
55
|
+
private readonly ctorModels?;
|
|
56
|
+
private dmmf;
|
|
57
|
+
private readonly getPrismaClientModels;
|
|
61
58
|
private readonly manyRelations;
|
|
59
|
+
private readonly primaryKey;
|
|
62
60
|
private readonly prismaClient;
|
|
63
61
|
models?: M[];
|
|
64
|
-
|
|
65
|
-
private
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
init(): Promise<void>;
|
|
69
|
-
getPaginationData(resourceName: M, query: PrismaParsedQueryParameters): Promise<PaginationData>;
|
|
70
|
-
handleError(error: Error): HttpError;
|
|
71
|
-
parseQuery(resourceName: M, query: ParsedQueryParameters): PrismaParsedQueryParameters;
|
|
72
|
-
getAll(resourceName: M, query: PrismaParsedQueryParameters): Promise<T[]>;
|
|
73
|
-
getOne(resourceName: M, resourceId: number | string, query: PrismaParsedQueryParameters): Promise<T>;
|
|
62
|
+
constructor({ manyRelations, models, primaryKey, prismaClient }: AdapterCtorArguments<M, FakePrismaClient & PrismaClient>);
|
|
63
|
+
private getPrismaDelegate;
|
|
64
|
+
get client(): PrismaClient;
|
|
65
|
+
connect(): Promise<void>;
|
|
74
66
|
create(resourceName: M, data: unknown, query: PrismaParsedQueryParameters): Promise<T>;
|
|
75
|
-
update(resourceName: M, resourceId: number | string, data: unknown, query: PrismaParsedQueryParameters): Promise<T>;
|
|
76
67
|
delete(resourceName: M, resourceId: number | string, query: PrismaParsedQueryParameters): Promise<T>;
|
|
77
|
-
connect(): Promise<void>;
|
|
78
68
|
disconnect(): Promise<void>;
|
|
79
|
-
|
|
69
|
+
getAll(resourceName: M, query: PrismaParsedQueryParameters): Promise<T[]>;
|
|
80
70
|
getModels(): M[];
|
|
71
|
+
getOne(resourceName: M, resourceId: number | string, query: PrismaParsedQueryParameters): Promise<T>;
|
|
72
|
+
getPaginationData(resourceName: M, query: PrismaParsedQueryParameters): Promise<PaginationData>;
|
|
73
|
+
handleError(error: Error): HttpError;
|
|
74
|
+
init(): Promise<void>;
|
|
81
75
|
mapModelsToRouteNames(): Promise<{
|
|
82
76
|
[key in M]?: string;
|
|
83
77
|
}>;
|
|
84
|
-
|
|
78
|
+
parseQuery(resourceName: M, query: ParsedQueryParameters): PrismaParsedQueryParameters;
|
|
79
|
+
update(resourceName: M, resourceId: number | string, data: unknown, query: PrismaParsedQueryParameters): Promise<T>;
|
|
85
80
|
}
|
|
86
81
|
|
|
87
|
-
|
|
88
|
-
name: string;
|
|
89
|
-
isArray?: boolean;
|
|
82
|
+
interface SwaggerType {
|
|
90
83
|
description?: string;
|
|
84
|
+
isArray?: boolean;
|
|
85
|
+
name: string;
|
|
91
86
|
required?: boolean;
|
|
92
|
-
}
|
|
87
|
+
}
|
|
93
88
|
|
|
94
|
-
|
|
95
|
-
summary?: string;
|
|
96
|
-
responses?: Record<number, any>;
|
|
89
|
+
interface SwaggerOperation {
|
|
97
90
|
body?: SwaggerType;
|
|
98
91
|
response: SwaggerType;
|
|
99
|
-
|
|
92
|
+
responses?: Record<number, any>;
|
|
93
|
+
summary?: string;
|
|
94
|
+
}
|
|
100
95
|
|
|
101
|
-
|
|
102
|
-
name: string;
|
|
96
|
+
interface SwaggerParameter {
|
|
103
97
|
description?: string;
|
|
98
|
+
name: string;
|
|
99
|
+
// eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents
|
|
104
100
|
schema: any & {
|
|
105
101
|
type: string;
|
|
106
102
|
};
|
|
107
|
-
}
|
|
103
|
+
}
|
|
108
104
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
type?: SwaggerType;
|
|
105
|
+
interface ModelsConfig {
|
|
106
|
+
additionalQueryParams?: SwaggerParameter[];
|
|
112
107
|
routeTypes?: {
|
|
108
|
+
[RouteType.CREATE]?: SwaggerOperation;
|
|
109
|
+
[RouteType.DELETE]?: SwaggerOperation;
|
|
113
110
|
[RouteType.READ_ALL]?: SwaggerOperation;
|
|
114
111
|
[RouteType.READ_ONE]?: SwaggerOperation;
|
|
115
|
-
[RouteType.CREATE]?: SwaggerOperation;
|
|
116
112
|
[RouteType.UPDATE]?: SwaggerOperation;
|
|
117
|
-
[RouteType.DELETE]?: SwaggerOperation;
|
|
118
113
|
};
|
|
119
|
-
|
|
120
|
-
|
|
114
|
+
tag: OpenAPIV3.TagObject;
|
|
115
|
+
type?: SwaggerType;
|
|
116
|
+
}
|
|
121
117
|
|
|
122
118
|
type SwaggerModelsConfig<M extends string> = {
|
|
123
119
|
[key in M]?: ModelsConfig;
|
|
124
120
|
};
|
|
125
121
|
|
|
126
|
-
declare const modelsToOpenApi: <M extends string = string, PrismaClient = FakePrismaClient>({
|
|
127
|
-
|
|
128
|
-
[key: string]: OpenAPIV3.SchemaObject | OpenAPIV3.ReferenceObject;
|
|
129
|
-
};
|
|
130
|
-
examples: {
|
|
131
|
-
[key: string]: OpenAPIV3.ExampleObject | OpenAPIV3.ReferenceObject;
|
|
132
|
-
};
|
|
133
|
-
tags: OpenAPIV3.TagObject[];
|
|
122
|
+
declare const modelsToOpenApi: <M extends string = string, PrismaClient = FakePrismaClient>({ crud, defaultExposeStrategy, models: ctorModels, prismaClient, swagger, }: ModelsToOpenApiParameters<M, PrismaClient>) => Promise<{
|
|
123
|
+
examples: Record<string, OpenAPIV3.ExampleObject | OpenAPIV3.ReferenceObject>;
|
|
134
124
|
paths: OpenAPIV3.PathsObject;
|
|
125
|
+
schemas: Record<string, OpenAPIV3.ReferenceObject | OpenAPIV3.SchemaObject>;
|
|
126
|
+
tags: OpenAPIV3.TagObject[];
|
|
135
127
|
}>;
|
|
136
128
|
interface ModelsToOpenApiParameters<M extends string, PrismaClient> {
|
|
137
|
-
|
|
129
|
+
crud?: {
|
|
130
|
+
models: ModelsOptions<M>;
|
|
131
|
+
};
|
|
138
132
|
defaultExposeStrategy?: "all" | "none";
|
|
139
133
|
models?: M[];
|
|
134
|
+
prismaClient: FakePrismaClient & PrismaClient;
|
|
140
135
|
swagger?: Partial<{
|
|
136
|
+
allowedMediaTypes: Record<string, boolean>;
|
|
141
137
|
models: SwaggerModelsConfig<M>;
|
|
142
|
-
allowedMediaTypes: {
|
|
143
|
-
[key: string]: boolean;
|
|
144
|
-
};
|
|
145
138
|
}>;
|
|
146
|
-
crud?: {
|
|
147
|
-
models: ModelsOptions<M>;
|
|
148
|
-
};
|
|
149
139
|
}
|
|
150
140
|
|
|
151
141
|
export { Adapter, Condition, ModelsOptions, ModelsToOpenApiParameters, PaginationData, ParsedQueryParameters, PrismaAdapter, RouteType, SearchCondition, SwaggerModelsConfig, modelsToOpenApi };
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkDOLZ4YNP_js = require('./chunk-DOLZ4YNP.js');
|
|
4
4
|
var W = require('http-errors');
|
|
5
5
|
var pagination = require('@visulima/pagination');
|
|
6
6
|
var prismaDmmfTransformer = require('@visulima/prisma-dmmf-transformer');
|
|
@@ -9,13 +9,13 @@ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
|
9
9
|
|
|
10
10
|
var W__default = /*#__PURE__*/_interopDefault(W);
|
|
11
11
|
|
|
12
|
-
var X=(s,e)=>{let t={};return e.forEach(r=>{t[r]=s[r].plural;}),t},M=X;var Y=new Set(["string","boolean","number"]),N=s=>Y.has(typeof s),O=N;var q=s=>{let e={};if(Object.keys(s).forEach(t=>{let r=s[t];O(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},k=q;var ee={$asc:"asc",$desc:"desc"},te=s=>{let e={};return Object.keys(s).forEach(t=>{let r=s[t];e[t]=ee[r];}),e},$=te;var I=(s,e)=>{let t={};return Object.keys(s).forEach(r=>{t[r]=s[r]===!0?!0:{[e]:I(s[r],e)};}),t},w=I;var j=s=>s instanceof Object,re={$eq:"equals",$neq:"not",$cont:"contains",$ends:"endsWith",$gt:"gt",$gte:"gte",$in:"in",$lt:"lt",$lte:"lte",$notin:"notIn",$starts:"startsWith"},se=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),ne=s=>se(s)?new Date(s):typeof s=="string"&&s==="$isnull"?null:s,D=(s,e)=>{let t=s.split(".");return t.splice(-1,1),e.includes(t.join("."))},F=s=>{let e=Object.keys(s)[0],t=re[e];if(t)return {[t]:s[e]}},V=(s,e,t,r)=>{let n=e.split(".").reverse(),a={};n.forEach((p,c)=>{c===0?v(s,p,a,r):a={[p]:{some:a}};});let i=n.reverse()[0],o=t[i];t[i]={some:{...o?.some,...a[i]?.some}};},C=(s,e)=>{let t={};return Object.keys(s).forEach(r=>{let n=s[r];if(D(r,e))V(n,r,t,e);else if(O(n))t[r]=n;else if(j(n)){let a=F(n);a&&(t[r]=a);}}),t},v=(s,e,t,r)=>{if(O(s))t[e]=ne(s);else switch(e){case"$or":{j(s)&&(t.OR=C(s,r));break}case"$and":{j(s)&&(t.AND=C(s,r));break}case"$not":{j(s)&&(t.NOT=C(s,r));break}default:{t[e]=F(s);break}}},ie=(s,e)=>{let t={};return Object.keys(s).forEach(r=>{let n=s[r];D(r,e)?V(n,r,t,e):v(n,r,t,e);}),t},B=ie;var E=class{constructor({primaryKey:e="id",prismaClient:t,manyRelations:r={},models:n}){this.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")};this.prismaClient=t,this.primaryKey=e,this.manyRelations=r,this.ctorModels=n;}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 getPaginationData(e,t){let r=await this.getPrismaDelegate(e).count({where:t.where,distinct:t.distinct});return {total:r,pageCount:Math.ceil(r/(t.take??0)),page:Math.ceil((t.skip??0)/(t.take??0))+1}}handleError(e){throw console.error(e),e instanceof Error&&e.stack&&console.error(e.stack),e.constructor.name==="PrismaClientKnownRequestError"||e.constructor.name==="PrismaClientValidationError"?W__default.default(400,"invalid request, check your server logs for more info"):W__default.default(500,"an unknown error occured, check your server logs for more info")}parseQuery(e,t){let r={};return t.select&&(r.select=w(t.select,"select")),t.include&&(r.include=w(t.include,"include")),t.originalQuery?.where&&(r.where=B(JSON.parse(t.originalQuery.where),this.manyRelations[e]??[])),t.orderBy&&(r.orderBy=$(t.orderBy)),t.limit!==void 0&&(r.take=t.limit),t.skip!==void 0&&(r.skip=t.skip),t.originalQuery?.cursor&&(r.cursor=k(JSON.parse(t.originalQuery.cursor))),t.distinct&&(r.distinct=t.distinct),r}async getAll(e,t){return await this.getPrismaDelegate(e).findMany({select:t.select,include:t.include,where:t.where,orderBy:t.orderBy,cursor:t.cursor,take:t.take,skip:t.skip,distinct:t.distinct})}async getOne(e,t,r){let n=this.getPrismaDelegate(e);return (n.findUnique??n.findOne)({where:{[this.primaryKey]:t},select:r.select,include:r.include})}async create(e,t,r){return this.getPrismaDelegate(e).create({data:t,select:r.select,include:r.include})}async update(e,t,r,n){return this.getPrismaDelegate(e).update({where:{[this.primaryKey]:t},data:r,select:n.select,include:n.include})}async delete(e,t,r){return this.getPrismaDelegate(e).delete({where:{[this.primaryKey]:t},select:r.select,include:r.include})}async connect(){this.prismaClient.$connect();}async disconnect(){this.prismaClient.$disconnect();}get client(){return this.prismaClient}getModels(){return this.models??[]}async mapModelsToRouteNames(){return M(await this.getPrismaClientModels(),this.getModels())}getPrismaDelegate(e){return this.prismaClient[`${e.charAt(0).toLowerCase()}${e.slice(1)}`]}};var ae=s=>`#/components/schemas/${s}`,f=ae;var Q=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 ""}},S="PaginationData",me=[{methodStart:"createOne",schemaNameStart:"Create"},{methodStart:"updateOne",schemaNameStart:"Update"}],R=class{constructor(e){this.dmmf=e;this.schemaInputTypes=new Map;}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}parseInputTypes(e){let t=e.reduce((r,n)=>(me.map(i=>({name:`${i.methodStart}${n}`,schemaName:`${i.schemaNameStart}${n}`})).forEach(({name:i,schemaName:o})=>{let p=this.dmmf.mutationType.fieldMap[i].args[0].inputTypes[0].type.fields,c=[],l=p.reduce((d,m)=>{if(m.inputTypes[0].kind==="scalar"){let u=prismaDmmfTransformer.getJSONSchemaProperty(this.dmmf.datamodel,{})({name:m.name,...m.inputTypes[0]}),{type:g}=u[1];g&&Array.isArray(g)?g.includes("null")&&(d[m.name]={...g,type:g.filter(b=>b!=="null"),nullable:!0},d[m.name].type.length===1&&(d[m.name]={...d[m.name],type:d[m.name].type[0]})):d[m.name]=u[1];}else {let u=this.parseObjectInputType(m.inputTypes[0]);d[m.name]={...u,nullable:m.isNullable};}return m.isRequired&&c.push(m.name),d},{});r[o]={type:"object",xml:{name:o},properties:l},c.length>0&&(r[o].required=c);}),r),{});return this.schemaInputTypes.forEach((r,n)=>{t[n]={type:"object",xml:{name:n},properties:r};}),t}formatInputTypeData(e){if(e.kind==="object"){let r=f(e.type.name);return e.isList?{type:"array",xml:{name:e.type.name,wrapped:!0},items:{$ref:r}}:{$ref:r}}let t=Q(e.type);return e.isList?{type:"array",xml:{name:e.type.name,wrapped:!0},items:{type:t}}:{type:t}}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:f(e.type.name)}):{type:Q(e.type)}}getPaginationDataSchema(){return pagination.createPaginationMetaSchemaObject(S)}getExampleModelsSchemas(e,t){let r=i=>{let o=i.replace("#/components/schemas/",""),p=t[o],c={};return Object.entries(p.properties??{}).forEach(([l,d])=>{let m=d.type;c[l]=m==="array"?[a(d.items)]:m;}),c},n=i=>{let o={};return Object.entries(i).forEach(([p,c])=>{o[p]=c.$ref===void 0?c.type:r(c.$ref);}),o},a=i=>{let o={};return Object.entries(i).forEach(([p,c])=>{c.items.$ref!==void 0?o[p]=[r(c.items.$ref)]:c.type==="array"?o[p]=[a(c.items)]:c.type==="object"?o[p]=n(c.properties):o[p]=c.type;}),o};return e.reduce((i,o)=>{let p={},c=t[o];Object.entries(c.properties).forEach(([m,u])=>{let g=u.type;g==="array"?p[m]=[r(u.items.$ref)]:g==="object"?p[m]=n(u.properties):p[m]=g;});let l=this.getPaginationDataSchema()[S],d={};return Object.entries(l.properties).forEach(([m,u])=>{d[m]=u.type;}),{...i,[`${o}`]:{value:p},[`${o}s`]:{value:[p]},[`${o}Page`]:{value:{data:[p],meta:d}}}},{})}getPaginatedModelsSchemas(e){return e.reduce((t,r)=>({...t,[`${r}Page`]:{type:"object",xml:{name:`${r}Page`},properties:{data:{type:"array",xml:{name:"data",wrapped:!0},items:{$ref:f(r)}},meta:{$ref:f(S)}}}}),{})}},_=R;var de=(s,e,t="all")=>s.reduce((r,n)=>e?.[n]?{...r,[n]:chunkYZ63YP4Q_js.b(e[n].only,e[n].exclude,t)}:{...r,[n]:chunkYZ63YP4Q_js.b(void 0,void 0,t)},{}),L=de;var y={select:{name:"select",description:"Fields to select. For nested fields, chain them separated with a dot, eg: user.posts",schema:{type:"string"}},include:{name:"include",description:"Include relations, same as select",schema:{type:"string"}},where:{name:"where",description:'Fields to filter. See <a href="https://next-crud.js.org/query-params#where">the docs</a>',schema:{type:"string"}},orderBy:{name:"orderBy",description:'Field on which to order by a direction. See <a href="https://next-crud.js.org/query-params#orderBy">the docs</a>',schema:{type:"string"}},limit:{name:"limit",description:"Maximum number of elements to retrieve",schema:{type:"integer",minimum:0}},skip:{name:"skip",description:"Number of rows to skip",schema:{type:"integer",minimum:0}},distinct:{name:"distinct",description:"Fields to distinctively retrieve",schema:{type:"string"}},page:{name:"page",description:"Page number. Use only for pagination.",schema:{type:"integer",minimum:1}}},U=[y.select,y.include],le=[...U,y.limit,y.skip,y.where,y.orderBy,y.page,y.distinct],H=(s,e=[])=>s==="READ_ALL"?[...le,...e].filter(Boolean):[...U,...e].filter(Boolean);var ue=s=>`#/components/examples/${s}`,h=ue;var P=(s,e)=>e?{type:"array",items:{$ref:f(s)}}:{$ref:f(s)},ge=(s,e)=>{if(s==="CREATE")return {statusCode:201,content:{description:`${e} created`,content:{"application/json":{schema:P(e),example:h(e)}}}};if(s==="DELETE")return {statusCode:200,content:{description:`${e} item deleted`,content:{"application/json":{schema:P(e),example:h(e)}}}};if(s==="READ_ALL")return {statusCode:200,content:{description:`${e} list retrieved`,content:{"application/json":{schema:{oneOf:[P(e,!0),P(`${e}Page`,!1)]},examples:{Default:{$ref:h(`${e}s`)},Pagination:{$ref:h(`${e}Page`)}}}}}};if(s==="READ_ONE")return {statusCode:200,content:{description:`${e} item retrieved`,content:{"application/json":{schema:P(e),example:h(e)}}}};if(s==="UPDATE")return {statusCode:200,content:{description:`${e} item updated`,content:{"application/json":{schema:P(e),example:h(e)}}}}},J=(s,e)=>({content:{"application/json":{schema:{$ref:f(`${s}${e}`)}}}}),fe=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.`)}},K=({tag:s,routeTypes:e,modelName:t,modelsConfig:r,hasId:n})=>{let a={};return e.forEach(i=>{if(e.includes(i)){let o=r?.[t]?.routeTypes?.[i]?.response.name??r?.[t]?.type?.name??t,p=fe(i),c=ge(i,o);if(c===void 0)throw new TypeError(`Route type ${i}; response config was not found.`);a[p]={tags:[s],summary:r?.[t]?.routeTypes?.[i]?.summary,parameters:H(i).map(l=>({...l,in:"query"})),responses:{[c.statusCode]:c.content,...r?.[t]?.routeTypes?.[i]?.responses}},n&&a[p].parameters.push({in:"path",name:"id",description:`ID of the ${t}`,required:!0,schema:{type:"string"}}),i==="UPDATE"?a[p].requestBody=J("Update",o):i==="CREATE"&&(a[p].requestBody=J("Create",o));}}),a},ye=({routes:s,models:e,modelsConfig:t,routesMap:r})=>Object.keys(s).reduce((n,a)=>{let i=s[a],o=e?.[a]?.name?e[a].name:r?.[a]??a,p=t?.[a]?.tag.name??a;if(i.includes("CREATE")||i.includes("READ_ALL")){let c=`/${o}`,l=["READ_ALL","CREATE"].filter(d=>i.includes(d));n[c]=K({tag:p,modelName:a,modelsConfig:t,routeTypes:l});}if(i.includes("READ_ONE")||i.includes("UPDATE")||i.includes("DELETE")){let c=`/${o}/{id}`,l=["READ_ONE","UPDATE","DELETE"].filter(d=>i.includes(d));n[c]=K({tag:p,modelName:a,modelsConfig:t,routeTypes:l,hasId:!0});}return n},{}),G=ye;var he=(s,e)=>s.map(t=>e?.[t].tag?e[t].tag:{name:t}),Z=he;var Pe=(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),Oe=async({prismaClient:s,models:e,swagger:t={models:{},allowedMediaTypes:{"application/json":!0}},crud:r={models:{}},defaultExposeStrategy:n="all"})=>{let a,i;if(s._dmmf!==void 0?(a=s._dmmf,i=a?.mappingsMap):s._getDmmf!==void 0&&(a=await s._getDmmf(),i=a.mappingsMap),a===void 0)throw new TypeError("Couldn't get prisma client models");let o=new _(a),p=o.parseModels(),c=Object.keys(p),l=JSON.stringify({...p,...o.parseInputTypes(c),...o.getPaginationDataSchema(),...o.getPaginatedModelsSchemas(c)});e!==void 0&&e.forEach(x=>{if(!Object.keys(i).includes(x))throw new Error(`Model name ${x} is invalid.`)});let d=e??Object.keys(i),m=L(d,r.models,n),u=Z(d,t.models),g=G({routes:m,modelsConfig:t.models,models:r.models,routesMap:M(i,d)}),b=JSON.parse(l.replaceAll("#/definitions","#/components/schemas")),T=o.getExampleModelsSchemas(c,b);return {schemas:b,examples:T,tags:u,paths:Pe(g,T)}},be=Oe;
|
|
12
|
+
var X=(s,e)=>{let t={};return e.forEach(r=>{t[r]=s[r].plural;}),t},M=X;var Y=new Set(["string","boolean","number"]),N=s=>Y.has(typeof s),O=N;var q=s=>{let e={};if(Object.keys(s).forEach(t=>{let r=s[t];O(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},$=q;var ee={$asc:"asc",$desc:"desc"},te=s=>{let e={};return Object.keys(s).forEach(t=>{let r=s[t];e[t]=ee[r];}),e},I=te;var D=(s,e)=>{let t={};return Object.keys(s).forEach(r=>{t[r]=s[r]===!0?!0:{[e]:D(s[r],e)};}),t},E=D;var R=s=>s instanceof Object,re={$cont:"contains",$ends:"endsWith",$eq:"equals",$gt:"gt",$gte:"gte",$in:"in",$lt:"lt",$lte:"lte",$neq:"not",$notin:"notIn",$starts:"startsWith"},se=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),ne=s=>se(s)?new Date(s):typeof s=="string"&&s==="$isnull"?null:s,F=(s,e)=>{let t=s.split(".");return t.splice(-1,1),e.includes(t.join("."))},k=s=>{let e=Object.keys(s)[0],t=re[e];if(t)return {[t]:s[e]}},V=(s,e,t,r)=>{let n=e.split(".").reverse(),a={};n.forEach((p,c)=>{c===0?v(s,p,a,r):a={[p]:{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(F(r,e))V(n,r,t,e);else if(O(n))t[r]=n;else if(R(n)){let a=k(n);a&&(t[r]=a);}}),t},v=(s,e,t,r)=>{if(O(s))t[e]=ne(s);else switch(e){case"$or":{R(s)&&(t.OR=A(s,r));break}case"$and":{R(s)&&(t.AND=A(s,r));break}case"$not":{R(s)&&(t.NOT=A(s,r));break}default:{t[e]=k(s);break}}},ie=(s,e)=>{let t={};return Object.keys(s).forEach(r=>{let n=s[r];F(r,e)?V(n,r,t,e):v(n,r,t,e);}),t},B=ie;var j=class{constructor({manyRelations:e={},models:t,primaryKey:r="id",prismaClient:n}){this.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")};this.prismaClient=n,this.primaryKey=r,this.manyRelations=e,this.ctorModels=t;}getPrismaDelegate(e){return this.prismaClient[`${e.charAt(0).toLowerCase()}${e.slice(1)}`]}get client(){return this.prismaClient}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"?W__default.default(400,"invalid request, check your server logs for more info"):W__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 M(await this.getPrismaClientModels(),this.getModels())}parseQuery(e,t){let r={};return t.select&&(r.select=E(t.select,"select")),t.include&&(r.include=E(t.include,"include")),t.originalQuery?.where&&(r.where=B(JSON.parse(t.originalQuery.where),this.manyRelations[e]??[])),t.orderBy&&(r.orderBy=I(t.orderBy)),t.limit!==void 0&&(r.take=t.limit),t.skip!==void 0&&(r.skip=t.skip),t.originalQuery?.cursor&&(r.cursor=$(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}})}};var ae=s=>`#/components/schemas/${s}`,f=ae;var Q=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 ""}},C="PaginationData",me=[{methodStart:"createOne",schemaNameStart:"Create"},{methodStart:"updateOne",schemaNameStart:"Update"}],S=class{constructor(e){this.dmmf=e;this.schemaInputTypes=new Map;}formatInputTypeData(e){if(e.kind==="object"){let r=f(e.type.name);return e.isList?{items:{$ref:r},type:"array",xml:{name:e.type.name,wrapped:!0}}:{$ref:r}}let t=Q(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/",""),p=t[o],c={};return Object.entries(p.properties??{}).forEach(([l,d])=>{let m=d.type;c[l]=m==="array"?[a(d.items)]:m;}),c},n=i=>{let o={};return Object.entries(i).forEach(([p,c])=>{o[p]=c.$ref===void 0?c.type:r(c.$ref);}),o},a=i=>{let o={};return Object.entries(i).forEach(([p,c])=>{c.items.$ref!==void 0?o[p]=[r(c.items.$ref)]:c.type==="array"?o[p]=[a(c.items)]:c.type==="object"?o[p]=n(c.properties):o[p]=c.type;}),o};return e.reduce((i,o)=>{let p={},c=t[o];Object.entries(c.properties).forEach(([m,g])=>{let u=g.type;u==="array"?p[m]=[r(g.items.$ref)]:u==="object"?p[m]=n(g.properties):p[m]=u;});let l=this.getPaginationDataSchema()[C],d={};return Object.entries(l.properties).forEach(([m,g])=>{d[m]=g.type;}),{...i,[`${o}`]:{value:p},[`${o}Page`]:{value:{data:[p],meta:d}},[`${o}s`]:{value:[p]}}},{})}getPaginatedModelsSchemas(e){return e.reduce((t,r)=>({...t,[`${r}Page`]:{properties:{data:{items:{$ref:f(r)},type:"array",xml:{name:"data",wrapped:!0}},meta:{$ref:f(C)}},type:"object",xml:{name:`${r}Page`}}}),{})}getPaginationDataSchema(){return pagination.createPaginationMetaSchemaObject(C)}parseInputTypes(e){let t=e.reduce((r,n)=>(me.map(i=>({name:`${i.methodStart}${n}`,schemaName:`${i.schemaNameStart}${n}`})).forEach(({name:i,schemaName:o})=>{let p=this.dmmf.mutationType.fieldMap[i].args[0].inputTypes[0].type.fields,c=[],l=p.reduce((d,m)=>{if(m.inputTypes[0].kind==="scalar"){let g=prismaDmmfTransformer.getJSONSchemaProperty(this.dmmf.datamodel,{})({name:m.name,...m.inputTypes[0]}),{type:u}=g[1];u&&Array.isArray(u)?u.includes("null")&&(d[m.name]={...u,nullable:!0,type:u.filter(b=>b!=="null")},d[m.name].type.length===1&&(d[m.name]={...d[m.name],type:d[m.name].type[0]})):d[m.name]=g[1];}else {let g=this.parseObjectInputType(m.inputTypes[0]);d[m.name]={...g,nullable:m.isNullable};}return m.isRequired&&c.push(m.name),d},{});r[o]={properties:l,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:f(e.type.name)}):{type:Q(e.type)}}},_=S;var de=(s,e,t="all")=>s.reduce((r,n)=>e?.[n]?{...r,[n]:chunkDOLZ4YNP_js.b(e[n].only,e[n].exclude,t)}:{...r,[n]:chunkDOLZ4YNP_js.b(void 0,void 0,t)},{}),L=de;var h={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"}}},U=[h.select,h.include],le=[...U,h.limit,h.skip,h.where,h.orderBy,h.page,h.distinct],H=(s,e=[])=>s==="READ_ALL"?[...le,...e].filter(Boolean):[...U,...e].filter(Boolean);var ge=s=>`#/components/examples/${s}`,y=ge;var P=(s,e)=>e?{items:{$ref:f(s)},type:"array"}:{$ref:f(s)},ue=(s,e)=>{if(s==="CREATE")return {content:{content:{"application/json":{example:y(e),schema:P(e)}},description:`${e} created`},statusCode:201};if(s==="DELETE")return {content:{content:{"application/json":{example:y(e),schema:P(e)}},description:`${e} item deleted`},statusCode:200};if(s==="READ_ALL")return {content:{content:{"application/json":{examples:{Default:{$ref:y(`${e}s`)},Pagination:{$ref:y(`${e}Page`)}},schema:{oneOf:[P(e,!0),P(`${e}Page`,!1)]}}},description:`${e} list retrieved`},statusCode:200};if(s==="READ_ONE")return {content:{content:{"application/json":{example:y(e),schema:P(e)}},description:`${e} item retrieved`},statusCode:200};if(s==="UPDATE")return {content:{content:{"application/json":{example:y(e),schema:P(e)}},description:`${e} item updated`},statusCode:200}},J=(s,e)=>({content:{"application/json":{schema:{$ref:f(`${s}${e}`)}}}}),fe=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.`)}},K=({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,p=fe(i),c=ue(i,o);if(c===void 0)throw new TypeError(`Route type ${i}; response config was not found.`);a[p]={parameters:H(i).map(l=>({...l,in:"query"})),responses:{[c.statusCode]:c.content,...t?.[e]?.routeTypes?.[i]?.responses},summary:t?.[e]?.routeTypes?.[i]?.summary,tags:[n]},s&&a[p].parameters.push({description:`ID of the ${e}`,in:"path",name:"id",required:!0,schema:{type:"string"}}),i==="UPDATE"?a[p].requestBody=J("Update",o):i==="CREATE"&&(a[p].requestBody=J("Create",o));}}),a},he=({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,p=e?.[a]?.tag.name??a;if(i.includes("CREATE")||i.includes("READ_ALL")){let c=`/${o}`,l=["READ_ALL","CREATE"].filter(d=>i.includes(d));n[c]=K({modelName:a,modelsConfig:e,routeTypes:l,tag:p});}if(i.includes("READ_ONE")||i.includes("UPDATE")||i.includes("DELETE")){let c=`/${o}/{id}`,l=["READ_ONE","UPDATE","DELETE"].filter(d=>i.includes(d));n[c]=K({hasId:!0,modelName:a,modelsConfig:e,routeTypes:l,tag:p});}return n},{}),G=he;var ye=(s,e)=>s.map(t=>e?.[t]?.tag?e[t].tag:{name:t}),Z=ye;var Pe=(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),Oe=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 _(a),p=o.parseModels(),c=Object.keys(p),l=JSON.stringify({...p,...o.parseInputTypes(c),...o.getPaginationDataSchema(),...o.getPaginatedModelsSchemas(c)});t!==void 0&&t.forEach(x=>{if(!Object.keys(i).includes(x))throw new Error(`Model name ${x} is invalid.`)});let d=t??Object.keys(i),m=L(d,s.models,e),g=Z(d,n.models),u=G({models:s.models,modelsConfig:n.models,routes:m,routesMap:M(i,d)}),b=JSON.parse(l.replaceAll("#/definitions","#/components/schemas")),T=o.getExampleModelsSchemas(c,b);return {examples:T,paths:Pe(u,T),schemas:b,tags:g}},be=Oe;
|
|
13
13
|
|
|
14
14
|
Object.defineProperty(exports, 'RouteType', {
|
|
15
15
|
enumerable: true,
|
|
16
|
-
get: function () { return
|
|
16
|
+
get: function () { return chunkDOLZ4YNP_js.a; }
|
|
17
17
|
});
|
|
18
|
-
exports.PrismaAdapter =
|
|
18
|
+
exports.PrismaAdapter = j;
|
|
19
19
|
exports.modelsToOpenApi = be;
|
|
20
20
|
//# sourceMappingURL=out.js.map
|
|
21
21
|
//# sourceMappingURL=index.js.map
|