@dokploy/trpc-openapi 0.0.9 → 0.0.11
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/LICENSE +4 -16
- package/README.md +164 -86
- package/dist/cjs/adapters/express.d.ts +6 -0
- package/dist/cjs/adapters/express.d.ts.map +1 -0
- package/dist/{adapters → cjs/adapters}/express.js +2 -2
- package/dist/cjs/adapters/express.js.map +1 -0
- package/dist/cjs/adapters/fastify.d.ts +9 -0
- package/dist/cjs/adapters/fastify.d.ts.map +1 -0
- package/dist/cjs/adapters/fastify.js +65 -0
- package/dist/cjs/adapters/fastify.js.map +1 -0
- package/dist/cjs/adapters/fetch.d.ts +8 -0
- package/dist/cjs/adapters/fetch.d.ts.map +1 -0
- package/dist/cjs/adapters/fetch.js +100 -0
- package/dist/cjs/adapters/fetch.js.map +1 -0
- package/dist/cjs/adapters/index.d.ts +9 -0
- package/dist/cjs/adapters/index.d.ts.map +1 -0
- package/dist/cjs/adapters/index.js +25 -0
- package/dist/cjs/adapters/index.js.map +1 -0
- package/dist/cjs/adapters/koa.d.ts +9 -0
- package/dist/cjs/adapters/koa.d.ts.map +1 -0
- package/dist/cjs/adapters/koa.js +12 -0
- package/dist/cjs/adapters/koa.js.map +1 -0
- package/dist/cjs/adapters/next.d.ts +6 -0
- package/dist/cjs/adapters/next.d.ts.map +1 -0
- package/dist/{adapters → cjs/adapters}/next.js +15 -10
- package/dist/cjs/adapters/next.js.map +1 -0
- package/dist/{adapters → cjs/adapters}/node-http/core.d.ts +4 -3
- package/dist/cjs/adapters/node-http/core.d.ts.map +1 -0
- package/dist/{adapters → cjs/adapters}/node-http/core.js +72 -49
- package/dist/cjs/adapters/node-http/core.js.map +1 -0
- package/dist/cjs/adapters/node-http/errors.d.ts +6 -0
- package/dist/cjs/adapters/node-http/errors.d.ts.map +1 -0
- package/dist/cjs/adapters/node-http/errors.js +94 -0
- package/dist/cjs/adapters/node-http/errors.js.map +1 -0
- package/dist/cjs/adapters/node-http/index.d.ts +5 -0
- package/dist/cjs/adapters/node-http/index.d.ts.map +1 -0
- package/dist/cjs/adapters/node-http/index.js +21 -0
- package/dist/cjs/adapters/node-http/index.js.map +1 -0
- package/dist/{adapters → cjs/adapters}/node-http/input.d.ts +2 -2
- package/dist/cjs/adapters/node-http/input.d.ts.map +1 -0
- package/dist/{adapters → cjs/adapters}/node-http/input.js +7 -10
- package/dist/cjs/adapters/node-http/input.js.map +1 -0
- package/dist/{adapters → cjs/adapters}/node-http/procedures.d.ts +2 -2
- package/dist/cjs/adapters/node-http/procedures.d.ts.map +1 -0
- package/dist/{adapters → cjs/adapters}/node-http/procedures.js +10 -21
- package/dist/cjs/adapters/node-http/procedures.js.map +1 -0
- package/dist/cjs/adapters/nuxt.d.ts +6 -0
- package/dist/cjs/adapters/nuxt.d.ts.map +1 -0
- package/dist/cjs/adapters/nuxt.js +50 -0
- package/dist/cjs/adapters/nuxt.js.map +1 -0
- package/dist/{adapters → cjs/adapters}/standalone.d.ts +3 -3
- package/dist/cjs/adapters/standalone.d.ts.map +1 -0
- package/dist/{adapters → cjs/adapters}/standalone.js +5 -1
- package/dist/cjs/adapters/standalone.js.map +1 -0
- package/dist/cjs/generator/index.d.ts +40 -0
- package/dist/cjs/generator/index.d.ts.map +1 -0
- package/dist/cjs/generator/index.js +33 -0
- package/dist/cjs/generator/index.js.map +1 -0
- package/dist/cjs/generator/paths.d.ts +16 -0
- package/dist/cjs/generator/paths.d.ts.map +1 -0
- package/dist/cjs/generator/paths.js +122 -0
- package/dist/cjs/generator/paths.js.map +1 -0
- package/dist/cjs/generator/schema.d.ts +15 -0
- package/dist/cjs/generator/schema.d.ts.map +1 -0
- package/dist/cjs/generator/schema.js +195 -0
- package/dist/cjs/generator/schema.js.map +1 -0
- package/dist/cjs/index.d.ts +6 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +24 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/types.d.ts +55 -0
- package/dist/cjs/types.d.ts.map +1 -0
- package/dist/cjs/types.js.map +1 -0
- package/dist/cjs/utils/index.d.ts +5 -0
- package/dist/cjs/utils/index.d.ts.map +1 -0
- package/dist/{adapters → cjs/utils}/index.js +4 -3
- package/dist/cjs/utils/index.js.map +1 -0
- package/dist/cjs/utils/method.d.ts +6 -0
- package/dist/cjs/utils/method.d.ts.map +1 -0
- package/dist/cjs/utils/method.js +29 -0
- package/dist/cjs/utils/method.js.map +1 -0
- package/dist/cjs/utils/path.d.ts.map +1 -0
- package/dist/{utils → cjs/utils}/path.js +1 -1
- package/dist/cjs/utils/path.js.map +1 -0
- package/dist/cjs/utils/procedure.d.ts +18 -0
- package/dist/cjs/utils/procedure.d.ts.map +1 -0
- package/dist/cjs/utils/procedure.js +83 -0
- package/dist/cjs/utils/procedure.js.map +1 -0
- package/dist/cjs/utils/zod.d.ts +16 -0
- package/dist/cjs/utils/zod.d.ts.map +1 -0
- package/dist/cjs/utils/zod.js +96 -0
- package/dist/cjs/utils/zod.js.map +1 -0
- package/dist/esm/adapters/express.d.ts +6 -0
- package/dist/esm/adapters/express.d.ts.map +1 -0
- package/dist/esm/adapters/express.js +8 -0
- package/dist/esm/adapters/express.js.map +1 -0
- package/dist/esm/adapters/fastify.d.ts +9 -0
- package/dist/esm/adapters/fastify.d.ts.map +1 -0
- package/dist/esm/adapters/fastify.js +61 -0
- package/dist/esm/adapters/fastify.js.map +1 -0
- package/dist/esm/adapters/fetch.d.ts +8 -0
- package/dist/esm/adapters/fetch.d.ts.map +1 -0
- package/dist/esm/adapters/fetch.js +95 -0
- package/dist/esm/adapters/fetch.js.map +1 -0
- package/dist/esm/adapters/index.d.ts +9 -0
- package/dist/esm/adapters/index.d.ts.map +1 -0
- package/dist/esm/adapters/index.js +9 -0
- package/dist/esm/adapters/index.js.map +1 -0
- package/dist/esm/adapters/koa.d.ts +9 -0
- package/dist/esm/adapters/koa.d.ts.map +1 -0
- package/dist/esm/adapters/koa.js +8 -0
- package/dist/esm/adapters/koa.js.map +1 -0
- package/dist/esm/adapters/next.d.ts +6 -0
- package/dist/esm/adapters/next.d.ts.map +1 -0
- package/dist/esm/adapters/next.js +45 -0
- package/dist/esm/adapters/next.js.map +1 -0
- package/dist/esm/adapters/node-http/core.d.ts +7 -0
- package/dist/esm/adapters/node-http/core.d.ts.map +1 -0
- package/dist/esm/adapters/node-http/core.js +166 -0
- package/dist/esm/adapters/node-http/core.js.map +1 -0
- package/dist/esm/adapters/node-http/errors.d.ts +6 -0
- package/dist/esm/adapters/node-http/errors.d.ts.map +1 -0
- package/dist/esm/adapters/node-http/errors.js +90 -0
- package/dist/esm/adapters/node-http/errors.js.map +1 -0
- package/dist/esm/adapters/node-http/index.d.ts +5 -0
- package/dist/esm/adapters/node-http/index.d.ts.map +1 -0
- package/dist/esm/adapters/node-http/index.js +5 -0
- package/dist/esm/adapters/node-http/index.js.map +1 -0
- package/dist/esm/adapters/node-http/input.d.ts +4 -0
- package/dist/esm/adapters/node-http/input.d.ts.map +1 -0
- package/dist/esm/adapters/node-http/input.js +65 -0
- package/dist/esm/adapters/node-http/input.js.map +1 -0
- package/dist/esm/adapters/node-http/procedures.d.ts +12 -0
- package/dist/esm/adapters/node-http/procedures.d.ts.map +1 -0
- package/dist/esm/adapters/node-http/procedures.js +34 -0
- package/dist/esm/adapters/node-http/procedures.js.map +1 -0
- package/dist/esm/adapters/nuxt.d.ts +6 -0
- package/dist/esm/adapters/nuxt.d.ts.map +1 -0
- package/dist/esm/adapters/nuxt.js +45 -0
- package/dist/esm/adapters/nuxt.js.map +1 -0
- package/dist/esm/adapters/standalone.d.ts +6 -0
- package/dist/esm/adapters/standalone.d.ts.map +1 -0
- package/dist/esm/adapters/standalone.js +11 -0
- package/dist/esm/adapters/standalone.js.map +1 -0
- package/dist/esm/generator/index.d.ts +40 -0
- package/dist/esm/generator/index.d.ts.map +1 -0
- package/dist/esm/generator/index.js +31 -0
- package/dist/esm/generator/index.js.map +1 -0
- package/dist/esm/generator/paths.d.ts +16 -0
- package/dist/esm/generator/paths.d.ts.map +1 -0
- package/dist/esm/generator/paths.js +129 -0
- package/dist/esm/generator/paths.js.map +1 -0
- package/dist/esm/generator/schema.d.ts +15 -0
- package/dist/esm/generator/schema.d.ts.map +1 -0
- package/dist/esm/generator/schema.js +203 -0
- package/dist/esm/generator/schema.js.map +1 -0
- package/dist/esm/index.d.ts +6 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +6 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/types.d.ts +55 -0
- package/dist/esm/types.d.ts.map +1 -0
- package/dist/esm/types.js +2 -0
- package/dist/esm/types.js.map +1 -0
- package/dist/esm/utils/index.d.ts +5 -0
- package/dist/esm/utils/index.d.ts.map +1 -0
- package/dist/esm/utils/index.js +5 -0
- package/dist/esm/utils/index.js.map +1 -0
- package/dist/esm/utils/method.d.ts +6 -0
- package/dist/esm/utils/method.d.ts.map +1 -0
- package/dist/esm/utils/method.js +22 -0
- package/dist/esm/utils/method.js.map +1 -0
- package/dist/esm/utils/path.d.ts +4 -0
- package/dist/esm/utils/path.d.ts.map +1 -0
- package/dist/esm/utils/path.js +11 -0
- package/dist/esm/utils/path.js.map +1 -0
- package/dist/esm/utils/procedure.d.ts +18 -0
- package/dist/esm/utils/procedure.d.ts.map +1 -0
- package/dist/esm/utils/procedure.js +79 -0
- package/dist/esm/utils/procedure.js.map +1 -0
- package/dist/esm/utils/zod.d.ts +16 -0
- package/dist/esm/utils/zod.d.ts.map +1 -0
- package/dist/esm/utils/zod.js +82 -0
- package/dist/esm/utils/zod.js.map +1 -0
- package/package.json +52 -46
- package/dist/adapters/express.d.ts +0 -8
- package/dist/adapters/express.d.ts.map +0 -1
- package/dist/adapters/express.js.map +0 -1
- package/dist/adapters/index.d.ts +0 -4
- package/dist/adapters/index.d.ts.map +0 -1
- package/dist/adapters/index.js.map +0 -1
- package/dist/adapters/next.d.ts +0 -6
- package/dist/adapters/next.d.ts.map +0 -1
- package/dist/adapters/next.js.map +0 -1
- package/dist/adapters/node-http/core.d.ts.map +0 -1
- package/dist/adapters/node-http/core.js.map +0 -1
- package/dist/adapters/node-http/errors.d.ts +0 -4
- package/dist/adapters/node-http/errors.d.ts.map +0 -1
- package/dist/adapters/node-http/errors.js +0 -43
- package/dist/adapters/node-http/errors.js.map +0 -1
- package/dist/adapters/node-http/input.d.ts.map +0 -1
- package/dist/adapters/node-http/input.js.map +0 -1
- package/dist/adapters/node-http/procedures.d.ts.map +0 -1
- package/dist/adapters/node-http/procedures.js.map +0 -1
- package/dist/adapters/standalone.d.ts.map +0 -1
- package/dist/adapters/standalone.js.map +0 -1
- package/dist/generator/index.d.ts +0 -14
- package/dist/generator/index.d.ts.map +0 -1
- package/dist/generator/index.js +0 -39
- package/dist/generator/index.js.map +0 -1
- package/dist/generator/paths.d.ts +0 -4
- package/dist/generator/paths.d.ts.map +0 -1
- package/dist/generator/paths.js +0 -76
- package/dist/generator/paths.js.map +0 -1
- package/dist/generator/schema.d.ts +0 -7
- package/dist/generator/schema.d.ts.map +0 -1
- package/dist/generator/schema.js +0 -185
- package/dist/generator/schema.js.map +0 -1
- package/dist/index.d.ts +0 -6
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -11
- package/dist/index.js.map +0 -1
- package/dist/types.d.ts +0 -55
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js.map +0 -1
- package/dist/utils/method.d.ts +0 -3
- package/dist/utils/method.d.ts.map +0 -1
- package/dist/utils/method.js +0 -11
- package/dist/utils/method.js.map +0 -1
- package/dist/utils/path.d.ts.map +0 -1
- package/dist/utils/path.js.map +0 -1
- package/dist/utils/procedure.d.ts +0 -14
- package/dist/utils/procedure.d.ts.map +0 -1
- package/dist/utils/procedure.js +0 -62
- package/dist/utils/procedure.js.map +0 -1
- package/dist/utils/zod.d.ts +0 -14
- package/dist/utils/zod.d.ts.map +0 -1
- package/dist/utils/zod.js +0 -115
- package/dist/utils/zod.js.map +0 -1
- /package/dist/{types.js → cjs/types.js} +0 -0
- /package/dist/{utils → cjs/utils}/path.d.ts +0 -0
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { TRPCError } from '@trpc/server';
|
|
2
|
+
import { ZodObject, z } from 'zod';
|
|
3
|
+
import { ZodOpenApiParameters, ZodOpenApiRequestBodyObject, ZodOpenApiResponseObject, ZodOpenApiResponsesObject } from 'zod-openapi';
|
|
4
|
+
import { OpenApiContentType } from '../types';
|
|
5
|
+
import { HttpMethods } from './paths';
|
|
6
|
+
export declare const getParameterObjects: (schema: z.ZodObject<z.ZodRawShape>, required: boolean, pathParameters: string[], headersSchema: ZodObject | undefined, inType: "all" | "path" | "query") => ZodOpenApiParameters | undefined;
|
|
7
|
+
export declare const getRequestBodyObject: (schema: z.ZodObject<z.ZodRawShape>, required: boolean, pathParameters: string[], contentTypes: OpenApiContentType[]) => ZodOpenApiRequestBodyObject | undefined;
|
|
8
|
+
export declare const hasInputs: (schema: unknown) => boolean;
|
|
9
|
+
export declare const errorResponseObject: (code?: TRPCError["code"], message?: string, issues?: {
|
|
10
|
+
message: string;
|
|
11
|
+
}[]) => ZodOpenApiResponseObject;
|
|
12
|
+
export declare const errorResponseFromStatusCode: (status: number) => ZodOpenApiResponseObject;
|
|
13
|
+
export declare const errorResponseFromMessage: (status: number, message: string) => ZodOpenApiResponseObject;
|
|
14
|
+
export declare const getResponsesObject: (schema: ZodObject, httpMethod: HttpMethods, headers: ZodObject | undefined, isProtected: boolean, hasInputs: boolean, successDescription?: string, errorResponses?: number[] | Record<number, string>) => ZodOpenApiResponsesObject;
|
|
15
|
+
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/generator/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,SAAS,EAAU,CAAC,EAAE,MAAM,KAAK,CAAC;AAC3C,OAAO,EAEL,oBAAoB,EACpB,2BAA2B,EAC3B,wBAAwB,EACxB,yBAAyB,EAC1B,MAAM,aAAa,CAAC;AAOrB,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAW9C,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEtC,eAAO,MAAM,mBAAmB,GAC9B,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,EAClC,UAAU,OAAO,EACjB,gBAAgB,MAAM,EAAE,EACxB,eAAe,SAAS,GAAG,SAAS,EACpC,QAAQ,KAAK,GAAG,MAAM,GAAG,OAAO,KAC/B,oBAAoB,GAAG,SA0FzB,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAC/B,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,EAClC,UAAU,OAAO,EACjB,gBAAgB,MAAM,EAAE,EACxB,cAAc,kBAAkB,EAAE,KACjC,2BAA2B,GAAG,SA2BhC,CAAC;AAEF,eAAO,MAAM,SAAS,GAAI,QAAQ,OAAO,YAC6C,CAAC;AAIvF,eAAO,MAAM,mBAAmB,GAC9B,OAAM,SAAS,CAAC,MAAM,CAA2B,EACjD,UAAU,MAAM,EAChB,SAAS;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,EAAE,KAC7B,wBAyCF,CAAC;AAEF,eAAO,MAAM,2BAA2B,GAAI,QAAQ,MAAM,6BAIzD,CAAC;AAEF,eAAO,MAAM,wBAAwB,GAAI,QAAQ,MAAM,EAAE,SAAS,MAAM,6BACL,CAAC;AAEpE,eAAO,MAAM,kBAAkB,GAC7B,QAAQ,SAAS,EACjB,YAAY,WAAW,EACvB,SAAS,SAAS,GAAG,SAAS,EAC9B,aAAa,OAAO,EACpB,WAAW,OAAO,EAClB,qBAAqB,MAAM,EAC3B,iBAAiB,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KACjD,yBA0CD,CAAC"}
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
import { TRPCError } from '@trpc/server';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { HTTP_STATUS_TRPC_ERROR_CODE, TRPC_ERROR_CODE_HTTP_STATUS, TRPC_ERROR_CODE_MESSAGE, } from '../adapters';
|
|
4
|
+
import { instanceofZodType, instanceofZodTypeCoercible, instanceofZodTypeKind, instanceofZodTypeLikeString, instanceofZodTypeLikeVoid, instanceofZodTypeOptional, unwrapZodType, zodSupportsCoerce, } from '../utils';
|
|
5
|
+
import { HttpMethods } from './paths';
|
|
6
|
+
export const getParameterObjects = (schema, required, pathParameters, headersSchema, inType) => {
|
|
7
|
+
const shape = schema.shape;
|
|
8
|
+
const shapeKeys = Object.keys(shape);
|
|
9
|
+
for (const pathParameter of pathParameters) {
|
|
10
|
+
if (!shapeKeys.includes(pathParameter)) {
|
|
11
|
+
throw new TRPCError({
|
|
12
|
+
message: `Input parser expects key from path: "${pathParameter}"`,
|
|
13
|
+
code: 'INTERNAL_SERVER_ERROR',
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
// @ts-expect-error fix later
|
|
18
|
+
const { path, query } = shapeKeys
|
|
19
|
+
.filter((shapeKey) => {
|
|
20
|
+
const isPathParameter = pathParameters.includes(shapeKey);
|
|
21
|
+
if (inType === 'path') {
|
|
22
|
+
return isPathParameter;
|
|
23
|
+
}
|
|
24
|
+
else if (inType === 'query') {
|
|
25
|
+
return !isPathParameter;
|
|
26
|
+
}
|
|
27
|
+
return true;
|
|
28
|
+
})
|
|
29
|
+
.map((shapeKey) => {
|
|
30
|
+
let shapeSchema = shape[shapeKey];
|
|
31
|
+
const isShapeRequired = !shapeSchema.safeParse(undefined).success;
|
|
32
|
+
const isPathParameter = pathParameters.includes(shapeKey);
|
|
33
|
+
if (!instanceofZodTypeLikeString(shapeSchema)) {
|
|
34
|
+
if (zodSupportsCoerce) {
|
|
35
|
+
if (!instanceofZodTypeCoercible(shapeSchema)) {
|
|
36
|
+
throw new TRPCError({
|
|
37
|
+
message: `Input parser key: "${shapeKey}" must be ZodString, ZodNumber, ZodBoolean, ZodBigInt or ZodDate`,
|
|
38
|
+
code: 'INTERNAL_SERVER_ERROR',
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
throw new TRPCError({
|
|
44
|
+
message: `Input parser key: "${shapeKey}" must be ZodString`,
|
|
45
|
+
code: 'INTERNAL_SERVER_ERROR',
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
if (instanceofZodTypeOptional(shapeSchema)) {
|
|
50
|
+
if (isPathParameter) {
|
|
51
|
+
throw new TRPCError({
|
|
52
|
+
message: `Path parameter: "${shapeKey}" must not be optional`,
|
|
53
|
+
code: 'INTERNAL_SERVER_ERROR',
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
shapeSchema = shapeSchema.unwrap();
|
|
57
|
+
}
|
|
58
|
+
return {
|
|
59
|
+
name: shapeKey,
|
|
60
|
+
paramType: isPathParameter ? 'path' : 'query',
|
|
61
|
+
required: isPathParameter || required || isShapeRequired,
|
|
62
|
+
schema: shapeSchema,
|
|
63
|
+
};
|
|
64
|
+
})
|
|
65
|
+
.reduce(({ path, query }, { name, paramType, schema, required }) =>
|
|
66
|
+
// @ts-expect-error fix later
|
|
67
|
+
paramType === 'path'
|
|
68
|
+
? {
|
|
69
|
+
path: { ...path, [name]: required ? schema : schema.optional() },
|
|
70
|
+
query,
|
|
71
|
+
}
|
|
72
|
+
: {
|
|
73
|
+
path,
|
|
74
|
+
query: { ...query, [name]: required ? schema : schema.optional() },
|
|
75
|
+
}, { path: {}, query: {} });
|
|
76
|
+
let res = {};
|
|
77
|
+
if (headersSchema) {
|
|
78
|
+
res.header = headersSchema;
|
|
79
|
+
}
|
|
80
|
+
res = {
|
|
81
|
+
...res,
|
|
82
|
+
path: z.object(path),
|
|
83
|
+
query: z.object(query),
|
|
84
|
+
};
|
|
85
|
+
return res;
|
|
86
|
+
};
|
|
87
|
+
export const getRequestBodyObject = (schema, required, pathParameters, contentTypes) => {
|
|
88
|
+
// remove path parameters
|
|
89
|
+
const mask = {};
|
|
90
|
+
pathParameters.forEach((pathParameter) => {
|
|
91
|
+
mask[pathParameter] = true;
|
|
92
|
+
});
|
|
93
|
+
const o = schema.meta();
|
|
94
|
+
const dedupedSchema = schema.omit(mask).meta({
|
|
95
|
+
...(o?.title ? { title: o?.title } : {}),
|
|
96
|
+
...(o?.description ? { description: o?.description } : {}),
|
|
97
|
+
...(o?.examples ? { examples: o?.examples } : {}),
|
|
98
|
+
});
|
|
99
|
+
// if all keys are path parameters
|
|
100
|
+
if (pathParameters.length > 0 && Object.keys(dedupedSchema.shape).length === 0) {
|
|
101
|
+
return undefined;
|
|
102
|
+
}
|
|
103
|
+
const content = {};
|
|
104
|
+
for (const contentType of contentTypes) {
|
|
105
|
+
content[contentType] = {
|
|
106
|
+
schema: dedupedSchema,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
return {
|
|
110
|
+
required,
|
|
111
|
+
content,
|
|
112
|
+
};
|
|
113
|
+
};
|
|
114
|
+
export const hasInputs = (schema) => instanceofZodType(schema) && !instanceofZodTypeLikeVoid(unwrapZodType(schema, true));
|
|
115
|
+
const errorResponseObjectByCode = {};
|
|
116
|
+
export const errorResponseObject = (code = 'INTERNAL_SERVER_ERROR', message, issues) => {
|
|
117
|
+
if (!errorResponseObjectByCode[code]) {
|
|
118
|
+
errorResponseObjectByCode[code] = {
|
|
119
|
+
description: message ?? 'An error response',
|
|
120
|
+
content: {
|
|
121
|
+
'application/json': {
|
|
122
|
+
schema: z
|
|
123
|
+
.object({
|
|
124
|
+
message: z.string().meta({
|
|
125
|
+
description: 'The error message',
|
|
126
|
+
example: message ?? 'Internal server error',
|
|
127
|
+
}),
|
|
128
|
+
code: z.string().meta({
|
|
129
|
+
description: 'The error code',
|
|
130
|
+
example: code ?? 'INTERNAL_SERVER_ERROR',
|
|
131
|
+
}),
|
|
132
|
+
issues: z
|
|
133
|
+
.array(z.object({ message: z.string() }))
|
|
134
|
+
.optional()
|
|
135
|
+
.meta({
|
|
136
|
+
description: 'An array of issues that were responsible for the error',
|
|
137
|
+
example: issues ?? [],
|
|
138
|
+
}),
|
|
139
|
+
})
|
|
140
|
+
.meta({
|
|
141
|
+
title: `${message ?? 'Internal server'} error (${TRPC_ERROR_CODE_HTTP_STATUS[code] ?? 500})`,
|
|
142
|
+
description: 'The error information',
|
|
143
|
+
example: {
|
|
144
|
+
code: code ?? 'INTERNAL_SERVER_ERROR',
|
|
145
|
+
message: message ?? 'Internal server error',
|
|
146
|
+
issues: issues ?? [],
|
|
147
|
+
},
|
|
148
|
+
id: `error.${code}`,
|
|
149
|
+
}),
|
|
150
|
+
},
|
|
151
|
+
},
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
return errorResponseObjectByCode[code];
|
|
155
|
+
};
|
|
156
|
+
export const errorResponseFromStatusCode = (status) => {
|
|
157
|
+
const code = HTTP_STATUS_TRPC_ERROR_CODE[status];
|
|
158
|
+
const message = code && TRPC_ERROR_CODE_MESSAGE[code];
|
|
159
|
+
return errorResponseObject(code, message ?? 'Unknown error');
|
|
160
|
+
};
|
|
161
|
+
export const errorResponseFromMessage = (status, message) => errorResponseObject(HTTP_STATUS_TRPC_ERROR_CODE[status], message);
|
|
162
|
+
export const getResponsesObject = (schema, httpMethod, headers, isProtected, hasInputs, successDescription, errorResponses) => ({
|
|
163
|
+
200: {
|
|
164
|
+
description: successDescription ?? 'Successful response',
|
|
165
|
+
headers: headers,
|
|
166
|
+
content: {
|
|
167
|
+
'application/json': {
|
|
168
|
+
schema: instanceofZodTypeKind(schema, 'void')
|
|
169
|
+
? {}
|
|
170
|
+
: instanceofZodTypeKind(schema, 'never') || instanceofZodTypeKind(schema, 'undefined')
|
|
171
|
+
? { not: {} }
|
|
172
|
+
: schema,
|
|
173
|
+
},
|
|
174
|
+
},
|
|
175
|
+
},
|
|
176
|
+
...(errorResponses !== undefined
|
|
177
|
+
? Object.fromEntries(Array.isArray(errorResponses)
|
|
178
|
+
? errorResponses.map((x) => [x, errorResponseFromStatusCode(x)])
|
|
179
|
+
: Object.entries(errorResponses).map(([k, v]) => [
|
|
180
|
+
k,
|
|
181
|
+
errorResponseFromMessage(Number(k), v),
|
|
182
|
+
]))
|
|
183
|
+
: {
|
|
184
|
+
...(isProtected
|
|
185
|
+
? {
|
|
186
|
+
401: errorResponseObject('UNAUTHORIZED', 'Authorization not provided'),
|
|
187
|
+
403: errorResponseObject('FORBIDDEN', 'Insufficient access'),
|
|
188
|
+
}
|
|
189
|
+
: {}),
|
|
190
|
+
...(hasInputs
|
|
191
|
+
? {
|
|
192
|
+
400: errorResponseObject('BAD_REQUEST', 'Invalid input data'),
|
|
193
|
+
...(httpMethod !== HttpMethods.POST
|
|
194
|
+
? {
|
|
195
|
+
404: errorResponseObject('NOT_FOUND', 'Not found'),
|
|
196
|
+
}
|
|
197
|
+
: {}),
|
|
198
|
+
}
|
|
199
|
+
: {}),
|
|
200
|
+
500: errorResponseObject('INTERNAL_SERVER_ERROR', 'Internal server error'),
|
|
201
|
+
}),
|
|
202
|
+
});
|
|
203
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/generator/schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS,CAAC;AACxB,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { TRPC_ERROR_CODE_KEY } from '@trpc/server/rpc';
|
|
2
|
+
import type { CreateRootTypes, Procedure, ProcedureType, Router, RouterRecord } from '@trpc/server/unstable-core-do-not-import';
|
|
3
|
+
import { IncomingMessage } from 'http';
|
|
4
|
+
import type { ZodObject } from 'zod';
|
|
5
|
+
import type { $ZodIssue } from 'zod/v4/core';
|
|
6
|
+
export { type OpenAPIObject, type SecuritySchemeObject } from 'openapi3-ts/oas31';
|
|
7
|
+
export type OpenApiMethod = 'GET' | 'POST' | 'PATCH' | 'PUT' | 'DELETE';
|
|
8
|
+
type TRPCMeta = Record<string, unknown>;
|
|
9
|
+
export type OpenApiContentType = 'application/json' | 'application/x-www-form-urlencoded' | (string & {});
|
|
10
|
+
export type OpenApiMeta<TMeta = TRPCMeta> = TMeta & {
|
|
11
|
+
openapi?: {
|
|
12
|
+
/** When true, use only the openapi object provided (no defaults). */
|
|
13
|
+
override?: boolean;
|
|
14
|
+
/** When true, merge provided openapi with defaults (defaults first, then provided). */
|
|
15
|
+
additional?: boolean;
|
|
16
|
+
enabled?: boolean;
|
|
17
|
+
method: OpenApiMethod;
|
|
18
|
+
path: `/${string}`;
|
|
19
|
+
operationId?: string;
|
|
20
|
+
summary?: string;
|
|
21
|
+
description?: string;
|
|
22
|
+
protect?: boolean;
|
|
23
|
+
tags?: string[];
|
|
24
|
+
contentTypes?: OpenApiContentType[];
|
|
25
|
+
deprecated?: boolean;
|
|
26
|
+
requestHeaders?: ZodObject;
|
|
27
|
+
responseHeaders?: ZodObject;
|
|
28
|
+
successDescription?: string;
|
|
29
|
+
errorResponses?: number[] | Record<number, string>;
|
|
30
|
+
};
|
|
31
|
+
};
|
|
32
|
+
export type OpenApiProcedure = Procedure<ProcedureType, {
|
|
33
|
+
input: any;
|
|
34
|
+
output: any;
|
|
35
|
+
meta: TRPCMeta;
|
|
36
|
+
}>;
|
|
37
|
+
export type OpenApiProcedureRecord = Record<string, OpenApiProcedure | RouterRecord>;
|
|
38
|
+
export type OpenApiRouter = Router<CreateRootTypes<{
|
|
39
|
+
ctx: any;
|
|
40
|
+
meta: TRPCMeta;
|
|
41
|
+
errorShape: any;
|
|
42
|
+
transformer: any;
|
|
43
|
+
}>, RouterRecord>;
|
|
44
|
+
export type OpenApiSuccessResponse<D = any> = D;
|
|
45
|
+
export interface OpenApiErrorResponse {
|
|
46
|
+
message: string;
|
|
47
|
+
code: TRPC_ERROR_CODE_KEY;
|
|
48
|
+
issues?: $ZodIssue[];
|
|
49
|
+
}
|
|
50
|
+
export type OpenApiResponse<D = any> = OpenApiSuccessResponse<D> | OpenApiErrorResponse;
|
|
51
|
+
export type NodeHTTPRequest = IncomingMessage & {
|
|
52
|
+
body?: unknown;
|
|
53
|
+
query?: unknown;
|
|
54
|
+
};
|
|
55
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,EACV,eAAe,EACf,SAAS,EACT,aAAa,EACb,MAAM,EACN,YAAY,EACb,MAAM,0CAA0C,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,MAAM,CAAC;AACvC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AACrC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAElF,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,QAAQ,CAAC;AAExE,KAAK,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAExC,MAAM,MAAM,kBAAkB,GAC1B,kBAAkB,GAClB,mCAAmC,GAEnC,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAElB,MAAM,MAAM,WAAW,CAAC,KAAK,GAAG,QAAQ,IAAI,KAAK,GAAG;IAClD,OAAO,CAAC,EAAE;QACR,qEAAqE;QACrE,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,uFAAuF;QACvF,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,MAAM,EAAE,aAAa,CAAC;QACtB,IAAI,EAAE,IAAI,MAAM,EAAE,CAAC;QACnB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAChB,YAAY,CAAC,EAAE,kBAAkB,EAAE,CAAC;QACpC,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,cAAc,CAAC,EAAE,SAAS,CAAC;QAC3B,eAAe,CAAC,EAAE,SAAS,CAAC;QAC5B,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,cAAc,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACpD,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,SAAS,CACtC,aAAa,EACb;IACE,KAAK,EAAE,GAAG,CAAC;IACX,MAAM,EAAE,GAAG,CAAC;IACZ,IAAI,EAAE,QAAQ,CAAC;CAChB,CACF,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,MAAM,CAAC,MAAM,EAAE,gBAAgB,GAAG,YAAY,CAAC,CAAC;AAErF,MAAM,MAAM,aAAa,GAAG,MAAM,CAChC,eAAe,CAAC;IACd,GAAG,EAAE,GAAG,CAAC;IACT,IAAI,EAAE,QAAQ,CAAC;IACf,UAAU,EAAE,GAAG,CAAC;IAChB,WAAW,EAAE,GAAG,CAAC;CAClB,CAAC,EACF,YAAY,CACb,CAAC;AAEF,MAAM,MAAM,sBAAsB,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;AAEhD,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,mBAAmB,CAAC;IAC1B,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC;CACtB;AAED,MAAM,MAAM,eAAe,CAAC,CAAC,GAAG,GAAG,IAAI,sBAAsB,CAAC,CAAC,CAAC,GAAG,oBAAoB,CAAC;AAExF,MAAM,MAAM,eAAe,GAAG,eAAe,GAAG;IAC9C,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,aAAa,CAAC;AAC5B,cAAc,OAAO,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,aAAa,CAAC;AAC5B,cAAc,OAAO,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { NodeHTTPResponse } from '@trpc/server/adapters/node-http';
|
|
2
|
+
import { NodeHTTPRequest, OpenApiMethod } from '../types';
|
|
3
|
+
export declare const acceptsRequestBody: (method: OpenApiMethod | "HEAD") => boolean;
|
|
4
|
+
export declare const getContentType: (req: NodeHTTPRequest | Request) => string | undefined;
|
|
5
|
+
export declare const getRequestSignal: (req: NodeHTTPRequest | Request, res: NodeHTTPResponse, maxBodySize?: number) => AbortSignal;
|
|
6
|
+
//# sourceMappingURL=method.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"method.d.ts","sourceRoot":"","sources":["../../../src/utils/method.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAC7F,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE1D,eAAO,MAAM,kBAAkB,GAAI,QAAQ,aAAa,GAAG,MAAM,YAKhE,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,KAAK,eAAe,GAAG,OAAO,KAAG,MAAM,GAAG,SAMxE,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAC3B,KAAK,eAAe,GAAG,OAAO,EAC9B,KAAK,gBAAgB,EACrB,cAAc,MAAM,gBASrB,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { incomingMessageToRequest } from '@trpc/server/adapters/node-http';
|
|
2
|
+
export const acceptsRequestBody = (method) => {
|
|
3
|
+
if (method === 'GET' || method === 'DELETE') {
|
|
4
|
+
return false;
|
|
5
|
+
}
|
|
6
|
+
return true;
|
|
7
|
+
};
|
|
8
|
+
export const getContentType = (req) => {
|
|
9
|
+
if (req instanceof Request) {
|
|
10
|
+
return req.headers.get('content-type') ?? undefined;
|
|
11
|
+
}
|
|
12
|
+
return req.headers['content-type'] ?? undefined;
|
|
13
|
+
};
|
|
14
|
+
export const getRequestSignal = (req, res, maxBodySize) => {
|
|
15
|
+
if (req instanceof Request) {
|
|
16
|
+
return req.signal;
|
|
17
|
+
}
|
|
18
|
+
return incomingMessageToRequest(req, res, {
|
|
19
|
+
maxBodySize: maxBodySize ?? null,
|
|
20
|
+
}).signal;
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=method.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"method.js","sourceRoot":"","sources":["../../../src/utils/method.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAoB,MAAM,iCAAiC,CAAC;AAG7F,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,MAA8B,EAAE,EAAE;IACnE,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC5C,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,GAA8B,EAAsB,EAAE;IACnF,IAAI,GAAG,YAAY,OAAO,EAAE,CAAC;QAC3B,OAAO,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,SAAS,CAAC;IACtD,CAAC;IAED,OAAO,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,SAAS,CAAC;AAClD,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,GAA8B,EAC9B,GAAqB,EACrB,WAAoB,EACpB,EAAE;IACF,IAAI,GAAG,YAAY,OAAO,EAAE,CAAC;QAC3B,OAAO,GAAG,CAAC,MAAM,CAAC;IACpB,CAAC;IAED,OAAO,wBAAwB,CAAC,GAAG,EAAE,GAAG,EAAE;QACxC,WAAW,EAAE,WAAW,IAAI,IAAI;KACjC,CAAC,CAAC,MAAM,CAAC;AACZ,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path.d.ts","sourceRoot":"","sources":["../../../src/utils/path.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa,GAAI,MAAM,MAAM,WAEzC,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,MAAM,MAAM,KAAG,MAAM,EAEtD,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,MAAM,MAAM,WAGzC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export const normalizePath = (path) => {
|
|
2
|
+
return `/${path.replace(/^\/|\/$/g, '')}`;
|
|
3
|
+
};
|
|
4
|
+
export const getPathParameters = (path) => {
|
|
5
|
+
return Array.from(path.matchAll(/\{(.+?)\}/g)).map(([, key]) => key);
|
|
6
|
+
};
|
|
7
|
+
export const getPathRegExp = (path) => {
|
|
8
|
+
const groupedExp = path.replace(/\{(.+?)\}/g, (_, key) => `(?<${key}>[^/]+)`);
|
|
9
|
+
return new RegExp(`^${groupedExp}$`, 'i');
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=path.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path.js","sourceRoot":"","sources":["../../../src/utils/path.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,IAAY,EAAE,EAAE;IAC5C,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,EAAE,CAAC;AAC5C,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,IAAY,EAAY,EAAE;IAC1D,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,GAAI,CAAC,CAAC;AACxE,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,IAAY,EAAE,EAAE;IAC5C,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,EAAE,GAAW,EAAE,EAAE,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IACtF,OAAO,IAAI,MAAM,CAAC,IAAI,UAAU,GAAG,EAAE,GAAG,CAAC,CAAC;AAC5C,CAAC,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { TRPCProcedureType } from '@trpc/server';
|
|
2
|
+
import { ZodObject } from 'zod';
|
|
3
|
+
import { OpenApiMeta, OpenApiMethod, OpenApiProcedure, OpenApiProcedureRecord } from '../types';
|
|
4
|
+
export declare const getMethod: (procedure: OpenApiProcedure) => OpenApiMethod;
|
|
5
|
+
export declare const getInputOutputParsers: (procedure: OpenApiProcedure) => {
|
|
6
|
+
inputParser: ZodObject;
|
|
7
|
+
outputParser: ZodObject | undefined;
|
|
8
|
+
hasInputsDefined: boolean;
|
|
9
|
+
};
|
|
10
|
+
export declare const forEachOpenApiProcedure: <TMeta = Record<string, unknown>>(procedureRecord: OpenApiProcedureRecord, callback: (values: {
|
|
11
|
+
path: string;
|
|
12
|
+
type: TRPCProcedureType;
|
|
13
|
+
procedure: OpenApiProcedure;
|
|
14
|
+
meta: {
|
|
15
|
+
openapi: NonNullable<OpenApiMeta["openapi"]>;
|
|
16
|
+
} & TMeta;
|
|
17
|
+
}) => void) => void;
|
|
18
|
+
//# sourceMappingURL=procedure.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"procedure.d.ts","sourceRoot":"","sources":["../../../src/utils/procedure.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,SAAS,EAAK,MAAM,KAAK,CAAC;AAEnC,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC;AAQhG,eAAO,MAAM,SAAS,GAAI,WAAW,gBAAgB,KAAG,aAEvD,CAAC;AAGF,eAAO,MAAM,qBAAqB,GAChC,WAAW,gBAAgB,KAC1B;IACD,WAAW,EAAE,SAAS,CAAC;IACvB,YAAY,EAAE,SAAS,GAAG,SAAS,CAAC;IACpC,gBAAgB,EAAE,OAAO,CAAC;CAoB3B,CAAC;AASF,eAAO,MAAM,uBAAuB,GAAI,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrE,iBAAiB,sBAAsB,EACvC,UAAU,CAAC,MAAM,EAAE;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,iBAAiB,CAAC;IACxB,SAAS,EAAE,gBAAgB,CAAC;IAC5B,IAAI,EAAE;QACJ,OAAO,EAAE,WAAW,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC;KAC9C,GAAG,KAAK,CAAC;CACX,KAAK,IAAI,SA2CX,CAAC"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
const mergeInputs = (inputParsers) => {
|
|
3
|
+
return inputParsers.reduce((acc, inputParser) => {
|
|
4
|
+
return acc.merge(inputParser);
|
|
5
|
+
}, z.object({}));
|
|
6
|
+
};
|
|
7
|
+
export const getMethod = (procedure) => {
|
|
8
|
+
return getProcedureType(procedure) === 'query' ? 'GET' : 'POST';
|
|
9
|
+
};
|
|
10
|
+
// `inputParser` & `outputParser` are private so this is a hack to access it
|
|
11
|
+
export const getInputOutputParsers = (procedure) => {
|
|
12
|
+
const inputs = procedure._def.inputs;
|
|
13
|
+
// @ts-expect-error The types seems to be incorrect
|
|
14
|
+
const output = procedure._def.output;
|
|
15
|
+
let inputParser;
|
|
16
|
+
if (inputs.length >= 2) {
|
|
17
|
+
inputParser = mergeInputs(inputs);
|
|
18
|
+
}
|
|
19
|
+
else if (inputs.length === 1) {
|
|
20
|
+
inputParser = inputs[0];
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
inputParser = z.object({});
|
|
24
|
+
}
|
|
25
|
+
return {
|
|
26
|
+
inputParser,
|
|
27
|
+
outputParser: output,
|
|
28
|
+
hasInputsDefined: inputs.length > 0,
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
const getProcedureType = (procedure) => {
|
|
32
|
+
if (!procedure._def.type) {
|
|
33
|
+
throw new Error('Unknown procedure type');
|
|
34
|
+
}
|
|
35
|
+
return procedure._def.type;
|
|
36
|
+
};
|
|
37
|
+
export const forEachOpenApiProcedure = (procedureRecord, callback) => {
|
|
38
|
+
for (const [path, procedure] of Object.entries(procedureRecord)) {
|
|
39
|
+
const type = getProcedureType(procedure);
|
|
40
|
+
const meta = procedure._def.meta;
|
|
41
|
+
if (meta?.openapi?.enabled === false) {
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
const additional = meta?.openapi?.additional ?? false;
|
|
45
|
+
const override = meta?.openapi?.override ?? false;
|
|
46
|
+
const defaultOpenApiMeta = {
|
|
47
|
+
method: getMethod(procedure),
|
|
48
|
+
path: `/${path.replace(/\./g, '/')}`,
|
|
49
|
+
enabled: true,
|
|
50
|
+
tags: [path.split('.')[0] ?? 'default'],
|
|
51
|
+
protect: true,
|
|
52
|
+
};
|
|
53
|
+
let openapi;
|
|
54
|
+
if (override && meta?.openapi) {
|
|
55
|
+
openapi = { ...meta.openapi };
|
|
56
|
+
}
|
|
57
|
+
else if (additional && meta?.openapi) {
|
|
58
|
+
openapi = { ...defaultOpenApiMeta, ...meta.openapi };
|
|
59
|
+
}
|
|
60
|
+
else if (meta?.openapi) {
|
|
61
|
+
openapi = { ...meta.openapi, ...defaultOpenApiMeta };
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
openapi = defaultOpenApiMeta;
|
|
65
|
+
}
|
|
66
|
+
if (openapi.enabled !== false) {
|
|
67
|
+
callback({
|
|
68
|
+
path,
|
|
69
|
+
type,
|
|
70
|
+
procedure: procedure,
|
|
71
|
+
meta: {
|
|
72
|
+
openapi,
|
|
73
|
+
...meta,
|
|
74
|
+
},
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
//# sourceMappingURL=procedure.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"procedure.js","sourceRoot":"","sources":["../../../src/utils/procedure.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { ZodObject, ZodRawShape, ZodType, z } from 'zod';
|
|
2
|
+
import type { $ZodType, $ZodTypes } from 'zod/v4/core';
|
|
3
|
+
import type { $ZodTypeDef } from 'zod/v4/core/schemas';
|
|
4
|
+
export declare const instanceofZodType: (type: any) => type is $ZodTypes;
|
|
5
|
+
export declare const instanceofZodTypeKind: <Z extends $ZodTypeDef["type"]>(type: $ZodType, zodTypeKind: Z) => type is $ZodTypes;
|
|
6
|
+
export declare const instanceofZodTypeOptional: (type: $ZodType) => type is z.ZodOptional<$ZodTypes>;
|
|
7
|
+
export declare const instanceofZodTypeObject: (type: $ZodType) => type is z.ZodObject<z.ZodRawShape>;
|
|
8
|
+
export type ZodTypeLikeVoid = z.ZodVoid | z.ZodUndefined | z.ZodNever;
|
|
9
|
+
export declare const instanceofZodTypeLikeVoid: (type: $ZodType) => type is ZodTypeLikeVoid;
|
|
10
|
+
export declare const unwrapZodType: (type: $ZodType, unwrapPreprocess: boolean) => ZodType;
|
|
11
|
+
export declare const instanceofZodTypeLikeString: (_type: $ZodType) => boolean;
|
|
12
|
+
export declare const zodSupportsCoerce: boolean;
|
|
13
|
+
export type ZodTypeCoercible = z.ZodNumber | z.ZodBoolean | z.ZodBigInt | z.ZodDate;
|
|
14
|
+
export declare const instanceofZodTypeCoercible: (_type: $ZodType) => _type is ZodTypeCoercible;
|
|
15
|
+
export declare const coerceSchema: (schema: ZodObject<ZodRawShape>) => void;
|
|
16
|
+
//# sourceMappingURL=zod.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zod.d.ts","sourceRoot":"","sources":["../../../src/utils/zod.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACzD,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD,eAAO,MAAM,iBAAiB,GAAI,MAAM,GAAG,KAAG,IAAI,IAAI,SAErD,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAAI,CAAC,SAAS,WAAW,CAAC,MAAM,CAAC,EACjE,MAAM,QAAQ,EACd,aAAa,CAAC,KACb,IAAI,IAAI,SAEV,CAAC;AAEF,eAAO,MAAM,yBAAyB,GAAI,MAAM,QAAQ,KAAG,IAAI,IAAI,CAAC,CAAC,WAAW,CAAC,SAAS,CAEzF,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAAI,MAAM,QAAQ,KAAG,IAAI,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAEzF,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,YAAY,GAAG,CAAC,CAAC,QAAQ,CAAC;AAEtE,eAAO,MAAM,yBAAyB,GAAI,MAAM,QAAQ,KAAG,IAAI,IAAI,eAMlE,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,MAAM,QAAQ,EAAE,kBAAkB,OAAO,KAAG,OAyBzE,CAAC;AAEF,eAAO,MAAM,2BAA2B,GACtC,OAAO,QAAQ,KACd,OA4BF,CAAC;AAEF,eAAO,MAAM,iBAAiB,SAAgB,CAAC;AAE/C,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,OAAO,CAAC;AAEpF,eAAO,MAAM,0BAA0B,GAAI,OAAO,QAAQ,KAAG,KAAK,IAAI,gBAQrE,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,QAAQ,SAAS,CAAC,WAAW,CAAC,SAM1D,CAAC"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export const instanceofZodType = (type) => {
|
|
3
|
+
return !!type?._zod?.def?.type;
|
|
4
|
+
};
|
|
5
|
+
export const instanceofZodTypeKind = (type, zodTypeKind) => {
|
|
6
|
+
return type?._zod?.def?.type === zodTypeKind;
|
|
7
|
+
};
|
|
8
|
+
export const instanceofZodTypeOptional = (type) => {
|
|
9
|
+
return instanceofZodTypeKind(type, 'optional');
|
|
10
|
+
};
|
|
11
|
+
export const instanceofZodTypeObject = (type) => {
|
|
12
|
+
return instanceofZodTypeKind(type, 'object');
|
|
13
|
+
};
|
|
14
|
+
export const instanceofZodTypeLikeVoid = (type) => {
|
|
15
|
+
return (instanceofZodTypeKind(type, 'void') ||
|
|
16
|
+
instanceofZodTypeKind(type, 'undefined') ||
|
|
17
|
+
instanceofZodTypeKind(type, 'never'));
|
|
18
|
+
};
|
|
19
|
+
export const unwrapZodType = (type, unwrapPreprocess) => {
|
|
20
|
+
// TODO: Allow parsing array query params
|
|
21
|
+
if (instanceofZodTypeKind(type, 'array')) {
|
|
22
|
+
return unwrapZodType(type.element, unwrapPreprocess);
|
|
23
|
+
}
|
|
24
|
+
if (instanceofZodTypeKind(type, 'enum')) {
|
|
25
|
+
return unwrapZodType(z.string(), unwrapPreprocess);
|
|
26
|
+
}
|
|
27
|
+
if (instanceofZodTypeKind(type, 'nullable')) {
|
|
28
|
+
return unwrapZodType(type.unwrap(), unwrapPreprocess);
|
|
29
|
+
}
|
|
30
|
+
if (instanceofZodTypeKind(type, 'optional')) {
|
|
31
|
+
return unwrapZodType(type.unwrap(), unwrapPreprocess);
|
|
32
|
+
}
|
|
33
|
+
if (instanceofZodTypeKind(type, 'default')) {
|
|
34
|
+
return unwrapZodType(type.unwrap(), unwrapPreprocess);
|
|
35
|
+
}
|
|
36
|
+
if (instanceofZodTypeKind(type, 'lazy')) {
|
|
37
|
+
return unwrapZodType(type.def.getter(), unwrapPreprocess);
|
|
38
|
+
}
|
|
39
|
+
if (instanceofZodTypeKind(type, 'pipe') && unwrapPreprocess) {
|
|
40
|
+
return unwrapZodType(type.def.out, unwrapPreprocess);
|
|
41
|
+
}
|
|
42
|
+
return type;
|
|
43
|
+
};
|
|
44
|
+
export const instanceofZodTypeLikeString = (_type) => {
|
|
45
|
+
const type = unwrapZodType(_type, false);
|
|
46
|
+
if (instanceofZodTypeKind(type, 'pipe')) {
|
|
47
|
+
return true;
|
|
48
|
+
}
|
|
49
|
+
// TODO improve this
|
|
50
|
+
if (instanceofZodTypeKind(type, 'union')) {
|
|
51
|
+
return !type._def.options.some((option) => !instanceofZodTypeLikeString(option));
|
|
52
|
+
}
|
|
53
|
+
if (instanceofZodTypeKind(type, 'intersection')) {
|
|
54
|
+
return (instanceofZodTypeLikeString(type.def.left) &&
|
|
55
|
+
instanceofZodTypeLikeString(type.def.right));
|
|
56
|
+
}
|
|
57
|
+
if (instanceofZodTypeKind(type, 'literal')) {
|
|
58
|
+
return typeof type.value === 'string';
|
|
59
|
+
}
|
|
60
|
+
if (instanceofZodTypeKind(type, 'enum')) {
|
|
61
|
+
return !Object.values(type.enum).some((value) => typeof value === 'number');
|
|
62
|
+
}
|
|
63
|
+
return instanceofZodTypeKind(type, 'string');
|
|
64
|
+
};
|
|
65
|
+
export const zodSupportsCoerce = 'coerce' in z;
|
|
66
|
+
export const instanceofZodTypeCoercible = (_type) => {
|
|
67
|
+
const type = unwrapZodType(_type, false);
|
|
68
|
+
return (instanceofZodTypeKind(type, 'number') ||
|
|
69
|
+
instanceofZodTypeKind(type, 'boolean') ||
|
|
70
|
+
instanceofZodTypeKind(type, 'bigint') ||
|
|
71
|
+
instanceofZodTypeKind(type, 'date'));
|
|
72
|
+
};
|
|
73
|
+
export const coerceSchema = (schema) => {
|
|
74
|
+
Object.values(schema.shape).forEach((shapeSchema) => {
|
|
75
|
+
const unwrappedShapeSchema = unwrapZodType(shapeSchema, false);
|
|
76
|
+
if (instanceofZodTypeCoercible(unwrappedShapeSchema))
|
|
77
|
+
unwrappedShapeSchema._def.coerce = true;
|
|
78
|
+
else if (instanceofZodTypeObject(unwrappedShapeSchema))
|
|
79
|
+
coerceSchema(unwrappedShapeSchema);
|
|
80
|
+
});
|
|
81
|
+
};
|
|
82
|
+
//# sourceMappingURL=zod.js.map
|