@jlnstack/procedure 0.0.2 → 0.0.3
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/_virtual/{_@oxc-project_runtime@0.103.0 → _@oxc-project_runtime@0.106.0}/helpers/defineProperty.cjs +1 -1
- package/dist/_virtual/{_@oxc-project_runtime@0.103.0 → _@oxc-project_runtime@0.106.0}/helpers/defineProperty.mjs +1 -1
- package/dist/_virtual/{_@oxc-project_runtime@0.103.0 → _@oxc-project_runtime@0.106.0}/helpers/objectSpread2.cjs +1 -1
- package/dist/_virtual/{_@oxc-project_runtime@0.103.0 → _@oxc-project_runtime@0.106.0}/helpers/objectSpread2.mjs +1 -1
- package/dist/_virtual/{_@oxc-project_runtime@0.103.0 → _@oxc-project_runtime@0.106.0}/helpers/toPrimitive.cjs +1 -1
- package/dist/_virtual/{_@oxc-project_runtime@0.103.0 → _@oxc-project_runtime@0.106.0}/helpers/toPrimitive.mjs +1 -1
- package/dist/_virtual/{_@oxc-project_runtime@0.103.0 → _@oxc-project_runtime@0.106.0}/helpers/toPropertyKey.cjs +1 -1
- package/dist/_virtual/{_@oxc-project_runtime@0.103.0 → _@oxc-project_runtime@0.106.0}/helpers/toPropertyKey.mjs +1 -1
- package/dist/_virtual/{_@oxc-project_runtime@0.103.0 → _@oxc-project_runtime@0.106.0}/helpers/typeof.cjs +1 -1
- package/dist/_virtual/{_@oxc-project_runtime@0.103.0 → _@oxc-project_runtime@0.106.0}/helpers/typeof.mjs +1 -1
- package/dist/core-internal.cjs +1 -1
- package/dist/core-internal.mjs +1 -1
- package/dist/core-internal.mjs.map +1 -1
- package/dist/next.cjs +1 -1
- package/dist/next.mjs +1 -1
- package/dist/next.mjs.map +1 -1
- package/dist/react.cjs +1 -1
- package/dist/react.mjs +1 -1
- package/dist/react.mjs.map +1 -1
- package/package.json +6 -2
- package/CHANGELOG.md +0 -19
- package/src/core-internal.ts +0 -206
- package/src/core.ts +0 -29
- package/src/index.ts +0 -1
- package/src/next.ts +0 -161
- package/src/react.ts +0 -66
- package/src/types.ts +0 -4
- package/test/core.test-d.ts +0 -89
- package/test/core.test.ts +0 -57
- package/test/next.test-d.ts +0 -177
- package/test/next.test.ts +0 -230
- package/tsconfig.build.json +0 -7
- package/tsconfig.json +0 -5
- package/tsdown.config.ts +0 -23
- package/vitest.config.ts +0 -10
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
const require_toPropertyKey = require('./toPropertyKey.cjs');
|
|
2
2
|
|
|
3
|
-
//#region \0@oxc-project+runtime@0.
|
|
3
|
+
//#region \0@oxc-project+runtime@0.106.0/helpers/defineProperty.js
|
|
4
4
|
function _defineProperty(e, r, t) {
|
|
5
5
|
return (r = require_toPropertyKey.toPropertyKey(r)) in e ? Object.defineProperty(e, r, {
|
|
6
6
|
value: t,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { toPropertyKey } from "./toPropertyKey.mjs";
|
|
2
2
|
|
|
3
|
-
//#region \0@oxc-project+runtime@0.
|
|
3
|
+
//#region \0@oxc-project+runtime@0.106.0/helpers/defineProperty.js
|
|
4
4
|
function _defineProperty(e, r, t) {
|
|
5
5
|
return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {
|
|
6
6
|
value: t,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
const require_defineProperty = require('./defineProperty.cjs');
|
|
2
2
|
|
|
3
|
-
//#region \0@oxc-project+runtime@0.
|
|
3
|
+
//#region \0@oxc-project+runtime@0.106.0/helpers/objectSpread2.js
|
|
4
4
|
function ownKeys(e, r) {
|
|
5
5
|
var t = Object.keys(e);
|
|
6
6
|
if (Object.getOwnPropertySymbols) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { _defineProperty } from "./defineProperty.mjs";
|
|
2
2
|
|
|
3
|
-
//#region \0@oxc-project+runtime@0.
|
|
3
|
+
//#region \0@oxc-project+runtime@0.106.0/helpers/objectSpread2.js
|
|
4
4
|
function ownKeys(e, r) {
|
|
5
5
|
var t = Object.keys(e);
|
|
6
6
|
if (Object.getOwnPropertySymbols) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
const require_typeof = require('./typeof.cjs');
|
|
2
2
|
|
|
3
|
-
//#region \0@oxc-project+runtime@0.
|
|
3
|
+
//#region \0@oxc-project+runtime@0.106.0/helpers/toPrimitive.js
|
|
4
4
|
function toPrimitive(t, r) {
|
|
5
5
|
if ("object" != require_typeof._typeof(t) || !t) return t;
|
|
6
6
|
var e = t[Symbol.toPrimitive];
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { _typeof } from "./typeof.mjs";
|
|
2
2
|
|
|
3
|
-
//#region \0@oxc-project+runtime@0.
|
|
3
|
+
//#region \0@oxc-project+runtime@0.106.0/helpers/toPrimitive.js
|
|
4
4
|
function toPrimitive(t, r) {
|
|
5
5
|
if ("object" != _typeof(t) || !t) return t;
|
|
6
6
|
var e = t[Symbol.toPrimitive];
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
const require_typeof = require('./typeof.cjs');
|
|
2
2
|
const require_toPrimitive = require('./toPrimitive.cjs');
|
|
3
3
|
|
|
4
|
-
//#region \0@oxc-project+runtime@0.
|
|
4
|
+
//#region \0@oxc-project+runtime@0.106.0/helpers/toPropertyKey.js
|
|
5
5
|
function toPropertyKey(t) {
|
|
6
6
|
var i = require_toPrimitive.toPrimitive(t, "string");
|
|
7
7
|
return "symbol" == require_typeof._typeof(i) ? i : i + "";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { _typeof } from "./typeof.mjs";
|
|
2
2
|
import { toPrimitive } from "./toPrimitive.mjs";
|
|
3
3
|
|
|
4
|
-
//#region \0@oxc-project+runtime@0.
|
|
4
|
+
//#region \0@oxc-project+runtime@0.106.0/helpers/toPropertyKey.js
|
|
5
5
|
function toPropertyKey(t) {
|
|
6
6
|
var i = toPrimitive(t, "string");
|
|
7
7
|
return "symbol" == _typeof(i) ? i : i + "";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
//#region \0@oxc-project+runtime@0.
|
|
2
|
+
//#region \0@oxc-project+runtime@0.106.0/helpers/typeof.js
|
|
3
3
|
function _typeof(o) {
|
|
4
4
|
"@babel/helpers - typeof";
|
|
5
5
|
return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o$1) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
//#region \0@oxc-project+runtime@0.
|
|
1
|
+
//#region \0@oxc-project+runtime@0.106.0/helpers/typeof.js
|
|
2
2
|
function _typeof(o) {
|
|
3
3
|
"@babel/helpers - typeof";
|
|
4
4
|
return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o$1) {
|
package/dist/core-internal.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const require_objectSpread2 = require('./_virtual/_@oxc-project_runtime@0.
|
|
1
|
+
const require_objectSpread2 = require('./_virtual/_@oxc-project_runtime@0.106.0/helpers/objectSpread2.cjs');
|
|
2
2
|
|
|
3
3
|
//#region src/core-internal.ts
|
|
4
4
|
const createProcedureBuilder = (middlewares, factory) => {
|
package/dist/core-internal.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { _objectSpread2 } from "./_virtual/_@oxc-project_runtime@0.
|
|
1
|
+
import { _objectSpread2 } from "./_virtual/_@oxc-project_runtime@0.106.0/helpers/objectSpread2.mjs";
|
|
2
2
|
|
|
3
3
|
//#region src/core-internal.ts
|
|
4
4
|
const createProcedureBuilder = (middlewares, factory) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core-internal.mjs","names":["
|
|
1
|
+
{"version":3,"file":"core-internal.mjs","names":["result"],"sources":["../src/core-internal.ts"],"sourcesContent":["import type { StandardSchemaV1 } from \"@standard-schema/spec\";\nimport type { Awaitable, Prettify } from \"./types\";\n\nexport interface MiddlewareResult<TCtx> {\n result: unknown;\n ctx: TCtx;\n}\n\nexport type Middleware<TInput, TContext, TResult> = (args: {\n input: TInput;\n ctx: TContext;\n next: <T>(opts: { ctx: T }) => Awaitable<MiddlewareResult<T>>;\n}) => Awaitable<MiddlewareResult<TResult>>;\n\nexport interface InternalMiddleware {\n id?: string;\n run: Middleware<any, any, any>;\n}\n\nexport type InferMiddlewareOutput<T> = T extends Middleware<any, any, infer O>\n ? O\n : never;\n\nexport type InferMiddlewareArrayOutput<\n T extends readonly Middleware<any, any, any>[],\n> = T extends readonly [infer First, ...infer Rest]\n ? First extends Middleware<any, any, infer O>\n ? Rest extends readonly Middleware<any, any, any>[]\n ? Prettify<O & InferMiddlewareArrayOutput<Rest>>\n : O\n : never\n : {};\n\nexport type InferMiddlewareArrayInput<\n T extends readonly Middleware<any, any, any>[],\n> = T extends readonly [infer First, ...infer Rest]\n ? First extends Middleware<infer I, any, any>\n ? Rest extends readonly Middleware<any, any, any>[]\n ? MergeInput<I, InferMiddlewareArrayInput<Rest>>\n : I\n : never\n : Record<string, never>;\n\nexport type MergeInput<A, B> = Prettify<\n (A extends Record<string, never> | undefined ? {} : A) &\n (B extends Record<string, never> | undefined ? {} : B)\n>;\n\nexport interface ProcedureBuilder<TContext, TInput = Record<string, never>> {\n use<TInputExt, TMiddleware extends Middleware<TInputExt, TContext, any>>(\n middleware: TMiddleware,\n ): ProcedureBuilder<\n InferMiddlewareOutput<TMiddleware>,\n MergeInput<TInput, TInputExt>\n >;\n\n use<TMiddlewares extends readonly Middleware<any, TContext, any>[]>(\n middlewares: [...TMiddlewares],\n ): ProcedureBuilder<\n InferMiddlewareArrayOutput<TMiddlewares>,\n MergeInput<TInput, InferMiddlewareArrayInput<TMiddlewares>>\n >;\n\n input<TSchema extends StandardSchemaV1>(\n schema: TSchema,\n ): ProcedureBuilder<\n TContext,\n MergeInput<TInput, StandardSchemaV1.InferInput<TSchema>>\n >;\n\n run: Run<TContext, TInput>;\n}\n\ntype IsPartialObject<T> = T extends object\n ? {} extends T\n ? true\n : false\n : false;\n\nexport type Run<\n TContext,\n TInput = Record<string, never>,\n TResultConstraint = unknown,\n> = <TResult extends TResultConstraint>(\n fn: (args: { input: TInput; ctx: TContext }) => Awaitable<TResult>,\n) => TInput extends Record<string, never> | undefined\n ? () => Promise<TResult>\n : IsPartialObject<TInput> extends true\n ? (input?: TInput) => Promise<TResult>\n : (input: TInput) => Promise<TResult>;\n\nexport type ProcedureBuilderFactory = (\n mws: InternalMiddleware[],\n factory?: ProcedureBuilderFactory,\n) => ProcedureBuilder<any, any>;\n\nexport const createProcedureBuilder = <\n TContext,\n TInput = Record<string, never>,\n>(\n middlewares: InternalMiddleware[],\n factory?: ProcedureBuilderFactory,\n): ProcedureBuilder<TContext, TInput> => {\n const create = factory ?? createProcedureBuilder;\n\n const builder: ProcedureBuilder<TContext, TInput> = {\n use: (middleware: any) => {\n if (Array.isArray(middleware)) {\n const combined: Middleware<any, any, any> = async ({\n input,\n ctx,\n next,\n }) => {\n const results = await Promise.all(\n middleware.map((mw) =>\n mw({\n input,\n ctx,\n next: <T>(opts: { ctx: T }) =>\n Promise.resolve({ result: undefined, ctx: opts.ctx }),\n }),\n ),\n );\n const mergedCtx = results.reduce(\n // biome-ignore lint/performance/noAccumulatingSpread: idc\n (acc, r) => ({ ...acc, ...r.ctx }),\n ctx,\n );\n return next({ ctx: mergedCtx });\n };\n return create([...middlewares, { run: combined }], factory);\n }\n\n return create([...middlewares, { run: middleware }], factory);\n },\n\n input(schema: any) {\n return create([createInputMiddleware(schema), ...middlewares], factory);\n },\n\n run(fn: any) {\n return (async (input?: TInput) => {\n const executeProcedure = async (\n index: number,\n ctx: unknown,\n ): Promise<MiddlewareResult<any>> => {\n if (index >= middlewares.length) {\n return Promise.resolve(fn({ ctx, input })).then((result) => ({\n result,\n ctx,\n }));\n }\n\n const mw = middlewares[index];\n if (!mw) {\n return Promise.resolve(fn({ ctx, input })).then((result) => ({\n result,\n ctx,\n }));\n }\n\n return Promise.resolve(\n mw.run({\n input,\n ctx,\n next: <T>(opts: { ctx: T }) => {\n return executeProcedure(index + 1, {\n ...(ctx ?? {}),\n ...opts.ctx,\n }).then((result) => ({\n ...result,\n ctx: opts.ctx,\n })) as Promise<MiddlewareResult<T>>;\n },\n }),\n );\n };\n\n const { result } = await executeProcedure(0, undefined);\n return result;\n }) as any;\n },\n };\n\n return builder;\n};\n\nfunction createInputMiddleware<TSchema extends StandardSchemaV1>(\n schema: TSchema,\n) {\n return createMiddleware(\"INPUT_VALIDATION\", async (opts) => {\n const result = await schema[\"~standard\"].validate(opts.input);\n if (result.issues) {\n throw new Error(\"Input validation failed\");\n }\n return opts.next({ ctx: opts.ctx });\n });\n}\n\nexport const createMiddleware = <TInput, TContext>(\n id: string,\n fn: Middleware<TInput, TContext, any>,\n): InternalMiddleware => ({\n id,\n run: fn,\n});\n"],"mappings":";;;AAgGA,MAAa,0BAIX,aACA,YACuC;CACvC,MAAM,SAAS,mDAAW;AAiF1B,QA/EoD;EAClD,MAAM,eAAoB;AACxB,OAAI,MAAM,QAAQ,WAAW,EAAE;IAC7B,MAAM,WAAsC,OAAO,EACjD,OACA,KACA,WACI;AAgBJ,YAAO,KAAK,EAAE,MAfE,MAAM,QAAQ,IAC5B,WAAW,KAAK,OACd,GAAG;MACD;MACA;MACA,OAAU,SACR,QAAQ,QAAQ;OAAE,QAAQ;OAAW,KAAK,KAAK;OAAK,CAAC;MACxD,CAAC,CACH,CACF,EACyB,QAEvB,KAAK,wCAAY,MAAQ,EAAE,MAC5B,IACD,EAC6B,CAAC;;AAEjC,WAAO,OAAO,CAAC,GAAG,aAAa,EAAE,KAAK,UAAU,CAAC,EAAE,QAAQ;;AAG7D,UAAO,OAAO,CAAC,GAAG,aAAa,EAAE,KAAK,YAAY,CAAC,EAAE,QAAQ;;EAG/D,MAAM,QAAa;AACjB,UAAO,OAAO,CAAC,sBAAsB,OAAO,EAAE,GAAG,YAAY,EAAE,QAAQ;;EAGzE,IAAI,IAAS;AACX,WAAQ,OAAO,UAAmB;IAChC,MAAM,mBAAmB,OACvB,OACA,QACmC;AACnC,SAAI,SAAS,YAAY,OACvB,QAAO,QAAQ,QAAQ,GAAG;MAAE;MAAK;MAAO,CAAC,CAAC,CAAC,MAAM,cAAY;MAC3D;MACA;MACD,EAAE;KAGL,MAAM,KAAK,YAAY;AACvB,SAAI,CAAC,GACH,QAAO,QAAQ,QAAQ,GAAG;MAAE;MAAK;MAAO,CAAC,CAAC,CAAC,MAAM,cAAY;MAC3D;MACA;MACD,EAAE;AAGL,YAAO,QAAQ,QACb,GAAG,IAAI;MACL;MACA;MACA,OAAU,SAAqB;AAC7B,cAAO,iBAAiB,QAAQ,qCAC1B,uCAAO,EAAE,GACV,KAAK,KACR,CAAC,MAAM,+CACJA,iBACH,KAAK,KAAK,OACT;;MAEN,CAAC,CACH;;IAGH,MAAM,EAAE,WAAW,MAAM,iBAAiB,GAAG,OAAU;AACvD,WAAO;;;EAGZ;;AAKH,SAAS,sBACP,QACA;AACA,QAAO,iBAAiB,oBAAoB,OAAO,SAAS;AAE1D,OADe,MAAM,OAAO,aAAa,SAAS,KAAK,MAAM,EAClD,OACT,OAAM,IAAI,MAAM,0BAA0B;AAE5C,SAAO,KAAK,KAAK,EAAE,KAAK,KAAK,KAAK,CAAC;GACnC;;AAGJ,MAAa,oBACX,IACA,QACwB;CACxB;CACA,KAAK;CACN"}
|
package/dist/next.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const require_objectSpread2 = require('./_virtual/_@oxc-project_runtime@0.
|
|
1
|
+
const require_objectSpread2 = require('./_virtual/_@oxc-project_runtime@0.106.0/helpers/objectSpread2.cjs');
|
|
2
2
|
const require_core_internal = require('./core-internal.cjs');
|
|
3
3
|
const require_core = require('./core.cjs');
|
|
4
4
|
|
package/dist/next.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { _objectSpread2 } from "./_virtual/_@oxc-project_runtime@0.
|
|
1
|
+
import { _objectSpread2 } from "./_virtual/_@oxc-project_runtime@0.106.0/helpers/objectSpread2.mjs";
|
|
2
2
|
import { createMiddleware, createProcedureBuilder } from "./core-internal.mjs";
|
|
3
3
|
import { init as init$1 } from "./core.mjs";
|
|
4
4
|
|
package/dist/next.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"next.mjs","names":["
|
|
1
|
+
{"version":3,"file":"next.mjs","names":["coreInit"],"sources":["../src/next.ts"],"sourcesContent":["import type { StandardSchemaV1 } from \"@standard-schema/spec\";\nimport type { Metadata } from \"next\";\nimport type { ReactNode } from \"react\";\nimport { init as coreInit, type InitOptions } from \"./core\";\nimport {\n createMiddleware,\n createProcedureBuilder,\n type InferMiddlewareArrayInput,\n type InferMiddlewareArrayOutput,\n type InferMiddlewareOutput,\n type InternalMiddleware,\n type MergeInput,\n type Middleware,\n type ProcedureBuilderFactory,\n type Run,\n} from \"./core-internal\";\nimport type { Prettify } from \"./types\";\n\ntype ExtractParams<TInput> = TInput extends { params: infer P } ? P : never;\n\ninterface NextProcedureBuilder<TContext, TInput = {}> {\n use<TInputExt, TMiddleware extends Middleware<TInputExt, TContext, any>>(\n middleware: TMiddleware,\n ): NextProcedureBuilder<\n InferMiddlewareOutput<TMiddleware>,\n MergeInput<TInput, TInputExt>\n >;\n\n use<TMiddlewares extends readonly Middleware<any, TContext, any>[]>(\n middlewares: [...TMiddlewares],\n ): NextProcedureBuilder<\n InferMiddlewareArrayOutput<TMiddlewares>,\n MergeInput<TInput, InferMiddlewareArrayInput<TMiddlewares>>\n >;\n\n input<TSchema extends StandardSchemaV1>(\n schema: TSchema,\n ): NextProcedureBuilder<\n TContext,\n TInput & StandardSchemaV1.InferInput<TSchema>\n >;\n\n params<T, TSchema extends StandardSchemaV1 | undefined = undefined>(\n schema?: TSchema,\n ): NextProcedureBuilder<\n Prettify<\n TContext & {\n params: TSchema extends StandardSchemaV1\n ? StandardSchemaV1.InferOutput<TSchema>\n : T;\n }\n >,\n Prettify<\n TInput & {\n params: Promise<\n TSchema extends StandardSchemaV1\n ? StandardSchemaV1.InferOutput<TSchema>\n : T\n >;\n }\n >\n >;\n\n searchParams<TSchema extends StandardSchemaV1>(\n schema: TSchema,\n ): NextProcedureBuilder<\n Prettify<\n TContext & { searchParams: StandardSchemaV1.InferOutput<TSchema> }\n >,\n Prettify<\n TInput & {\n searchParams: Promise<Record<string, string | string[] | undefined>>;\n }\n >\n >;\n\n run: Run<TContext, TInput>;\n page: Run<\n TContext,\n Prettify<\n TInput & {\n searchParams: Promise<Record<string, string | string[] | undefined>>;\n params: Promise<{ [key: string]: string }>;\n }\n >,\n ReactNode\n >;\n rsc: Run<TContext, TInput, ReactNode>;\n metadata: Run<TContext, TInput, Metadata>;\n layout: Run<TContext, TInput & { children: ReactNode }, ReactNode>;\n layoutMetadata: Run<\n Prettify<Omit<TContext, \"searchParams\">>,\n Prettify<Omit<TInput, \"searchParams\">>,\n Metadata\n >;\n\n staticParams: Run<TContext, TInput, ExtractParams<TContext>[]>;\n}\n\nconst createNextBuilder: ProcedureBuilderFactory = (\n middlewares: InternalMiddleware[],\n factory?: ProcedureBuilderFactory,\n) => {\n const core = createProcedureBuilder(\n middlewares,\n factory ?? createNextBuilder,\n );\n\n return {\n ...core,\n\n params() {\n const mw = createMiddleware(\n \"NEXT_PARAMS\",\n async ({ input, ctx, next }: any) => {\n const params = await input.params;\n\n return next({ ctx: { ...ctx, params } });\n },\n );\n return createNextBuilder([...middlewares, mw], factory) as any;\n },\n\n searchParams(schema: StandardSchemaV1) {\n const mw = createMiddleware(\n \"NEXT_SEARCH_PARAMS\",\n async ({ input, ctx, next }: any) => {\n const searchParams = await input.searchParams;\n\n const result = await schema[\"~standard\"].validate(searchParams);\n if (result.issues) throw new Error(\"Invalid search params\");\n return next({ ctx: { ...ctx, searchParams: result.value } });\n },\n );\n return createNextBuilder([...middlewares, mw], factory) as any;\n },\n\n page: core.run,\n rsc: core.run,\n metadata: core.run,\n layout: core.run,\n layoutMetadata: core.run,\n staticParams: core.run,\n } as any;\n};\n\nexport const init = <TContext>(options: InitOptions<TContext>) => {\n const core = coreInit(options);\n const initialMiddlewares: InternalMiddleware[] = [\n createMiddleware(\"INITIAL_CONTEXT\", async ({ next }: any) => {\n return next({ ctx: await options.ctx() });\n }),\n ];\n\n return {\n middleware: core.middleware,\n procedure: createNextBuilder(\n initialMiddlewares,\n ) as unknown as NextProcedureBuilder<TContext>,\n };\n};\n"],"mappings":";;;;;AAmGA,MAAM,qBACJ,aACA,YACG;CACH,MAAM,OAAO,uBACX,aACA,mDAAW,kBACZ;AAED,0CACK;EAEH,SAAS;GACP,MAAM,KAAK,iBACT,eACA,OAAO,EAAE,OAAO,KAAK,WAAgB;IACnC,MAAM,SAAS,MAAM,MAAM;AAE3B,WAAO,KAAK,EAAE,uCAAU,YAAK,WAAU,CAAC;KAE3C;AACD,UAAO,kBAAkB,CAAC,GAAG,aAAa,GAAG,EAAE,QAAQ;;EAGzD,aAAa,QAA0B;GACrC,MAAM,KAAK,iBACT,sBACA,OAAO,EAAE,OAAO,KAAK,WAAgB;IACnC,MAAM,eAAe,MAAM,MAAM;IAEjC,MAAM,SAAS,MAAM,OAAO,aAAa,SAAS,aAAa;AAC/D,QAAI,OAAO,OAAQ,OAAM,IAAI,MAAM,wBAAwB;AAC3D,WAAO,KAAK,EAAE,uCAAU,YAAK,cAAc,OAAO,UAAS,CAAC;KAE/D;AACD,UAAO,kBAAkB,CAAC,GAAG,aAAa,GAAG,EAAE,QAAQ;;EAGzD,MAAM,KAAK;EACX,KAAK,KAAK;EACV,UAAU,KAAK;EACf,QAAQ,KAAK;EACb,gBAAgB,KAAK;EACrB,cAAc,KAAK;;;AAIvB,MAAa,QAAkB,YAAmC;CAChE,MAAM,OAAOA,OAAS,QAAQ;CAC9B,MAAM,qBAA2C,CAC/C,iBAAiB,mBAAmB,OAAO,EAAE,WAAgB;AAC3D,SAAO,KAAK,EAAE,KAAK,MAAM,QAAQ,KAAK,EAAE,CAAC;GACzC,CACH;AAED,QAAO;EACL,YAAY,KAAK;EACjB,WAAW,kBACT,mBACD;EACF"}
|
package/dist/react.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const require_objectSpread2 = require('./_virtual/_@oxc-project_runtime@0.
|
|
1
|
+
const require_objectSpread2 = require('./_virtual/_@oxc-project_runtime@0.106.0/helpers/objectSpread2.cjs');
|
|
2
2
|
const require_core_internal = require('./core-internal.cjs');
|
|
3
3
|
const require_core = require('./core.cjs');
|
|
4
4
|
|
package/dist/react.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { _objectSpread2 } from "./_virtual/_@oxc-project_runtime@0.
|
|
1
|
+
import { _objectSpread2 } from "./_virtual/_@oxc-project_runtime@0.106.0/helpers/objectSpread2.mjs";
|
|
2
2
|
import { createMiddleware, createProcedureBuilder } from "./core-internal.mjs";
|
|
3
3
|
import { init as init$1 } from "./core.mjs";
|
|
4
4
|
|
package/dist/react.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react.mjs","names":["
|
|
1
|
+
{"version":3,"file":"react.mjs","names":["coreInit"],"sources":["../src/react.ts"],"sourcesContent":["import type { StandardSchemaV1 } from \"@standard-schema/spec\";\nimport type { ReactNode } from \"react\";\nimport { init as coreInit, type InitOptions } from \"./core\";\nimport {\n createMiddleware,\n createProcedureBuilder,\n type InferMiddlewareOutput,\n type InternalMiddleware,\n type MergeInput,\n type Middleware,\n type ProcedureBuilderFactory,\n type Run,\n} from \"./core-internal\";\n\ninterface ReactProcedureBuilder<TContext, TInput = Record<string, never>> {\n use<TInputExt, TMiddleware extends Middleware<TInputExt, TContext, any>>(\n middleware: TMiddleware,\n ): ReactProcedureBuilder<\n InferMiddlewareOutput<TMiddleware>,\n MergeInput<TInput, TInputExt>\n >;\n\n input<TSchema extends StandardSchemaV1>(\n schema: TSchema,\n ): ReactProcedureBuilder<\n TContext,\n MergeInput<TInput, StandardSchemaV1.InferInput<TSchema>>\n >;\n\n run: Run<TContext, TInput>;\n rsc: Run<TContext, TInput, ReactNode>;\n serverFn: Run<TContext, TInput>;\n}\n\nconst createReactBuilder: ProcedureBuilderFactory = (\n middlewares: InternalMiddleware[],\n factory?: ProcedureBuilderFactory,\n) => {\n const core = createProcedureBuilder(\n middlewares,\n factory ?? createReactBuilder,\n );\n\n return {\n ...core,\n rsc: core.run,\n serverFn: core.run,\n };\n};\n\nexport const init = <TContext>(options: InitOptions<TContext>) => {\n const core = coreInit(options);\n const initialMiddlewares: InternalMiddleware[] = [\n createMiddleware(\"INITIAL_CONTEXT\", async ({ next }: any) => {\n return next({ ctx: await options.ctx() });\n }),\n ];\n\n return {\n middleware: core.middleware,\n procedure: createReactBuilder(initialMiddlewares) as ReactProcedureBuilder<\n TContext,\n Record<string, never>\n >,\n };\n};\n"],"mappings":";;;;;AAkCA,MAAM,sBACJ,aACA,YACG;CACH,MAAM,OAAO,uBACX,aACA,mDAAW,mBACZ;AAED,0CACK;EACH,KAAK,KAAK;EACV,UAAU,KAAK;;;AAInB,MAAa,QAAkB,YAAmC;CAChE,MAAM,OAAOA,OAAS,QAAQ;CAC9B,MAAM,qBAA2C,CAC/C,iBAAiB,mBAAmB,OAAO,EAAE,WAAgB;AAC3D,SAAO,KAAK,EAAE,KAAK,MAAM,QAAQ,KAAK,EAAE,CAAC;GACzC,CACH;AAED,QAAO;EACL,YAAY,KAAK;EACjB,WAAW,mBAAmB,mBAAmB;EAIlD"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jlnstack/procedure",
|
|
3
|
-
"description": "",
|
|
4
|
-
"version": "0.0.
|
|
3
|
+
"description": "Type-safe procedure builder",
|
|
4
|
+
"version": "0.0.3",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "jln13x",
|
|
7
7
|
"repository": {
|
|
@@ -12,6 +12,10 @@
|
|
|
12
12
|
"access": "public",
|
|
13
13
|
"provenance": true
|
|
14
14
|
},
|
|
15
|
+
"files": [
|
|
16
|
+
"dist",
|
|
17
|
+
"package.json"
|
|
18
|
+
],
|
|
15
19
|
"peerDependencies": {
|
|
16
20
|
"react": ">=19",
|
|
17
21
|
"react-dom": ">=19",
|
package/CHANGELOG.md
DELETED
package/src/core-internal.ts
DELETED
|
@@ -1,206 +0,0 @@
|
|
|
1
|
-
import type { StandardSchemaV1 } from "@standard-schema/spec";
|
|
2
|
-
import type { Awaitable, Prettify } from "./types";
|
|
3
|
-
|
|
4
|
-
export interface MiddlewareResult<TCtx> {
|
|
5
|
-
result: unknown;
|
|
6
|
-
ctx: TCtx;
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
export type Middleware<TInput, TContext, TResult> = (args: {
|
|
10
|
-
input: TInput;
|
|
11
|
-
ctx: TContext;
|
|
12
|
-
next: <T>(opts: { ctx: T }) => Awaitable<MiddlewareResult<T>>;
|
|
13
|
-
}) => Awaitable<MiddlewareResult<TResult>>;
|
|
14
|
-
|
|
15
|
-
export interface InternalMiddleware {
|
|
16
|
-
id?: string;
|
|
17
|
-
run: Middleware<any, any, any>;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
export type InferMiddlewareOutput<T> = T extends Middleware<any, any, infer O>
|
|
21
|
-
? O
|
|
22
|
-
: never;
|
|
23
|
-
|
|
24
|
-
export type InferMiddlewareArrayOutput<
|
|
25
|
-
T extends readonly Middleware<any, any, any>[],
|
|
26
|
-
> = T extends readonly [infer First, ...infer Rest]
|
|
27
|
-
? First extends Middleware<any, any, infer O>
|
|
28
|
-
? Rest extends readonly Middleware<any, any, any>[]
|
|
29
|
-
? Prettify<O & InferMiddlewareArrayOutput<Rest>>
|
|
30
|
-
: O
|
|
31
|
-
: never
|
|
32
|
-
: {};
|
|
33
|
-
|
|
34
|
-
export type InferMiddlewareArrayInput<
|
|
35
|
-
T extends readonly Middleware<any, any, any>[],
|
|
36
|
-
> = T extends readonly [infer First, ...infer Rest]
|
|
37
|
-
? First extends Middleware<infer I, any, any>
|
|
38
|
-
? Rest extends readonly Middleware<any, any, any>[]
|
|
39
|
-
? MergeInput<I, InferMiddlewareArrayInput<Rest>>
|
|
40
|
-
: I
|
|
41
|
-
: never
|
|
42
|
-
: Record<string, never>;
|
|
43
|
-
|
|
44
|
-
export type MergeInput<A, B> = Prettify<
|
|
45
|
-
(A extends Record<string, never> | undefined ? {} : A) &
|
|
46
|
-
(B extends Record<string, never> | undefined ? {} : B)
|
|
47
|
-
>;
|
|
48
|
-
|
|
49
|
-
export interface ProcedureBuilder<TContext, TInput = Record<string, never>> {
|
|
50
|
-
use<TInputExt, TMiddleware extends Middleware<TInputExt, TContext, any>>(
|
|
51
|
-
middleware: TMiddleware,
|
|
52
|
-
): ProcedureBuilder<
|
|
53
|
-
InferMiddlewareOutput<TMiddleware>,
|
|
54
|
-
MergeInput<TInput, TInputExt>
|
|
55
|
-
>;
|
|
56
|
-
|
|
57
|
-
use<TMiddlewares extends readonly Middleware<any, TContext, any>[]>(
|
|
58
|
-
middlewares: [...TMiddlewares],
|
|
59
|
-
): ProcedureBuilder<
|
|
60
|
-
InferMiddlewareArrayOutput<TMiddlewares>,
|
|
61
|
-
MergeInput<TInput, InferMiddlewareArrayInput<TMiddlewares>>
|
|
62
|
-
>;
|
|
63
|
-
|
|
64
|
-
input<TSchema extends StandardSchemaV1>(
|
|
65
|
-
schema: TSchema,
|
|
66
|
-
): ProcedureBuilder<
|
|
67
|
-
TContext,
|
|
68
|
-
MergeInput<TInput, StandardSchemaV1.InferInput<TSchema>>
|
|
69
|
-
>;
|
|
70
|
-
|
|
71
|
-
run: Run<TContext, TInput>;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
type IsPartialObject<T> = T extends object
|
|
75
|
-
? {} extends T
|
|
76
|
-
? true
|
|
77
|
-
: false
|
|
78
|
-
: false;
|
|
79
|
-
|
|
80
|
-
export type Run<
|
|
81
|
-
TContext,
|
|
82
|
-
TInput = Record<string, never>,
|
|
83
|
-
TResultConstraint = unknown,
|
|
84
|
-
> = <TResult extends TResultConstraint>(
|
|
85
|
-
fn: (args: { input: TInput; ctx: TContext }) => Awaitable<TResult>,
|
|
86
|
-
) => TInput extends Record<string, never> | undefined
|
|
87
|
-
? () => Promise<TResult>
|
|
88
|
-
: IsPartialObject<TInput> extends true
|
|
89
|
-
? (input?: TInput) => Promise<TResult>
|
|
90
|
-
: (input: TInput) => Promise<TResult>;
|
|
91
|
-
|
|
92
|
-
export type ProcedureBuilderFactory = (
|
|
93
|
-
mws: InternalMiddleware[],
|
|
94
|
-
factory?: ProcedureBuilderFactory,
|
|
95
|
-
) => ProcedureBuilder<any, any>;
|
|
96
|
-
|
|
97
|
-
export const createProcedureBuilder = <
|
|
98
|
-
TContext,
|
|
99
|
-
TInput = Record<string, never>,
|
|
100
|
-
>(
|
|
101
|
-
middlewares: InternalMiddleware[],
|
|
102
|
-
factory?: ProcedureBuilderFactory,
|
|
103
|
-
): ProcedureBuilder<TContext, TInput> => {
|
|
104
|
-
const create = factory ?? createProcedureBuilder;
|
|
105
|
-
|
|
106
|
-
const builder: ProcedureBuilder<TContext, TInput> = {
|
|
107
|
-
use: (middleware: any) => {
|
|
108
|
-
if (Array.isArray(middleware)) {
|
|
109
|
-
const combined: Middleware<any, any, any> = async ({
|
|
110
|
-
input,
|
|
111
|
-
ctx,
|
|
112
|
-
next,
|
|
113
|
-
}) => {
|
|
114
|
-
const results = await Promise.all(
|
|
115
|
-
middleware.map((mw) =>
|
|
116
|
-
mw({
|
|
117
|
-
input,
|
|
118
|
-
ctx,
|
|
119
|
-
next: <T>(opts: { ctx: T }) =>
|
|
120
|
-
Promise.resolve({ result: undefined, ctx: opts.ctx }),
|
|
121
|
-
}),
|
|
122
|
-
),
|
|
123
|
-
);
|
|
124
|
-
const mergedCtx = results.reduce(
|
|
125
|
-
// biome-ignore lint/performance/noAccumulatingSpread: idc
|
|
126
|
-
(acc, r) => ({ ...acc, ...r.ctx }),
|
|
127
|
-
ctx,
|
|
128
|
-
);
|
|
129
|
-
return next({ ctx: mergedCtx });
|
|
130
|
-
};
|
|
131
|
-
return create([...middlewares, { run: combined }], factory);
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
return create([...middlewares, { run: middleware }], factory);
|
|
135
|
-
},
|
|
136
|
-
|
|
137
|
-
input(schema: any) {
|
|
138
|
-
return create([createInputMiddleware(schema), ...middlewares], factory);
|
|
139
|
-
},
|
|
140
|
-
|
|
141
|
-
run(fn: any) {
|
|
142
|
-
return (async (input?: TInput) => {
|
|
143
|
-
const executeProcedure = async (
|
|
144
|
-
index: number,
|
|
145
|
-
ctx: unknown,
|
|
146
|
-
): Promise<MiddlewareResult<any>> => {
|
|
147
|
-
if (index >= middlewares.length) {
|
|
148
|
-
return Promise.resolve(fn({ ctx, input })).then((result) => ({
|
|
149
|
-
result,
|
|
150
|
-
ctx,
|
|
151
|
-
}));
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
const mw = middlewares[index];
|
|
155
|
-
if (!mw) {
|
|
156
|
-
return Promise.resolve(fn({ ctx, input })).then((result) => ({
|
|
157
|
-
result,
|
|
158
|
-
ctx,
|
|
159
|
-
}));
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
return Promise.resolve(
|
|
163
|
-
mw.run({
|
|
164
|
-
input,
|
|
165
|
-
ctx,
|
|
166
|
-
next: <T>(opts: { ctx: T }) => {
|
|
167
|
-
return executeProcedure(index + 1, {
|
|
168
|
-
...(ctx ?? {}),
|
|
169
|
-
...opts.ctx,
|
|
170
|
-
}).then((result) => ({
|
|
171
|
-
...result,
|
|
172
|
-
ctx: opts.ctx,
|
|
173
|
-
})) as Promise<MiddlewareResult<T>>;
|
|
174
|
-
},
|
|
175
|
-
}),
|
|
176
|
-
);
|
|
177
|
-
};
|
|
178
|
-
|
|
179
|
-
const { result } = await executeProcedure(0, undefined);
|
|
180
|
-
return result;
|
|
181
|
-
}) as any;
|
|
182
|
-
},
|
|
183
|
-
};
|
|
184
|
-
|
|
185
|
-
return builder;
|
|
186
|
-
};
|
|
187
|
-
|
|
188
|
-
function createInputMiddleware<TSchema extends StandardSchemaV1>(
|
|
189
|
-
schema: TSchema,
|
|
190
|
-
) {
|
|
191
|
-
return createMiddleware("INPUT_VALIDATION", async (opts) => {
|
|
192
|
-
const result = await schema["~standard"].validate(opts.input);
|
|
193
|
-
if (result.issues) {
|
|
194
|
-
throw new Error("Input validation failed");
|
|
195
|
-
}
|
|
196
|
-
return opts.next({ ctx: opts.ctx });
|
|
197
|
-
});
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
export const createMiddleware = <TInput, TContext>(
|
|
201
|
-
id: string,
|
|
202
|
-
fn: Middleware<TInput, TContext, any>,
|
|
203
|
-
): InternalMiddleware => ({
|
|
204
|
-
id,
|
|
205
|
-
run: fn,
|
|
206
|
-
});
|
package/src/core.ts
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
createMiddleware,
|
|
3
|
-
createProcedureBuilder,
|
|
4
|
-
type Middleware,
|
|
5
|
-
type ProcedureBuilder,
|
|
6
|
-
} from "./core-internal";
|
|
7
|
-
import type { Awaitable } from "./types";
|
|
8
|
-
|
|
9
|
-
export interface InitOptions<TContext> {
|
|
10
|
-
ctx: () => Awaitable<TContext>;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
export interface ProcedureFactory<TContext> {
|
|
14
|
-
middleware: <TInput, TResult>(
|
|
15
|
-
fn: Middleware<TInput, TContext, TResult>,
|
|
16
|
-
) => Middleware<TInput, TContext, TResult>;
|
|
17
|
-
procedure: ProcedureBuilder<TContext>;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
export const init = <TContext>(
|
|
21
|
-
options: InitOptions<TContext>,
|
|
22
|
-
): ProcedureFactory<TContext> => ({
|
|
23
|
-
middleware: (fn) => fn,
|
|
24
|
-
procedure: createProcedureBuilder([
|
|
25
|
-
createMiddleware("INITIAL_CONTEXT", async ({ next }) => {
|
|
26
|
-
return next({ ctx: await options.ctx() });
|
|
27
|
-
}),
|
|
28
|
-
]),
|
|
29
|
-
});
|
package/src/index.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from "./core";
|
package/src/next.ts
DELETED
|
@@ -1,161 +0,0 @@
|
|
|
1
|
-
import type { StandardSchemaV1 } from "@standard-schema/spec";
|
|
2
|
-
import type { Metadata } from "next";
|
|
3
|
-
import type { ReactNode } from "react";
|
|
4
|
-
import { init as coreInit, type InitOptions } from "./core";
|
|
5
|
-
import {
|
|
6
|
-
createMiddleware,
|
|
7
|
-
createProcedureBuilder,
|
|
8
|
-
type InferMiddlewareArrayInput,
|
|
9
|
-
type InferMiddlewareArrayOutput,
|
|
10
|
-
type InferMiddlewareOutput,
|
|
11
|
-
type InternalMiddleware,
|
|
12
|
-
type MergeInput,
|
|
13
|
-
type Middleware,
|
|
14
|
-
type ProcedureBuilderFactory,
|
|
15
|
-
type Run,
|
|
16
|
-
} from "./core-internal";
|
|
17
|
-
import type { Prettify } from "./types";
|
|
18
|
-
|
|
19
|
-
type ExtractParams<TInput> = TInput extends { params: infer P } ? P : never;
|
|
20
|
-
|
|
21
|
-
interface NextProcedureBuilder<TContext, TInput = {}> {
|
|
22
|
-
use<TInputExt, TMiddleware extends Middleware<TInputExt, TContext, any>>(
|
|
23
|
-
middleware: TMiddleware,
|
|
24
|
-
): NextProcedureBuilder<
|
|
25
|
-
InferMiddlewareOutput<TMiddleware>,
|
|
26
|
-
MergeInput<TInput, TInputExt>
|
|
27
|
-
>;
|
|
28
|
-
|
|
29
|
-
use<TMiddlewares extends readonly Middleware<any, TContext, any>[]>(
|
|
30
|
-
middlewares: [...TMiddlewares],
|
|
31
|
-
): NextProcedureBuilder<
|
|
32
|
-
InferMiddlewareArrayOutput<TMiddlewares>,
|
|
33
|
-
MergeInput<TInput, InferMiddlewareArrayInput<TMiddlewares>>
|
|
34
|
-
>;
|
|
35
|
-
|
|
36
|
-
input<TSchema extends StandardSchemaV1>(
|
|
37
|
-
schema: TSchema,
|
|
38
|
-
): NextProcedureBuilder<
|
|
39
|
-
TContext,
|
|
40
|
-
TInput & StandardSchemaV1.InferInput<TSchema>
|
|
41
|
-
>;
|
|
42
|
-
|
|
43
|
-
params<T, TSchema extends StandardSchemaV1 | undefined = undefined>(
|
|
44
|
-
schema?: TSchema,
|
|
45
|
-
): NextProcedureBuilder<
|
|
46
|
-
Prettify<
|
|
47
|
-
TContext & {
|
|
48
|
-
params: TSchema extends StandardSchemaV1
|
|
49
|
-
? StandardSchemaV1.InferOutput<TSchema>
|
|
50
|
-
: T;
|
|
51
|
-
}
|
|
52
|
-
>,
|
|
53
|
-
Prettify<
|
|
54
|
-
TInput & {
|
|
55
|
-
params: Promise<
|
|
56
|
-
TSchema extends StandardSchemaV1
|
|
57
|
-
? StandardSchemaV1.InferOutput<TSchema>
|
|
58
|
-
: T
|
|
59
|
-
>;
|
|
60
|
-
}
|
|
61
|
-
>
|
|
62
|
-
>;
|
|
63
|
-
|
|
64
|
-
searchParams<TSchema extends StandardSchemaV1>(
|
|
65
|
-
schema: TSchema,
|
|
66
|
-
): NextProcedureBuilder<
|
|
67
|
-
Prettify<
|
|
68
|
-
TContext & { searchParams: StandardSchemaV1.InferOutput<TSchema> }
|
|
69
|
-
>,
|
|
70
|
-
Prettify<
|
|
71
|
-
TInput & {
|
|
72
|
-
searchParams: Promise<Record<string, string | string[] | undefined>>;
|
|
73
|
-
}
|
|
74
|
-
>
|
|
75
|
-
>;
|
|
76
|
-
|
|
77
|
-
run: Run<TContext, TInput>;
|
|
78
|
-
page: Run<
|
|
79
|
-
TContext,
|
|
80
|
-
Prettify<
|
|
81
|
-
TInput & {
|
|
82
|
-
searchParams: Promise<Record<string, string | string[] | undefined>>;
|
|
83
|
-
params: Promise<{ [key: string]: string }>;
|
|
84
|
-
}
|
|
85
|
-
>,
|
|
86
|
-
ReactNode
|
|
87
|
-
>;
|
|
88
|
-
rsc: Run<TContext, TInput, ReactNode>;
|
|
89
|
-
metadata: Run<TContext, TInput, Metadata>;
|
|
90
|
-
layout: Run<TContext, TInput & { children: ReactNode }, ReactNode>;
|
|
91
|
-
layoutMetadata: Run<
|
|
92
|
-
Prettify<Omit<TContext, "searchParams">>,
|
|
93
|
-
Prettify<Omit<TInput, "searchParams">>,
|
|
94
|
-
Metadata
|
|
95
|
-
>;
|
|
96
|
-
|
|
97
|
-
staticParams: Run<TContext, TInput, ExtractParams<TContext>[]>;
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
const createNextBuilder: ProcedureBuilderFactory = (
|
|
101
|
-
middlewares: InternalMiddleware[],
|
|
102
|
-
factory?: ProcedureBuilderFactory,
|
|
103
|
-
) => {
|
|
104
|
-
const core = createProcedureBuilder(
|
|
105
|
-
middlewares,
|
|
106
|
-
factory ?? createNextBuilder,
|
|
107
|
-
);
|
|
108
|
-
|
|
109
|
-
return {
|
|
110
|
-
...core,
|
|
111
|
-
|
|
112
|
-
params() {
|
|
113
|
-
const mw = createMiddleware(
|
|
114
|
-
"NEXT_PARAMS",
|
|
115
|
-
async ({ input, ctx, next }: any) => {
|
|
116
|
-
const params = await input.params;
|
|
117
|
-
|
|
118
|
-
return next({ ctx: { ...ctx, params } });
|
|
119
|
-
},
|
|
120
|
-
);
|
|
121
|
-
return createNextBuilder([...middlewares, mw], factory) as any;
|
|
122
|
-
},
|
|
123
|
-
|
|
124
|
-
searchParams(schema: StandardSchemaV1) {
|
|
125
|
-
const mw = createMiddleware(
|
|
126
|
-
"NEXT_SEARCH_PARAMS",
|
|
127
|
-
async ({ input, ctx, next }: any) => {
|
|
128
|
-
const searchParams = await input.searchParams;
|
|
129
|
-
|
|
130
|
-
const result = await schema["~standard"].validate(searchParams);
|
|
131
|
-
if (result.issues) throw new Error("Invalid search params");
|
|
132
|
-
return next({ ctx: { ...ctx, searchParams: result.value } });
|
|
133
|
-
},
|
|
134
|
-
);
|
|
135
|
-
return createNextBuilder([...middlewares, mw], factory) as any;
|
|
136
|
-
},
|
|
137
|
-
|
|
138
|
-
page: core.run,
|
|
139
|
-
rsc: core.run,
|
|
140
|
-
metadata: core.run,
|
|
141
|
-
layout: core.run,
|
|
142
|
-
layoutMetadata: core.run,
|
|
143
|
-
staticParams: core.run,
|
|
144
|
-
} as any;
|
|
145
|
-
};
|
|
146
|
-
|
|
147
|
-
export const init = <TContext>(options: InitOptions<TContext>) => {
|
|
148
|
-
const core = coreInit(options);
|
|
149
|
-
const initialMiddlewares: InternalMiddleware[] = [
|
|
150
|
-
createMiddleware("INITIAL_CONTEXT", async ({ next }: any) => {
|
|
151
|
-
return next({ ctx: await options.ctx() });
|
|
152
|
-
}),
|
|
153
|
-
];
|
|
154
|
-
|
|
155
|
-
return {
|
|
156
|
-
middleware: core.middleware,
|
|
157
|
-
procedure: createNextBuilder(
|
|
158
|
-
initialMiddlewares,
|
|
159
|
-
) as unknown as NextProcedureBuilder<TContext>,
|
|
160
|
-
};
|
|
161
|
-
};
|