@orpc/server 0.2.1 → 0.3.1
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/dist/{chunk-26DTFWOI.js → chunk-YYGRQD4L.js} +26 -36
- package/dist/chunk-YYGRQD4L.js.map +1 -0
- package/dist/fetch.js +12 -12
- package/dist/fetch.js.map +1 -1
- package/dist/index.js +9 -15
- package/dist/index.js.map +1 -1
- package/dist/src/adapters/fetch.d.ts +2 -2
- package/dist/src/adapters/fetch.d.ts.map +1 -1
- package/dist/src/builder.d.ts +2 -2
- package/dist/src/builder.d.ts.map +1 -1
- package/dist/src/procedure-builder.d.ts +2 -2
- package/dist/src/procedure-builder.d.ts.map +1 -1
- package/dist/src/procedure-caller.d.ts +7 -16
- package/dist/src/procedure-caller.d.ts.map +1 -1
- package/dist/src/procedure-implementer.d.ts +2 -2
- package/dist/src/procedure-implementer.d.ts.map +1 -1
- package/dist/src/procedure.d.ts +11 -10
- package/dist/src/procedure.d.ts.map +1 -1
- package/dist/src/router-caller.d.ts +8 -17
- package/dist/src/router-caller.d.ts.map +1 -1
- package/dist/src/router.d.ts +2 -2
- package/dist/src/router.d.ts.map +1 -1
- package/dist/src/types.d.ts +0 -1
- package/dist/src/types.d.ts.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +8 -6
- package/src/adapters/fetch.test.ts +18 -18
- package/src/adapters/fetch.ts +9 -5
- package/src/builder.test.ts +4 -4
- package/src/builder.ts +6 -6
- package/src/middleware.test.ts +1 -1
- package/src/procedure-builder.test.ts +2 -2
- package/src/procedure-builder.ts +6 -6
- package/src/procedure-caller.test.ts +27 -36
- package/src/procedure-caller.ts +36 -44
- package/src/procedure-implementer.test.ts +8 -8
- package/src/procedure-implementer.ts +6 -6
- package/src/procedure.test.ts +20 -20
- package/src/procedure.ts +30 -45
- package/src/router-builder.test.ts +4 -4
- package/src/router-caller.test.ts +5 -52
- package/src/router-caller.ts +11 -31
- package/src/router-implementer.test.ts +6 -6
- package/src/router.test-d.ts +2 -2
- package/src/router.test.ts +10 -10
- package/src/router.ts +4 -4
- package/src/types.ts +0 -1
- package/dist/chunk-26DTFWOI.js.map +0 -1
@@ -45,21 +45,29 @@ function decorateMiddleware(middleware) {
|
|
45
45
|
}
|
46
46
|
|
47
47
|
// src/procedure-caller.ts
|
48
|
+
import { value } from "@orpc/shared";
|
48
49
|
import { ORPCError } from "@orpc/shared/error";
|
50
|
+
import { OpenAPIDeserializer } from "@orpc/transformer";
|
49
51
|
function createProcedureCaller(options) {
|
50
|
-
const internal = options.internal ?? true;
|
51
52
|
const path = options.path ?? [];
|
52
53
|
const procedure = options.procedure;
|
53
|
-
const validate = options.validate ?? true;
|
54
54
|
const caller = async (input) => {
|
55
|
-
const
|
56
|
-
if (!
|
55
|
+
const input_ = (() => {
|
56
|
+
if (!(input instanceof FormData)) {
|
57
57
|
return input;
|
58
|
+
}
|
59
|
+
const transformer = new OpenAPIDeserializer({
|
60
|
+
schema: procedure.zz$p.contract.zz$cp.InputSchema
|
61
|
+
});
|
62
|
+
return transformer.deserializeAsFormData(input);
|
63
|
+
})();
|
64
|
+
const validInput = (() => {
|
58
65
|
const schema = procedure.zz$p.contract.zz$cp.InputSchema;
|
59
|
-
if (!schema)
|
60
|
-
return
|
66
|
+
if (!schema) {
|
67
|
+
return input_;
|
68
|
+
}
|
61
69
|
try {
|
62
|
-
return schema.parse(
|
70
|
+
return schema.parse(input_);
|
63
71
|
} catch (e) {
|
64
72
|
throw new ORPCError({
|
65
73
|
message: "Validation input failed",
|
@@ -70,7 +78,7 @@ function createProcedureCaller(options) {
|
|
70
78
|
})();
|
71
79
|
const middlewares = procedure.zz$p.middlewares ?? [];
|
72
80
|
let currentMidIndex = 0;
|
73
|
-
let currentContext = options.context;
|
81
|
+
let currentContext = await value(options.context);
|
74
82
|
const next = async (nextOptions) => {
|
75
83
|
const mid = middlewares[currentMidIndex];
|
76
84
|
currentMidIndex += 1;
|
@@ -79,16 +87,14 @@ function createProcedureCaller(options) {
|
|
79
87
|
return await mid(validInput, currentContext, {
|
80
88
|
path,
|
81
89
|
procedure,
|
82
|
-
internal,
|
83
90
|
next,
|
84
91
|
output: (output2) => ({ output: output2, context: void 0 })
|
85
92
|
});
|
86
93
|
} else {
|
87
94
|
return {
|
88
|
-
output: await await procedure.zz$p.
|
95
|
+
output: await await procedure.zz$p.func(validInput, currentContext, {
|
89
96
|
path,
|
90
|
-
procedure
|
91
|
-
internal
|
97
|
+
procedure
|
92
98
|
}),
|
93
99
|
context: currentContext
|
94
100
|
};
|
@@ -96,11 +102,10 @@ function createProcedureCaller(options) {
|
|
96
102
|
};
|
97
103
|
const output = (await next({})).output;
|
98
104
|
const validOutput = await (async () => {
|
99
|
-
if (!validate)
|
100
|
-
return output;
|
101
105
|
const schema = procedure.zz$p.contract.zz$cp.OutputSchema;
|
102
|
-
if (!schema)
|
106
|
+
if (!schema) {
|
103
107
|
return output;
|
108
|
+
}
|
104
109
|
const result = await schema.safeParseAsync(output);
|
105
110
|
if (result.error) {
|
106
111
|
throw new ORPCError({
|
@@ -121,7 +126,6 @@ import {
|
|
121
126
|
DecoratedContractProcedure,
|
122
127
|
isContractProcedure
|
123
128
|
} from "@orpc/contract";
|
124
|
-
import { OpenAPIDeserializer } from "@orpc/transformer";
|
125
129
|
var Procedure = class {
|
126
130
|
constructor(zz$p) {
|
127
131
|
this.zz$p = zz$p;
|
@@ -132,24 +136,10 @@ function decorateProcedure(procedure) {
|
|
132
136
|
if (DECORATED_PROCEDURE_SYMBOL in procedure) {
|
133
137
|
return procedure;
|
134
138
|
}
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
const transformer = new OpenAPIDeserializer({
|
140
|
-
schema: procedure.zz$p.contract.zz$cp.InputSchema
|
141
|
-
});
|
142
|
-
return transformer.deserializeAsFormData(input);
|
143
|
-
})();
|
144
|
-
const procedureCaller = createProcedureCaller({
|
145
|
-
procedure,
|
146
|
-
context: void 0,
|
147
|
-
internal: false,
|
148
|
-
validate: true
|
149
|
-
});
|
150
|
-
return await procedureCaller(input_);
|
151
|
-
};
|
152
|
-
return Object.assign(serverAction, {
|
139
|
+
return Object.assign(createProcedureCaller({
|
140
|
+
procedure,
|
141
|
+
context: void 0
|
142
|
+
}), {
|
153
143
|
[DECORATED_PROCEDURE_SYMBOL]: true,
|
154
144
|
zz$p: procedure.zz$p,
|
155
145
|
prefix(prefix) {
|
@@ -186,7 +176,7 @@ function decorateProcedure(procedure) {
|
|
186
176
|
function isProcedure(item) {
|
187
177
|
if (item instanceof Procedure)
|
188
178
|
return true;
|
189
|
-
return (typeof item === "object" || typeof item === "function") && item !== null && "zz$p" in item && typeof item.zz$p === "object" && item.zz$p !== null && "contract" in item.zz$p && isContractProcedure(item.zz$p.contract) && "
|
179
|
+
return (typeof item === "object" || typeof item === "function") && item !== null && "zz$p" in item && typeof item.zz$p === "object" && item.zz$p !== null && "contract" in item.zz$p && isContractProcedure(item.zz$p.contract) && "func" in item.zz$p && typeof item.zz$p.func === "function";
|
190
180
|
}
|
191
181
|
|
192
182
|
export {
|
@@ -197,4 +187,4 @@ export {
|
|
197
187
|
decorateProcedure,
|
198
188
|
isProcedure
|
199
189
|
};
|
200
|
-
//# sourceMappingURL=chunk-
|
190
|
+
//# sourceMappingURL=chunk-YYGRQD4L.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../src/utils.ts","../src/middleware.ts","../src/procedure-caller.ts","../src/procedure.ts"],"sourcesContent":["import type { Context, MergeContext } from './types'\n\nexport function mergeContext<A extends Context, B extends Context>(\n a: A,\n b: B,\n): MergeContext<A, B> {\n if (!a)\n return b as any\n if (!b)\n return a as any\n\n return {\n ...a,\n ...b,\n } as any\n}\n","import type { Promisable } from '@orpc/shared'\nimport type { Context, MergeContext, Meta } from './types'\nimport { mergeContext } from './utils'\n\nexport type MiddlewareResult<TExtraContext extends Context, TOutput> = Promisable<{\n output: TOutput\n context: TExtraContext\n}>\n\nexport interface MiddlewareMeta<\n TOutput,\n> extends Meta {\n next: <UExtraContext extends Context = undefined>(\n options: UExtraContext extends undefined ? { context?: UExtraContext } : { context: UExtraContext }\n ) => MiddlewareResult<UExtraContext, TOutput>\n output: <UOutput>(output: UOutput) => MiddlewareResult<undefined, UOutput>\n}\n\nexport interface Middleware<\n TContext extends Context,\n TExtraContext extends Context,\n TInput,\n TOutput,\n> {\n (\n input: TInput,\n context: TContext,\n meta: MiddlewareMeta<TOutput>,\n ): Promisable<\n MiddlewareResult<TExtraContext, TOutput>\n >\n}\n\nexport interface MapInputMiddleware<TInput, TMappedInput> {\n (input: TInput): TMappedInput\n}\n\nexport interface DecoratedMiddleware<\n TContext extends Context,\n TExtraContext extends Context,\n TInput,\n TOutput,\n> extends Middleware<TContext, TExtraContext, TInput, TOutput> {\n concat: (<\n UExtraContext extends Partial<MergeContext<Context, MergeContext<TContext, TExtraContext>>> | undefined = undefined,\n UInput = TInput,\n >(\n middleware: Middleware<\n MergeContext<TContext, TExtraContext>,\n UExtraContext,\n UInput & TInput,\n TOutput\n >,\n ) => DecoratedMiddleware<\n TContext,\n MergeContext<TExtraContext, UExtraContext>,\n TInput & UInput,\n TOutput\n >) & (<\n UExtraContext extends Partial<MergeContext<Context, MergeContext<TContext, TExtraContext>>> | undefined = undefined,\n UInput = TInput,\n UMappedInput = unknown,\n >(\n middleware: Middleware<\n MergeContext<TContext, TExtraContext>,\n UExtraContext,\n UMappedInput,\n TOutput\n >,\n mapInput: MapInputMiddleware<UInput, UMappedInput>,\n ) => DecoratedMiddleware<\n TContext,\n MergeContext<TExtraContext, UExtraContext>,\n TInput & UInput,\n TOutput\n >)\n\n mapInput: <UInput = unknown>(\n map: MapInputMiddleware<UInput, TInput>,\n ) => DecoratedMiddleware<TContext, TExtraContext, UInput, TOutput>\n}\n\nconst decoratedMiddlewareSymbol = Symbol('🔒decoratedMiddleware')\n\nexport function decorateMiddleware<\n TContext extends Context,\n TExtraContext extends Context,\n TInput,\n TOutput,\n>(\n middleware: Middleware<TContext, TExtraContext, TInput, TOutput>,\n): DecoratedMiddleware<TContext, TExtraContext, TInput, TOutput> {\n if (Reflect.get(middleware, decoratedMiddlewareSymbol)) {\n return middleware as any\n }\n\n const concat = (\n concatMiddleware: Middleware<any, any, any, any>,\n mapInput?: MapInputMiddleware<any, any>,\n ): Middleware<any, any, any, any> => {\n const concatMiddleware_ = mapInput\n ? decorateMiddleware(concatMiddleware).mapInput(mapInput)\n : concatMiddleware\n\n return decorateMiddleware(async (input, context, meta, ...rest) => {\n const input_ = input as any\n const context_ = context as any\n const meta_ = meta as any\n\n const next: MiddlewareMeta<any>['next'] = async (options) => {\n return concatMiddleware_(input_, mergeContext(context_, options.context), meta_, ...rest)\n }\n\n const m1 = await middleware(input_, context_, {\n ...meta_,\n next,\n }, ...rest)\n\n return m1\n })\n }\n\n const mapInput = <UInput = unknown>(\n map: MapInputMiddleware<UInput, TInput>,\n ): DecoratedMiddleware<TContext, TExtraContext, UInput, TOutput> => {\n return decorateMiddleware((input, ...rest) =>\n middleware(map(input), ...rest),\n )\n }\n\n return Object.assign(middleware, {\n [decoratedMiddlewareSymbol]: true,\n concat: concat as any,\n mapInput,\n })\n}\n","import type { SchemaInput, SchemaOutput } from '@orpc/contract'\nimport type { MiddlewareMeta } from './middleware'\nimport type { Procedure } from './procedure'\nimport type { Context } from './types'\nimport { type Value, value } from '@orpc/shared'\nimport { ORPCError } from '@orpc/shared/error'\nimport { OpenAPIDeserializer } from '@orpc/transformer'\nimport { mergeContext } from './utils'\n\nexport interface CreateProcedureCallerOptions<\n TProcedure extends Procedure<any, any, any, any, any>,\n> {\n procedure: TProcedure\n\n /**\n * The context used when calling the procedure.\n */\n context: Value<\n TProcedure extends Procedure<infer UContext, any, any, any, any>\n ? UContext\n : never\n >\n\n /**\n * This is helpful for logging and analytics.\n *\n * @internal\n */\n path?: string[]\n}\n\nexport type ProcedureCaller<\n TProcedure extends Procedure<any, any, any, any, any>,\n> = TProcedure extends Procedure<\n any,\n any,\n infer UInputSchema,\n infer UOutputSchema,\n infer UFuncOutput\n>\n ? (\n input: SchemaInput<UInputSchema> | FormData,\n ) => Promise<\n SchemaOutput<UOutputSchema, UFuncOutput>\n >\n : never\n\nexport function createProcedureCaller<\n TProcedure extends Procedure<any, any, any, any, any>,\n>(\n options: CreateProcedureCallerOptions<TProcedure>,\n): ProcedureCaller<TProcedure> {\n const path = options.path ?? []\n const procedure = options.procedure\n\n const caller = async (input: unknown): Promise<unknown> => {\n const input_ = (() => {\n if (!(input instanceof FormData)) {\n return input\n }\n\n const transformer = new OpenAPIDeserializer({\n schema: procedure.zz$p.contract.zz$cp.InputSchema,\n })\n\n return transformer.deserializeAsFormData(input)\n })()\n\n const validInput = (() => {\n const schema = procedure.zz$p.contract.zz$cp.InputSchema\n if (!schema) {\n return input_\n }\n\n try {\n return schema.parse(input_)\n }\n catch (e) {\n throw new ORPCError({\n message: 'Validation input failed',\n code: 'BAD_REQUEST',\n cause: e,\n })\n }\n })()\n\n const middlewares = procedure.zz$p.middlewares ?? []\n let currentMidIndex = 0\n let currentContext: Context = await value(options.context)\n\n const next: MiddlewareMeta<unknown>['next'] = async (nextOptions) => {\n const mid = middlewares[currentMidIndex]\n currentMidIndex += 1\n currentContext = mergeContext(currentContext, nextOptions.context)\n\n if (mid) {\n return await mid(validInput, currentContext, {\n path,\n procedure,\n next,\n output: output => ({ output, context: undefined }),\n })\n }\n else {\n return {\n output: await await procedure.zz$p.func(validInput, currentContext, {\n path,\n procedure,\n }),\n context: currentContext,\n }\n }\n }\n\n const output = (await next({})).output\n\n const validOutput = await (async () => {\n const schema = procedure.zz$p.contract.zz$cp.OutputSchema\n if (!schema) {\n return output\n }\n\n const result = await schema.safeParseAsync(output)\n if (result.error) {\n throw new ORPCError({\n message: 'Validation output failed',\n code: 'INTERNAL_SERVER_ERROR',\n cause: result.error,\n })\n }\n return result.data\n })()\n\n return validOutput\n }\n\n return caller as ProcedureCaller<TProcedure>\n}\n","import type { Promisable } from '@orpc/shared'\nimport type { ProcedureCaller } from './procedure-caller'\nimport type { Context, MergeContext, Meta } from './types'\nimport {\n type ContractProcedure,\n DecoratedContractProcedure,\n type HTTPPath,\n isContractProcedure,\n type RouteOptions,\n type Schema,\n type SchemaInput,\n type SchemaOutput,\n} from '@orpc/contract'\nimport {\n decorateMiddleware,\n type MapInputMiddleware,\n type Middleware,\n} from './middleware'\nimport { createProcedureCaller } from './procedure-caller'\n\nexport class Procedure<\n TContext extends Context,\n TExtraContext extends Context,\n TInputSchema extends Schema,\n TOutputSchema extends Schema,\n TFuncOutput extends SchemaOutput<TOutputSchema>,\n> {\n constructor(\n public zz$p: {\n middlewares?: Middleware<any, any, any, any>[]\n contract: ContractProcedure<TInputSchema, TOutputSchema>\n func: ProcedureFunc<\n TContext,\n TExtraContext,\n TInputSchema,\n TOutputSchema,\n TFuncOutput\n >\n },\n ) {}\n}\n\nexport type DecoratedProcedure<\n TContext extends Context,\n TExtraContext extends Context,\n TInputSchema extends Schema,\n TOutputSchema extends Schema,\n TFuncOutput extends SchemaOutput<TOutputSchema>,\n> = Procedure<\n TContext,\n TExtraContext,\n TInputSchema,\n TOutputSchema,\n TFuncOutput\n> & {\n prefix: (\n prefix: HTTPPath,\n ) => DecoratedProcedure<\n TContext,\n TExtraContext,\n TInputSchema,\n TOutputSchema,\n TFuncOutput\n >\n\n route: (\n opts: RouteOptions,\n ) => DecoratedProcedure<\n TContext,\n TExtraContext,\n TInputSchema,\n TOutputSchema,\n TFuncOutput\n >\n\n use: (<\n UExtraContext extends\n | Partial<MergeContext<Context, MergeContext<TContext, TExtraContext>>>\n | undefined = undefined,\n >(\n middleware: Middleware<\n MergeContext<TContext, TExtraContext>,\n UExtraContext,\n SchemaOutput<TInputSchema>,\n SchemaInput<TOutputSchema, TFuncOutput>\n >,\n ) => DecoratedProcedure<\n TContext,\n MergeContext<TExtraContext, UExtraContext>,\n TInputSchema,\n TOutputSchema,\n TFuncOutput\n >) & (<\n UExtraContext extends\n | Partial<MergeContext<Context, MergeContext<TContext, TExtraContext>>>\n | undefined = undefined,\n UMappedInput = unknown,\n >(\n middleware: Middleware<\n MergeContext<TContext, TExtraContext>,\n UExtraContext,\n UMappedInput,\n SchemaInput<TOutputSchema, TFuncOutput>\n >,\n mapInput: MapInputMiddleware<\n SchemaOutput<TInputSchema, TFuncOutput>,\n UMappedInput\n >,\n ) => DecoratedProcedure<\n TContext,\n MergeContext<TExtraContext, UExtraContext>,\n TInputSchema,\n TOutputSchema,\n TFuncOutput\n >)\n} & (undefined extends TContext\n ? ProcedureCaller<Procedure<\n TContext,\n TExtraContext,\n TInputSchema,\n TOutputSchema,\n TFuncOutput\n >>\n : unknown)\n\nexport interface ProcedureFunc<\n TContext extends Context,\n TExtraContext extends Context,\n TInputSchema extends Schema,\n TOutputSchema extends Schema,\n TOutput extends SchemaOutput<TOutputSchema>,\n> {\n (\n input: SchemaOutput<TInputSchema>,\n context: MergeContext<TContext, TExtraContext>,\n meta: Meta,\n ): Promisable<SchemaInput<TOutputSchema, TOutput>>\n}\n\nconst DECORATED_PROCEDURE_SYMBOL = Symbol('DECORATED_PROCEDURE')\n\nexport function decorateProcedure<\n TContext extends Context,\n TExtraContext extends Context,\n TInputSchema extends Schema,\n TOutputSchema extends Schema,\n TFuncOutput extends SchemaOutput<TOutputSchema>,\n>(\n procedure: Procedure<\n TContext,\n TExtraContext,\n TInputSchema,\n TOutputSchema,\n TFuncOutput\n >,\n): DecoratedProcedure<\n TContext,\n TExtraContext,\n TInputSchema,\n TOutputSchema,\n TFuncOutput\n > {\n if (DECORATED_PROCEDURE_SYMBOL in procedure) {\n return procedure as any\n }\n\n return Object.assign(createProcedureCaller({\n procedure,\n context: undefined as any,\n }), {\n [DECORATED_PROCEDURE_SYMBOL]: true,\n zz$p: procedure.zz$p,\n\n prefix(prefix: HTTPPath) {\n return decorateProcedure({\n zz$p: {\n ...procedure.zz$p,\n contract: DecoratedContractProcedure.decorate(\n procedure.zz$p.contract,\n ).prefix(prefix),\n },\n })\n },\n\n route(opts: RouteOptions) {\n return decorateProcedure({\n zz$p: {\n ...procedure.zz$p,\n contract: DecoratedContractProcedure.decorate(\n procedure.zz$p.contract,\n ).route(opts),\n },\n })\n },\n\n use(\n middleware: Middleware<any, any, any, any>,\n mapInput?: MapInputMiddleware<any, any>,\n ) {\n const middleware_ = mapInput\n ? decorateMiddleware(middleware).mapInput(mapInput)\n : middleware\n\n return decorateProcedure({\n zz$p: {\n ...procedure.zz$p,\n middlewares: [middleware_, ...(procedure.zz$p.middlewares ?? [])],\n },\n })\n },\n }) as any\n}\n\nexport type WELL_DEFINED_PROCEDURE = Procedure<\n Context,\n Context,\n Schema,\n Schema,\n unknown\n>\n\nexport function isProcedure(item: unknown): item is WELL_DEFINED_PROCEDURE {\n if (item instanceof Procedure)\n return true\n\n return (\n (typeof item === 'object' || typeof item === 'function')\n && item !== null\n && 'zz$p' in item\n && typeof item.zz$p === 'object'\n && item.zz$p !== null\n && 'contract' in item.zz$p\n && isContractProcedure(item.zz$p.contract)\n && 'func' in item.zz$p\n && typeof item.zz$p.func === 'function'\n )\n}\n"],"mappings":"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","names":["mapInput","output"]}
|
package/dist/fetch.js
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
import {
|
2
2
|
createProcedureCaller,
|
3
3
|
isProcedure
|
4
|
-
} from "./chunk-
|
4
|
+
} from "./chunk-YYGRQD4L.js";
|
5
5
|
|
6
6
|
// src/adapters/fetch.ts
|
7
7
|
import {
|
@@ -13,7 +13,8 @@ import {
|
|
13
13
|
get,
|
14
14
|
isPlainObject,
|
15
15
|
mapValues,
|
16
|
-
trim
|
16
|
+
trim,
|
17
|
+
value
|
17
18
|
} from "@orpc/shared";
|
18
19
|
import { ORPCError } from "@orpc/shared/error";
|
19
20
|
import {
|
@@ -125,7 +126,7 @@ var LinearRouter = class {
|
|
125
126
|
const part = parts[j];
|
126
127
|
if (part.charCodeAt(1) === 58) {
|
127
128
|
let name = part.slice(2);
|
128
|
-
let
|
129
|
+
let value2;
|
129
130
|
if (name.charCodeAt(name.length - 1) === 125) {
|
130
131
|
const openBracePos = name.indexOf("{");
|
131
132
|
const pattern = name.slice(openBracePos + 1, -1);
|
@@ -135,7 +136,7 @@ var LinearRouter = class {
|
|
135
136
|
continue ROUTES_LOOP;
|
136
137
|
}
|
137
138
|
name = name.slice(0, openBracePos);
|
138
|
-
|
139
|
+
value2 = restPath.slice(...match.indices[0]);
|
139
140
|
pos += match.indices[0][1] + 1;
|
140
141
|
} else {
|
141
142
|
let endValuePos = path.indexOf("/", pos + 1);
|
@@ -145,10 +146,10 @@ var LinearRouter = class {
|
|
145
146
|
}
|
146
147
|
endValuePos = path.length;
|
147
148
|
}
|
148
|
-
|
149
|
+
value2 = path.slice(pos + 1, endValuePos);
|
149
150
|
pos = endValuePos;
|
150
151
|
}
|
151
|
-
params[name] ||=
|
152
|
+
params[name] ||= value2;
|
152
153
|
} else {
|
153
154
|
const index = path.indexOf(part, pos);
|
154
155
|
if (index !== pos) {
|
@@ -379,8 +380,8 @@ function buildMatcherFromPreprocessedRoutes(routes) {
|
|
379
380
|
const paramIndexMap = /* @__PURE__ */ Object.create(null);
|
380
381
|
paramCount -= 1;
|
381
382
|
for (; paramCount >= 0; paramCount--) {
|
382
|
-
const [key,
|
383
|
-
paramIndexMap[key] =
|
383
|
+
const [key, value2] = paramAssoc[paramCount];
|
384
|
+
paramIndexMap[key] = value2;
|
384
385
|
}
|
385
386
|
return [h, paramIndexMap];
|
386
387
|
});
|
@@ -550,6 +551,7 @@ function createFetchHandler(options) {
|
|
550
551
|
const isORPCTransformer = requestOptions.request.headers.get(ORPC_HEADER) === ORPC_HEADER_VALUE;
|
551
552
|
const accept = requestOptions.request.headers.get("Accept") || void 0;
|
552
553
|
const serializer = isORPCTransformer ? new ORPCSerializer() : new OpenAPISerializer({ accept });
|
554
|
+
const context = await value(requestOptions.context);
|
553
555
|
const handler = async () => {
|
554
556
|
const url = new URL(requestOptions.request.url);
|
555
557
|
const pathname = `/${trim(url.pathname.replace(requestOptions.prefix ?? "", ""), "/")}`;
|
@@ -626,9 +628,7 @@ function createFetchHandler(options) {
|
|
626
628
|
};
|
627
629
|
})();
|
628
630
|
const caller = createProcedureCaller({
|
629
|
-
context
|
630
|
-
internal: false,
|
631
|
-
validate: true,
|
631
|
+
context,
|
632
632
|
procedure,
|
633
633
|
path
|
634
634
|
});
|
@@ -640,7 +640,7 @@ function createFetchHandler(options) {
|
|
640
640
|
});
|
641
641
|
};
|
642
642
|
try {
|
643
|
-
return await options.hooks?.(
|
643
|
+
return await options.hooks?.(context, {
|
644
644
|
next: handler,
|
645
645
|
response: (response) => response
|
646
646
|
}) ?? await handler();
|
package/dist/fetch.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../src/adapters/fetch.ts","../../../node_modules/.pnpm/hono@4.6.6/node_modules/hono/dist/router.js","../../../node_modules/.pnpm/hono@4.6.6/node_modules/hono/dist/utils/url.js","../../../node_modules/.pnpm/hono@4.6.6/node_modules/hono/dist/router/linear-router/router.js","../../../node_modules/.pnpm/hono@4.6.6/node_modules/hono/dist/router/reg-exp-router/node.js","../../../node_modules/.pnpm/hono@4.6.6/node_modules/hono/dist/router/reg-exp-router/trie.js","../../../node_modules/.pnpm/hono@4.6.6/node_modules/hono/dist/router/reg-exp-router/router.js"],"sourcesContent":["/// <reference lib=\"dom\" />\n\nimport type {\n PartialOnUndefinedDeep,\n Promisable,\n} from '@orpc/shared'\nimport type { Router } from '../router'\nimport {\n type HTTPPath,\n ORPC_HEADER,\n ORPC_HEADER_VALUE,\n standardizeHTTPPath,\n} from '@orpc/contract'\nimport {\n get,\n isPlainObject,\n mapValues,\n trim,\n} from '@orpc/shared'\nimport { ORPCError } from '@orpc/shared/error'\nimport {\n OpenAPIDeserializer,\n OpenAPISerializer,\n ORPCDeserializer,\n ORPCSerializer,\n zodCoerce,\n} from '@orpc/transformer'\nimport { LinearRouter } from 'hono/router/linear-router'\nimport { RegExpRouter } from 'hono/router/reg-exp-router'\nimport { isProcedure, type WELL_DEFINED_PROCEDURE } from '../procedure'\nimport { createProcedureCaller } from '../procedure-caller'\n\nexport interface FetchHandlerHooks {\n next: () => Promise<Response>\n response: (response: Response) => Response\n}\n\nexport interface CreateFetchHandlerOptions<TRouter extends Router<any>> {\n router: TRouter\n\n /**\n * Hooks for executing logics on lifecycle events.\n */\n hooks?: (\n context: TRouter extends Router<infer UContext> ? UContext : never,\n hooks: FetchHandlerHooks,\n ) => Promisable<Response>\n\n /**\n * It will help improve the cold start time. But it will increase the performance.\n *\n * @default false\n */\n serverless?: boolean\n}\n\nexport function createFetchHandler<TRouter extends Router<any>>(\n options: CreateFetchHandlerOptions<TRouter>,\n): FetchHandler<TRouter> {\n const routing = options.serverless\n ? new LinearRouter<[string[], WELL_DEFINED_PROCEDURE]>()\n : new RegExpRouter<[string[], WELL_DEFINED_PROCEDURE]>()\n\n const addRouteRecursively = (router: Router<any>, basePath: string[]) => {\n for (const key in router) {\n const currentPath = [...basePath, key]\n const item = router[key] as WELL_DEFINED_PROCEDURE | Router<any>\n\n if (isProcedure(item)) {\n if (item.zz$p.contract.zz$cp.path) {\n const method = item.zz$p.contract.zz$cp.method ?? 'POST'\n const path = openAPIPathToRouterPath(item.zz$p.contract.zz$cp.path)\n\n routing.add(method, path, [currentPath, item])\n }\n }\n else {\n addRouteRecursively(item, currentPath)\n }\n }\n }\n\n addRouteRecursively(options.router, [])\n\n return async (requestOptions) => {\n const isORPCTransformer\n = requestOptions.request.headers.get(ORPC_HEADER) === ORPC_HEADER_VALUE\n const accept = requestOptions.request.headers.get('Accept') || undefined\n\n const serializer = isORPCTransformer\n ? new ORPCSerializer()\n : new OpenAPISerializer({ accept })\n\n const handler = async () => {\n const url = new URL(requestOptions.request.url)\n const pathname = `/${trim(url.pathname.replace(requestOptions.prefix ?? '', ''), '/')}`\n\n let path: string[] | undefined\n let procedure: WELL_DEFINED_PROCEDURE | undefined\n let params: Record<string, string> | undefined\n\n if (isORPCTransformer) {\n path = trim(pathname, '/').split('/').map(decodeURIComponent)\n const val = get(options.router, path)\n\n if (isProcedure(val)) {\n procedure = val\n }\n }\n else {\n const customMethod\n = requestOptions.request.method === 'POST'\n ? url.searchParams.get('method')?.toUpperCase()\n : undefined\n const method = customMethod || requestOptions.request.method\n\n const [matches, params_] = routing.match(method, pathname)\n\n const [match] = matches.sort((a, b) => {\n return Object.keys(a[1]).length - Object.keys(b[1]).length\n })\n\n if (match) {\n path = match[0][0]\n procedure = match[0][1]\n\n if (params_) {\n params = mapValues(\n (match as any)[1]!,\n v => params_[v as number]!,\n )\n }\n else {\n params = match[1] as Record<string, string>\n }\n }\n\n if (!path || !procedure) {\n path = trim(pathname, '/').split('/').map(decodeURIComponent)\n\n const val = get(options.router, path)\n\n if (isProcedure(val)) {\n procedure = val\n }\n }\n }\n\n if (!path || !procedure) {\n throw new ORPCError({ code: 'NOT_FOUND', message: 'Not found' })\n }\n\n const deserializer = isORPCTransformer\n ? new ORPCDeserializer()\n : new OpenAPIDeserializer({\n schema: procedure.zz$p.contract.zz$cp.InputSchema,\n })\n\n const input_ = await (async () => {\n try {\n return await deserializer.deserialize(requestOptions.request)\n }\n catch (e) {\n throw new ORPCError({\n code: 'BAD_REQUEST',\n message:\n 'Cannot parse request. Please check the request body and Content-Type header.',\n cause: e,\n })\n }\n })()\n\n const input = (() => {\n if (!params || Object.keys(params).length === 0) {\n return input_\n }\n\n const coercedParams = procedure.zz$p.contract.zz$cp.InputSchema\n ? (zodCoerce(\n procedure.zz$p.contract.zz$cp.InputSchema,\n { ...params },\n {\n bracketNotation: true,\n },\n ) as object)\n : params\n\n if (!isPlainObject(input_)) {\n return coercedParams\n }\n\n return {\n ...coercedParams,\n ...input_,\n }\n })()\n\n const caller = createProcedureCaller({\n context: requestOptions.context,\n internal: false,\n validate: true,\n procedure,\n path,\n })\n\n const output = await caller(input)\n\n const { body, headers } = serializer.serialize(output)\n\n return new Response(body, {\n status: 200,\n headers,\n })\n }\n\n try {\n return await options.hooks?.(requestOptions.context as any, {\n next: handler,\n response: response => response,\n }) ?? await handler()\n }\n catch (e) {\n const error = toORPCError(e)\n\n try {\n const { body, headers } = serializer.serialize(error.toJSON())\n\n return new Response(body, {\n status: error.status,\n headers,\n })\n }\n catch (e) {\n const error = toORPCError(e)\n\n // fallback to OpenAPI serializer (without accept) when expected serializer has failed\n const { body, headers } = new OpenAPISerializer().serialize(\n error.toJSON(),\n )\n\n return new Response(body, {\n status: error.status,\n headers,\n })\n }\n }\n }\n}\n\nfunction openAPIPathToRouterPath(path: HTTPPath): string {\n return standardizeHTTPPath(path).replace(/\\{([^}]+)\\}/g, ':$1')\n}\n\nexport type FetchHandlerOptions<TRouter extends Router<any>> = {\n /**\n * The request need to be handled.\n */\n request: Request\n\n /**\n * Remove the prefix from the request path.\n *\n * @example /orpc\n * @example /api\n */\n prefix?: string\n} & PartialOnUndefinedDeep<{\n /**\n * The context used to handle the request.\n */\n context: TRouter extends Router<infer UContext> ? UContext : never\n}>\n\nexport interface FetchHandler<TRouter extends Router<any>> {\n (options: FetchHandlerOptions<TRouter>): Promise<Response>\n}\n\nfunction toORPCError(e: unknown): ORPCError<any, any> {\n return e instanceof ORPCError\n ? e\n : new ORPCError({\n code: 'INTERNAL_SERVER_ERROR',\n message: 'Internal server error',\n cause: e,\n })\n}\n","// src/router.ts\nvar METHOD_NAME_ALL = \"ALL\";\nvar METHOD_NAME_ALL_LOWERCASE = \"all\";\nvar METHODS = [\"get\", \"post\", \"put\", \"delete\", \"options\", \"patch\"];\nvar MESSAGE_MATCHER_IS_ALREADY_BUILT = \"Can not add a route since the matcher is already built.\";\nvar UnsupportedPathError = class extends Error {\n};\nexport {\n MESSAGE_MATCHER_IS_ALREADY_BUILT,\n METHODS,\n METHOD_NAME_ALL,\n METHOD_NAME_ALL_LOWERCASE,\n UnsupportedPathError\n};\n","// src/utils/url.ts\nvar splitPath = (path) => {\n const paths = path.split(\"/\");\n if (paths[0] === \"\") {\n paths.shift();\n }\n return paths;\n};\nvar splitRoutingPath = (routePath) => {\n const { groups, path } = extractGroupsFromPath(routePath);\n const paths = splitPath(path);\n return replaceGroupMarks(paths, groups);\n};\nvar extractGroupsFromPath = (path) => {\n const groups = [];\n path = path.replace(/\\{[^}]+\\}/g, (match, index) => {\n const mark = `@${index}`;\n groups.push([mark, match]);\n return mark;\n });\n return { groups, path };\n};\nvar replaceGroupMarks = (paths, groups) => {\n for (let i = groups.length - 1; i >= 0; i--) {\n const [mark] = groups[i];\n for (let j = paths.length - 1; j >= 0; j--) {\n if (paths[j].includes(mark)) {\n paths[j] = paths[j].replace(mark, groups[i][1]);\n break;\n }\n }\n }\n return paths;\n};\nvar patternCache = {};\nvar getPattern = (label) => {\n if (label === \"*\") {\n return \"*\";\n }\n const match = label.match(/^\\:([^\\{\\}]+)(?:\\{(.+)\\})?$/);\n if (match) {\n if (!patternCache[label]) {\n if (match[2]) {\n patternCache[label] = [label, match[1], new RegExp(\"^\" + match[2] + \"$\")];\n } else {\n patternCache[label] = [label, match[1], true];\n }\n }\n return patternCache[label];\n }\n return null;\n};\nvar tryDecodeURI = (str) => {\n try {\n return decodeURI(str);\n } catch {\n return str.replace(/(?:%[0-9A-Fa-f]{2})+/g, (match) => {\n try {\n return decodeURI(match);\n } catch {\n return match;\n }\n });\n }\n};\nvar getPath = (request) => {\n const url = request.url;\n const start = url.indexOf(\"/\", 8);\n let i = start;\n for (; i < url.length; i++) {\n const charCode = url.charCodeAt(i);\n if (charCode === 37) {\n const queryIndex = url.indexOf(\"?\", i);\n const path = url.slice(start, queryIndex === -1 ? void 0 : queryIndex);\n return tryDecodeURI(path.includes(\"%25\") ? path.replace(/%25/g, \"%2525\") : path);\n } else if (charCode === 63) {\n break;\n }\n }\n return url.slice(start, i);\n};\nvar getQueryStrings = (url) => {\n const queryIndex = url.indexOf(\"?\", 8);\n return queryIndex === -1 ? \"\" : \"?\" + url.slice(queryIndex + 1);\n};\nvar getPathNoStrict = (request) => {\n const result = getPath(request);\n return result.length > 1 && result[result.length - 1] === \"/\" ? result.slice(0, -1) : result;\n};\nvar mergePath = (...paths) => {\n let p = \"\";\n let endsWithSlash = false;\n for (let path of paths) {\n if (p[p.length - 1] === \"/\") {\n p = p.slice(0, -1);\n endsWithSlash = true;\n }\n if (path[0] !== \"/\") {\n path = `/${path}`;\n }\n if (path === \"/\" && endsWithSlash) {\n p = `${p}/`;\n } else if (path !== \"/\") {\n p = `${p}${path}`;\n }\n if (path === \"/\" && p === \"\") {\n p = \"/\";\n }\n }\n return p;\n};\nvar checkOptionalParameter = (path) => {\n if (!path.match(/\\:.+\\?$/)) {\n return null;\n }\n const segments = path.split(\"/\");\n const results = [];\n let basePath = \"\";\n segments.forEach((segment) => {\n if (segment !== \"\" && !/\\:/.test(segment)) {\n basePath += \"/\" + segment;\n } else if (/\\:/.test(segment)) {\n if (/\\?/.test(segment)) {\n if (results.length === 0 && basePath === \"\") {\n results.push(\"/\");\n } else {\n results.push(basePath);\n }\n const optionalSegment = segment.replace(\"?\", \"\");\n basePath += \"/\" + optionalSegment;\n results.push(basePath);\n } else {\n basePath += \"/\" + segment;\n }\n }\n });\n return results.filter((v, i, a) => a.indexOf(v) === i);\n};\nvar _decodeURI = (value) => {\n if (!/[%+]/.test(value)) {\n return value;\n }\n if (value.indexOf(\"+\") !== -1) {\n value = value.replace(/\\+/g, \" \");\n }\n return /%/.test(value) ? decodeURIComponent_(value) : value;\n};\nvar _getQueryParam = (url, key, multiple) => {\n let encoded;\n if (!multiple && key && !/[%+]/.test(key)) {\n let keyIndex2 = url.indexOf(`?${key}`, 8);\n if (keyIndex2 === -1) {\n keyIndex2 = url.indexOf(`&${key}`, 8);\n }\n while (keyIndex2 !== -1) {\n const trailingKeyCode = url.charCodeAt(keyIndex2 + key.length + 1);\n if (trailingKeyCode === 61) {\n const valueIndex = keyIndex2 + key.length + 2;\n const endIndex = url.indexOf(\"&\", valueIndex);\n return _decodeURI(url.slice(valueIndex, endIndex === -1 ? void 0 : endIndex));\n } else if (trailingKeyCode == 38 || isNaN(trailingKeyCode)) {\n return \"\";\n }\n keyIndex2 = url.indexOf(`&${key}`, keyIndex2 + 1);\n }\n encoded = /[%+]/.test(url);\n if (!encoded) {\n return void 0;\n }\n }\n const results = {};\n encoded ??= /[%+]/.test(url);\n let keyIndex = url.indexOf(\"?\", 8);\n while (keyIndex !== -1) {\n const nextKeyIndex = url.indexOf(\"&\", keyIndex + 1);\n let valueIndex = url.indexOf(\"=\", keyIndex);\n if (valueIndex > nextKeyIndex && nextKeyIndex !== -1) {\n valueIndex = -1;\n }\n let name = url.slice(\n keyIndex + 1,\n valueIndex === -1 ? nextKeyIndex === -1 ? void 0 : nextKeyIndex : valueIndex\n );\n if (encoded) {\n name = _decodeURI(name);\n }\n keyIndex = nextKeyIndex;\n if (name === \"\") {\n continue;\n }\n let value;\n if (valueIndex === -1) {\n value = \"\";\n } else {\n value = url.slice(valueIndex + 1, nextKeyIndex === -1 ? void 0 : nextKeyIndex);\n if (encoded) {\n value = _decodeURI(value);\n }\n }\n if (multiple) {\n if (!(results[name] && Array.isArray(results[name]))) {\n results[name] = [];\n }\n ;\n results[name].push(value);\n } else {\n results[name] ??= value;\n }\n }\n return key ? results[key] : results;\n};\nvar getQueryParam = _getQueryParam;\nvar getQueryParams = (url, key) => {\n return _getQueryParam(url, key, true);\n};\nvar decodeURIComponent_ = decodeURIComponent;\nexport {\n checkOptionalParameter,\n decodeURIComponent_,\n getPath,\n getPathNoStrict,\n getPattern,\n getQueryParam,\n getQueryParams,\n getQueryStrings,\n mergePath,\n splitPath,\n splitRoutingPath\n};\n","// src/router/linear-router/router.ts\nimport { METHOD_NAME_ALL, UnsupportedPathError } from \"../../router.js\";\nimport { checkOptionalParameter } from \"../../utils/url.js\";\nvar emptyParams = /* @__PURE__ */ Object.create(null);\nvar splitPathRe = /\\/(:\\w+(?:{(?:(?:{[\\d,]+})|[^}])+})?)|\\/[^\\/\\?]+|(\\?)/g;\nvar splitByStarRe = /\\*/;\nvar LinearRouter = class {\n name = \"LinearRouter\";\n routes = [];\n add(method, path, handler) {\n ;\n (checkOptionalParameter(path) || [path]).forEach((p) => {\n this.routes.push([method, p, handler]);\n });\n }\n match(method, path) {\n const handlers = [];\n ROUTES_LOOP:\n for (let i = 0, len = this.routes.length; i < len; i++) {\n const [routeMethod, routePath, handler] = this.routes[i];\n if (routeMethod !== method && routeMethod !== METHOD_NAME_ALL) {\n continue;\n }\n if (routePath === \"*\" || routePath === \"/*\") {\n handlers.push([handler, emptyParams]);\n continue;\n }\n const hasStar = routePath.indexOf(\"*\") !== -1;\n const hasLabel = routePath.indexOf(\":\") !== -1;\n if (!hasStar && !hasLabel) {\n if (routePath === path || routePath + \"/\" === path) {\n handlers.push([handler, emptyParams]);\n }\n } else if (hasStar && !hasLabel) {\n const endsWithStar = routePath.charCodeAt(routePath.length - 1) === 42;\n const parts = (endsWithStar ? routePath.slice(0, -2) : routePath).split(splitByStarRe);\n const lastIndex = parts.length - 1;\n for (let j = 0, pos = 0, len2 = parts.length; j < len2; j++) {\n const part = parts[j];\n const index = path.indexOf(part, pos);\n if (index !== pos) {\n continue ROUTES_LOOP;\n }\n pos += part.length;\n if (j === lastIndex) {\n if (!endsWithStar && pos !== path.length && !(pos === path.length - 1 && path.charCodeAt(pos) === 47)) {\n continue ROUTES_LOOP;\n }\n } else {\n const index2 = path.indexOf(\"/\", pos);\n if (index2 === -1) {\n continue ROUTES_LOOP;\n }\n pos = index2;\n }\n }\n handlers.push([handler, emptyParams]);\n } else if (hasLabel && !hasStar) {\n const params = /* @__PURE__ */ Object.create(null);\n const parts = routePath.match(splitPathRe);\n const lastIndex = parts.length - 1;\n for (let j = 0, pos = 0, len2 = parts.length; j < len2; j++) {\n if (pos === -1 || pos >= path.length) {\n continue ROUTES_LOOP;\n }\n const part = parts[j];\n if (part.charCodeAt(1) === 58) {\n let name = part.slice(2);\n let value;\n if (name.charCodeAt(name.length - 1) === 125) {\n const openBracePos = name.indexOf(\"{\");\n const pattern = name.slice(openBracePos + 1, -1);\n const restPath = path.slice(pos + 1);\n const match = new RegExp(pattern, \"d\").exec(restPath);\n if (!match || match.indices[0][0] !== 0 || match.indices[0][1] === 0) {\n continue ROUTES_LOOP;\n }\n name = name.slice(0, openBracePos);\n value = restPath.slice(...match.indices[0]);\n pos += match.indices[0][1] + 1;\n } else {\n let endValuePos = path.indexOf(\"/\", pos + 1);\n if (endValuePos === -1) {\n if (pos + 1 === path.length) {\n continue ROUTES_LOOP;\n }\n endValuePos = path.length;\n }\n value = path.slice(pos + 1, endValuePos);\n pos = endValuePos;\n }\n params[name] ||= value;\n } else {\n const index = path.indexOf(part, pos);\n if (index !== pos) {\n continue ROUTES_LOOP;\n }\n pos += part.length;\n }\n if (j === lastIndex) {\n if (pos !== path.length && !(pos === path.length - 1 && path.charCodeAt(pos) === 47)) {\n continue ROUTES_LOOP;\n }\n }\n }\n handlers.push([handler, params]);\n } else if (hasLabel && hasStar) {\n throw new UnsupportedPathError();\n }\n }\n return [handlers];\n }\n};\nexport {\n LinearRouter\n};\n","// src/router/reg-exp-router/node.ts\nvar LABEL_REG_EXP_STR = \"[^/]+\";\nvar ONLY_WILDCARD_REG_EXP_STR = \".*\";\nvar TAIL_WILDCARD_REG_EXP_STR = \"(?:|/.*)\";\nvar PATH_ERROR = Symbol();\nvar regExpMetaChars = new Set(\".\\\\+*[^]$()\");\nfunction compareKey(a, b) {\n if (a.length === 1) {\n return b.length === 1 ? a < b ? -1 : 1 : -1;\n }\n if (b.length === 1) {\n return 1;\n }\n if (a === ONLY_WILDCARD_REG_EXP_STR || a === TAIL_WILDCARD_REG_EXP_STR) {\n return 1;\n } else if (b === ONLY_WILDCARD_REG_EXP_STR || b === TAIL_WILDCARD_REG_EXP_STR) {\n return -1;\n }\n if (a === LABEL_REG_EXP_STR) {\n return 1;\n } else if (b === LABEL_REG_EXP_STR) {\n return -1;\n }\n return a.length === b.length ? a < b ? -1 : 1 : b.length - a.length;\n}\nvar Node = class {\n index;\n varIndex;\n children = /* @__PURE__ */ Object.create(null);\n insert(tokens, index, paramMap, context, pathErrorCheckOnly) {\n if (tokens.length === 0) {\n if (this.index !== void 0) {\n throw PATH_ERROR;\n }\n if (pathErrorCheckOnly) {\n return;\n }\n this.index = index;\n return;\n }\n const [token, ...restTokens] = tokens;\n const pattern = token === \"*\" ? restTokens.length === 0 ? [\"\", \"\", ONLY_WILDCARD_REG_EXP_STR] : [\"\", \"\", LABEL_REG_EXP_STR] : token === \"/*\" ? [\"\", \"\", TAIL_WILDCARD_REG_EXP_STR] : token.match(/^\\:([^\\{\\}]+)(?:\\{(.+)\\})?$/);\n let node;\n if (pattern) {\n const name = pattern[1];\n let regexpStr = pattern[2] || LABEL_REG_EXP_STR;\n if (name && pattern[2]) {\n regexpStr = regexpStr.replace(/^\\((?!\\?:)(?=[^)]+\\)$)/, \"(?:\");\n if (/\\((?!\\?:)/.test(regexpStr)) {\n throw PATH_ERROR;\n }\n }\n node = this.children[regexpStr];\n if (!node) {\n if (Object.keys(this.children).some(\n (k) => k !== ONLY_WILDCARD_REG_EXP_STR && k !== TAIL_WILDCARD_REG_EXP_STR\n )) {\n throw PATH_ERROR;\n }\n if (pathErrorCheckOnly) {\n return;\n }\n node = this.children[regexpStr] = new Node();\n if (name !== \"\") {\n node.varIndex = context.varIndex++;\n }\n }\n if (!pathErrorCheckOnly && name !== \"\") {\n paramMap.push([name, node.varIndex]);\n }\n } else {\n node = this.children[token];\n if (!node) {\n if (Object.keys(this.children).some(\n (k) => k.length > 1 && k !== ONLY_WILDCARD_REG_EXP_STR && k !== TAIL_WILDCARD_REG_EXP_STR\n )) {\n throw PATH_ERROR;\n }\n if (pathErrorCheckOnly) {\n return;\n }\n node = this.children[token] = new Node();\n }\n }\n node.insert(restTokens, index, paramMap, context, pathErrorCheckOnly);\n }\n buildRegExpStr() {\n const childKeys = Object.keys(this.children).sort(compareKey);\n const strList = childKeys.map((k) => {\n const c = this.children[k];\n return (typeof c.varIndex === \"number\" ? `(${k})@${c.varIndex}` : regExpMetaChars.has(k) ? `\\\\${k}` : k) + c.buildRegExpStr();\n });\n if (typeof this.index === \"number\") {\n strList.unshift(`#${this.index}`);\n }\n if (strList.length === 0) {\n return \"\";\n }\n if (strList.length === 1) {\n return strList[0];\n }\n return \"(?:\" + strList.join(\"|\") + \")\";\n }\n};\nexport {\n Node,\n PATH_ERROR\n};\n","// src/router/reg-exp-router/trie.ts\nimport { Node } from \"./node.js\";\nvar Trie = class {\n context = { varIndex: 0 };\n root = new Node();\n insert(path, index, pathErrorCheckOnly) {\n const paramAssoc = [];\n const groups = [];\n for (let i = 0; ; ) {\n let replaced = false;\n path = path.replace(/\\{[^}]+\\}/g, (m) => {\n const mark = `@\\\\${i}`;\n groups[i] = [mark, m];\n i++;\n replaced = true;\n return mark;\n });\n if (!replaced) {\n break;\n }\n }\n const tokens = path.match(/(?::[^\\/]+)|(?:\\/\\*$)|./g) || [];\n for (let i = groups.length - 1; i >= 0; i--) {\n const [mark] = groups[i];\n for (let j = tokens.length - 1; j >= 0; j--) {\n if (tokens[j].indexOf(mark) !== -1) {\n tokens[j] = tokens[j].replace(mark, groups[i][1]);\n break;\n }\n }\n }\n this.root.insert(tokens, index, paramAssoc, this.context, pathErrorCheckOnly);\n return paramAssoc;\n }\n buildRegExp() {\n let regexp = this.root.buildRegExpStr();\n if (regexp === \"\") {\n return [/^$/, [], []];\n }\n let captureIndex = 0;\n const indexReplacementMap = [];\n const paramReplacementMap = [];\n regexp = regexp.replace(/#(\\d+)|@(\\d+)|\\.\\*\\$/g, (_, handlerIndex, paramIndex) => {\n if (typeof handlerIndex !== \"undefined\") {\n indexReplacementMap[++captureIndex] = Number(handlerIndex);\n return \"$()\";\n }\n if (typeof paramIndex !== \"undefined\") {\n paramReplacementMap[Number(paramIndex)] = ++captureIndex;\n return \"\";\n }\n return \"\";\n });\n return [new RegExp(`^${regexp}`), indexReplacementMap, paramReplacementMap];\n }\n};\nexport {\n Trie\n};\n","// src/router/reg-exp-router/router.ts\nimport {\n MESSAGE_MATCHER_IS_ALREADY_BUILT,\n METHOD_NAME_ALL,\n UnsupportedPathError\n} from \"../../router.js\";\nimport { checkOptionalParameter } from \"../../utils/url.js\";\nimport { PATH_ERROR } from \"./node.js\";\nimport { Trie } from \"./trie.js\";\nvar emptyParam = [];\nvar nullMatcher = [/^$/, [], /* @__PURE__ */ Object.create(null)];\nvar wildcardRegExpCache = /* @__PURE__ */ Object.create(null);\nfunction buildWildcardRegExp(path) {\n return wildcardRegExpCache[path] ??= new RegExp(\n path === \"*\" ? \"\" : `^${path.replace(\n /\\/\\*$|([.\\\\+*[^\\]$()])/g,\n (_, metaChar) => metaChar ? `\\\\${metaChar}` : \"(?:|/.*)\"\n )}$`\n );\n}\nfunction clearWildcardRegExpCache() {\n wildcardRegExpCache = /* @__PURE__ */ Object.create(null);\n}\nfunction buildMatcherFromPreprocessedRoutes(routes) {\n const trie = new Trie();\n const handlerData = [];\n if (routes.length === 0) {\n return nullMatcher;\n }\n const routesWithStaticPathFlag = routes.map(\n (route) => [!/\\*|\\/:/.test(route[0]), ...route]\n ).sort(\n ([isStaticA, pathA], [isStaticB, pathB]) => isStaticA ? 1 : isStaticB ? -1 : pathA.length - pathB.length\n );\n const staticMap = /* @__PURE__ */ Object.create(null);\n for (let i = 0, j = -1, len = routesWithStaticPathFlag.length; i < len; i++) {\n const [pathErrorCheckOnly, path, handlers] = routesWithStaticPathFlag[i];\n if (pathErrorCheckOnly) {\n staticMap[path] = [handlers.map(([h]) => [h, /* @__PURE__ */ Object.create(null)]), emptyParam];\n } else {\n j++;\n }\n let paramAssoc;\n try {\n paramAssoc = trie.insert(path, j, pathErrorCheckOnly);\n } catch (e) {\n throw e === PATH_ERROR ? new UnsupportedPathError(path) : e;\n }\n if (pathErrorCheckOnly) {\n continue;\n }\n handlerData[j] = handlers.map(([h, paramCount]) => {\n const paramIndexMap = /* @__PURE__ */ Object.create(null);\n paramCount -= 1;\n for (; paramCount >= 0; paramCount--) {\n const [key, value] = paramAssoc[paramCount];\n paramIndexMap[key] = value;\n }\n return [h, paramIndexMap];\n });\n }\n const [regexp, indexReplacementMap, paramReplacementMap] = trie.buildRegExp();\n for (let i = 0, len = handlerData.length; i < len; i++) {\n for (let j = 0, len2 = handlerData[i].length; j < len2; j++) {\n const map = handlerData[i][j]?.[1];\n if (!map) {\n continue;\n }\n const keys = Object.keys(map);\n for (let k = 0, len3 = keys.length; k < len3; k++) {\n map[keys[k]] = paramReplacementMap[map[keys[k]]];\n }\n }\n }\n const handlerMap = [];\n for (const i in indexReplacementMap) {\n handlerMap[i] = handlerData[indexReplacementMap[i]];\n }\n return [regexp, handlerMap, staticMap];\n}\nfunction findMiddleware(middleware, path) {\n if (!middleware) {\n return void 0;\n }\n for (const k of Object.keys(middleware).sort((a, b) => b.length - a.length)) {\n if (buildWildcardRegExp(k).test(path)) {\n return [...middleware[k]];\n }\n }\n return void 0;\n}\nvar RegExpRouter = class {\n name = \"RegExpRouter\";\n middleware;\n routes;\n constructor() {\n this.middleware = { [METHOD_NAME_ALL]: /* @__PURE__ */ Object.create(null) };\n this.routes = { [METHOD_NAME_ALL]: /* @__PURE__ */ Object.create(null) };\n }\n add(method, path, handler) {\n const { middleware, routes } = this;\n if (!middleware || !routes) {\n throw new Error(MESSAGE_MATCHER_IS_ALREADY_BUILT);\n }\n if (!middleware[method]) {\n ;\n [middleware, routes].forEach((handlerMap) => {\n handlerMap[method] = /* @__PURE__ */ Object.create(null);\n Object.keys(handlerMap[METHOD_NAME_ALL]).forEach((p) => {\n handlerMap[method][p] = [...handlerMap[METHOD_NAME_ALL][p]];\n });\n });\n }\n if (path === \"/*\") {\n path = \"*\";\n }\n const paramCount = (path.match(/\\/:/g) || []).length;\n if (/\\*$/.test(path)) {\n const re = buildWildcardRegExp(path);\n if (method === METHOD_NAME_ALL) {\n Object.keys(middleware).forEach((m) => {\n middleware[m][path] ||= findMiddleware(middleware[m], path) || findMiddleware(middleware[METHOD_NAME_ALL], path) || [];\n });\n } else {\n middleware[method][path] ||= findMiddleware(middleware[method], path) || findMiddleware(middleware[METHOD_NAME_ALL], path) || [];\n }\n Object.keys(middleware).forEach((m) => {\n if (method === METHOD_NAME_ALL || method === m) {\n Object.keys(middleware[m]).forEach((p) => {\n re.test(p) && middleware[m][p].push([handler, paramCount]);\n });\n }\n });\n Object.keys(routes).forEach((m) => {\n if (method === METHOD_NAME_ALL || method === m) {\n Object.keys(routes[m]).forEach(\n (p) => re.test(p) && routes[m][p].push([handler, paramCount])\n );\n }\n });\n return;\n }\n const paths = checkOptionalParameter(path) || [path];\n for (let i = 0, len = paths.length; i < len; i++) {\n const path2 = paths[i];\n Object.keys(routes).forEach((m) => {\n if (method === METHOD_NAME_ALL || method === m) {\n routes[m][path2] ||= [\n ...findMiddleware(middleware[m], path2) || findMiddleware(middleware[METHOD_NAME_ALL], path2) || []\n ];\n routes[m][path2].push([handler, paramCount - len + i + 1]);\n }\n });\n }\n }\n match(method, path) {\n clearWildcardRegExpCache();\n const matchers = this.buildAllMatchers();\n this.match = (method2, path2) => {\n const matcher = matchers[method2] || matchers[METHOD_NAME_ALL];\n const staticMatch = matcher[2][path2];\n if (staticMatch) {\n return staticMatch;\n }\n const match = path2.match(matcher[0]);\n if (!match) {\n return [[], emptyParam];\n }\n const index = match.indexOf(\"\", 1);\n return [matcher[1][index], match];\n };\n return this.match(method, path);\n }\n buildAllMatchers() {\n const matchers = /* @__PURE__ */ Object.create(null);\n [...Object.keys(this.routes), ...Object.keys(this.middleware)].forEach((method) => {\n matchers[method] ||= this.buildMatcher(method);\n });\n this.middleware = this.routes = void 0;\n return matchers;\n }\n buildMatcher(method) {\n const routes = [];\n let hasOwnRoute = method === METHOD_NAME_ALL;\n [this.middleware, this.routes].forEach((r) => {\n const ownRoute = r[method] ? Object.keys(r[method]).map((path) => [path, r[method][path]]) : [];\n if (ownRoute.length !== 0) {\n hasOwnRoute ||= true;\n routes.push(...ownRoute);\n } else if (method !== METHOD_NAME_ALL) {\n routes.push(\n ...Object.keys(r[METHOD_NAME_ALL]).map((path) => [path, r[METHOD_NAME_ALL][path]])\n );\n }\n });\n if (!hasOwnRoute) {\n return null;\n } else {\n return buildMatcherFromPreprocessedRoutes(routes);\n }\n }\n};\nexport {\n RegExpRouter\n};\n"],"mappings":"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","names":["e","error"]}
|
1
|
+
{"version":3,"sources":["../src/adapters/fetch.ts","../../../node_modules/.pnpm/hono@4.6.6/node_modules/hono/dist/router.js","../../../node_modules/.pnpm/hono@4.6.6/node_modules/hono/dist/utils/url.js","../../../node_modules/.pnpm/hono@4.6.6/node_modules/hono/dist/router/linear-router/router.js","../../../node_modules/.pnpm/hono@4.6.6/node_modules/hono/dist/router/reg-exp-router/node.js","../../../node_modules/.pnpm/hono@4.6.6/node_modules/hono/dist/router/reg-exp-router/trie.js","../../../node_modules/.pnpm/hono@4.6.6/node_modules/hono/dist/router/reg-exp-router/router.js"],"sourcesContent":["/// <reference lib=\"dom\" />\n\nimport type {\n PartialOnUndefinedDeep,\n Promisable,\n Value,\n} from '@orpc/shared'\nimport type { Router } from '../router'\nimport {\n type HTTPPath,\n ORPC_HEADER,\n ORPC_HEADER_VALUE,\n standardizeHTTPPath,\n} from '@orpc/contract'\nimport {\n get,\n isPlainObject,\n mapValues,\n trim,\n value,\n} from '@orpc/shared'\nimport { ORPCError } from '@orpc/shared/error'\nimport {\n OpenAPIDeserializer,\n OpenAPISerializer,\n ORPCDeserializer,\n ORPCSerializer,\n zodCoerce,\n} from '@orpc/transformer'\nimport { LinearRouter } from 'hono/router/linear-router'\nimport { RegExpRouter } from 'hono/router/reg-exp-router'\nimport { isProcedure, type WELL_DEFINED_PROCEDURE } from '../procedure'\nimport { createProcedureCaller } from '../procedure-caller'\n\nexport interface FetchHandlerHooks {\n next: () => Promise<Response>\n response: (response: Response) => Response\n}\n\nexport interface CreateFetchHandlerOptions<TRouter extends Router<any>> {\n router: TRouter\n\n /**\n * Hooks for executing logics on lifecycle events.\n */\n hooks?: (\n context: TRouter extends Router<infer UContext> ? UContext : never,\n hooks: FetchHandlerHooks,\n ) => Promisable<Response>\n\n /**\n * It will help improve the cold start time. But it will increase the performance.\n *\n * @default false\n */\n serverless?: boolean\n}\n\nexport function createFetchHandler<TRouter extends Router<any>>(\n options: CreateFetchHandlerOptions<TRouter>,\n): FetchHandler<TRouter> {\n const routing = options.serverless\n ? new LinearRouter<[string[], WELL_DEFINED_PROCEDURE]>()\n : new RegExpRouter<[string[], WELL_DEFINED_PROCEDURE]>()\n\n const addRouteRecursively = (router: Router<any>, basePath: string[]) => {\n for (const key in router) {\n const currentPath = [...basePath, key]\n const item = router[key] as WELL_DEFINED_PROCEDURE | Router<any>\n\n if (isProcedure(item)) {\n if (item.zz$p.contract.zz$cp.path) {\n const method = item.zz$p.contract.zz$cp.method ?? 'POST'\n const path = openAPIPathToRouterPath(item.zz$p.contract.zz$cp.path)\n\n routing.add(method, path, [currentPath, item])\n }\n }\n else {\n addRouteRecursively(item, currentPath)\n }\n }\n }\n\n addRouteRecursively(options.router, [])\n\n return async (requestOptions) => {\n const isORPCTransformer\n = requestOptions.request.headers.get(ORPC_HEADER) === ORPC_HEADER_VALUE\n const accept = requestOptions.request.headers.get('Accept') || undefined\n\n const serializer = isORPCTransformer\n ? new ORPCSerializer()\n : new OpenAPISerializer({ accept })\n\n const context = await value(requestOptions.context)\n\n const handler = async () => {\n const url = new URL(requestOptions.request.url)\n const pathname = `/${trim(url.pathname.replace(requestOptions.prefix ?? '', ''), '/')}`\n\n let path: string[] | undefined\n let procedure: WELL_DEFINED_PROCEDURE | undefined\n let params: Record<string, string> | undefined\n\n if (isORPCTransformer) {\n path = trim(pathname, '/').split('/').map(decodeURIComponent)\n const val = get(options.router, path)\n\n if (isProcedure(val)) {\n procedure = val\n }\n }\n else {\n const customMethod\n = requestOptions.request.method === 'POST'\n ? url.searchParams.get('method')?.toUpperCase()\n : undefined\n const method = customMethod || requestOptions.request.method\n\n const [matches, params_] = routing.match(method, pathname)\n\n const [match] = matches.sort((a, b) => {\n return Object.keys(a[1]).length - Object.keys(b[1]).length\n })\n\n if (match) {\n path = match[0][0]\n procedure = match[0][1]\n\n if (params_) {\n params = mapValues(\n (match as any)[1]!,\n v => params_[v as number]!,\n )\n }\n else {\n params = match[1] as Record<string, string>\n }\n }\n\n if (!path || !procedure) {\n path = trim(pathname, '/').split('/').map(decodeURIComponent)\n\n const val = get(options.router, path)\n\n if (isProcedure(val)) {\n procedure = val\n }\n }\n }\n\n if (!path || !procedure) {\n throw new ORPCError({ code: 'NOT_FOUND', message: 'Not found' })\n }\n\n const deserializer = isORPCTransformer\n ? new ORPCDeserializer()\n : new OpenAPIDeserializer({\n schema: procedure.zz$p.contract.zz$cp.InputSchema,\n })\n\n const input_ = await (async () => {\n try {\n return await deserializer.deserialize(requestOptions.request)\n }\n catch (e) {\n throw new ORPCError({\n code: 'BAD_REQUEST',\n message:\n 'Cannot parse request. Please check the request body and Content-Type header.',\n cause: e,\n })\n }\n })()\n\n const input = (() => {\n if (!params || Object.keys(params).length === 0) {\n return input_\n }\n\n const coercedParams = procedure.zz$p.contract.zz$cp.InputSchema\n ? (zodCoerce(\n procedure.zz$p.contract.zz$cp.InputSchema,\n { ...params },\n {\n bracketNotation: true,\n },\n ) as object)\n : params\n\n if (!isPlainObject(input_)) {\n return coercedParams\n }\n\n return {\n ...coercedParams,\n ...input_,\n }\n })()\n\n const caller = createProcedureCaller({\n context,\n procedure,\n path,\n })\n\n const output = await caller(input)\n\n const { body, headers } = serializer.serialize(output)\n\n return new Response(body, {\n status: 200,\n headers,\n })\n }\n\n try {\n return await options.hooks?.(context as any, {\n next: handler,\n response: response => response,\n }) ?? await handler()\n }\n catch (e) {\n const error = toORPCError(e)\n\n try {\n const { body, headers } = serializer.serialize(error.toJSON())\n\n return new Response(body, {\n status: error.status,\n headers,\n })\n }\n catch (e) {\n const error = toORPCError(e)\n\n // fallback to OpenAPI serializer (without accept) when expected serializer has failed\n const { body, headers } = new OpenAPISerializer().serialize(\n error.toJSON(),\n )\n\n return new Response(body, {\n status: error.status,\n headers,\n })\n }\n }\n }\n}\n\nfunction openAPIPathToRouterPath(path: HTTPPath): string {\n return standardizeHTTPPath(path).replace(/\\{([^}]+)\\}/g, ':$1')\n}\n\nexport type FetchHandlerOptions<TRouter extends Router<any>> = {\n /**\n * The request need to be handled.\n */\n request: Request\n\n /**\n * Remove the prefix from the request path.\n *\n * @example /orpc\n * @example /api\n */\n prefix?: string\n} & PartialOnUndefinedDeep<{\n /**\n * The context used to handle the request.\n */\n context: Value<\n TRouter extends Router<infer UContext> ? UContext : never\n >\n}>\n\nexport interface FetchHandler<TRouter extends Router<any>> {\n (options: FetchHandlerOptions<TRouter>): Promise<Response>\n}\n\nfunction toORPCError(e: unknown): ORPCError<any, any> {\n return e instanceof ORPCError\n ? e\n : new ORPCError({\n code: 'INTERNAL_SERVER_ERROR',\n message: 'Internal server error',\n cause: e,\n })\n}\n","// src/router.ts\nvar METHOD_NAME_ALL = \"ALL\";\nvar METHOD_NAME_ALL_LOWERCASE = \"all\";\nvar METHODS = [\"get\", \"post\", \"put\", \"delete\", \"options\", \"patch\"];\nvar MESSAGE_MATCHER_IS_ALREADY_BUILT = \"Can not add a route since the matcher is already built.\";\nvar UnsupportedPathError = class extends Error {\n};\nexport {\n MESSAGE_MATCHER_IS_ALREADY_BUILT,\n METHODS,\n METHOD_NAME_ALL,\n METHOD_NAME_ALL_LOWERCASE,\n UnsupportedPathError\n};\n","// src/utils/url.ts\nvar splitPath = (path) => {\n const paths = path.split(\"/\");\n if (paths[0] === \"\") {\n paths.shift();\n }\n return paths;\n};\nvar splitRoutingPath = (routePath) => {\n const { groups, path } = extractGroupsFromPath(routePath);\n const paths = splitPath(path);\n return replaceGroupMarks(paths, groups);\n};\nvar extractGroupsFromPath = (path) => {\n const groups = [];\n path = path.replace(/\\{[^}]+\\}/g, (match, index) => {\n const mark = `@${index}`;\n groups.push([mark, match]);\n return mark;\n });\n return { groups, path };\n};\nvar replaceGroupMarks = (paths, groups) => {\n for (let i = groups.length - 1; i >= 0; i--) {\n const [mark] = groups[i];\n for (let j = paths.length - 1; j >= 0; j--) {\n if (paths[j].includes(mark)) {\n paths[j] = paths[j].replace(mark, groups[i][1]);\n break;\n }\n }\n }\n return paths;\n};\nvar patternCache = {};\nvar getPattern = (label) => {\n if (label === \"*\") {\n return \"*\";\n }\n const match = label.match(/^\\:([^\\{\\}]+)(?:\\{(.+)\\})?$/);\n if (match) {\n if (!patternCache[label]) {\n if (match[2]) {\n patternCache[label] = [label, match[1], new RegExp(\"^\" + match[2] + \"$\")];\n } else {\n patternCache[label] = [label, match[1], true];\n }\n }\n return patternCache[label];\n }\n return null;\n};\nvar tryDecodeURI = (str) => {\n try {\n return decodeURI(str);\n } catch {\n return str.replace(/(?:%[0-9A-Fa-f]{2})+/g, (match) => {\n try {\n return decodeURI(match);\n } catch {\n return match;\n }\n });\n }\n};\nvar getPath = (request) => {\n const url = request.url;\n const start = url.indexOf(\"/\", 8);\n let i = start;\n for (; i < url.length; i++) {\n const charCode = url.charCodeAt(i);\n if (charCode === 37) {\n const queryIndex = url.indexOf(\"?\", i);\n const path = url.slice(start, queryIndex === -1 ? void 0 : queryIndex);\n return tryDecodeURI(path.includes(\"%25\") ? path.replace(/%25/g, \"%2525\") : path);\n } else if (charCode === 63) {\n break;\n }\n }\n return url.slice(start, i);\n};\nvar getQueryStrings = (url) => {\n const queryIndex = url.indexOf(\"?\", 8);\n return queryIndex === -1 ? \"\" : \"?\" + url.slice(queryIndex + 1);\n};\nvar getPathNoStrict = (request) => {\n const result = getPath(request);\n return result.length > 1 && result[result.length - 1] === \"/\" ? result.slice(0, -1) : result;\n};\nvar mergePath = (...paths) => {\n let p = \"\";\n let endsWithSlash = false;\n for (let path of paths) {\n if (p[p.length - 1] === \"/\") {\n p = p.slice(0, -1);\n endsWithSlash = true;\n }\n if (path[0] !== \"/\") {\n path = `/${path}`;\n }\n if (path === \"/\" && endsWithSlash) {\n p = `${p}/`;\n } else if (path !== \"/\") {\n p = `${p}${path}`;\n }\n if (path === \"/\" && p === \"\") {\n p = \"/\";\n }\n }\n return p;\n};\nvar checkOptionalParameter = (path) => {\n if (!path.match(/\\:.+\\?$/)) {\n return null;\n }\n const segments = path.split(\"/\");\n const results = [];\n let basePath = \"\";\n segments.forEach((segment) => {\n if (segment !== \"\" && !/\\:/.test(segment)) {\n basePath += \"/\" + segment;\n } else if (/\\:/.test(segment)) {\n if (/\\?/.test(segment)) {\n if (results.length === 0 && basePath === \"\") {\n results.push(\"/\");\n } else {\n results.push(basePath);\n }\n const optionalSegment = segment.replace(\"?\", \"\");\n basePath += \"/\" + optionalSegment;\n results.push(basePath);\n } else {\n basePath += \"/\" + segment;\n }\n }\n });\n return results.filter((v, i, a) => a.indexOf(v) === i);\n};\nvar _decodeURI = (value) => {\n if (!/[%+]/.test(value)) {\n return value;\n }\n if (value.indexOf(\"+\") !== -1) {\n value = value.replace(/\\+/g, \" \");\n }\n return /%/.test(value) ? decodeURIComponent_(value) : value;\n};\nvar _getQueryParam = (url, key, multiple) => {\n let encoded;\n if (!multiple && key && !/[%+]/.test(key)) {\n let keyIndex2 = url.indexOf(`?${key}`, 8);\n if (keyIndex2 === -1) {\n keyIndex2 = url.indexOf(`&${key}`, 8);\n }\n while (keyIndex2 !== -1) {\n const trailingKeyCode = url.charCodeAt(keyIndex2 + key.length + 1);\n if (trailingKeyCode === 61) {\n const valueIndex = keyIndex2 + key.length + 2;\n const endIndex = url.indexOf(\"&\", valueIndex);\n return _decodeURI(url.slice(valueIndex, endIndex === -1 ? void 0 : endIndex));\n } else if (trailingKeyCode == 38 || isNaN(trailingKeyCode)) {\n return \"\";\n }\n keyIndex2 = url.indexOf(`&${key}`, keyIndex2 + 1);\n }\n encoded = /[%+]/.test(url);\n if (!encoded) {\n return void 0;\n }\n }\n const results = {};\n encoded ??= /[%+]/.test(url);\n let keyIndex = url.indexOf(\"?\", 8);\n while (keyIndex !== -1) {\n const nextKeyIndex = url.indexOf(\"&\", keyIndex + 1);\n let valueIndex = url.indexOf(\"=\", keyIndex);\n if (valueIndex > nextKeyIndex && nextKeyIndex !== -1) {\n valueIndex = -1;\n }\n let name = url.slice(\n keyIndex + 1,\n valueIndex === -1 ? nextKeyIndex === -1 ? void 0 : nextKeyIndex : valueIndex\n );\n if (encoded) {\n name = _decodeURI(name);\n }\n keyIndex = nextKeyIndex;\n if (name === \"\") {\n continue;\n }\n let value;\n if (valueIndex === -1) {\n value = \"\";\n } else {\n value = url.slice(valueIndex + 1, nextKeyIndex === -1 ? void 0 : nextKeyIndex);\n if (encoded) {\n value = _decodeURI(value);\n }\n }\n if (multiple) {\n if (!(results[name] && Array.isArray(results[name]))) {\n results[name] = [];\n }\n ;\n results[name].push(value);\n } else {\n results[name] ??= value;\n }\n }\n return key ? results[key] : results;\n};\nvar getQueryParam = _getQueryParam;\nvar getQueryParams = (url, key) => {\n return _getQueryParam(url, key, true);\n};\nvar decodeURIComponent_ = decodeURIComponent;\nexport {\n checkOptionalParameter,\n decodeURIComponent_,\n getPath,\n getPathNoStrict,\n getPattern,\n getQueryParam,\n getQueryParams,\n getQueryStrings,\n mergePath,\n splitPath,\n splitRoutingPath\n};\n","// src/router/linear-router/router.ts\nimport { METHOD_NAME_ALL, UnsupportedPathError } from \"../../router.js\";\nimport { checkOptionalParameter } from \"../../utils/url.js\";\nvar emptyParams = /* @__PURE__ */ Object.create(null);\nvar splitPathRe = /\\/(:\\w+(?:{(?:(?:{[\\d,]+})|[^}])+})?)|\\/[^\\/\\?]+|(\\?)/g;\nvar splitByStarRe = /\\*/;\nvar LinearRouter = class {\n name = \"LinearRouter\";\n routes = [];\n add(method, path, handler) {\n ;\n (checkOptionalParameter(path) || [path]).forEach((p) => {\n this.routes.push([method, p, handler]);\n });\n }\n match(method, path) {\n const handlers = [];\n ROUTES_LOOP:\n for (let i = 0, len = this.routes.length; i < len; i++) {\n const [routeMethod, routePath, handler] = this.routes[i];\n if (routeMethod !== method && routeMethod !== METHOD_NAME_ALL) {\n continue;\n }\n if (routePath === \"*\" || routePath === \"/*\") {\n handlers.push([handler, emptyParams]);\n continue;\n }\n const hasStar = routePath.indexOf(\"*\") !== -1;\n const hasLabel = routePath.indexOf(\":\") !== -1;\n if (!hasStar && !hasLabel) {\n if (routePath === path || routePath + \"/\" === path) {\n handlers.push([handler, emptyParams]);\n }\n } else if (hasStar && !hasLabel) {\n const endsWithStar = routePath.charCodeAt(routePath.length - 1) === 42;\n const parts = (endsWithStar ? routePath.slice(0, -2) : routePath).split(splitByStarRe);\n const lastIndex = parts.length - 1;\n for (let j = 0, pos = 0, len2 = parts.length; j < len2; j++) {\n const part = parts[j];\n const index = path.indexOf(part, pos);\n if (index !== pos) {\n continue ROUTES_LOOP;\n }\n pos += part.length;\n if (j === lastIndex) {\n if (!endsWithStar && pos !== path.length && !(pos === path.length - 1 && path.charCodeAt(pos) === 47)) {\n continue ROUTES_LOOP;\n }\n } else {\n const index2 = path.indexOf(\"/\", pos);\n if (index2 === -1) {\n continue ROUTES_LOOP;\n }\n pos = index2;\n }\n }\n handlers.push([handler, emptyParams]);\n } else if (hasLabel && !hasStar) {\n const params = /* @__PURE__ */ Object.create(null);\n const parts = routePath.match(splitPathRe);\n const lastIndex = parts.length - 1;\n for (let j = 0, pos = 0, len2 = parts.length; j < len2; j++) {\n if (pos === -1 || pos >= path.length) {\n continue ROUTES_LOOP;\n }\n const part = parts[j];\n if (part.charCodeAt(1) === 58) {\n let name = part.slice(2);\n let value;\n if (name.charCodeAt(name.length - 1) === 125) {\n const openBracePos = name.indexOf(\"{\");\n const pattern = name.slice(openBracePos + 1, -1);\n const restPath = path.slice(pos + 1);\n const match = new RegExp(pattern, \"d\").exec(restPath);\n if (!match || match.indices[0][0] !== 0 || match.indices[0][1] === 0) {\n continue ROUTES_LOOP;\n }\n name = name.slice(0, openBracePos);\n value = restPath.slice(...match.indices[0]);\n pos += match.indices[0][1] + 1;\n } else {\n let endValuePos = path.indexOf(\"/\", pos + 1);\n if (endValuePos === -1) {\n if (pos + 1 === path.length) {\n continue ROUTES_LOOP;\n }\n endValuePos = path.length;\n }\n value = path.slice(pos + 1, endValuePos);\n pos = endValuePos;\n }\n params[name] ||= value;\n } else {\n const index = path.indexOf(part, pos);\n if (index !== pos) {\n continue ROUTES_LOOP;\n }\n pos += part.length;\n }\n if (j === lastIndex) {\n if (pos !== path.length && !(pos === path.length - 1 && path.charCodeAt(pos) === 47)) {\n continue ROUTES_LOOP;\n }\n }\n }\n handlers.push([handler, params]);\n } else if (hasLabel && hasStar) {\n throw new UnsupportedPathError();\n }\n }\n return [handlers];\n }\n};\nexport {\n LinearRouter\n};\n","// src/router/reg-exp-router/node.ts\nvar LABEL_REG_EXP_STR = \"[^/]+\";\nvar ONLY_WILDCARD_REG_EXP_STR = \".*\";\nvar TAIL_WILDCARD_REG_EXP_STR = \"(?:|/.*)\";\nvar PATH_ERROR = Symbol();\nvar regExpMetaChars = new Set(\".\\\\+*[^]$()\");\nfunction compareKey(a, b) {\n if (a.length === 1) {\n return b.length === 1 ? a < b ? -1 : 1 : -1;\n }\n if (b.length === 1) {\n return 1;\n }\n if (a === ONLY_WILDCARD_REG_EXP_STR || a === TAIL_WILDCARD_REG_EXP_STR) {\n return 1;\n } else if (b === ONLY_WILDCARD_REG_EXP_STR || b === TAIL_WILDCARD_REG_EXP_STR) {\n return -1;\n }\n if (a === LABEL_REG_EXP_STR) {\n return 1;\n } else if (b === LABEL_REG_EXP_STR) {\n return -1;\n }\n return a.length === b.length ? a < b ? -1 : 1 : b.length - a.length;\n}\nvar Node = class {\n index;\n varIndex;\n children = /* @__PURE__ */ Object.create(null);\n insert(tokens, index, paramMap, context, pathErrorCheckOnly) {\n if (tokens.length === 0) {\n if (this.index !== void 0) {\n throw PATH_ERROR;\n }\n if (pathErrorCheckOnly) {\n return;\n }\n this.index = index;\n return;\n }\n const [token, ...restTokens] = tokens;\n const pattern = token === \"*\" ? restTokens.length === 0 ? [\"\", \"\", ONLY_WILDCARD_REG_EXP_STR] : [\"\", \"\", LABEL_REG_EXP_STR] : token === \"/*\" ? [\"\", \"\", TAIL_WILDCARD_REG_EXP_STR] : token.match(/^\\:([^\\{\\}]+)(?:\\{(.+)\\})?$/);\n let node;\n if (pattern) {\n const name = pattern[1];\n let regexpStr = pattern[2] || LABEL_REG_EXP_STR;\n if (name && pattern[2]) {\n regexpStr = regexpStr.replace(/^\\((?!\\?:)(?=[^)]+\\)$)/, \"(?:\");\n if (/\\((?!\\?:)/.test(regexpStr)) {\n throw PATH_ERROR;\n }\n }\n node = this.children[regexpStr];\n if (!node) {\n if (Object.keys(this.children).some(\n (k) => k !== ONLY_WILDCARD_REG_EXP_STR && k !== TAIL_WILDCARD_REG_EXP_STR\n )) {\n throw PATH_ERROR;\n }\n if (pathErrorCheckOnly) {\n return;\n }\n node = this.children[regexpStr] = new Node();\n if (name !== \"\") {\n node.varIndex = context.varIndex++;\n }\n }\n if (!pathErrorCheckOnly && name !== \"\") {\n paramMap.push([name, node.varIndex]);\n }\n } else {\n node = this.children[token];\n if (!node) {\n if (Object.keys(this.children).some(\n (k) => k.length > 1 && k !== ONLY_WILDCARD_REG_EXP_STR && k !== TAIL_WILDCARD_REG_EXP_STR\n )) {\n throw PATH_ERROR;\n }\n if (pathErrorCheckOnly) {\n return;\n }\n node = this.children[token] = new Node();\n }\n }\n node.insert(restTokens, index, paramMap, context, pathErrorCheckOnly);\n }\n buildRegExpStr() {\n const childKeys = Object.keys(this.children).sort(compareKey);\n const strList = childKeys.map((k) => {\n const c = this.children[k];\n return (typeof c.varIndex === \"number\" ? `(${k})@${c.varIndex}` : regExpMetaChars.has(k) ? `\\\\${k}` : k) + c.buildRegExpStr();\n });\n if (typeof this.index === \"number\") {\n strList.unshift(`#${this.index}`);\n }\n if (strList.length === 0) {\n return \"\";\n }\n if (strList.length === 1) {\n return strList[0];\n }\n return \"(?:\" + strList.join(\"|\") + \")\";\n }\n};\nexport {\n Node,\n PATH_ERROR\n};\n","// src/router/reg-exp-router/trie.ts\nimport { Node } from \"./node.js\";\nvar Trie = class {\n context = { varIndex: 0 };\n root = new Node();\n insert(path, index, pathErrorCheckOnly) {\n const paramAssoc = [];\n const groups = [];\n for (let i = 0; ; ) {\n let replaced = false;\n path = path.replace(/\\{[^}]+\\}/g, (m) => {\n const mark = `@\\\\${i}`;\n groups[i] = [mark, m];\n i++;\n replaced = true;\n return mark;\n });\n if (!replaced) {\n break;\n }\n }\n const tokens = path.match(/(?::[^\\/]+)|(?:\\/\\*$)|./g) || [];\n for (let i = groups.length - 1; i >= 0; i--) {\n const [mark] = groups[i];\n for (let j = tokens.length - 1; j >= 0; j--) {\n if (tokens[j].indexOf(mark) !== -1) {\n tokens[j] = tokens[j].replace(mark, groups[i][1]);\n break;\n }\n }\n }\n this.root.insert(tokens, index, paramAssoc, this.context, pathErrorCheckOnly);\n return paramAssoc;\n }\n buildRegExp() {\n let regexp = this.root.buildRegExpStr();\n if (regexp === \"\") {\n return [/^$/, [], []];\n }\n let captureIndex = 0;\n const indexReplacementMap = [];\n const paramReplacementMap = [];\n regexp = regexp.replace(/#(\\d+)|@(\\d+)|\\.\\*\\$/g, (_, handlerIndex, paramIndex) => {\n if (typeof handlerIndex !== \"undefined\") {\n indexReplacementMap[++captureIndex] = Number(handlerIndex);\n return \"$()\";\n }\n if (typeof paramIndex !== \"undefined\") {\n paramReplacementMap[Number(paramIndex)] = ++captureIndex;\n return \"\";\n }\n return \"\";\n });\n return [new RegExp(`^${regexp}`), indexReplacementMap, paramReplacementMap];\n }\n};\nexport {\n Trie\n};\n","// src/router/reg-exp-router/router.ts\nimport {\n MESSAGE_MATCHER_IS_ALREADY_BUILT,\n METHOD_NAME_ALL,\n UnsupportedPathError\n} from \"../../router.js\";\nimport { checkOptionalParameter } from \"../../utils/url.js\";\nimport { PATH_ERROR } from \"./node.js\";\nimport { Trie } from \"./trie.js\";\nvar emptyParam = [];\nvar nullMatcher = [/^$/, [], /* @__PURE__ */ Object.create(null)];\nvar wildcardRegExpCache = /* @__PURE__ */ Object.create(null);\nfunction buildWildcardRegExp(path) {\n return wildcardRegExpCache[path] ??= new RegExp(\n path === \"*\" ? \"\" : `^${path.replace(\n /\\/\\*$|([.\\\\+*[^\\]$()])/g,\n (_, metaChar) => metaChar ? `\\\\${metaChar}` : \"(?:|/.*)\"\n )}$`\n );\n}\nfunction clearWildcardRegExpCache() {\n wildcardRegExpCache = /* @__PURE__ */ Object.create(null);\n}\nfunction buildMatcherFromPreprocessedRoutes(routes) {\n const trie = new Trie();\n const handlerData = [];\n if (routes.length === 0) {\n return nullMatcher;\n }\n const routesWithStaticPathFlag = routes.map(\n (route) => [!/\\*|\\/:/.test(route[0]), ...route]\n ).sort(\n ([isStaticA, pathA], [isStaticB, pathB]) => isStaticA ? 1 : isStaticB ? -1 : pathA.length - pathB.length\n );\n const staticMap = /* @__PURE__ */ Object.create(null);\n for (let i = 0, j = -1, len = routesWithStaticPathFlag.length; i < len; i++) {\n const [pathErrorCheckOnly, path, handlers] = routesWithStaticPathFlag[i];\n if (pathErrorCheckOnly) {\n staticMap[path] = [handlers.map(([h]) => [h, /* @__PURE__ */ Object.create(null)]), emptyParam];\n } else {\n j++;\n }\n let paramAssoc;\n try {\n paramAssoc = trie.insert(path, j, pathErrorCheckOnly);\n } catch (e) {\n throw e === PATH_ERROR ? new UnsupportedPathError(path) : e;\n }\n if (pathErrorCheckOnly) {\n continue;\n }\n handlerData[j] = handlers.map(([h, paramCount]) => {\n const paramIndexMap = /* @__PURE__ */ Object.create(null);\n paramCount -= 1;\n for (; paramCount >= 0; paramCount--) {\n const [key, value] = paramAssoc[paramCount];\n paramIndexMap[key] = value;\n }\n return [h, paramIndexMap];\n });\n }\n const [regexp, indexReplacementMap, paramReplacementMap] = trie.buildRegExp();\n for (let i = 0, len = handlerData.length; i < len; i++) {\n for (let j = 0, len2 = handlerData[i].length; j < len2; j++) {\n const map = handlerData[i][j]?.[1];\n if (!map) {\n continue;\n }\n const keys = Object.keys(map);\n for (let k = 0, len3 = keys.length; k < len3; k++) {\n map[keys[k]] = paramReplacementMap[map[keys[k]]];\n }\n }\n }\n const handlerMap = [];\n for (const i in indexReplacementMap) {\n handlerMap[i] = handlerData[indexReplacementMap[i]];\n }\n return [regexp, handlerMap, staticMap];\n}\nfunction findMiddleware(middleware, path) {\n if (!middleware) {\n return void 0;\n }\n for (const k of Object.keys(middleware).sort((a, b) => b.length - a.length)) {\n if (buildWildcardRegExp(k).test(path)) {\n return [...middleware[k]];\n }\n }\n return void 0;\n}\nvar RegExpRouter = class {\n name = \"RegExpRouter\";\n middleware;\n routes;\n constructor() {\n this.middleware = { [METHOD_NAME_ALL]: /* @__PURE__ */ Object.create(null) };\n this.routes = { [METHOD_NAME_ALL]: /* @__PURE__ */ Object.create(null) };\n }\n add(method, path, handler) {\n const { middleware, routes } = this;\n if (!middleware || !routes) {\n throw new Error(MESSAGE_MATCHER_IS_ALREADY_BUILT);\n }\n if (!middleware[method]) {\n ;\n [middleware, routes].forEach((handlerMap) => {\n handlerMap[method] = /* @__PURE__ */ Object.create(null);\n Object.keys(handlerMap[METHOD_NAME_ALL]).forEach((p) => {\n handlerMap[method][p] = [...handlerMap[METHOD_NAME_ALL][p]];\n });\n });\n }\n if (path === \"/*\") {\n path = \"*\";\n }\n const paramCount = (path.match(/\\/:/g) || []).length;\n if (/\\*$/.test(path)) {\n const re = buildWildcardRegExp(path);\n if (method === METHOD_NAME_ALL) {\n Object.keys(middleware).forEach((m) => {\n middleware[m][path] ||= findMiddleware(middleware[m], path) || findMiddleware(middleware[METHOD_NAME_ALL], path) || [];\n });\n } else {\n middleware[method][path] ||= findMiddleware(middleware[method], path) || findMiddleware(middleware[METHOD_NAME_ALL], path) || [];\n }\n Object.keys(middleware).forEach((m) => {\n if (method === METHOD_NAME_ALL || method === m) {\n Object.keys(middleware[m]).forEach((p) => {\n re.test(p) && middleware[m][p].push([handler, paramCount]);\n });\n }\n });\n Object.keys(routes).forEach((m) => {\n if (method === METHOD_NAME_ALL || method === m) {\n Object.keys(routes[m]).forEach(\n (p) => re.test(p) && routes[m][p].push([handler, paramCount])\n );\n }\n });\n return;\n }\n const paths = checkOptionalParameter(path) || [path];\n for (let i = 0, len = paths.length; i < len; i++) {\n const path2 = paths[i];\n Object.keys(routes).forEach((m) => {\n if (method === METHOD_NAME_ALL || method === m) {\n routes[m][path2] ||= [\n ...findMiddleware(middleware[m], path2) || findMiddleware(middleware[METHOD_NAME_ALL], path2) || []\n ];\n routes[m][path2].push([handler, paramCount - len + i + 1]);\n }\n });\n }\n }\n match(method, path) {\n clearWildcardRegExpCache();\n const matchers = this.buildAllMatchers();\n this.match = (method2, path2) => {\n const matcher = matchers[method2] || matchers[METHOD_NAME_ALL];\n const staticMatch = matcher[2][path2];\n if (staticMatch) {\n return staticMatch;\n }\n const match = path2.match(matcher[0]);\n if (!match) {\n return [[], emptyParam];\n }\n const index = match.indexOf(\"\", 1);\n return [matcher[1][index], match];\n };\n return this.match(method, path);\n }\n buildAllMatchers() {\n const matchers = /* @__PURE__ */ Object.create(null);\n [...Object.keys(this.routes), ...Object.keys(this.middleware)].forEach((method) => {\n matchers[method] ||= this.buildMatcher(method);\n });\n this.middleware = this.routes = void 0;\n return matchers;\n }\n buildMatcher(method) {\n const routes = [];\n let hasOwnRoute = method === METHOD_NAME_ALL;\n [this.middleware, this.routes].forEach((r) => {\n const ownRoute = r[method] ? Object.keys(r[method]).map((path) => [path, r[method][path]]) : [];\n if (ownRoute.length !== 0) {\n hasOwnRoute ||= true;\n routes.push(...ownRoute);\n } else if (method !== METHOD_NAME_ALL) {\n routes.push(\n ...Object.keys(r[METHOD_NAME_ALL]).map((path) => [path, r[METHOD_NAME_ALL][path]])\n );\n }\n });\n if (!hasOwnRoute) {\n return null;\n } else {\n return buildMatcherFromPreprocessedRoutes(routes);\n }\n }\n};\nexport {\n RegExpRouter\n};\n"],"mappings":";;;;;;AAQA;AAAA,EAEE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,iBAAiB;AAC1B;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;;;AC3BP,IAAI,kBAAkB;AAGtB,IAAI,mCAAmC;AACvC,IAAI,uBAAuB,cAAc,MAAM;AAC/C;;;ACyGA,IAAI,yBAAyB,CAAC,SAAS;AACrC,MAAI,CAAC,KAAK,MAAM,SAAS,GAAG;AAC1B,WAAO;AAAA,EACT;AACA,QAAM,WAAW,KAAK,MAAM,GAAG;AAC/B,QAAM,UAAU,CAAC;AACjB,MAAI,WAAW;AACf,WAAS,QAAQ,CAAC,YAAY;AAC5B,QAAI,YAAY,MAAM,CAAC,KAAK,KAAK,OAAO,GAAG;AACzC,kBAAY,MAAM;AAAA,IACpB,WAAW,KAAK,KAAK,OAAO,GAAG;AAC7B,UAAI,KAAK,KAAK,OAAO,GAAG;AACtB,YAAI,QAAQ,WAAW,KAAK,aAAa,IAAI;AAC3C,kBAAQ,KAAK,GAAG;AAAA,QAClB,OAAO;AACL,kBAAQ,KAAK,QAAQ;AAAA,QACvB;AACA,cAAM,kBAAkB,QAAQ,QAAQ,KAAK,EAAE;AAC/C,oBAAY,MAAM;AAClB,gBAAQ,KAAK,QAAQ;AAAA,MACvB,OAAO;AACL,oBAAY,MAAM;AAAA,MACpB;AAAA,IACF;AAAA,EACF,CAAC;AACD,SAAO,QAAQ,OAAO,CAAC,GAAG,GAAG,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC;AACvD;;;ACtIA,IAAI,cAA8B,uBAAO,OAAO,IAAI;AACpD,IAAI,cAAc;AAClB,IAAI,gBAAgB;AACpB,IAAI,eAAe,MAAM;AAAA,EACvB,OAAO;AAAA,EACP,SAAS,CAAC;AAAA,EACV,IAAI,QAAQ,MAAM,SAAS;AACzB;AACA,KAAC,uBAAuB,IAAI,KAAK,CAAC,IAAI,GAAG,QAAQ,CAAC,MAAM;AACtD,WAAK,OAAO,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC;AAAA,IACvC,CAAC;AAAA,EACH;AAAA,EACA,MAAM,QAAQ,MAAM;AAClB,UAAM,WAAW,CAAC;AAClB;AACE,eAAS,IAAI,GAAG,MAAM,KAAK,OAAO,QAAQ,IAAI,KAAK,KAAK;AACtD,cAAM,CAAC,aAAa,WAAW,OAAO,IAAI,KAAK,OAAO,CAAC;AACvD,YAAI,gBAAgB,UAAU,gBAAgB,iBAAiB;AAC7D;AAAA,QACF;AACA,YAAI,cAAc,OAAO,cAAc,MAAM;AAC3C,mBAAS,KAAK,CAAC,SAAS,WAAW,CAAC;AACpC;AAAA,QACF;AACA,cAAM,UAAU,UAAU,QAAQ,GAAG,MAAM;AAC3C,cAAM,WAAW,UAAU,QAAQ,GAAG,MAAM;AAC5C,YAAI,CAAC,WAAW,CAAC,UAAU;AACzB,cAAI,cAAc,QAAQ,YAAY,QAAQ,MAAM;AAClD,qBAAS,KAAK,CAAC,SAAS,WAAW,CAAC;AAAA,UACtC;AAAA,QACF,WAAW,WAAW,CAAC,UAAU;AAC/B,gBAAM,eAAe,UAAU,WAAW,UAAU,SAAS,CAAC,MAAM;AACpE,gBAAM,SAAS,eAAe,UAAU,MAAM,GAAG,EAAE,IAAI,WAAW,MAAM,aAAa;AACrF,gBAAM,YAAY,MAAM,SAAS;AACjC,mBAAS,IAAI,GAAG,MAAM,GAAG,OAAO,MAAM,QAAQ,IAAI,MAAM,KAAK;AAC3D,kBAAM,OAAO,MAAM,CAAC;AACpB,kBAAM,QAAQ,KAAK,QAAQ,MAAM,GAAG;AACpC,gBAAI,UAAU,KAAK;AACjB,uBAAS;AAAA,YACX;AACA,mBAAO,KAAK;AACZ,gBAAI,MAAM,WAAW;AACnB,kBAAI,CAAC,gBAAgB,QAAQ,KAAK,UAAU,EAAE,QAAQ,KAAK,SAAS,KAAK,KAAK,WAAW,GAAG,MAAM,KAAK;AACrG,yBAAS;AAAA,cACX;AAAA,YACF,OAAO;AACL,oBAAM,SAAS,KAAK,QAAQ,KAAK,GAAG;AACpC,kBAAI,WAAW,IAAI;AACjB,yBAAS;AAAA,cACX;AACA,oBAAM;AAAA,YACR;AAAA,UACF;AACA,mBAAS,KAAK,CAAC,SAAS,WAAW,CAAC;AAAA,QACtC,WAAW,YAAY,CAAC,SAAS;AAC/B,gBAAM,SAAyB,uBAAO,OAAO,IAAI;AACjD,gBAAM,QAAQ,UAAU,MAAM,WAAW;AACzC,gBAAM,YAAY,MAAM,SAAS;AACjC,mBAAS,IAAI,GAAG,MAAM,GAAG,OAAO,MAAM,QAAQ,IAAI,MAAM,KAAK;AAC3D,gBAAI,QAAQ,MAAM,OAAO,KAAK,QAAQ;AACpC,uBAAS;AAAA,YACX;AACA,kBAAM,OAAO,MAAM,CAAC;AACpB,gBAAI,KAAK,WAAW,CAAC,MAAM,IAAI;AAC7B,kBAAI,OAAO,KAAK,MAAM,CAAC;AACvB,kBAAIA;AACJ,kBAAI,KAAK,WAAW,KAAK,SAAS,CAAC,MAAM,KAAK;AAC5C,sBAAM,eAAe,KAAK,QAAQ,GAAG;AACrC,sBAAM,UAAU,KAAK,MAAM,eAAe,GAAG,EAAE;AAC/C,sBAAM,WAAW,KAAK,MAAM,MAAM,CAAC;AACnC,sBAAM,QAAQ,IAAI,OAAO,SAAS,GAAG,EAAE,KAAK,QAAQ;AACpD,oBAAI,CAAC,SAAS,MAAM,QAAQ,CAAC,EAAE,CAAC,MAAM,KAAK,MAAM,QAAQ,CAAC,EAAE,CAAC,MAAM,GAAG;AACpE,2BAAS;AAAA,gBACX;AACA,uBAAO,KAAK,MAAM,GAAG,YAAY;AACjC,gBAAAA,SAAQ,SAAS,MAAM,GAAG,MAAM,QAAQ,CAAC,CAAC;AAC1C,uBAAO,MAAM,QAAQ,CAAC,EAAE,CAAC,IAAI;AAAA,cAC/B,OAAO;AACL,oBAAI,cAAc,KAAK,QAAQ,KAAK,MAAM,CAAC;AAC3C,oBAAI,gBAAgB,IAAI;AACtB,sBAAI,MAAM,MAAM,KAAK,QAAQ;AAC3B,6BAAS;AAAA,kBACX;AACA,gCAAc,KAAK;AAAA,gBACrB;AACA,gBAAAA,SAAQ,KAAK,MAAM,MAAM,GAAG,WAAW;AACvC,sBAAM;AAAA,cACR;AACA,qBAAO,IAAI,MAAMA;AAAA,YACnB,OAAO;AACL,oBAAM,QAAQ,KAAK,QAAQ,MAAM,GAAG;AACpC,kBAAI,UAAU,KAAK;AACjB,yBAAS;AAAA,cACX;AACA,qBAAO,KAAK;AAAA,YACd;AACA,gBAAI,MAAM,WAAW;AACnB,kBAAI,QAAQ,KAAK,UAAU,EAAE,QAAQ,KAAK,SAAS,KAAK,KAAK,WAAW,GAAG,MAAM,KAAK;AACpF,yBAAS;AAAA,cACX;AAAA,YACF;AAAA,UACF;AACA,mBAAS,KAAK,CAAC,SAAS,MAAM,CAAC;AAAA,QACjC,WAAW,YAAY,SAAS;AAC9B,gBAAM,IAAI,qBAAqB;AAAA,QACjC;AAAA,MACF;AACF,WAAO,CAAC,QAAQ;AAAA,EAClB;AACF;;;AC/GA,IAAI,oBAAoB;AACxB,IAAI,4BAA4B;AAChC,IAAI,4BAA4B;AAChC,IAAI,aAAa,OAAO;AACxB,IAAI,kBAAkB,IAAI,IAAI,aAAa;AAC3C,SAAS,WAAW,GAAG,GAAG;AACxB,MAAI,EAAE,WAAW,GAAG;AAClB,WAAO,EAAE,WAAW,IAAI,IAAI,IAAI,KAAK,IAAI;AAAA,EAC3C;AACA,MAAI,EAAE,WAAW,GAAG;AAClB,WAAO;AAAA,EACT;AACA,MAAI,MAAM,6BAA6B,MAAM,2BAA2B;AACtE,WAAO;AAAA,EACT,WAAW,MAAM,6BAA6B,MAAM,2BAA2B;AAC7E,WAAO;AAAA,EACT;AACA,MAAI,MAAM,mBAAmB;AAC3B,WAAO;AAAA,EACT,WAAW,MAAM,mBAAmB;AAClC,WAAO;AAAA,EACT;AACA,SAAO,EAAE,WAAW,EAAE,SAAS,IAAI,IAAI,KAAK,IAAI,EAAE,SAAS,EAAE;AAC/D;AACA,IAAI,OAAO,MAAM;AAAA,EACf;AAAA,EACA;AAAA,EACA,WAA2B,uBAAO,OAAO,IAAI;AAAA,EAC7C,OAAO,QAAQ,OAAO,UAAU,SAAS,oBAAoB;AAC3D,QAAI,OAAO,WAAW,GAAG;AACvB,UAAI,KAAK,UAAU,QAAQ;AACzB,cAAM;AAAA,MACR;AACA,UAAI,oBAAoB;AACtB;AAAA,MACF;AACA,WAAK,QAAQ;AACb;AAAA,IACF;AACA,UAAM,CAAC,OAAO,GAAG,UAAU,IAAI;AAC/B,UAAM,UAAU,UAAU,MAAM,WAAW,WAAW,IAAI,CAAC,IAAI,IAAI,yBAAyB,IAAI,CAAC,IAAI,IAAI,iBAAiB,IAAI,UAAU,OAAO,CAAC,IAAI,IAAI,yBAAyB,IAAI,MAAM,MAAM,6BAA6B;AAC9N,QAAI;AACJ,QAAI,SAAS;AACX,YAAM,OAAO,QAAQ,CAAC;AACtB,UAAI,YAAY,QAAQ,CAAC,KAAK;AAC9B,UAAI,QAAQ,QAAQ,CAAC,GAAG;AACtB,oBAAY,UAAU,QAAQ,0BAA0B,KAAK;AAC7D,YAAI,YAAY,KAAK,SAAS,GAAG;AAC/B,gBAAM;AAAA,QACR;AAAA,MACF;AACA,aAAO,KAAK,SAAS,SAAS;AAC9B,UAAI,CAAC,MAAM;AACT,YAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAAA,UAC7B,CAAC,MAAM,MAAM,6BAA6B,MAAM;AAAA,QAClD,GAAG;AACD,gBAAM;AAAA,QACR;AACA,YAAI,oBAAoB;AACtB;AAAA,QACF;AACA,eAAO,KAAK,SAAS,SAAS,IAAI,IAAI,KAAK;AAC3C,YAAI,SAAS,IAAI;AACf,eAAK,WAAW,QAAQ;AAAA,QAC1B;AAAA,MACF;AACA,UAAI,CAAC,sBAAsB,SAAS,IAAI;AACtC,iBAAS,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC;AAAA,MACrC;AAAA,IACF,OAAO;AACL,aAAO,KAAK,SAAS,KAAK;AAC1B,UAAI,CAAC,MAAM;AACT,YAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAAA,UAC7B,CAAC,MAAM,EAAE,SAAS,KAAK,MAAM,6BAA6B,MAAM;AAAA,QAClE,GAAG;AACD,gBAAM;AAAA,QACR;AACA,YAAI,oBAAoB;AACtB;AAAA,QACF;AACA,eAAO,KAAK,SAAS,KAAK,IAAI,IAAI,KAAK;AAAA,MACzC;AAAA,IACF;AACA,SAAK,OAAO,YAAY,OAAO,UAAU,SAAS,kBAAkB;AAAA,EACtE;AAAA,EACA,iBAAiB;AACf,UAAM,YAAY,OAAO,KAAK,KAAK,QAAQ,EAAE,KAAK,UAAU;AAC5D,UAAM,UAAU,UAAU,IAAI,CAAC,MAAM;AACnC,YAAM,IAAI,KAAK,SAAS,CAAC;AACzB,cAAQ,OAAO,EAAE,aAAa,WAAW,IAAI,CAAC,KAAK,EAAE,QAAQ,KAAK,gBAAgB,IAAI,CAAC,IAAI,KAAK,CAAC,KAAK,KAAK,EAAE,eAAe;AAAA,IAC9H,CAAC;AACD,QAAI,OAAO,KAAK,UAAU,UAAU;AAClC,cAAQ,QAAQ,IAAI,KAAK,KAAK,EAAE;AAAA,IAClC;AACA,QAAI,QAAQ,WAAW,GAAG;AACxB,aAAO;AAAA,IACT;AACA,QAAI,QAAQ,WAAW,GAAG;AACxB,aAAO,QAAQ,CAAC;AAAA,IAClB;AACA,WAAO,QAAQ,QAAQ,KAAK,GAAG,IAAI;AAAA,EACrC;AACF;;;ACrGA,IAAI,OAAO,MAAM;AAAA,EACf,UAAU,EAAE,UAAU,EAAE;AAAA,EACxB,OAAO,IAAI,KAAK;AAAA,EAChB,OAAO,MAAM,OAAO,oBAAoB;AACtC,UAAM,aAAa,CAAC;AACpB,UAAM,SAAS,CAAC;AAChB,aAAS,IAAI,OAAO;AAClB,UAAI,WAAW;AACf,aAAO,KAAK,QAAQ,cAAc,CAAC,MAAM;AACvC,cAAM,OAAO,MAAM,CAAC;AACpB,eAAO,CAAC,IAAI,CAAC,MAAM,CAAC;AACpB;AACA,mBAAW;AACX,eAAO;AAAA,MACT,CAAC;AACD,UAAI,CAAC,UAAU;AACb;AAAA,MACF;AAAA,IACF;AACA,UAAM,SAAS,KAAK,MAAM,0BAA0B,KAAK,CAAC;AAC1D,aAAS,IAAI,OAAO,SAAS,GAAG,KAAK,GAAG,KAAK;AAC3C,YAAM,CAAC,IAAI,IAAI,OAAO,CAAC;AACvB,eAAS,IAAI,OAAO,SAAS,GAAG,KAAK,GAAG,KAAK;AAC3C,YAAI,OAAO,CAAC,EAAE,QAAQ,IAAI,MAAM,IAAI;AAClC,iBAAO,CAAC,IAAI,OAAO,CAAC,EAAE,QAAQ,MAAM,OAAO,CAAC,EAAE,CAAC,CAAC;AAChD;AAAA,QACF;AAAA,MACF;AAAA,IACF;AACA,SAAK,KAAK,OAAO,QAAQ,OAAO,YAAY,KAAK,SAAS,kBAAkB;AAC5E,WAAO;AAAA,EACT;AAAA,EACA,cAAc;AACZ,QAAI,SAAS,KAAK,KAAK,eAAe;AACtC,QAAI,WAAW,IAAI;AACjB,aAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAAA,IACtB;AACA,QAAI,eAAe;AACnB,UAAM,sBAAsB,CAAC;AAC7B,UAAM,sBAAsB,CAAC;AAC7B,aAAS,OAAO,QAAQ,yBAAyB,CAAC,GAAG,cAAc,eAAe;AAChF,UAAI,OAAO,iBAAiB,aAAa;AACvC,4BAAoB,EAAE,YAAY,IAAI,OAAO,YAAY;AACzD,eAAO;AAAA,MACT;AACA,UAAI,OAAO,eAAe,aAAa;AACrC,4BAAoB,OAAO,UAAU,CAAC,IAAI,EAAE;AAC5C,eAAO;AAAA,MACT;AACA,aAAO;AAAA,IACT,CAAC;AACD,WAAO,CAAC,IAAI,OAAO,IAAI,MAAM,EAAE,GAAG,qBAAqB,mBAAmB;AAAA,EAC5E;AACF;;;AC9CA,IAAI,aAAa,CAAC;AAClB,IAAI,cAAc,CAAC,MAAM,CAAC,GAAmB,uBAAO,OAAO,IAAI,CAAC;AAChE,IAAI,sBAAsC,uBAAO,OAAO,IAAI;AAC5D,SAAS,oBAAoB,MAAM;AACjC,SAAO,oBAAoB,IAAI,MAAM,IAAI;AAAA,IACvC,SAAS,MAAM,KAAK,IAAI,KAAK;AAAA,MAC3B;AAAA,MACA,CAAC,GAAG,aAAa,WAAW,KAAK,QAAQ,KAAK;AAAA,IAChD,CAAC;AAAA,EACH;AACF;AACA,SAAS,2BAA2B;AAClC,wBAAsC,uBAAO,OAAO,IAAI;AAC1D;AACA,SAAS,mCAAmC,QAAQ;AAClD,QAAM,OAAO,IAAI,KAAK;AACtB,QAAM,cAAc,CAAC;AACrB,MAAI,OAAO,WAAW,GAAG;AACvB,WAAO;AAAA,EACT;AACA,QAAM,2BAA2B,OAAO;AAAA,IACtC,CAAC,UAAU,CAAC,CAAC,SAAS,KAAK,MAAM,CAAC,CAAC,GAAG,GAAG,KAAK;AAAA,EAChD,EAAE;AAAA,IACA,CAAC,CAAC,WAAW,KAAK,GAAG,CAAC,WAAW,KAAK,MAAM,YAAY,IAAI,YAAY,KAAK,MAAM,SAAS,MAAM;AAAA,EACpG;AACA,QAAM,YAA4B,uBAAO,OAAO,IAAI;AACpD,WAAS,IAAI,GAAG,IAAI,IAAI,MAAM,yBAAyB,QAAQ,IAAI,KAAK,KAAK;AAC3E,UAAM,CAAC,oBAAoB,MAAM,QAAQ,IAAI,yBAAyB,CAAC;AACvE,QAAI,oBAAoB;AACtB,gBAAU,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,GAAmB,uBAAO,OAAO,IAAI,CAAC,CAAC,GAAG,UAAU;AAAA,IAChG,OAAO;AACL;AAAA,IACF;AACA,QAAI;AACJ,QAAI;AACF,mBAAa,KAAK,OAAO,MAAM,GAAG,kBAAkB;AAAA,IACtD,SAAS,GAAG;AACV,YAAM,MAAM,aAAa,IAAI,qBAAqB,IAAI,IAAI;AAAA,IAC5D;AACA,QAAI,oBAAoB;AACtB;AAAA,IACF;AACA,gBAAY,CAAC,IAAI,SAAS,IAAI,CAAC,CAAC,GAAG,UAAU,MAAM;AACjD,YAAM,gBAAgC,uBAAO,OAAO,IAAI;AACxD,oBAAc;AACd,aAAO,cAAc,GAAG,cAAc;AACpC,cAAM,CAAC,KAAKC,MAAK,IAAI,WAAW,UAAU;AAC1C,sBAAc,GAAG,IAAIA;AAAA,MACvB;AACA,aAAO,CAAC,GAAG,aAAa;AAAA,IAC1B,CAAC;AAAA,EACH;AACA,QAAM,CAAC,QAAQ,qBAAqB,mBAAmB,IAAI,KAAK,YAAY;AAC5E,WAAS,IAAI,GAAG,MAAM,YAAY,QAAQ,IAAI,KAAK,KAAK;AACtD,aAAS,IAAI,GAAG,OAAO,YAAY,CAAC,EAAE,QAAQ,IAAI,MAAM,KAAK;AAC3D,YAAM,MAAM,YAAY,CAAC,EAAE,CAAC,IAAI,CAAC;AACjC,UAAI,CAAC,KAAK;AACR;AAAA,MACF;AACA,YAAM,OAAO,OAAO,KAAK,GAAG;AAC5B,eAAS,IAAI,GAAG,OAAO,KAAK,QAAQ,IAAI,MAAM,KAAK;AACjD,YAAI,KAAK,CAAC,CAAC,IAAI,oBAAoB,IAAI,KAAK,CAAC,CAAC,CAAC;AAAA,MACjD;AAAA,IACF;AAAA,EACF;AACA,QAAM,aAAa,CAAC;AACpB,aAAW,KAAK,qBAAqB;AACnC,eAAW,CAAC,IAAI,YAAY,oBAAoB,CAAC,CAAC;AAAA,EACpD;AACA,SAAO,CAAC,QAAQ,YAAY,SAAS;AACvC;AACA,SAAS,eAAe,YAAY,MAAM;AACxC,MAAI,CAAC,YAAY;AACf,WAAO;AAAA,EACT;AACA,aAAW,KAAK,OAAO,KAAK,UAAU,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG;AAC3E,QAAI,oBAAoB,CAAC,EAAE,KAAK,IAAI,GAAG;AACrC,aAAO,CAAC,GAAG,WAAW,CAAC,CAAC;AAAA,IAC1B;AAAA,EACF;AACA,SAAO;AACT;AACA,IAAI,eAAe,MAAM;AAAA,EACvB,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA,cAAc;AACZ,SAAK,aAAa,EAAE,CAAC,eAAe,GAAmB,uBAAO,OAAO,IAAI,EAAE;AAC3E,SAAK,SAAS,EAAE,CAAC,eAAe,GAAmB,uBAAO,OAAO,IAAI,EAAE;AAAA,EACzE;AAAA,EACA,IAAI,QAAQ,MAAM,SAAS;AACzB,UAAM,EAAE,YAAY,OAAO,IAAI;AAC/B,QAAI,CAAC,cAAc,CAAC,QAAQ;AAC1B,YAAM,IAAI,MAAM,gCAAgC;AAAA,IAClD;AACA,QAAI,CAAC,WAAW,MAAM,GAAG;AACvB;AACA,OAAC,YAAY,MAAM,EAAE,QAAQ,CAAC,eAAe;AAC3C,mBAAW,MAAM,IAAoB,uBAAO,OAAO,IAAI;AACvD,eAAO,KAAK,WAAW,eAAe,CAAC,EAAE,QAAQ,CAAC,MAAM;AACtD,qBAAW,MAAM,EAAE,CAAC,IAAI,CAAC,GAAG,WAAW,eAAe,EAAE,CAAC,CAAC;AAAA,QAC5D,CAAC;AAAA,MACH,CAAC;AAAA,IACH;AACA,QAAI,SAAS,MAAM;AACjB,aAAO;AAAA,IACT;AACA,UAAM,cAAc,KAAK,MAAM,MAAM,KAAK,CAAC,GAAG;AAC9C,QAAI,MAAM,KAAK,IAAI,GAAG;AACpB,YAAM,KAAK,oBAAoB,IAAI;AACnC,UAAI,WAAW,iBAAiB;AAC9B,eAAO,KAAK,UAAU,EAAE,QAAQ,CAAC,MAAM;AACrC,qBAAW,CAAC,EAAE,IAAI,MAAM,eAAe,WAAW,CAAC,GAAG,IAAI,KAAK,eAAe,WAAW,eAAe,GAAG,IAAI,KAAK,CAAC;AAAA,QACvH,CAAC;AAAA,MACH,OAAO;AACL,mBAAW,MAAM,EAAE,IAAI,MAAM,eAAe,WAAW,MAAM,GAAG,IAAI,KAAK,eAAe,WAAW,eAAe,GAAG,IAAI,KAAK,CAAC;AAAA,MACjI;AACA,aAAO,KAAK,UAAU,EAAE,QAAQ,CAAC,MAAM;AACrC,YAAI,WAAW,mBAAmB,WAAW,GAAG;AAC9C,iBAAO,KAAK,WAAW,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM;AACxC,eAAG,KAAK,CAAC,KAAK,WAAW,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,SAAS,UAAU,CAAC;AAAA,UAC3D,CAAC;AAAA,QACH;AAAA,MACF,CAAC;AACD,aAAO,KAAK,MAAM,EAAE,QAAQ,CAAC,MAAM;AACjC,YAAI,WAAW,mBAAmB,WAAW,GAAG;AAC9C,iBAAO,KAAK,OAAO,CAAC,CAAC,EAAE;AAAA,YACrB,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,OAAO,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,SAAS,UAAU,CAAC;AAAA,UAC9D;AAAA,QACF;AAAA,MACF,CAAC;AACD;AAAA,IACF;AACA,UAAM,QAAQ,uBAAuB,IAAI,KAAK,CAAC,IAAI;AACnD,aAAS,IAAI,GAAG,MAAM,MAAM,QAAQ,IAAI,KAAK,KAAK;AAChD,YAAM,QAAQ,MAAM,CAAC;AACrB,aAAO,KAAK,MAAM,EAAE,QAAQ,CAAC,MAAM;AACjC,YAAI,WAAW,mBAAmB,WAAW,GAAG;AAC9C,iBAAO,CAAC,EAAE,KAAK,MAAM;AAAA,YACnB,GAAG,eAAe,WAAW,CAAC,GAAG,KAAK,KAAK,eAAe,WAAW,eAAe,GAAG,KAAK,KAAK,CAAC;AAAA,UACpG;AACA,iBAAO,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,SAAS,aAAa,MAAM,IAAI,CAAC,CAAC;AAAA,QAC3D;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAAA,EACA,MAAM,QAAQ,MAAM;AAClB,6BAAyB;AACzB,UAAM,WAAW,KAAK,iBAAiB;AACvC,SAAK,QAAQ,CAAC,SAAS,UAAU;AAC/B,YAAM,UAAU,SAAS,OAAO,KAAK,SAAS,eAAe;AAC7D,YAAM,cAAc,QAAQ,CAAC,EAAE,KAAK;AACpC,UAAI,aAAa;AACf,eAAO;AAAA,MACT;AACA,YAAM,QAAQ,MAAM,MAAM,QAAQ,CAAC,CAAC;AACpC,UAAI,CAAC,OAAO;AACV,eAAO,CAAC,CAAC,GAAG,UAAU;AAAA,MACxB;AACA,YAAM,QAAQ,MAAM,QAAQ,IAAI,CAAC;AACjC,aAAO,CAAC,QAAQ,CAAC,EAAE,KAAK,GAAG,KAAK;AAAA,IAClC;AACA,WAAO,KAAK,MAAM,QAAQ,IAAI;AAAA,EAChC;AAAA,EACA,mBAAmB;AACjB,UAAM,WAA2B,uBAAO,OAAO,IAAI;AACnD,KAAC,GAAG,OAAO,KAAK,KAAK,MAAM,GAAG,GAAG,OAAO,KAAK,KAAK,UAAU,CAAC,EAAE,QAAQ,CAAC,WAAW;AACjF,eAAS,MAAM,MAAM,KAAK,aAAa,MAAM;AAAA,IAC/C,CAAC;AACD,SAAK,aAAa,KAAK,SAAS;AAChC,WAAO;AAAA,EACT;AAAA,EACA,aAAa,QAAQ;AACnB,UAAM,SAAS,CAAC;AAChB,QAAI,cAAc,WAAW;AAC7B,KAAC,KAAK,YAAY,KAAK,MAAM,EAAE,QAAQ,CAAC,MAAM;AAC5C,YAAM,WAAW,EAAE,MAAM,IAAI,OAAO,KAAK,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC;AAC9F,UAAI,SAAS,WAAW,GAAG;AACzB,wBAAgB;AAChB,eAAO,KAAK,GAAG,QAAQ;AAAA,MACzB,WAAW,WAAW,iBAAiB;AACrC,eAAO;AAAA,UACL,GAAG,OAAO,KAAK,EAAE,eAAe,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,eAAe,EAAE,IAAI,CAAC,CAAC;AAAA,QACnF;AAAA,MACF;AAAA,IACF,CAAC;AACD,QAAI,CAAC,aAAa;AAChB,aAAO;AAAA,IACT,OAAO;AACL,aAAO,mCAAmC,MAAM;AAAA,IAClD;AAAA,EACF;AACF;;;AN/IO,SAAS,mBACd,SACuB;AACvB,QAAM,UAAU,QAAQ,aACpB,IAAI,aAAiD,IACrD,IAAI,aAAiD;AAEzD,QAAM,sBAAsB,CAAC,QAAqB,aAAuB;AACvE,eAAW,OAAO,QAAQ;AACxB,YAAM,cAAc,CAAC,GAAG,UAAU,GAAG;AACrC,YAAM,OAAO,OAAO,GAAG;AAEvB,UAAI,YAAY,IAAI,GAAG;AACrB,YAAI,KAAK,KAAK,SAAS,MAAM,MAAM;AACjC,gBAAM,SAAS,KAAK,KAAK,SAAS,MAAM,UAAU;AAClD,gBAAM,OAAO,wBAAwB,KAAK,KAAK,SAAS,MAAM,IAAI;AAElE,kBAAQ,IAAI,QAAQ,MAAM,CAAC,aAAa,IAAI,CAAC;AAAA,QAC/C;AAAA,MACF,OACK;AACH,4BAAoB,MAAM,WAAW;AAAA,MACvC;AAAA,IACF;AAAA,EACF;AAEA,sBAAoB,QAAQ,QAAQ,CAAC,CAAC;AAEtC,SAAO,OAAO,mBAAmB;AAC/B,UAAM,oBACF,eAAe,QAAQ,QAAQ,IAAI,WAAW,MAAM;AACxD,UAAM,SAAS,eAAe,QAAQ,QAAQ,IAAI,QAAQ,KAAK;AAE/D,UAAM,aAAa,oBACf,IAAI,eAAe,IACnB,IAAI,kBAAkB,EAAE,OAAO,CAAC;AAEpC,UAAM,UAAU,MAAM,MAAM,eAAe,OAAO;AAElD,UAAM,UAAU,YAAY;AAC1B,YAAM,MAAM,IAAI,IAAI,eAAe,QAAQ,GAAG;AAC9C,YAAM,WAAW,IAAI,KAAK,IAAI,SAAS,QAAQ,eAAe,UAAU,IAAI,EAAE,GAAG,GAAG,CAAC;AAErF,UAAI;AACJ,UAAI;AACJ,UAAI;AAEJ,UAAI,mBAAmB;AACrB,eAAO,KAAK,UAAU,GAAG,EAAE,MAAM,GAAG,EAAE,IAAI,kBAAkB;AAC5D,cAAM,MAAM,IAAI,QAAQ,QAAQ,IAAI;AAEpC,YAAI,YAAY,GAAG,GAAG;AACpB,sBAAY;AAAA,QACd;AAAA,MACF,OACK;AACH,cAAM,eACA,eAAe,QAAQ,WAAW,SAChC,IAAI,aAAa,IAAI,QAAQ,GAAG,YAAY,IAC5C;AACR,cAAM,SAAS,gBAAgB,eAAe,QAAQ;AAEtD,cAAM,CAAC,SAAS,OAAO,IAAI,QAAQ,MAAM,QAAQ,QAAQ;AAEzD,cAAM,CAAC,KAAK,IAAI,QAAQ,KAAK,CAAC,GAAG,MAAM;AACrC,iBAAO,OAAO,KAAK,EAAE,CAAC,CAAC,EAAE,SAAS,OAAO,KAAK,EAAE,CAAC,CAAC,EAAE;AAAA,QACtD,CAAC;AAED,YAAI,OAAO;AACT,iBAAO,MAAM,CAAC,EAAE,CAAC;AACjB,sBAAY,MAAM,CAAC,EAAE,CAAC;AAEtB,cAAI,SAAS;AACX,qBAAS;AAAA,cACN,MAAc,CAAC;AAAA,cAChB,OAAK,QAAQ,CAAW;AAAA,YAC1B;AAAA,UACF,OACK;AACH,qBAAS,MAAM,CAAC;AAAA,UAClB;AAAA,QACF;AAEA,YAAI,CAAC,QAAQ,CAAC,WAAW;AACvB,iBAAO,KAAK,UAAU,GAAG,EAAE,MAAM,GAAG,EAAE,IAAI,kBAAkB;AAE5D,gBAAM,MAAM,IAAI,QAAQ,QAAQ,IAAI;AAEpC,cAAI,YAAY,GAAG,GAAG;AACpB,wBAAY;AAAA,UACd;AAAA,QACF;AAAA,MACF;AAEA,UAAI,CAAC,QAAQ,CAAC,WAAW;AACvB,cAAM,IAAI,UAAU,EAAE,MAAM,aAAa,SAAS,YAAY,CAAC;AAAA,MACjE;AAEA,YAAM,eAAe,oBACjB,IAAI,iBAAiB,IACrB,IAAI,oBAAoB;AAAA,QACxB,QAAQ,UAAU,KAAK,SAAS,MAAM;AAAA,MACxC,CAAC;AAEH,YAAM,SAAS,OAAO,YAAY;AAChC,YAAI;AACF,iBAAO,MAAM,aAAa,YAAY,eAAe,OAAO;AAAA,QAC9D,SACO,GAAG;AACR,gBAAM,IAAI,UAAU;AAAA,YAClB,MAAM;AAAA,YACN,SACI;AAAA,YACJ,OAAO;AAAA,UACT,CAAC;AAAA,QACH;AAAA,MACF,GAAG;AAEH,YAAM,SAAS,MAAM;AACnB,YAAI,CAAC,UAAU,OAAO,KAAK,MAAM,EAAE,WAAW,GAAG;AAC/C,iBAAO;AAAA,QACT;AAEA,cAAM,gBAAgB,UAAU,KAAK,SAAS,MAAM,cAC/C;AAAA,UACC,UAAU,KAAK,SAAS,MAAM;AAAA,UAC9B,EAAE,GAAG,OAAO;AAAA,UACZ;AAAA,YACE,iBAAiB;AAAA,UACnB;AAAA,QACF,IACA;AAEJ,YAAI,CAAC,cAAc,MAAM,GAAG;AAC1B,iBAAO;AAAA,QACT;AAEA,eAAO;AAAA,UACL,GAAG;AAAA,UACH,GAAG;AAAA,QACL;AAAA,MACF,GAAG;AAEH,YAAM,SAAS,sBAAsB;AAAA,QACnC;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAED,YAAM,SAAS,MAAM,OAAO,KAAK;AAEjC,YAAM,EAAE,MAAM,QAAQ,IAAI,WAAW,UAAU,MAAM;AAErD,aAAO,IAAI,SAAS,MAAM;AAAA,QACxB,QAAQ;AAAA,QACR;AAAA,MACF,CAAC;AAAA,IACH;AAEA,QAAI;AACF,aAAO,MAAM,QAAQ,QAAQ,SAAgB;AAAA,QAC3C,MAAM;AAAA,QACN,UAAU,cAAY;AAAA,MACxB,CAAC,KAAK,MAAM,QAAQ;AAAA,IACtB,SACO,GAAG;AACR,YAAM,QAAQ,YAAY,CAAC;AAE3B,UAAI;AACF,cAAM,EAAE,MAAM,QAAQ,IAAI,WAAW,UAAU,MAAM,OAAO,CAAC;AAE7D,eAAO,IAAI,SAAS,MAAM;AAAA,UACxB,QAAQ,MAAM;AAAA,UACd;AAAA,QACF,CAAC;AAAA,MACH,SACOC,IAAG;AACR,cAAMC,SAAQ,YAAYD,EAAC;AAG3B,cAAM,EAAE,MAAM,QAAQ,IAAI,IAAI,kBAAkB,EAAE;AAAA,UAChDC,OAAM,OAAO;AAAA,QACf;AAEA,eAAO,IAAI,SAAS,MAAM;AAAA,UACxB,QAAQA,OAAM;AAAA,UACd;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,wBAAwB,MAAwB;AACvD,SAAO,oBAAoB,IAAI,EAAE,QAAQ,gBAAgB,KAAK;AAChE;AA4BA,SAAS,YAAY,GAAiC;AACpD,SAAO,aAAa,YAChB,IACA,IAAI,UAAU;AAAA,IACd,MAAM;AAAA,IACN,SAAS;AAAA,IACT,OAAO;AAAA,EACT,CAAC;AACL;","names":["value","value","e","error"]}
|
package/dist/index.js
CHANGED
@@ -5,7 +5,7 @@ import {
|
|
5
5
|
decorateProcedure,
|
6
6
|
isProcedure,
|
7
7
|
mergeContext
|
8
|
-
} from "./chunk-
|
8
|
+
} from "./chunk-YYGRQD4L.js";
|
9
9
|
|
10
10
|
// src/builder.ts
|
11
11
|
import {
|
@@ -30,12 +30,12 @@ var ProcedureImplementer = class _ProcedureImplementer {
|
|
30
30
|
middlewares: [...this.zz$pi.middlewares ?? [], middleware_]
|
31
31
|
});
|
32
32
|
}
|
33
|
-
|
33
|
+
func(func) {
|
34
34
|
return decorateProcedure({
|
35
35
|
zz$p: {
|
36
36
|
middlewares: this.zz$pi.middlewares,
|
37
37
|
contract: this.zz$pi.contract,
|
38
|
-
|
38
|
+
func
|
39
39
|
}
|
40
40
|
});
|
41
41
|
}
|
@@ -90,12 +90,12 @@ var ProcedureBuilder = class _ProcedureBuilder {
|
|
90
90
|
/**
|
91
91
|
* Convert to Procedure
|
92
92
|
*/
|
93
|
-
|
93
|
+
func(func) {
|
94
94
|
return decorateProcedure({
|
95
95
|
zz$p: {
|
96
96
|
middlewares: this.zz$pb.middlewares,
|
97
97
|
contract: this.zz$pb.contract,
|
98
|
-
|
98
|
+
func
|
99
99
|
}
|
100
100
|
});
|
101
101
|
}
|
@@ -274,7 +274,7 @@ var Builder = class _Builder {
|
|
274
274
|
/**
|
275
275
|
* Convert to Procedure
|
276
276
|
*/
|
277
|
-
|
277
|
+
func(func) {
|
278
278
|
return decorateProcedure({
|
279
279
|
zz$p: {
|
280
280
|
middlewares: this.zz$b.middlewares,
|
@@ -282,7 +282,7 @@ var Builder = class _Builder {
|
|
282
282
|
InputSchema: void 0,
|
283
283
|
OutputSchema: void 0
|
284
284
|
}),
|
285
|
-
|
285
|
+
func
|
286
286
|
}
|
287
287
|
});
|
288
288
|
}
|
@@ -350,8 +350,6 @@ function toContractRouter(router) {
|
|
350
350
|
|
351
351
|
// src/router-caller.ts
|
352
352
|
function createRouterCaller(options) {
|
353
|
-
const internal = options.internal ?? true;
|
354
|
-
const validate = options.validate ?? true;
|
355
353
|
const caller = {};
|
356
354
|
for (const key in options.router) {
|
357
355
|
const path = [...options.basePath ?? [], key];
|
@@ -360,17 +358,13 @@ function createRouterCaller(options) {
|
|
360
358
|
caller[key] = createProcedureCaller({
|
361
359
|
procedure: item,
|
362
360
|
context: options.context,
|
363
|
-
path
|
364
|
-
internal,
|
365
|
-
validate
|
361
|
+
path
|
366
362
|
});
|
367
363
|
} else {
|
368
364
|
caller[key] = createRouterCaller({
|
369
365
|
router: item,
|
370
366
|
context: options.context,
|
371
|
-
basePath: path
|
372
|
-
internal,
|
373
|
-
validate
|
367
|
+
basePath: path
|
374
368
|
});
|
375
369
|
}
|
376
370
|
}
|