@svazqz/api-contract-kit 0.1.6-alpha
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.md +9 -0
- package/README.md +448 -0
- package/dist/api-contract-kit.cjs.js +2 -0
- package/dist/api-contract-kit.cjs.js.map +1 -0
- package/dist/api-contract-kit.d.ts +1 -0
- package/dist/api-contract-kit.es.js +65 -0
- package/dist/api-contract-kit.es.js.map +1 -0
- package/dist/client.cjs.js +2 -0
- package/dist/client.cjs.js.map +1 -0
- package/dist/client.d.ts +13 -0
- package/dist/client.es.js +68 -0
- package/dist/client.es.js.map +1 -0
- package/dist/next-api-generator.d.ts +3 -0
- package/dist/open-api/index.d.ts +18 -0
- package/dist/open-api.cjs.js +2 -0
- package/dist/open-api.cjs.js.map +1 -0
- package/dist/open-api.es.js +3969 -0
- package/dist/open-api.es.js.map +1 -0
- package/dist/react-query.cjs.js +53 -0
- package/dist/react-query.cjs.js.map +1 -0
- package/dist/react-query.d.ts +14 -0
- package/dist/react-query.es.js +3055 -0
- package/dist/react-query.es.js.map +1 -0
- package/dist/server.cjs.js +2 -0
- package/dist/server.cjs.js.map +1 -0
- package/dist/server.d.ts +12 -0
- package/dist/server.es.js +2852 -0
- package/dist/server.es.js.map +1 -0
- package/dist/types.d.ts +67 -0
- package/dist/utils.d.ts +7 -0
- package/package.json +82 -0
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { z, ZodType } from 'zod';
|
|
2
|
+
export type DTO<T extends ZodType> = z.infer<T>;
|
|
3
|
+
export type HandlerFn<URLParams extends ZodType, QueryParams extends ZodType, Body extends ZodType, ResponseSchema extends ZodType> = (request: Request, queryParams?: DTO<QueryParams>, urlParams?: DTO<URLParams>, payload?: DTO<Body>) => Promise<DTO<ResponseSchema>>;
|
|
4
|
+
export type AuthResult = boolean | {
|
|
5
|
+
ok: boolean;
|
|
6
|
+
status?: number;
|
|
7
|
+
body?: unknown;
|
|
8
|
+
headers?: Record<string, string>;
|
|
9
|
+
};
|
|
10
|
+
export type ErrorMapper = (input: {
|
|
11
|
+
stage: string;
|
|
12
|
+
error: unknown;
|
|
13
|
+
}) => {
|
|
14
|
+
status: number;
|
|
15
|
+
body: unknown;
|
|
16
|
+
headers?: Record<string, string>;
|
|
17
|
+
};
|
|
18
|
+
export type ApiCodec = {
|
|
19
|
+
id: string;
|
|
20
|
+
requestContentType: string;
|
|
21
|
+
responseContentType: string;
|
|
22
|
+
decodeRequest: (input: Request | Response) => Promise<unknown>;
|
|
23
|
+
encodeResponse: (value: unknown) => Promise<{
|
|
24
|
+
body: BodyInit | null;
|
|
25
|
+
headers?: Record<string, string>;
|
|
26
|
+
}>;
|
|
27
|
+
};
|
|
28
|
+
export type OpenApiOperation = {
|
|
29
|
+
summary?: string;
|
|
30
|
+
description?: string;
|
|
31
|
+
tags?: string[];
|
|
32
|
+
operationId?: string;
|
|
33
|
+
deprecated?: boolean;
|
|
34
|
+
security?: Array<Record<string, string[]>>;
|
|
35
|
+
responses?: Record<number, {
|
|
36
|
+
description?: string;
|
|
37
|
+
content?: Record<string, {
|
|
38
|
+
schema?: ZodType;
|
|
39
|
+
}>;
|
|
40
|
+
}>;
|
|
41
|
+
};
|
|
42
|
+
export type ServerFnDefinition<URLParams extends ZodType, QueryParams extends ZodType, Body extends ZodType, ResponseSchema extends ZodType> = {
|
|
43
|
+
schemas?: {
|
|
44
|
+
urlArgs?: URLParams;
|
|
45
|
+
queryParams?: QueryParams;
|
|
46
|
+
payload?: Body;
|
|
47
|
+
response?: ResponseSchema;
|
|
48
|
+
};
|
|
49
|
+
endpoint?: string;
|
|
50
|
+
path?: string;
|
|
51
|
+
method?: string;
|
|
52
|
+
protoIn?: string;
|
|
53
|
+
protoOut?: string;
|
|
54
|
+
codec?: ApiCodec;
|
|
55
|
+
auth?: (request: Request) => Promise<AuthResult>;
|
|
56
|
+
errorMapper?: ErrorMapper;
|
|
57
|
+
skipOutputValidation?: boolean;
|
|
58
|
+
openapi?: OpenApiOperation;
|
|
59
|
+
};
|
|
60
|
+
export type APIConsumerPayload<URLParams, QueryParams, Body> = {
|
|
61
|
+
urlParams?: URLParams;
|
|
62
|
+
query?: QueryParams;
|
|
63
|
+
body?: Body;
|
|
64
|
+
headers?: Record<string, string>;
|
|
65
|
+
signal?: AbortSignal;
|
|
66
|
+
};
|
|
67
|
+
export type ConsumerFn<URLParams extends ZodType, QueryParams extends ZodType, Body extends ZodType, ResponseSchema extends ZodType> = (consumerPayload: APIConsumerPayload<DTO<URLParams>, DTO<QueryParams>, DTO<Body>>) => Promise<DTO<ResponseSchema>>;
|
package/dist/utils.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { ZodType } from 'zod';
|
|
2
|
+
import { ApiCodec, ServerFnDefinition } from './types';
|
|
3
|
+
import { RouteConfig } from '@asteasolutions/zod-to-openapi';
|
|
4
|
+
export declare function validateQueryParams<URLParams extends ZodType, QueryParams extends ZodType, Body extends ZodType, Response extends ZodType>(request: Request, def: ServerFnDefinition<URLParams, QueryParams, Body, Response>): {};
|
|
5
|
+
export declare function validatePayload<URLParams extends ZodType, QueryParams extends ZodType, Body extends ZodType, Response extends ZodType>(request: Request, def: ServerFnDefinition<URLParams, QueryParams, Body, Response>, ProtoClass: any): Promise<Body | undefined>;
|
|
6
|
+
export declare const setOpenAPIMetadata: (_def: any) => RouteConfig;
|
|
7
|
+
export declare const jsonCodec: ApiCodec;
|
package/package.json
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@svazqz/api-contract-kit",
|
|
3
|
+
"private": false,
|
|
4
|
+
"description": "A simple way to keep in sync Next api definitions and client types using zod",
|
|
5
|
+
"version": "0.1.6-alpha",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "git+https://github.com/svazqz/api-contract-kit.git"
|
|
9
|
+
},
|
|
10
|
+
"bugs": {
|
|
11
|
+
"url": "https://github.com/svazqz/api-contract-kit/issues"
|
|
12
|
+
},
|
|
13
|
+
"author": {
|
|
14
|
+
"name": "Sergio Vazquez",
|
|
15
|
+
"email": "alb.vazq+npm@gmail.com",
|
|
16
|
+
"url": "https://github.com/svazqz"
|
|
17
|
+
},
|
|
18
|
+
"exports": {
|
|
19
|
+
"./dist/api-contract-kit": {
|
|
20
|
+
"import": "./dist/api-contract-kit.es.js",
|
|
21
|
+
"require": "./dist/api-contract-kit.cjs.js",
|
|
22
|
+
"types": "./dist/api-contract-kit.d.ts"
|
|
23
|
+
},
|
|
24
|
+
"./dist/server": {
|
|
25
|
+
"import": "./dist/server.es.js",
|
|
26
|
+
"require": "./dist/server.cjs.js",
|
|
27
|
+
"types": "./dist/server.d.ts"
|
|
28
|
+
},
|
|
29
|
+
"./dist/client": {
|
|
30
|
+
"import": "./dist/client.es.js",
|
|
31
|
+
"require": "./dist/client.cjs.js",
|
|
32
|
+
"types": "./dist/client.d.ts"
|
|
33
|
+
},
|
|
34
|
+
"./dist/react-query": {
|
|
35
|
+
"import": "./dist/react-query.es.js",
|
|
36
|
+
"require": "./dist/react-query.cjs.js",
|
|
37
|
+
"types": "./dist/react-query.d.ts"
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
"files": [
|
|
41
|
+
"dist",
|
|
42
|
+
"README.md",
|
|
43
|
+
"LICENSE.md"
|
|
44
|
+
],
|
|
45
|
+
"publishConfig": {
|
|
46
|
+
"access": "public"
|
|
47
|
+
},
|
|
48
|
+
"scripts": {
|
|
49
|
+
"dev": "vite",
|
|
50
|
+
"build": "tsc && LIB_NAME=api-contract-kit vite build && LIB_NAME=server vite build && LIB_NAME=client vite build && LIB_NAME=react-query vite build && LIB_NAME=export-open-api vite build",
|
|
51
|
+
"test": "vitest run",
|
|
52
|
+
"lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0",
|
|
53
|
+
"preview": "vite preview"
|
|
54
|
+
},
|
|
55
|
+
"devDependencies": {
|
|
56
|
+
"@tanstack/react-query": "5.59.20",
|
|
57
|
+
"@typescript-eslint/eslint-plugin": "^8.57.1",
|
|
58
|
+
"@typescript-eslint/parser": "^8.57.1",
|
|
59
|
+
"eslint": "^10.1.0",
|
|
60
|
+
"vitest": "^2.1.8",
|
|
61
|
+
"typescript": "5.6.2",
|
|
62
|
+
"vite": "5.4.10",
|
|
63
|
+
"vite-plugin-node-polyfills": "0.22.0"
|
|
64
|
+
},
|
|
65
|
+
"dependencies": {
|
|
66
|
+
"@asteasolutions/zod-to-openapi": "7.2.0",
|
|
67
|
+
"@types/node": "22.9.0",
|
|
68
|
+
"vite-plugin-dts": "4.3.0",
|
|
69
|
+
"zod": "3.22.4"
|
|
70
|
+
},
|
|
71
|
+
"peerDependencies": {
|
|
72
|
+
"@tanstack/react-query": ">=5.0.0"
|
|
73
|
+
},
|
|
74
|
+
"peerDependenciesMeta": {
|
|
75
|
+
"@tanstack/react-query": {
|
|
76
|
+
"optional": true
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
"bin": {
|
|
80
|
+
"export-open-api": "dist/open-api.cjs.js"
|
|
81
|
+
}
|
|
82
|
+
}
|