ts-procedures 9.1.0 → 9.3.0
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/CHANGELOG.md +55 -0
- package/agent_config/claude-code/skills/ts-procedures/api-reference.md +29 -22
- package/agent_config/copilot/copilot-instructions.md +2 -0
- package/agent_config/cursor/cursorrules +2 -0
- package/build/codegen/bin/cli.d.ts +4 -0
- package/build/codegen/bin/cli.js +19 -0
- package/build/codegen/bin/cli.js.map +1 -1
- package/build/codegen/bin/cli.test.js +21 -0
- package/build/codegen/bin/cli.test.js.map +1 -1
- package/build/codegen/bin/flag-specs.js +3 -0
- package/build/codegen/bin/flag-specs.js.map +1 -1
- package/build/codegen/check-output.d.ts +28 -0
- package/build/codegen/check-output.js +216 -0
- package/build/codegen/check-output.js.map +1 -0
- package/build/codegen/check-output.test.d.ts +1 -0
- package/build/codegen/check-output.test.js +160 -0
- package/build/codegen/check-output.test.js.map +1 -0
- package/build/codegen/emit/api-route.js +1 -1
- package/build/codegen/emit/api-route.js.map +1 -1
- package/build/codegen/emit/context.d.ts +9 -0
- package/build/codegen/emit/http-stream-route.js +1 -1
- package/build/codegen/emit/http-stream-route.js.map +1 -1
- package/build/codegen/emit/rpc-route.js +1 -1
- package/build/codegen/emit/rpc-route.js.map +1 -1
- package/build/codegen/emit/scope-file.js +14 -0
- package/build/codegen/emit/scope-file.js.map +1 -1
- package/build/codegen/emit/stream-route.js +1 -1
- package/build/codegen/emit/stream-route.js.map +1 -1
- package/build/codegen/emit-scope.test.js +55 -0
- package/build/codegen/emit-scope.test.js.map +1 -1
- package/build/codegen/emit-types.js +19 -0
- package/build/codegen/emit-types.js.map +1 -1
- package/build/codegen/emit-types.test.js +34 -0
- package/build/codegen/emit-types.test.js.map +1 -1
- package/build/codegen/index.d.ts +14 -0
- package/build/codegen/index.js +11 -1
- package/build/codegen/index.js.map +1 -1
- package/build/codegen/targets/ts/name-collision.test.d.ts +1 -0
- package/build/codegen/targets/ts/name-collision.test.js +30 -0
- package/build/codegen/targets/ts/name-collision.test.js.map +1 -0
- package/build/codegen/targets/ts/run.js +13 -0
- package/build/codegen/targets/ts/run.js.map +1 -1
- package/build/core/create-http-stream.d.ts +3 -14
- package/build/core/create-http-stream.js.map +1 -1
- package/build/core/create-http.d.ts +2 -9
- package/build/core/create-http.js.map +1 -1
- package/build/core/create-http.test-d.d.ts +1 -0
- package/build/core/create-http.test-d.js +104 -0
- package/build/core/create-http.test-d.js.map +1 -0
- package/build/core/procedures.d.ts +6 -16
- package/build/core/types.d.ts +49 -4
- package/build/errors.d.ts +33 -0
- package/build/errors.js +91 -0
- package/build/errors.js.map +1 -0
- package/build/errors.test.d.ts +1 -0
- package/build/errors.test.js +122 -0
- package/build/errors.test.js.map +1 -0
- package/build/exports.d.ts +1 -1
- package/build/exports.js.map +1 -1
- package/build/implementations/http/doc-registry.d.ts +28 -0
- package/build/implementations/http/doc-registry.js +96 -0
- package/build/implementations/http/doc-registry.js.map +1 -0
- package/build/implementations/http/doc-registry.test.d.ts +1 -0
- package/build/implementations/http/doc-registry.test.js +516 -0
- package/build/implementations/http/doc-registry.test.js.map +1 -0
- package/build/implementations/http/error-taxonomy.d.ts +249 -0
- package/build/implementations/http/error-taxonomy.js +252 -0
- package/build/implementations/http/error-taxonomy.js.map +1 -0
- package/build/implementations/http/error-taxonomy.test.d.ts +1 -0
- package/build/implementations/http/error-taxonomy.test.js +399 -0
- package/build/implementations/http/error-taxonomy.test.js.map +1 -0
- package/build/implementations/http/express-rpc/error-taxonomy.test.d.ts +1 -0
- package/build/implementations/http/express-rpc/error-taxonomy.test.js +83 -0
- package/build/implementations/http/express-rpc/error-taxonomy.test.js.map +1 -0
- package/build/implementations/http/express-rpc/index.d.ts +125 -0
- package/build/implementations/http/express-rpc/index.js +216 -0
- package/build/implementations/http/express-rpc/index.js.map +1 -0
- package/build/implementations/http/express-rpc/index.test.d.ts +1 -0
- package/build/implementations/http/express-rpc/index.test.js +684 -0
- package/build/implementations/http/express-rpc/index.test.js.map +1 -0
- package/build/implementations/http/express-rpc/types.d.ts +11 -0
- package/build/implementations/http/express-rpc/types.js +2 -0
- package/build/implementations/http/express-rpc/types.js.map +1 -0
- package/build/implementations/http/hono-api/error-taxonomy.test.d.ts +1 -0
- package/build/implementations/http/hono-api/error-taxonomy.test.js +137 -0
- package/build/implementations/http/hono-api/error-taxonomy.test.js.map +1 -0
- package/build/implementations/http/hono-api/index.d.ts +151 -0
- package/build/implementations/http/hono-api/index.js +344 -0
- package/build/implementations/http/hono-api/index.js.map +1 -0
- package/build/implementations/http/hono-api/index.test.d.ts +1 -0
- package/build/implementations/http/hono-api/index.test.js +992 -0
- package/build/implementations/http/hono-api/index.test.js.map +1 -0
- package/build/implementations/http/hono-api/types.d.ts +13 -0
- package/build/implementations/http/hono-api/types.js +2 -0
- package/build/implementations/http/hono-api/types.js.map +1 -0
- package/build/implementations/http/hono-rpc/error-taxonomy.test.d.ts +1 -0
- package/build/implementations/http/hono-rpc/error-taxonomy.test.js +64 -0
- package/build/implementations/http/hono-rpc/error-taxonomy.test.js.map +1 -0
- package/build/implementations/http/hono-rpc/index.d.ts +130 -0
- package/build/implementations/http/hono-rpc/index.js +209 -0
- package/build/implementations/http/hono-rpc/index.js.map +1 -0
- package/build/implementations/http/hono-rpc/index.test.d.ts +1 -0
- package/build/implementations/http/hono-rpc/index.test.js +828 -0
- package/build/implementations/http/hono-rpc/index.test.js.map +1 -0
- package/build/implementations/http/hono-rpc/types.d.ts +11 -0
- package/build/implementations/http/hono-rpc/types.js +2 -0
- package/build/implementations/http/hono-rpc/types.js.map +1 -0
- package/build/implementations/http/hono-stream/error-taxonomy.test.d.ts +1 -0
- package/build/implementations/http/hono-stream/error-taxonomy.test.js +159 -0
- package/build/implementations/http/hono-stream/error-taxonomy.test.js.map +1 -0
- package/build/implementations/http/hono-stream/index.d.ts +171 -0
- package/build/implementations/http/hono-stream/index.js +415 -0
- package/build/implementations/http/hono-stream/index.js.map +1 -0
- package/build/implementations/http/hono-stream/index.test.d.ts +1 -0
- package/build/implementations/http/hono-stream/index.test.js +1383 -0
- package/build/implementations/http/hono-stream/index.test.js.map +1 -0
- package/build/implementations/http/hono-stream/types.d.ts +15 -0
- package/build/implementations/http/hono-stream/types.js +2 -0
- package/build/implementations/http/hono-stream/types.js.map +1 -0
- package/build/implementations/http/on-request-error.test.d.ts +1 -0
- package/build/implementations/http/on-request-error.test.js +173 -0
- package/build/implementations/http/on-request-error.test.js.map +1 -0
- package/build/implementations/http/route-errors.test.d.ts +1 -0
- package/build/implementations/http/route-errors.test.js +139 -0
- package/build/implementations/http/route-errors.test.js.map +1 -0
- package/build/implementations/types.d.ts +192 -0
- package/build/implementations/types.js +2 -0
- package/build/implementations/types.js.map +1 -0
- package/build/index.d.ts +165 -0
- package/build/index.js +258 -0
- package/build/index.js.map +1 -0
- package/build/index.test.d.ts +1 -0
- package/build/index.test.js +920 -0
- package/build/index.test.js.map +1 -0
- package/build/schema/extract-json-schema.d.ts +2 -0
- package/build/schema/extract-json-schema.js +12 -0
- package/build/schema/extract-json-schema.js.map +1 -0
- package/build/schema/extract-json-schema.test.d.ts +1 -0
- package/build/schema/extract-json-schema.test.js +23 -0
- package/build/schema/extract-json-schema.test.js.map +1 -0
- package/build/schema/parser.d.ts +28 -0
- package/build/schema/parser.js +170 -0
- package/build/schema/parser.js.map +1 -0
- package/build/schema/parser.test.d.ts +1 -0
- package/build/schema/parser.test.js +120 -0
- package/build/schema/parser.test.js.map +1 -0
- package/build/schema/resolve-schema-lib.d.ts +12 -0
- package/build/schema/resolve-schema-lib.js +11 -0
- package/build/schema/resolve-schema-lib.js.map +1 -0
- package/build/schema/resolve-schema-lib.test.d.ts +1 -0
- package/build/schema/resolve-schema-lib.test.js +17 -0
- package/build/schema/resolve-schema-lib.test.js.map +1 -0
- package/build/schema/types.d.ts +8 -0
- package/build/schema/types.js +2 -0
- package/build/schema/types.js.map +1 -0
- package/build/server/types.d.ts +6 -12
- package/build/stack-utils.d.ts +25 -0
- package/build/stack-utils.js +95 -0
- package/build/stack-utils.js.map +1 -0
- package/build/stack-utils.test.d.ts +1 -0
- package/build/stack-utils.test.js +80 -0
- package/build/stack-utils.test.js.map +1 -0
- package/docs/client-and-codegen.md +17 -0
- package/docs/core.md +1 -0
- package/docs/migration-v8-to-v9.md +12 -4
- package/package.json +1 -1
- package/src/codegen/bin/cli.test.ts +28 -0
- package/src/codegen/bin/cli.ts +26 -0
- package/src/codegen/bin/flag-specs.ts +3 -0
- package/src/codegen/check-output.test.ts +177 -0
- package/src/codegen/check-output.ts +262 -0
- package/src/codegen/emit/api-route.ts +1 -1
- package/src/codegen/emit/context.ts +9 -0
- package/src/codegen/emit/http-stream-route.ts +1 -1
- package/src/codegen/emit/rpc-route.ts +1 -1
- package/src/codegen/emit/scope-file.ts +17 -0
- package/src/codegen/emit/stream-route.ts +1 -1
- package/src/codegen/emit-scope.test.ts +60 -0
- package/src/codegen/emit-types.test.ts +36 -0
- package/src/codegen/emit-types.ts +20 -0
- package/src/codegen/index.ts +23 -1
- package/src/codegen/targets/ts/name-collision.test.ts +34 -0
- package/src/codegen/targets/ts/run.ts +16 -0
- package/src/core/create-http-stream.ts +11 -12
- package/src/core/create-http.test-d.ts +154 -0
- package/src/core/create-http.ts +11 -7
- package/src/core/types.ts +63 -4
- package/src/exports.ts +5 -0
- package/src/server/types.ts +8 -12
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../../../src/codegen/targets/ts/run.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AAE/D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAA;AACpE,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAA;AAC5E,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../../../src/codegen/targets/ts/run.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,23 +1,13 @@
|
|
|
1
1
|
import type { Infer, Prettify } from '../schema/json-schema.js';
|
|
2
2
|
import type { FactoryRuntime } from './internal.js';
|
|
3
|
-
import type { HttpMethod, ProcedureResult, TStreamContext } from './types.js';
|
|
4
|
-
|
|
5
|
-
[K in keyof TReq]: Infer<TReq[K]>;
|
|
6
|
-
}> : undefined;
|
|
7
|
-
export declare function makeCreateHttpStream<TContext>(runtime: FactoryRuntime<TContext, any>): <TName extends string, TReq extends Record<string, unknown> | undefined, TYieldType, TReturnType = void, TResHeaders = undefined, TErrorKey extends string = string>(name: TName, config: {
|
|
3
|
+
import type { HttpMethod, HttpReq, ProcedureResult, THttpReqInput, THttpStreamSchema, TStreamContext } from './types.js';
|
|
4
|
+
export declare function makeCreateHttpStream<TContext>(runtime: FactoryRuntime<TContext, any>): <TName extends string, TReq extends THttpReqInput | undefined, TYieldType, TReturnType = void, TResHeaders = undefined, TErrorKey extends string = string>(name: TName, config: {
|
|
8
5
|
path: string;
|
|
9
6
|
method: HttpMethod;
|
|
10
7
|
scope?: string;
|
|
11
8
|
errors?: TErrorKey[];
|
|
12
9
|
description?: string;
|
|
13
|
-
schema:
|
|
14
|
-
req?: TReq;
|
|
15
|
-
yield?: TYieldType;
|
|
16
|
-
returnType?: TReturnType;
|
|
17
|
-
res?: TResHeaders extends undefined ? undefined : {
|
|
18
|
-
headers: TResHeaders;
|
|
19
|
-
};
|
|
20
|
-
};
|
|
10
|
+
schema: THttpStreamSchema<TReq, TYieldType, TReturnType, TResHeaders>;
|
|
21
11
|
validateYields?: boolean;
|
|
22
12
|
}, handler: TResHeaders extends undefined ? (ctx: Prettify<TContext & TStreamContext>, req: HttpReq<TReq>) => AsyncGenerator<Infer<TYieldType>, Infer<TReturnType> | void, unknown> : (ctx: Prettify<TContext & TStreamContext>, req: HttpReq<TReq>) => Promise<{
|
|
23
13
|
headers: Infer<TResHeaders>;
|
|
@@ -47,4 +37,3 @@ export declare function makeCreateHttpStream<TContext>(runtime: FactoryRuntime<T
|
|
|
47
37
|
name: TName;
|
|
48
38
|
kind: "http-stream";
|
|
49
39
|
}>;
|
|
50
|
-
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-http-stream.js","sourceRoot":"","sources":["../../src/core/create-http-stream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAA;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAE3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AAC5D,OAAO,EAAE,eAAe,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAA;AAC5E,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,iBAAiB,EACjB,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"create-http-stream.js","sourceRoot":"","sources":["../../src/core/create-http-stream.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Infer, Prettify } from '../schema/json-schema.js';
|
|
2
2
|
import type { FactoryRuntime } from './internal.js';
|
|
3
|
-
import type { ProcedureResult, TCreateHttpConfig, TLocalContext } from './types.js';
|
|
3
|
+
import type { HttpReq, ProcedureResult, TCreateHttpConfig, THttpReqInput, THttpResInput, TLocalContext } from './types.js';
|
|
4
4
|
/**
|
|
5
5
|
* The handler return shape is gated by the DECLARED response schema, not by
|
|
6
6
|
* duck-typing the returned value — so domain objects that happen to have
|
|
@@ -22,13 +22,7 @@ export type HttpReturn<TRes> = TRes extends {
|
|
|
22
22
|
} : TRes extends {
|
|
23
23
|
body: infer B;
|
|
24
24
|
} ? Infer<B> : void;
|
|
25
|
-
|
|
26
|
-
[K in keyof TReq]: Infer<TReq[K]>;
|
|
27
|
-
}> : undefined;
|
|
28
|
-
export declare function makeCreateHttp<TContext>(runtime: FactoryRuntime<TContext, any>): <TName extends string, TReq extends Record<string, unknown> | undefined = undefined, TRes extends {
|
|
29
|
-
body?: unknown;
|
|
30
|
-
headers?: unknown;
|
|
31
|
-
} | undefined = undefined, TErrorKey extends string = string>(name: TName, config: TCreateHttpConfig<TReq, TRes, TErrorKey>, handler: (ctx: Prettify<TContext & TLocalContext>, req: HttpReq<TReq>) => Promise<HttpReturn<TRes>>) => ProcedureResult<TName, (ctx: Prettify<TContext>, req: HttpReq<TReq>) => Promise<HttpReturn<TRes>>, {
|
|
25
|
+
export declare function makeCreateHttp<TContext>(runtime: FactoryRuntime<TContext, any>): <TName extends string, TReq extends THttpReqInput | undefined = undefined, TRes extends THttpResInput | undefined = undefined, TErrorKey extends string = string>(name: TName, config: TCreateHttpConfig<TReq, TRes, TErrorKey>, handler: (ctx: Prettify<TContext & TLocalContext>, req: HttpReq<TReq>) => Promise<HttpReturn<TRes>>) => ProcedureResult<TName, (ctx: Prettify<TContext>, req: HttpReq<TReq>) => Promise<HttpReturn<TRes>>, {
|
|
32
26
|
path: string;
|
|
33
27
|
method: import("./types.js").HttpMethod;
|
|
34
28
|
successStatus?: number;
|
|
@@ -48,4 +42,3 @@ export declare function makeCreateHttp<TContext>(runtime: FactoryRuntime<TContex
|
|
|
48
42
|
name: TName;
|
|
49
43
|
kind: "http";
|
|
50
44
|
}>;
|
|
51
|
-
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-http.js","sourceRoot":"","sources":["../../src/core/create-http.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAA;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAE3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AAC5D,OAAO,EAAE,eAAe,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAA;AAC5E,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"create-http.js","sourceRoot":"","sources":["../../src/core/create-http.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { Type } from 'typebox';
|
|
2
|
+
import { describe, expectTypeOf, test } from 'vitest';
|
|
3
|
+
import { Procedures } from './procedures.js';
|
|
4
|
+
// ---------------------------------------------------------------------------
|
|
5
|
+
// Type tests for HTTP input shape autocomplete / DX contract
|
|
6
|
+
// These guard the shapes that power IDE autocomplete for schema.req / schema.res.
|
|
7
|
+
// ---------------------------------------------------------------------------
|
|
8
|
+
describe('THttpReqInput / THttpResInput / APIInput', () => {
|
|
9
|
+
test('APIInput accepts only the four known channels', () => {
|
|
10
|
+
// Valid
|
|
11
|
+
const good = {
|
|
12
|
+
pathParams: Type.Object({ id: Type.String() }),
|
|
13
|
+
query: Type.Object({}),
|
|
14
|
+
body: Type.Object({}),
|
|
15
|
+
headers: Type.Object({}),
|
|
16
|
+
};
|
|
17
|
+
expectTypeOf(good).toEqualTypeOf();
|
|
18
|
+
// Invalid channel should not be assignable
|
|
19
|
+
// @ts-expect-error - unknown channel name
|
|
20
|
+
const _bad = { wrong: Type.Object({}) };
|
|
21
|
+
});
|
|
22
|
+
test('THttpResInput shape', () => {
|
|
23
|
+
const resShape = {
|
|
24
|
+
body: Type.Object({ ok: Type.Boolean() }),
|
|
25
|
+
headers: Type.Object({ 'x-foo': Type.String() }),
|
|
26
|
+
};
|
|
27
|
+
expectTypeOf(resShape).toEqualTypeOf();
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
describe('TCreateHttpConfig shapes for literals', () => {
|
|
31
|
+
test('config literal gets the channel keys from the shape (autocomplete contract)', () => {
|
|
32
|
+
const cfg = {
|
|
33
|
+
path: '/x',
|
|
34
|
+
method: 'get',
|
|
35
|
+
schema: {
|
|
36
|
+
req: {
|
|
37
|
+
// These keys should be suggested by the IDE
|
|
38
|
+
pathParams: Type.Object({ id: Type.String() }),
|
|
39
|
+
query: undefined,
|
|
40
|
+
},
|
|
41
|
+
res: {
|
|
42
|
+
body: Type.Object({}),
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
expectTypeOf(cfg).toEqualTypeOf();
|
|
47
|
+
});
|
|
48
|
+
test('using satisfies APIInput on req is valid and preserves specific types', () => {
|
|
49
|
+
const req = {
|
|
50
|
+
pathParams: Type.Object({ id: Type.String() }),
|
|
51
|
+
query: Type.Object({ q: Type.Optional(Type.String()) }),
|
|
52
|
+
};
|
|
53
|
+
const cfg = {
|
|
54
|
+
path: '/y',
|
|
55
|
+
method: 'get',
|
|
56
|
+
schema: { req },
|
|
57
|
+
};
|
|
58
|
+
// The assignment succeeded, proving the shape accepted the keys
|
|
59
|
+
// (specific inference of TReq from literal is a bonus)
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
describe('handler inference via HttpReq / HttpReturn', () => {
|
|
63
|
+
const procs = Procedures();
|
|
64
|
+
test('full req shape produces correctly typed handler param', () => {
|
|
65
|
+
const { Get } = procs.CreateHttp('Get', {
|
|
66
|
+
path: '/u/:id',
|
|
67
|
+
method: 'get',
|
|
68
|
+
schema: {
|
|
69
|
+
req: {
|
|
70
|
+
pathParams: Type.Object({ id: Type.String() }),
|
|
71
|
+
query: Type.Object({ verbose: Type.Optional(Type.Boolean()) }),
|
|
72
|
+
},
|
|
73
|
+
},
|
|
74
|
+
}, async (_ctx, req) => {
|
|
75
|
+
expectTypeOf(req).toEqualTypeOf();
|
|
76
|
+
// no res schema => void
|
|
77
|
+
return undefined;
|
|
78
|
+
});
|
|
79
|
+
expectTypeOf().toEqualTypeOf();
|
|
80
|
+
});
|
|
81
|
+
test('res with headers produces { body, headers } return shape', () => {
|
|
82
|
+
const { WithHeaders } = procs.CreateHttp('WithHeaders', {
|
|
83
|
+
path: '/h',
|
|
84
|
+
method: 'get',
|
|
85
|
+
schema: {
|
|
86
|
+
res: {
|
|
87
|
+
body: Type.Object({ data: Type.String() }),
|
|
88
|
+
headers: Type.Object({ 'x-trace': Type.String() }),
|
|
89
|
+
},
|
|
90
|
+
},
|
|
91
|
+
}, async () => ({ body: { data: 'hi' }, headers: { 'x-trace': 'abc' } }));
|
|
92
|
+
expectTypeOf().toEqualTypeOf();
|
|
93
|
+
});
|
|
94
|
+
test('no schema.res yields void (204-style)', () => {
|
|
95
|
+
const { Logout } = procs.CreateHttp('Logout', { path: '/logout', method: 'post' }, async () => undefined);
|
|
96
|
+
expectTypeOf().toEqualTypeOf();
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
// Smoke test that HttpReq and HttpSchemaInput are exported and usable
|
|
100
|
+
test('HttpReq and HttpSchemaInput are exported and usable', () => {
|
|
101
|
+
expectTypeOf().toHaveProperty('pathParams');
|
|
102
|
+
expectTypeOf().toHaveProperty('query');
|
|
103
|
+
});
|
|
104
|
+
//# sourceMappingURL=create-http.test-d.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-http.test-d.js","sourceRoot":"","sources":["../../src/core/create-http.test-d.ts"],"names":[],"mappings":"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"}
|
|
@@ -70,10 +70,7 @@ export declare function Procedures<TContext = TNoContextProvided, TExtendedConfi
|
|
|
70
70
|
yield?: import("../schema/compile.js").Validate;
|
|
71
71
|
} | undefined;
|
|
72
72
|
} & TExtendedConfig>;
|
|
73
|
-
CreateHttp: <TName extends string, TReq extends
|
|
74
|
-
body?: unknown;
|
|
75
|
-
headers?: unknown;
|
|
76
|
-
} | undefined = undefined, TErrorKey extends string = string>(name: TName, config: import("./types.js").TCreateHttpConfig<TReq, TRes, TErrorKey>, handler: (ctx: TContext & import("./types.js").TLocalContext extends infer T ? { [Key in keyof T]: T[Key]; } : never, req: TReq extends Record<string, unknown> ? { [Key_1 in keyof { [K in keyof TReq]: import("../exports.js").Infer<TReq[K]>; }]: { [K in keyof TReq]: import("../exports.js").Infer<TReq[K]>; }[Key_1]; } : undefined) => Promise<import("./create-http.js").HttpReturn<TRes>>) => import("./types.js").ProcedureResult<TName, (ctx: { [Key in keyof TContext]: TContext[Key]; }, req: TReq extends Record<string, unknown> ? { [Key_1 in keyof { [K in keyof TReq]: import("../exports.js").Infer<TReq[K]>; }]: { [K in keyof TReq]: import("../exports.js").Infer<TReq[K]>; }[Key_1]; } : undefined) => Promise<import("./create-http.js").HttpReturn<TRes>>, {
|
|
73
|
+
CreateHttp: <TName extends string, TReq extends import("./types.js").THttpReqInput | undefined = undefined, TRes extends import("./types.js").THttpResInput | undefined = undefined, TErrorKey extends string = string>(name: TName, config: import("./types.js").TCreateHttpConfig<TReq, TRes, TErrorKey>, handler: (ctx: TContext & import("./types.js").TLocalContext extends infer T ? { [Key in keyof T]: T[Key]; } : never, req: import("./types.js").HttpReq<TReq>) => Promise<import("./create-http.js").HttpReturn<TRes>>) => import("./types.js").ProcedureResult<TName, (ctx: { [Key in keyof TContext]: TContext[Key]; }, req: import("./types.js").HttpReq<TReq>) => Promise<import("./create-http.js").HttpReturn<TRes>>, {
|
|
77
74
|
path: string;
|
|
78
75
|
method: import("./types.js").HttpMethod;
|
|
79
76
|
successStatus?: number;
|
|
@@ -93,29 +90,22 @@ export declare function Procedures<TContext = TNoContextProvided, TExtendedConfi
|
|
|
93
90
|
name: TName;
|
|
94
91
|
kind: "http";
|
|
95
92
|
}>;
|
|
96
|
-
CreateHttpStream: <TName extends string, TReq extends
|
|
93
|
+
CreateHttpStream: <TName extends string, TReq extends import("./types.js").THttpReqInput | undefined, TYieldType, TReturnType = void, TResHeaders = undefined, TErrorKey extends string = string>(name: TName, config: {
|
|
97
94
|
path: string;
|
|
98
95
|
method: import("./types.js").HttpMethod;
|
|
99
96
|
scope?: string;
|
|
100
97
|
errors?: TErrorKey[] | undefined;
|
|
101
98
|
description?: string;
|
|
102
|
-
schema:
|
|
103
|
-
req?: TReq | undefined;
|
|
104
|
-
yield?: TYieldType | undefined;
|
|
105
|
-
returnType?: TReturnType | undefined;
|
|
106
|
-
res?: (TResHeaders extends undefined ? undefined : {
|
|
107
|
-
headers: TResHeaders;
|
|
108
|
-
}) | undefined;
|
|
109
|
-
};
|
|
99
|
+
schema: import("./types.js").THttpStreamSchema<TReq, TYieldType, TReturnType, TResHeaders>;
|
|
110
100
|
validateYields?: boolean;
|
|
111
101
|
}, handler: TResHeaders extends undefined ? (ctx: TContext & import("./types.js").TLocalContext & {
|
|
112
102
|
signal: AbortSignal;
|
|
113
|
-
} extends infer T ? { [Key in keyof T]: T[Key]; } : never, req:
|
|
103
|
+
} extends infer T ? { [Key in keyof T]: T[Key]; } : never, req: import("./types.js").HttpReq<TReq>) => AsyncGenerator<import("../exports.js").Infer<TYieldType>, void | import("../exports.js").Infer<TReturnType>, unknown> : (ctx: TContext & import("./types.js").TLocalContext & {
|
|
114
104
|
signal: AbortSignal;
|
|
115
|
-
} extends infer T ? { [Key in keyof T]: T[Key]; } : never, req:
|
|
105
|
+
} extends infer T ? { [Key in keyof T]: T[Key]; } : never, req: import("./types.js").HttpReq<TReq>) => Promise<{
|
|
116
106
|
headers: import("../exports.js").Infer<TResHeaders>;
|
|
117
107
|
stream: AsyncGenerator<import("../exports.js").Infer<TYieldType>, void | import("../exports.js").Infer<TReturnType>, unknown>;
|
|
118
|
-
}>) => import("./types.js").ProcedureResult<TName, (ctx: { [Key in keyof TContext]: TContext[Key]; }, req:
|
|
108
|
+
}>) => import("./types.js").ProcedureResult<TName, (ctx: { [Key in keyof TContext]: TContext[Key]; }, req: import("./types.js").HttpReq<TReq>) => Promise<{
|
|
119
109
|
stream: AsyncGenerator<import("../exports.js").Infer<TYieldType>, void | import("../exports.js").Infer<TReturnType>, unknown>;
|
|
120
110
|
initialHeaders?: Record<string, string>;
|
|
121
111
|
}>, {
|
package/build/core/types.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type * as AJV from 'ajv';
|
|
2
2
|
import type { ProcedureError } from './errors.js';
|
|
3
3
|
import type { SchemaAdapter } from '../schema/adapter.js';
|
|
4
|
-
import type { TJSONSchema } from '../schema/json-schema.js';
|
|
4
|
+
import type { Infer, Prettify, TJSONSchema } from '../schema/json-schema.js';
|
|
5
5
|
import type { Validate } from '../schema/compile.js';
|
|
6
6
|
export type TNoContextProvided = unknown;
|
|
7
7
|
/**
|
|
@@ -61,7 +61,52 @@ export type TStreamProcedureRegistration<TContext = unknown, TExtendedConfig = u
|
|
|
61
61
|
handler: (ctx: TContext, params?: any) => AsyncGenerator<any, any, unknown>;
|
|
62
62
|
};
|
|
63
63
|
export type HttpMethod = 'get' | 'post' | 'put' | 'delete' | 'patch' | 'head';
|
|
64
|
-
|
|
64
|
+
/**
|
|
65
|
+
* Canonical shape for `schema.req` channels.
|
|
66
|
+
* Used both to constrain generics and to provide autocomplete when writing
|
|
67
|
+
* `CreateHttp` / `CreateHttpStream` config objects.
|
|
68
|
+
*
|
|
69
|
+
* Note: RPC `Create` / `CreateStream` use a flatter `schema: { params?, yieldType?, returnType? }`
|
|
70
|
+
* directly (no extra container generic), so they don't need an equivalent named input shape.
|
|
71
|
+
*/
|
|
72
|
+
export type THttpReqInput = {
|
|
73
|
+
pathParams?: unknown;
|
|
74
|
+
query?: unknown;
|
|
75
|
+
body?: unknown;
|
|
76
|
+
headers?: unknown;
|
|
77
|
+
};
|
|
78
|
+
/**
|
|
79
|
+
* Canonical shape for `schema.res` on CreateHttp (CreateHttpStream only supports `headers`).
|
|
80
|
+
*/
|
|
81
|
+
export type THttpResInput = {
|
|
82
|
+
body?: unknown;
|
|
83
|
+
headers?: unknown;
|
|
84
|
+
};
|
|
85
|
+
/**
|
|
86
|
+
* @internal Helper to surface literal channel keys for autocomplete
|
|
87
|
+
* while still threading the user's concrete generic schemas through for inference.
|
|
88
|
+
*/
|
|
89
|
+
export type HttpSchemaInput<Base, T> = Base & (T extends undefined ? {} : T);
|
|
90
|
+
/**
|
|
91
|
+
* @internal Shared helper for typing the destructured `req` argument passed to
|
|
92
|
+
* CreateHttp / CreateHttpStream handlers. Mirrors the per-channel Infer.
|
|
93
|
+
*/
|
|
94
|
+
export type HttpReq<TReq> = TReq extends Record<string, unknown> ? Prettify<{
|
|
95
|
+
[K in keyof TReq]: Infer<TReq[K]>;
|
|
96
|
+
}> : undefined;
|
|
97
|
+
/**
|
|
98
|
+
* Shape used for the `schema` option of `CreateHttpStream`.
|
|
99
|
+
* Reuses the same req input shape as CreateHttp for autocomplete consistency.
|
|
100
|
+
*/
|
|
101
|
+
export type THttpStreamSchema<TReq extends THttpReqInput | undefined = undefined, TYield = unknown, TReturn = void, TResHeaders = undefined> = {
|
|
102
|
+
req?: HttpSchemaInput<THttpReqInput, TReq>;
|
|
103
|
+
yield?: TYield;
|
|
104
|
+
returnType?: TReturn;
|
|
105
|
+
res?: TResHeaders extends undefined ? undefined : {
|
|
106
|
+
headers: TResHeaders;
|
|
107
|
+
};
|
|
108
|
+
};
|
|
109
|
+
export type TCreateHttpConfig<TReq extends THttpReqInput | undefined = undefined, TRes extends THttpResInput | undefined = undefined, TErrorKey extends string = string> = {
|
|
65
110
|
path: string;
|
|
66
111
|
method: HttpMethod;
|
|
67
112
|
successStatus?: number;
|
|
@@ -70,8 +115,8 @@ export type TCreateHttpConfig<TReq, TRes, TErrorKey extends string = string> = {
|
|
|
70
115
|
description?: string;
|
|
71
116
|
/** Optional — a no-input, no-output route (e.g. a 204 logout) may omit it. */
|
|
72
117
|
schema?: {
|
|
73
|
-
req?: TReq
|
|
74
|
-
res?: TRes
|
|
118
|
+
req?: HttpSchemaInput<THttpReqInput, TReq>;
|
|
119
|
+
res?: HttpSchemaInput<THttpResInput, TRes>;
|
|
75
120
|
};
|
|
76
121
|
};
|
|
77
122
|
export type THttpProcedureRegistration<TContext = unknown> = {
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { TSchemaValidationError } from './schema/parser.js';
|
|
2
|
+
import { DefinitionInfo, DefinitionLocation } from './stack-utils.js';
|
|
3
|
+
export declare class ProcedureError extends Error {
|
|
4
|
+
readonly procedureName: string;
|
|
5
|
+
readonly message: string;
|
|
6
|
+
readonly meta?: object | undefined;
|
|
7
|
+
cause?: unknown;
|
|
8
|
+
readonly definedAt?: DefinitionLocation;
|
|
9
|
+
readonly definitionStack?: string;
|
|
10
|
+
constructor(procedureName: string, message: string, meta?: object | undefined, definitionInfo?: DefinitionInfo);
|
|
11
|
+
/**
|
|
12
|
+
* Returns a formatted string showing where the procedure was defined.
|
|
13
|
+
*/
|
|
14
|
+
getDefinitionLocation(): string | undefined;
|
|
15
|
+
/**
|
|
16
|
+
* Enhances the error stack with definition location information.
|
|
17
|
+
*/
|
|
18
|
+
private enhanceStack;
|
|
19
|
+
}
|
|
20
|
+
export declare class ProcedureValidationError extends ProcedureError {
|
|
21
|
+
readonly procedureName: string;
|
|
22
|
+
readonly errors?: TSchemaValidationError[] | undefined;
|
|
23
|
+
constructor(procedureName: string, message: string, errors?: TSchemaValidationError[] | undefined, definitionInfo?: DefinitionInfo);
|
|
24
|
+
}
|
|
25
|
+
export declare class ProcedureRegistrationError extends ProcedureError {
|
|
26
|
+
readonly procedureName: string;
|
|
27
|
+
constructor(procedureName: string, message: string, definitionInfo?: DefinitionInfo);
|
|
28
|
+
}
|
|
29
|
+
export declare class ProcedureYieldValidationError extends ProcedureError {
|
|
30
|
+
readonly procedureName: string;
|
|
31
|
+
readonly errors?: TSchemaValidationError[] | undefined;
|
|
32
|
+
constructor(procedureName: string, message: string, errors?: TSchemaValidationError[] | undefined, definitionInfo?: DefinitionInfo);
|
|
33
|
+
}
|
package/build/errors.js
ADDED
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { formatDefinitionInfo } from './stack-utils.js';
|
|
2
|
+
import { kebabCase } from 'es-toolkit/string';
|
|
3
|
+
export class ProcedureError extends Error {
|
|
4
|
+
procedureName;
|
|
5
|
+
message;
|
|
6
|
+
meta;
|
|
7
|
+
cause;
|
|
8
|
+
definedAt;
|
|
9
|
+
definitionStack;
|
|
10
|
+
constructor(procedureName, message, meta,
|
|
11
|
+
// Used for error stack trace details
|
|
12
|
+
definitionInfo) {
|
|
13
|
+
super(message);
|
|
14
|
+
this.procedureName = procedureName;
|
|
15
|
+
this.message = message;
|
|
16
|
+
this.meta = meta;
|
|
17
|
+
this.name = 'ProcedureError';
|
|
18
|
+
if (definitionInfo) {
|
|
19
|
+
this.definedAt = definitionInfo.definedAt;
|
|
20
|
+
this.definitionStack = definitionInfo.definitionStack;
|
|
21
|
+
this.enhanceStack();
|
|
22
|
+
}
|
|
23
|
+
// https://www.dannyguo.com/blog/how-to-fix-instanceof-not-working-for-custom-errors-in-typescript/
|
|
24
|
+
Object.setPrototypeOf(this, ProcedureError.prototype);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Returns a formatted string showing where the procedure was defined.
|
|
28
|
+
*/
|
|
29
|
+
getDefinitionLocation() {
|
|
30
|
+
if (!this.definedAt) {
|
|
31
|
+
return undefined;
|
|
32
|
+
}
|
|
33
|
+
return `${this.definedAt.file}:${this.definedAt.line}:${this.definedAt.column}`;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Enhances the error stack with definition location information.
|
|
37
|
+
*/
|
|
38
|
+
enhanceStack() {
|
|
39
|
+
if (!this.stack || !this.definedAt) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
const definitionSection = formatDefinitionInfo({ definedAt: this.definedAt, definitionStack: this.definitionStack }, this.procedureName);
|
|
43
|
+
if (definitionSection) {
|
|
44
|
+
this.stack = this.stack + definitionSection;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
export class ProcedureValidationError extends ProcedureError {
|
|
49
|
+
procedureName;
|
|
50
|
+
errors;
|
|
51
|
+
constructor(procedureName, message, errors,
|
|
52
|
+
// Used for error stack trace details
|
|
53
|
+
definitionInfo) {
|
|
54
|
+
const readableErrors = errors
|
|
55
|
+
?.map((err) => `- ${kebabCase(err.instancePath).replace('-', '.')} ${err.message}`)
|
|
56
|
+
.join(', ');
|
|
57
|
+
super(procedureName, message + ' ' + readableErrors, { errors }, definitionInfo);
|
|
58
|
+
this.procedureName = procedureName;
|
|
59
|
+
this.errors = errors;
|
|
60
|
+
this.name = 'ProcedureValidationError';
|
|
61
|
+
// https://www.dannyguo.com/blog/how-to-fix-instanceof-not-working-for-custom-errors-in-typescript/
|
|
62
|
+
Object.setPrototypeOf(this, ProcedureValidationError.prototype);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
export class ProcedureRegistrationError extends ProcedureError {
|
|
66
|
+
procedureName;
|
|
67
|
+
constructor(procedureName, message,
|
|
68
|
+
// Used for error stack trace details
|
|
69
|
+
definitionInfo) {
|
|
70
|
+
super(procedureName, message, undefined, definitionInfo);
|
|
71
|
+
this.procedureName = procedureName;
|
|
72
|
+
this.name = 'ProcedureRegistrationError';
|
|
73
|
+
// https://www.dannyguo.com/blog/how-to-fix-instanceof-not-working-for-custom-errors-in-typescript/
|
|
74
|
+
Object.setPrototypeOf(this, ProcedureRegistrationError.prototype);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
export class ProcedureYieldValidationError extends ProcedureError {
|
|
78
|
+
procedureName;
|
|
79
|
+
errors;
|
|
80
|
+
constructor(procedureName, message, errors,
|
|
81
|
+
// Used for error stack trace details
|
|
82
|
+
definitionInfo) {
|
|
83
|
+
super(procedureName, message, undefined, definitionInfo);
|
|
84
|
+
this.procedureName = procedureName;
|
|
85
|
+
this.errors = errors;
|
|
86
|
+
this.name = 'ProcedureYieldValidationError';
|
|
87
|
+
// https://www.dannyguo.com/blog/how-to-fix-instanceof-not-working-for-custom-errors-in-typescript/
|
|
88
|
+
Object.setPrototypeOf(this, ProcedureYieldValidationError.prototype);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { describe, expect, test } from 'vitest';
|
|
2
|
+
import { ProcedureError, ProcedureValidationError, ProcedureRegistrationError, } from './errors.js';
|
|
3
|
+
describe('Error Classes', () => {
|
|
4
|
+
test('ProcedureError has correct properties', () => {
|
|
5
|
+
const err = new ProcedureError('TestProc', 'Something failed', { code: 123 });
|
|
6
|
+
expect(err.name).toBe('ProcedureError');
|
|
7
|
+
expect(err.procedureName).toBe('TestProc');
|
|
8
|
+
expect(err.message).toBe('Something failed');
|
|
9
|
+
expect(err.meta).toEqual({ code: 123 });
|
|
10
|
+
expect(err instanceof Error).toBe(true);
|
|
11
|
+
});
|
|
12
|
+
test('ProcedureValidationError extends ProcedureError', () => {
|
|
13
|
+
const err = new ProcedureValidationError('TestProc', 'Validation failed', []);
|
|
14
|
+
expect(err instanceof ProcedureError).toBe(true);
|
|
15
|
+
expect(err instanceof Error).toBe(true);
|
|
16
|
+
expect(err.name).toBe('ProcedureValidationError');
|
|
17
|
+
});
|
|
18
|
+
test('ProcedureRegistrationError extends ProcedureError', () => {
|
|
19
|
+
const err = new ProcedureRegistrationError('TestProc', 'Registration failed');
|
|
20
|
+
expect(err instanceof ProcedureError).toBe(true);
|
|
21
|
+
expect(err instanceof Error).toBe(true);
|
|
22
|
+
expect(err.name).toBe('ProcedureRegistrationError');
|
|
23
|
+
expect(err.procedureName).toBe('TestProc');
|
|
24
|
+
});
|
|
25
|
+
test('ProcedureError supports cause property', () => {
|
|
26
|
+
const cause = new Error('Original error');
|
|
27
|
+
const err = new ProcedureError('TestProc', 'Wrapped error');
|
|
28
|
+
err.cause = cause;
|
|
29
|
+
expect(err.cause).toBe(cause);
|
|
30
|
+
});
|
|
31
|
+
test('All error types have consistent procedureName property', () => {
|
|
32
|
+
const baseErr = new ProcedureError('Proc1', 'message');
|
|
33
|
+
const validationErr = new ProcedureValidationError('Proc2', 'message', []);
|
|
34
|
+
const registrationErr = new ProcedureRegistrationError('Proc3', 'message');
|
|
35
|
+
expect(baseErr.procedureName).toBe('Proc1');
|
|
36
|
+
expect(validationErr.procedureName).toBe('Proc2');
|
|
37
|
+
expect(registrationErr.procedureName).toBe('Proc3');
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
describe('Error Classes - Definition Info', () => {
|
|
41
|
+
const mockDefinitionInfo = {
|
|
42
|
+
definedAt: {
|
|
43
|
+
file: '/app/procedures/user.ts',
|
|
44
|
+
line: 25,
|
|
45
|
+
column: 3,
|
|
46
|
+
raw: 'at Object.<anonymous> (/app/procedures/user.ts:25:3)',
|
|
47
|
+
},
|
|
48
|
+
definitionStack: 'Error\n at Object.<anonymous> (/app/procedures/user.ts:25:3)',
|
|
49
|
+
};
|
|
50
|
+
test('ProcedureError includes definedAt when provided', () => {
|
|
51
|
+
const err = new ProcedureError('TestProc', 'Something failed', undefined, mockDefinitionInfo);
|
|
52
|
+
expect(err.definedAt).toBeDefined();
|
|
53
|
+
expect(err.definedAt?.file).toBe('/app/procedures/user.ts');
|
|
54
|
+
expect(err.definedAt?.line).toBe(25);
|
|
55
|
+
expect(err.definedAt?.column).toBe(3);
|
|
56
|
+
});
|
|
57
|
+
test('ProcedureError includes definitionStack when provided', () => {
|
|
58
|
+
const err = new ProcedureError('TestProc', 'Something failed', undefined, mockDefinitionInfo);
|
|
59
|
+
expect(err.definitionStack).toBeDefined();
|
|
60
|
+
expect(err.definitionStack).toContain('/app/procedures/user.ts');
|
|
61
|
+
});
|
|
62
|
+
test('ProcedureError works without definitionInfo (backward compat)', () => {
|
|
63
|
+
const err = new ProcedureError('TestProc', 'Something failed', { code: 123 });
|
|
64
|
+
expect(err.definedAt).toBeUndefined();
|
|
65
|
+
expect(err.definitionStack).toBeUndefined();
|
|
66
|
+
expect(err.procedureName).toBe('TestProc');
|
|
67
|
+
expect(err.message).toBe('Something failed');
|
|
68
|
+
expect(err.meta).toEqual({ code: 123 });
|
|
69
|
+
});
|
|
70
|
+
test('ProcedureValidationError includes definedAt when provided', () => {
|
|
71
|
+
const err = new ProcedureValidationError('TestProc', 'Validation failed', [], mockDefinitionInfo);
|
|
72
|
+
expect(err.definedAt).toBeDefined();
|
|
73
|
+
expect(err.definedAt?.file).toBe('/app/procedures/user.ts');
|
|
74
|
+
expect(err.definedAt?.line).toBe(25);
|
|
75
|
+
});
|
|
76
|
+
test('ProcedureValidationError works without definitionInfo (backward compat)', () => {
|
|
77
|
+
const err = new ProcedureValidationError('TestProc', 'Validation failed', []);
|
|
78
|
+
expect(err.definedAt).toBeUndefined();
|
|
79
|
+
expect(err.definitionStack).toBeUndefined();
|
|
80
|
+
expect(err.name).toBe('ProcedureValidationError');
|
|
81
|
+
});
|
|
82
|
+
test('ProcedureRegistrationError includes definedAt when provided', () => {
|
|
83
|
+
const err = new ProcedureRegistrationError('TestProc', 'Registration failed', mockDefinitionInfo);
|
|
84
|
+
expect(err.definedAt).toBeDefined();
|
|
85
|
+
expect(err.definedAt?.file).toBe('/app/procedures/user.ts');
|
|
86
|
+
});
|
|
87
|
+
test('ProcedureRegistrationError works without definitionInfo (backward compat)', () => {
|
|
88
|
+
const err = new ProcedureRegistrationError('TestProc', 'Registration failed');
|
|
89
|
+
expect(err.definedAt).toBeUndefined();
|
|
90
|
+
expect(err.definitionStack).toBeUndefined();
|
|
91
|
+
expect(err.name).toBe('ProcedureRegistrationError');
|
|
92
|
+
});
|
|
93
|
+
test('getDefinitionLocation returns formatted location string', () => {
|
|
94
|
+
const err = new ProcedureError('TestProc', 'Something failed', undefined, mockDefinitionInfo);
|
|
95
|
+
const location = err.getDefinitionLocation();
|
|
96
|
+
expect(location).toBe('/app/procedures/user.ts:25:3');
|
|
97
|
+
});
|
|
98
|
+
test('getDefinitionLocation returns undefined when no definedAt', () => {
|
|
99
|
+
const err = new ProcedureError('TestProc', 'Something failed');
|
|
100
|
+
const location = err.getDefinitionLocation();
|
|
101
|
+
expect(location).toBeUndefined();
|
|
102
|
+
});
|
|
103
|
+
test('enhanced stack contains definition location', () => {
|
|
104
|
+
const err = new ProcedureError('TestProc', 'Something failed', undefined, mockDefinitionInfo);
|
|
105
|
+
expect(err.stack).toContain('--- Procedure "TestProc" defined at ---');
|
|
106
|
+
expect(err.stack).toContain('/app/procedures/user.ts:25:3');
|
|
107
|
+
});
|
|
108
|
+
test('stack is not modified when no definitionInfo', () => {
|
|
109
|
+
const err = new ProcedureError('TestProc', 'Something failed');
|
|
110
|
+
expect(err.stack).toBeDefined();
|
|
111
|
+
expect(err.stack).not.toContain('--- Procedure');
|
|
112
|
+
});
|
|
113
|
+
test('all error types enhance stack with definition location', () => {
|
|
114
|
+
const baseErr = new ProcedureError('Proc1', 'message', undefined, mockDefinitionInfo);
|
|
115
|
+
const validationErr = new ProcedureValidationError('Proc2', 'message', [], mockDefinitionInfo);
|
|
116
|
+
const registrationErr = new ProcedureRegistrationError('Proc3', 'message', mockDefinitionInfo);
|
|
117
|
+
expect(baseErr.stack).toContain('--- Procedure "Proc1" defined at ---');
|
|
118
|
+
expect(validationErr.stack).toContain('--- Procedure "Proc2" defined at ---');
|
|
119
|
+
expect(registrationErr.stack).toContain('--- Procedure "Proc3" defined at ---');
|
|
120
|
+
});
|
|
121
|
+
});
|
|
122
|
+
//# sourceMappingURL=errors.test.js.map
|