@codexsploitx/schemaapi 1.0.4 → 1.0.6
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/bin/schemaapi +10 -2
- package/dist/adapters/deno.d.ts +4 -0
- package/dist/adapters/express.d.ts +21 -0
- package/dist/adapters/fastify.d.ts +23 -0
- package/dist/adapters/hapi.d.ts +28 -0
- package/dist/adapters/index.d.ts +9 -0
- package/dist/adapters/koa.d.ts +22 -0
- package/dist/adapters/nest.d.ts +35 -0
- package/dist/adapters/next.d.ts +30 -0
- package/dist/adapters/remix.d.ts +14 -0
- package/dist/adapters/ws.d.ts +14 -0
- package/dist/core/client.d.ts +16 -0
- package/dist/core/contract.d.ts +74 -3
- package/dist/core/versioning.test.d.ts +1 -0
- package/dist/docs.d.ts +12 -0
- package/dist/index.d.ts +4 -0
- package/dist/playground.d.ts +65 -0
- package/dist/playground.test.d.ts +1 -0
- package/dist/schemaapi.cjs.js +1713 -2
- package/dist/schemaapi.cjs.js.map +1 -1
- package/dist/schemaapi.esm.js +1705 -3
- package/dist/schemaapi.esm.js.map +1 -1
- package/dist/schemaapi.umd.js +1715 -6
- package/dist/schemaapi.umd.js.map +1 -1
- package/dist/sdk.d.ts +8 -0
- package/package.json +1 -1
- package/readme.md +40 -30
package/bin/schemaapi
CHANGED
|
@@ -23,6 +23,14 @@ function showHelp() {
|
|
|
23
23
|
console.log(" schemaapi generate tests");
|
|
24
24
|
console.log(" schemaapi audit");
|
|
25
25
|
console.log(" schemaapi init <adapter>");
|
|
26
|
+
console.log("");
|
|
27
|
+
console.log("Adapters:");
|
|
28
|
+
console.log(" express");
|
|
29
|
+
console.log(" next");
|
|
30
|
+
console.log(" fastify");
|
|
31
|
+
console.log(" remix");
|
|
32
|
+
console.log(" nest");
|
|
33
|
+
console.log(" deno");
|
|
26
34
|
}
|
|
27
35
|
|
|
28
36
|
function loadConfig() {
|
|
@@ -228,7 +236,7 @@ function handleInit(adapterArg) {
|
|
|
228
236
|
const usersContractPath = path.join(contractsDir, "usersContract.ts");
|
|
229
237
|
if (!fs.existsSync(usersContractPath)) {
|
|
230
238
|
const usersContractContent = [
|
|
231
|
-
'import { createContract } from "schemaapi";',
|
|
239
|
+
'import { createContract } from "@codexsploitx/schemaapi";',
|
|
232
240
|
'import { z } from "zod";',
|
|
233
241
|
"",
|
|
234
242
|
"export const usersContract = createContract({",
|
|
@@ -257,7 +265,7 @@ function handleInit(adapterArg) {
|
|
|
257
265
|
const routePath = path.join(appApiUsersDir, "route.ts");
|
|
258
266
|
if (!fs.existsSync(routePath)) {
|
|
259
267
|
const nextRouteContent = [
|
|
260
|
-
'import { adapters } from "schemaapi";',
|
|
268
|
+
'import { adapters } from "@codexsploitx/schemaapi";',
|
|
261
269
|
'import { usersContract } from "../../../contracts";',
|
|
262
270
|
"",
|
|
263
271
|
"const handlers = adapters.next.handleContract(usersContract, {",
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { createContract } from "../core/contract";
|
|
2
|
+
type AnyContract = ReturnType<typeof createContract>;
|
|
3
|
+
export declare function handleContract(contract: AnyContract, handlers: Record<string, (ctx: Record<string, unknown>) => unknown | Promise<unknown>>): (req: Request) => Promise<Response>;
|
|
4
|
+
export {};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { createContract } from "../core/contract";
|
|
2
|
+
type AnyContract = ReturnType<typeof createContract>;
|
|
3
|
+
export interface ExpressLikeRequest {
|
|
4
|
+
params: Record<string, string>;
|
|
5
|
+
query: Record<string, string>;
|
|
6
|
+
body: unknown;
|
|
7
|
+
headers: Record<string, string>;
|
|
8
|
+
user?: unknown;
|
|
9
|
+
[key: string]: unknown;
|
|
10
|
+
}
|
|
11
|
+
export interface ExpressLikeResponse {
|
|
12
|
+
json: (body: unknown) => void;
|
|
13
|
+
send?: (body: unknown) => void;
|
|
14
|
+
setHeader?: (name: string, value: string) => void;
|
|
15
|
+
}
|
|
16
|
+
export type ExpressLikeHandler = (req: ExpressLikeRequest, res: ExpressLikeResponse, next: (err?: unknown) => void) => void | Promise<void>;
|
|
17
|
+
export type ExpressLikeApp = {
|
|
18
|
+
[method: string]: (path: string, handler: ExpressLikeHandler) => void;
|
|
19
|
+
};
|
|
20
|
+
export declare function handleContract(app: ExpressLikeApp, contract: AnyContract, handlers: Record<string, (ctx: Record<string, unknown>) => unknown | Promise<unknown>>): void;
|
|
21
|
+
export {};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { createContract } from "../core/contract";
|
|
2
|
+
type AnyContract = ReturnType<typeof createContract>;
|
|
3
|
+
interface FastifyLikeRequest {
|
|
4
|
+
params: Record<string, string>;
|
|
5
|
+
query: Record<string, string>;
|
|
6
|
+
body: unknown;
|
|
7
|
+
headers: Record<string, string>;
|
|
8
|
+
user?: unknown;
|
|
9
|
+
}
|
|
10
|
+
interface FastifyLikeReply {
|
|
11
|
+
status: (code: number) => FastifyLikeReply;
|
|
12
|
+
send: (payload: unknown) => void;
|
|
13
|
+
header: (key: string, value: string) => FastifyLikeReply;
|
|
14
|
+
}
|
|
15
|
+
interface FastifyInstance {
|
|
16
|
+
route: (options: {
|
|
17
|
+
method: string | string[];
|
|
18
|
+
url: string;
|
|
19
|
+
handler: (request: FastifyLikeRequest, reply: FastifyLikeReply) => Promise<void> | void;
|
|
20
|
+
}) => void;
|
|
21
|
+
}
|
|
22
|
+
export declare function handleContract(fastify: FastifyInstance, contract: AnyContract, handlers: Record<string, (ctx: Record<string, unknown>) => unknown | Promise<unknown>>): void;
|
|
23
|
+
export {};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { createContract } from "../core/contract";
|
|
2
|
+
type AnyContract = ReturnType<typeof createContract>;
|
|
3
|
+
interface HapiLikeRequest {
|
|
4
|
+
params: Record<string, string>;
|
|
5
|
+
query: Record<string, string>;
|
|
6
|
+
payload: unknown;
|
|
7
|
+
headers: Record<string, string>;
|
|
8
|
+
auth?: {
|
|
9
|
+
credentials?: unknown;
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
interface HapiLikeResponseObject {
|
|
13
|
+
type: (contentType: string) => void;
|
|
14
|
+
header: (key: string, value: string) => void;
|
|
15
|
+
code: (statusCode: number) => void;
|
|
16
|
+
}
|
|
17
|
+
interface HapiLikeResponseToolkit {
|
|
18
|
+
response: (data: unknown) => HapiLikeResponseObject;
|
|
19
|
+
}
|
|
20
|
+
interface HapiServer {
|
|
21
|
+
route: (options: {
|
|
22
|
+
method: string;
|
|
23
|
+
path: string;
|
|
24
|
+
handler: (request: HapiLikeRequest, h: HapiLikeResponseToolkit) => Promise<unknown> | unknown;
|
|
25
|
+
}) => void;
|
|
26
|
+
}
|
|
27
|
+
export declare function handleContract(server: HapiServer, contract: AnyContract, handlers: Record<string, (ctx: Record<string, unknown>) => unknown | Promise<unknown>>): void;
|
|
28
|
+
export {};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export * as express from "./express";
|
|
2
|
+
export * as next from "./next";
|
|
3
|
+
export * as fastify from "./fastify";
|
|
4
|
+
export * as nest from "./nest";
|
|
5
|
+
export * as koa from "./koa";
|
|
6
|
+
export * as hapi from "./hapi";
|
|
7
|
+
export * as remix from "./remix";
|
|
8
|
+
export * as deno from "./deno";
|
|
9
|
+
export * as ws from "./ws";
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { createContract } from "../core/contract";
|
|
2
|
+
type AnyContract = ReturnType<typeof createContract>;
|
|
3
|
+
interface KoaLikeContext {
|
|
4
|
+
params: Record<string, string>;
|
|
5
|
+
query: Record<string, string>;
|
|
6
|
+
request: {
|
|
7
|
+
body?: unknown;
|
|
8
|
+
};
|
|
9
|
+
headers: Record<string, string>;
|
|
10
|
+
state?: {
|
|
11
|
+
user?: unknown;
|
|
12
|
+
};
|
|
13
|
+
body?: unknown;
|
|
14
|
+
type?: string;
|
|
15
|
+
set: (key: string, value: string) => void;
|
|
16
|
+
status?: number;
|
|
17
|
+
}
|
|
18
|
+
interface KoaRouter {
|
|
19
|
+
register: (path: string, methods: string[], middleware: (ctx: KoaLikeContext, next: () => Promise<unknown>) => Promise<unknown>) => void;
|
|
20
|
+
}
|
|
21
|
+
export declare function handleContract(router: KoaRouter, contract: AnyContract, handlers: Record<string, (ctx: Record<string, unknown>) => unknown | Promise<unknown>>): void;
|
|
22
|
+
export {};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { createContract } from "../core/contract";
|
|
2
|
+
type AnyContract = ReturnType<typeof createContract>;
|
|
3
|
+
interface NestLikeRequest {
|
|
4
|
+
params: Record<string, string>;
|
|
5
|
+
query: Record<string, string>;
|
|
6
|
+
body: unknown;
|
|
7
|
+
headers: Record<string, string>;
|
|
8
|
+
user?: unknown;
|
|
9
|
+
}
|
|
10
|
+
interface NestLikeResponse {
|
|
11
|
+
send?: (payload: unknown) => void;
|
|
12
|
+
json?: (payload: unknown) => void;
|
|
13
|
+
end: (payload: string) => void;
|
|
14
|
+
status?: (code: number) => void;
|
|
15
|
+
code?: (code: number) => void;
|
|
16
|
+
}
|
|
17
|
+
type HttpMethodHandler = (path: string, handler: (req: NestLikeRequest, res: NestLikeResponse, next: unknown) => Promise<void>) => void;
|
|
18
|
+
interface NestApp {
|
|
19
|
+
getHttpAdapter: () => {
|
|
20
|
+
getInstance: () => unknown;
|
|
21
|
+
getRequestMethod: (request: unknown) => string;
|
|
22
|
+
getRequestUrl: (request: unknown) => string;
|
|
23
|
+
createMiddlewareFactory: (method: unknown) => unknown;
|
|
24
|
+
get: HttpMethodHandler;
|
|
25
|
+
post: HttpMethodHandler;
|
|
26
|
+
put: HttpMethodHandler;
|
|
27
|
+
delete: HttpMethodHandler;
|
|
28
|
+
patch: HttpMethodHandler;
|
|
29
|
+
[key: string]: unknown;
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
export declare const SchemaApiModule: {
|
|
33
|
+
register(app: NestApp, contract: AnyContract, handlers: Record<string, (ctx: Record<string, unknown>) => unknown | Promise<unknown>>): void;
|
|
34
|
+
};
|
|
35
|
+
export {};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { createContract } from "../core/contract";
|
|
2
|
+
type AnyContract = ReturnType<typeof createContract>;
|
|
3
|
+
interface NextRequest {
|
|
4
|
+
nextUrl: {
|
|
5
|
+
searchParams: URLSearchParams;
|
|
6
|
+
pathname: string;
|
|
7
|
+
};
|
|
8
|
+
json: () => Promise<unknown>;
|
|
9
|
+
headers: Headers;
|
|
10
|
+
method: string;
|
|
11
|
+
url: string;
|
|
12
|
+
}
|
|
13
|
+
export declare function handleContract(contract: AnyContract, handlers: Record<string, (ctx: Record<string, unknown>) => unknown | Promise<unknown>>): {
|
|
14
|
+
GET: (req: Request | NextRequest, { params }: {
|
|
15
|
+
params?: Record<string, string>;
|
|
16
|
+
}) => Promise<Response>;
|
|
17
|
+
POST: (req: Request | NextRequest, { params }: {
|
|
18
|
+
params?: Record<string, string>;
|
|
19
|
+
}) => Promise<Response>;
|
|
20
|
+
PUT: (req: Request | NextRequest, { params }: {
|
|
21
|
+
params?: Record<string, string>;
|
|
22
|
+
}) => Promise<Response>;
|
|
23
|
+
DELETE: (req: Request | NextRequest, { params }: {
|
|
24
|
+
params?: Record<string, string>;
|
|
25
|
+
}) => Promise<Response>;
|
|
26
|
+
PATCH: (req: Request | NextRequest, { params }: {
|
|
27
|
+
params?: Record<string, string>;
|
|
28
|
+
}) => Promise<Response>;
|
|
29
|
+
};
|
|
30
|
+
export {};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { createContract } from "../core/contract";
|
|
2
|
+
type AnyContract = ReturnType<typeof createContract>;
|
|
3
|
+
type RemixParams = Record<string, string | undefined>;
|
|
4
|
+
export declare function createRouteHandlers(contract: AnyContract, handlers: Record<string, (ctx: Record<string, unknown>) => unknown | Promise<unknown>>, routePattern: string): {
|
|
5
|
+
loader: (args: {
|
|
6
|
+
request: Request;
|
|
7
|
+
params: RemixParams;
|
|
8
|
+
}) => Promise<Response>;
|
|
9
|
+
action: (args: {
|
|
10
|
+
request: Request;
|
|
11
|
+
params: RemixParams;
|
|
12
|
+
}) => Promise<Response>;
|
|
13
|
+
};
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { WebSocketServer, WebSocket } from "ws";
|
|
2
|
+
import type { IncomingMessage } from "http";
|
|
3
|
+
import type { createContract } from "../core/contract";
|
|
4
|
+
type AnyContract = ReturnType<typeof createContract>;
|
|
5
|
+
type WsHandlerContext = {
|
|
6
|
+
params: Record<string, string>;
|
|
7
|
+
query: Record<string, string>;
|
|
8
|
+
headers: IncomingMessage["headers"];
|
|
9
|
+
ws: WebSocket;
|
|
10
|
+
send: (data: unknown) => void;
|
|
11
|
+
onMessage: (cb: (data: unknown) => void) => void;
|
|
12
|
+
};
|
|
13
|
+
export declare function handleContract(wss: WebSocketServer, contract: AnyContract, handlers: Record<string, (ctx: WsHandlerContext) => void | Promise<void>>): WebSocketServer;
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
type WebSocketLike = {
|
|
2
|
+
close: (code?: number, reason?: string) => void;
|
|
3
|
+
};
|
|
4
|
+
type WebSocketConstructor = new (url: string) => WebSocketLike;
|
|
5
|
+
type ClientConfig = {
|
|
6
|
+
baseUrl: string;
|
|
7
|
+
fetch?: typeof fetch;
|
|
8
|
+
WebSocket?: WebSocketConstructor;
|
|
9
|
+
};
|
|
10
|
+
export type HttpMethod = "GET" | "POST" | "PUT" | "DELETE" | "PATCH";
|
|
11
|
+
export type ExtractSchema<TContract> = TContract;
|
|
12
|
+
export type InferResponse<TContract, Endpoint extends string> = unknown;
|
|
13
|
+
export declare function createClient<T>(contract: {
|
|
14
|
+
schema: T;
|
|
15
|
+
}, config: ClientConfig): Record<string, unknown>;
|
|
16
|
+
export {};
|
package/dist/core/contract.d.ts
CHANGED
|
@@ -1,4 +1,75 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import { ZodTypeAny } from "zod";
|
|
2
|
+
export declare class SchemaApiError extends Error {
|
|
3
|
+
code: number;
|
|
4
|
+
constructor(code: number, message: string);
|
|
5
|
+
}
|
|
6
|
+
type RequestContext = {
|
|
7
|
+
params?: unknown;
|
|
8
|
+
query?: unknown;
|
|
9
|
+
body?: unknown;
|
|
10
|
+
headers?: unknown;
|
|
11
|
+
user?: {
|
|
12
|
+
role?: string;
|
|
13
|
+
};
|
|
14
|
+
[key: string]: unknown;
|
|
4
15
|
};
|
|
16
|
+
type MediaConfig = {
|
|
17
|
+
kind?: "upload" | "download";
|
|
18
|
+
contentTypes?: string[];
|
|
19
|
+
maxSize?: number;
|
|
20
|
+
};
|
|
21
|
+
export type NormalizedErrorPayload = {
|
|
22
|
+
error: string;
|
|
23
|
+
message: string;
|
|
24
|
+
status: number;
|
|
25
|
+
};
|
|
26
|
+
export declare function buildErrorPayload(error: unknown): NormalizedErrorPayload;
|
|
27
|
+
type MethodDefinition = {
|
|
28
|
+
params?: ZodTypeAny;
|
|
29
|
+
query?: ZodTypeAny;
|
|
30
|
+
body?: ZodTypeAny;
|
|
31
|
+
headers?: ZodTypeAny;
|
|
32
|
+
roles?: string[];
|
|
33
|
+
response?: ZodTypeAny;
|
|
34
|
+
clientMessages?: ZodTypeAny;
|
|
35
|
+
serverMessages?: ZodTypeAny;
|
|
36
|
+
media?: MediaConfig;
|
|
37
|
+
errors?: Record<string, unknown>;
|
|
38
|
+
[key: string]: unknown;
|
|
39
|
+
};
|
|
40
|
+
type RouteDefinition = Record<string, MethodDefinition>;
|
|
41
|
+
type ContractDefinition = Record<string, RouteDefinition>;
|
|
42
|
+
type CompareResult = {
|
|
43
|
+
breakingChanges: string[];
|
|
44
|
+
};
|
|
45
|
+
export type FieldDoc = {
|
|
46
|
+
name: string;
|
|
47
|
+
type?: string;
|
|
48
|
+
optional: boolean;
|
|
49
|
+
};
|
|
50
|
+
export type MethodDoc = {
|
|
51
|
+
method: string;
|
|
52
|
+
path: string;
|
|
53
|
+
params?: FieldDoc[];
|
|
54
|
+
query?: FieldDoc[];
|
|
55
|
+
body?: FieldDoc[];
|
|
56
|
+
headers?: FieldDoc[];
|
|
57
|
+
roles?: string[];
|
|
58
|
+
errors?: {
|
|
59
|
+
status: string;
|
|
60
|
+
code: string;
|
|
61
|
+
}[];
|
|
62
|
+
media?: MediaConfig;
|
|
63
|
+
};
|
|
64
|
+
export type ContractDocs = {
|
|
65
|
+
routes: MethodDoc[];
|
|
66
|
+
};
|
|
67
|
+
export declare function createContract<T extends ContractDefinition>(schema: T): {
|
|
68
|
+
handle(endpoint: string, handler: (ctx: RequestContext) => unknown | Promise<unknown>): (ctx: RequestContext) => Promise<unknown>;
|
|
69
|
+
compareWith(other: {
|
|
70
|
+
schema: ContractDefinition;
|
|
71
|
+
}): CompareResult;
|
|
72
|
+
docs(): ContractDocs;
|
|
73
|
+
schema: T;
|
|
74
|
+
};
|
|
75
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/dist/docs.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { ContractDocs } from "./core/contract";
|
|
2
|
+
export type DocsFormat = "json" | "html" | "text";
|
|
3
|
+
export type RenderHtmlOptions = {
|
|
4
|
+
title?: string;
|
|
5
|
+
theme?: "light" | "dark" | "auto";
|
|
6
|
+
};
|
|
7
|
+
export declare function renderDocsJSON(docs: ContractDocs): string;
|
|
8
|
+
export declare function renderDocsText(docs: ContractDocs): string;
|
|
9
|
+
export declare function renderDocsHTML(docs: ContractDocs, options?: RenderHtmlOptions): string;
|
|
10
|
+
export declare function renderDocs(docs: ContractDocs, options: {
|
|
11
|
+
format: DocsFormat;
|
|
12
|
+
} & Partial<RenderHtmlOptions>): string;
|
package/dist/index.d.ts
CHANGED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const contract: {
|
|
3
|
+
handle(endpoint: string, handler: (ctx: {
|
|
4
|
+
[key: string]: unknown;
|
|
5
|
+
params?: unknown;
|
|
6
|
+
query?: unknown;
|
|
7
|
+
body?: unknown;
|
|
8
|
+
headers?: unknown;
|
|
9
|
+
user?: {
|
|
10
|
+
role?: string;
|
|
11
|
+
};
|
|
12
|
+
}) => unknown | Promise<unknown>): (ctx: {
|
|
13
|
+
[key: string]: unknown;
|
|
14
|
+
params?: unknown;
|
|
15
|
+
query?: unknown;
|
|
16
|
+
body?: unknown;
|
|
17
|
+
headers?: unknown;
|
|
18
|
+
user?: {
|
|
19
|
+
role?: string;
|
|
20
|
+
};
|
|
21
|
+
}) => Promise<unknown>;
|
|
22
|
+
compareWith(other: {
|
|
23
|
+
schema: {
|
|
24
|
+
[x: string]: {
|
|
25
|
+
[x: string]: {
|
|
26
|
+
[key: string]: unknown;
|
|
27
|
+
params?: z.ZodType;
|
|
28
|
+
query?: z.ZodType;
|
|
29
|
+
body?: z.ZodType;
|
|
30
|
+
headers?: z.ZodType;
|
|
31
|
+
roles?: string[];
|
|
32
|
+
response?: z.ZodType;
|
|
33
|
+
clientMessages?: z.ZodType;
|
|
34
|
+
serverMessages?: z.ZodType;
|
|
35
|
+
media?: {
|
|
36
|
+
kind?: "upload" | "download";
|
|
37
|
+
contentTypes?: string[];
|
|
38
|
+
maxSize?: number;
|
|
39
|
+
};
|
|
40
|
+
errors?: Record<string, unknown>;
|
|
41
|
+
};
|
|
42
|
+
};
|
|
43
|
+
};
|
|
44
|
+
}): {
|
|
45
|
+
breakingChanges: string[];
|
|
46
|
+
};
|
|
47
|
+
docs(): import("./index").ContractDocs;
|
|
48
|
+
schema: {
|
|
49
|
+
"/users/:id": {
|
|
50
|
+
GET: {
|
|
51
|
+
params: z.ZodObject<{
|
|
52
|
+
id: z.ZodString;
|
|
53
|
+
}, z.core.$strip>;
|
|
54
|
+
headers: z.ZodObject<{
|
|
55
|
+
authorization: z.ZodString;
|
|
56
|
+
}, z.core.$strip>;
|
|
57
|
+
roles: string[];
|
|
58
|
+
response: z.ZodObject<{
|
|
59
|
+
id: z.ZodString;
|
|
60
|
+
username: z.ZodString;
|
|
61
|
+
}, z.core.$strip>;
|
|
62
|
+
};
|
|
63
|
+
};
|
|
64
|
+
};
|
|
65
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|