ts-procedures 5.6.0-beta.2 → 5.7.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/README.md +37 -2
- package/agent_config/claude-code/skills/guide/api-reference.md +29 -6
- package/agent_config/claude-code/skills/guide/patterns.md +1 -0
- package/agent_config/copilot/copilot-instructions.md +7 -0
- package/agent_config/cursor/cursorrules +7 -0
- package/build/codegen/bin/cli.d.ts +27 -1
- package/build/codegen/bin/cli.js +90 -11
- package/build/codegen/bin/cli.js.map +1 -1
- package/build/codegen/bin/cli.test.js +96 -1
- package/build/codegen/bin/cli.test.js.map +1 -1
- package/build/codegen/constants.d.ts +1 -0
- package/build/codegen/constants.js +2 -0
- package/build/codegen/constants.js.map +1 -0
- package/build/codegen/e2e.test.js +143 -0
- package/build/codegen/e2e.test.js.map +1 -1
- package/build/codegen/emit-client-runtime.d.ts +9 -0
- package/build/codegen/emit-client-runtime.js +99 -0
- package/build/codegen/emit-client-runtime.js.map +1 -0
- package/build/codegen/emit-client-runtime.test.d.ts +1 -0
- package/build/codegen/emit-client-runtime.test.js +78 -0
- package/build/codegen/emit-client-runtime.test.js.map +1 -0
- package/build/codegen/emit-client-types.d.ts +8 -0
- package/build/codegen/emit-client-types.js +25 -0
- package/build/codegen/emit-client-types.js.map +1 -0
- package/build/codegen/emit-client-types.test.d.ts +1 -0
- package/build/codegen/emit-client-types.test.js +33 -0
- package/build/codegen/emit-client-types.test.js.map +1 -0
- package/build/codegen/emit-errors.d.ts +8 -1
- package/build/codegen/emit-errors.js +36 -13
- package/build/codegen/emit-errors.js.map +1 -1
- package/build/codegen/emit-errors.test.js +29 -1
- package/build/codegen/emit-errors.test.js.map +1 -1
- package/build/codegen/emit-index.d.ts +5 -1
- package/build/codegen/emit-index.js +4 -5
- package/build/codegen/emit-index.js.map +1 -1
- package/build/codegen/emit-index.test.js +1 -1
- package/build/codegen/emit-index.test.js.map +1 -1
- package/build/codegen/emit-scope.d.ts +10 -1
- package/build/codegen/emit-scope.js +133 -54
- package/build/codegen/emit-scope.js.map +1 -1
- package/build/codegen/emit-scope.test.js +126 -9
- package/build/codegen/emit-scope.test.js.map +1 -1
- package/build/codegen/emit-types.d.ts +29 -0
- package/build/codegen/emit-types.js +79 -8
- package/build/codegen/emit-types.js.map +1 -1
- package/build/codegen/emit-types.test.js +103 -1
- package/build/codegen/emit-types.test.js.map +1 -1
- package/build/codegen/index.d.ts +2 -0
- package/build/codegen/index.js +2 -0
- package/build/codegen/index.js.map +1 -1
- package/build/codegen/pipeline.d.ts +2 -0
- package/build/codegen/pipeline.js +29 -4
- package/build/codegen/pipeline.js.map +1 -1
- package/build/codegen/pipeline.test.js +59 -1
- package/build/codegen/pipeline.test.js.map +1 -1
- package/package.json +10 -2
- package/src/client/call.ts +74 -0
- package/src/client/errors.ts +43 -0
- package/src/client/fetch-adapter.ts +191 -0
- package/src/client/hooks.ts +65 -0
- package/src/client/index.ts +121 -0
- package/src/client/request-builder.ts +73 -0
- package/src/client/stream.ts +164 -0
- package/src/client/types.ts +103 -0
|
@@ -124,6 +124,40 @@ const streamGroupText = {
|
|
|
124
124
|
},
|
|
125
125
|
],
|
|
126
126
|
};
|
|
127
|
+
// Fixture with nested objects for testing extracted sub-types
|
|
128
|
+
const rpcGroupNested = {
|
|
129
|
+
scopeKey: 'accounts',
|
|
130
|
+
camelCase: 'accounts',
|
|
131
|
+
routes: [
|
|
132
|
+
{
|
|
133
|
+
kind: 'rpc',
|
|
134
|
+
name: 'CreateAccount',
|
|
135
|
+
path: '/accounts',
|
|
136
|
+
method: 'post',
|
|
137
|
+
scope: 'accounts',
|
|
138
|
+
version: 1,
|
|
139
|
+
jsonSchema: {
|
|
140
|
+
body: {
|
|
141
|
+
type: 'object',
|
|
142
|
+
properties: {
|
|
143
|
+
owner: {
|
|
144
|
+
type: 'object',
|
|
145
|
+
properties: { name: { type: 'string' }, email: { type: 'string' } },
|
|
146
|
+
required: ['name', 'email'],
|
|
147
|
+
},
|
|
148
|
+
status: { type: 'string', enum: ['active', 'pending'] },
|
|
149
|
+
},
|
|
150
|
+
required: ['owner', 'status'],
|
|
151
|
+
},
|
|
152
|
+
response: {
|
|
153
|
+
type: 'object',
|
|
154
|
+
properties: { id: { type: 'string' } },
|
|
155
|
+
required: ['id'],
|
|
156
|
+
},
|
|
157
|
+
},
|
|
158
|
+
},
|
|
159
|
+
],
|
|
160
|
+
};
|
|
127
161
|
// ---------------------------------------------------------------------------
|
|
128
162
|
// Tests
|
|
129
163
|
// ---------------------------------------------------------------------------
|
|
@@ -189,9 +223,7 @@ describe('emitScopeFile', () => {
|
|
|
189
223
|
});
|
|
190
224
|
it('callable path field uses fullPath not path', async () => {
|
|
191
225
|
const output = await emitScopeFile(apiGroup);
|
|
192
|
-
// fullPath should appear in the path: field of the callable
|
|
193
226
|
expect(output).toContain("path: '/api/posts/:id'");
|
|
194
|
-
// The bare path without prefix should NOT appear as path: value
|
|
195
227
|
expect(output).not.toContain("path: '/posts/:id'");
|
|
196
228
|
});
|
|
197
229
|
});
|
|
@@ -203,13 +235,9 @@ describe('emitScopeFile', () => {
|
|
|
203
235
|
});
|
|
204
236
|
it('unwraps SSE envelope for yieldType', async () => {
|
|
205
237
|
const output = await emitScopeFile(streamGroup);
|
|
206
|
-
// Should have WatchEventsYield type based on the inner data schema, not the full SSE envelope
|
|
207
238
|
expect(output).toContain('export type WatchEventsYield');
|
|
208
|
-
// The yield type should be from the data property (has 'message'), not the envelope (has event/id/retry)
|
|
209
239
|
const yieldTypeMatch = output.match(/export type WatchEventsYield = ([^;]+)/);
|
|
210
240
|
expect(yieldTypeMatch).not.toBeNull();
|
|
211
|
-
// Should NOT contain the SSE envelope fields like "event" or "retry" directly
|
|
212
|
-
// The resolved type should be the inner data object
|
|
213
241
|
});
|
|
214
242
|
it('emits params type from jsonSchema.params', async () => {
|
|
215
243
|
const output = await emitScopeFile(streamGroup);
|
|
@@ -235,7 +263,6 @@ describe('emitScopeFile', () => {
|
|
|
235
263
|
});
|
|
236
264
|
it('handles text stream without SSE unwrapping', async () => {
|
|
237
265
|
const output = await emitScopeFile(streamGroupText);
|
|
238
|
-
// text stream - yieldType is plain string, no unwrapping
|
|
239
266
|
expect(output).toContain('export type GetFeedYield');
|
|
240
267
|
});
|
|
241
268
|
it('omits params type when params schema is undefined', async () => {
|
|
@@ -256,14 +283,104 @@ describe('emitScopeFile', () => {
|
|
|
256
283
|
expect(typesIdx).toBeLessThan(callablesIdx);
|
|
257
284
|
});
|
|
258
285
|
});
|
|
286
|
+
describe('namespaceTypes', () => {
|
|
287
|
+
describe('RPC scope', () => {
|
|
288
|
+
it('wraps types in outer scope namespace and inner route namespace', async () => {
|
|
289
|
+
const output = await emitScopeFile(rpcGroup, { namespaceTypes: true });
|
|
290
|
+
expect(output).toContain('export namespace Users {');
|
|
291
|
+
expect(output).toContain(' export namespace GetUser {');
|
|
292
|
+
});
|
|
293
|
+
it('uses simplified type names inside namespace', async () => {
|
|
294
|
+
const output = await emitScopeFile(rpcGroup, { namespaceTypes: true });
|
|
295
|
+
expect(output).toContain('export type Params =');
|
|
296
|
+
expect(output).toContain('export type Response =');
|
|
297
|
+
expect(output).not.toContain('export type GetUserParams');
|
|
298
|
+
expect(output).not.toContain('export type GetUserResponse');
|
|
299
|
+
});
|
|
300
|
+
it('callable references fully qualified namespace types', async () => {
|
|
301
|
+
const output = await emitScopeFile(rpcGroup, { namespaceTypes: true });
|
|
302
|
+
expect(output).toContain('params: Users.GetUser.Params');
|
|
303
|
+
expect(output).toContain('Promise<Users.GetUser.Response>');
|
|
304
|
+
});
|
|
305
|
+
it('still emits the bind function', async () => {
|
|
306
|
+
const output = await emitScopeFile(rpcGroup, { namespaceTypes: true });
|
|
307
|
+
expect(output).toContain('export function bindUsersScope(client: ClientInstance)');
|
|
308
|
+
});
|
|
309
|
+
});
|
|
310
|
+
describe('API scope', () => {
|
|
311
|
+
it('wraps channel types and structured Params in namespace', async () => {
|
|
312
|
+
const output = await emitScopeFile(apiGroup, { namespaceTypes: true });
|
|
313
|
+
expect(output).toContain('export namespace Posts {');
|
|
314
|
+
expect(output).toContain(' export namespace UpdatePost {');
|
|
315
|
+
expect(output).toContain('export type PathParams =');
|
|
316
|
+
expect(output).toContain('export type Body =');
|
|
317
|
+
expect(output).toContain('export type Response =');
|
|
318
|
+
});
|
|
319
|
+
it('structured Params uses namespace-local channel names', async () => {
|
|
320
|
+
const output = await emitScopeFile(apiGroup, { namespaceTypes: true });
|
|
321
|
+
expect(output).toContain('export type Params = { pathParams: PathParams; body: Body }');
|
|
322
|
+
});
|
|
323
|
+
it('callable references fully qualified namespace types', async () => {
|
|
324
|
+
const output = await emitScopeFile(apiGroup, { namespaceTypes: true });
|
|
325
|
+
expect(output).toContain('params: Posts.UpdatePost.Params');
|
|
326
|
+
expect(output).toContain('Promise<Posts.UpdatePost.Response>');
|
|
327
|
+
});
|
|
328
|
+
});
|
|
329
|
+
describe('Stream scope', () => {
|
|
330
|
+
it('wraps stream types in namespace', async () => {
|
|
331
|
+
const output = await emitScopeFile(streamGroup, { namespaceTypes: true });
|
|
332
|
+
expect(output).toContain('export namespace Events {');
|
|
333
|
+
expect(output).toContain(' export namespace WatchEvents {');
|
|
334
|
+
expect(output).toContain('export type Params =');
|
|
335
|
+
expect(output).toContain('export type Yield =');
|
|
336
|
+
expect(output).toContain('export type Return =');
|
|
337
|
+
});
|
|
338
|
+
it('callable references fully qualified namespace types', async () => {
|
|
339
|
+
const output = await emitScopeFile(streamGroup, { namespaceTypes: true });
|
|
340
|
+
expect(output).toContain('params: Events.WatchEvents.Params');
|
|
341
|
+
expect(output).toContain('TypedStream<Events.WatchEvents.Yield, Events.WatchEvents.Return>');
|
|
342
|
+
});
|
|
343
|
+
});
|
|
344
|
+
describe('extracted sub-types (inlineTypes: false)', () => {
|
|
345
|
+
it('extracts nested object types into the namespace', async () => {
|
|
346
|
+
const output = await emitScopeFile(rpcGroupNested, { namespaceTypes: true });
|
|
347
|
+
// ajsc should extract the nested 'owner' object as a named type
|
|
348
|
+
expect(output).toContain('export namespace Accounts {');
|
|
349
|
+
expect(output).toContain('export namespace CreateAccount {');
|
|
350
|
+
expect(output).toContain('export type Owner =');
|
|
351
|
+
expect(output).toContain('export type Params =');
|
|
352
|
+
});
|
|
353
|
+
it('enables enumStyle: enum in namespace mode', async () => {
|
|
354
|
+
const output = await emitScopeFile(rpcGroupNested, {
|
|
355
|
+
namespaceTypes: true,
|
|
356
|
+
ajsc: { enumStyle: 'enum' },
|
|
357
|
+
});
|
|
358
|
+
// With enumStyle: 'enum', the status enum should be extracted
|
|
359
|
+
expect(output).toContain('export enum Status');
|
|
360
|
+
});
|
|
361
|
+
it('ajsc formatting options are ignored in flat mode', async () => {
|
|
362
|
+
const output = await emitScopeFile(rpcGroupNested, {
|
|
363
|
+
ajsc: { enumStyle: 'enum' },
|
|
364
|
+
});
|
|
365
|
+
// In flat mode (inlineTypes: true), enumStyle: 'enum' has no effect
|
|
366
|
+
expect(output).not.toContain('export enum');
|
|
367
|
+
expect(output).toContain('"active" | "pending"');
|
|
368
|
+
});
|
|
369
|
+
});
|
|
370
|
+
it('defaults to flat mode when namespaceTypes is false', async () => {
|
|
371
|
+
const output = await emitScopeFile(rpcGroup, { namespaceTypes: false });
|
|
372
|
+
expect(output).not.toContain('export namespace');
|
|
373
|
+
expect(output).toContain('export type GetUserParams');
|
|
374
|
+
});
|
|
375
|
+
});
|
|
259
376
|
describe('clientImportPath', () => {
|
|
260
377
|
it('uses custom clientImportPath in import statement', async () => {
|
|
261
|
-
const output = await emitScopeFile(rpcGroup,
|
|
378
|
+
const output = await emitScopeFile(rpcGroup, { clientImportPath: '@my-app/client' });
|
|
262
379
|
expect(output).toContain("from '@my-app/client'");
|
|
263
380
|
expect(output).not.toContain("from 'ts-procedures/client'");
|
|
264
381
|
});
|
|
265
382
|
it('uses custom clientImportPath for stream scope imports', async () => {
|
|
266
|
-
const output = await emitScopeFile(streamGroup,
|
|
383
|
+
const output = await emitScopeFile(streamGroup, { clientImportPath: '@my-app/client' });
|
|
267
384
|
expect(output).toContain("from '@my-app/client'");
|
|
268
385
|
expect(output).toContain('TypedStream');
|
|
269
386
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emit-scope.test.js","sourceRoot":"","sources":["../../src/codegen/emit-scope.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"emit-scope.test.js","sourceRoot":"","sources":["../../src/codegen/emit-scope.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,9 @@ export interface AjscOptions {
|
|
|
2
2
|
enumStyle?: 'union' | 'enum';
|
|
3
3
|
depluralize?: boolean;
|
|
4
4
|
inlineTypes?: boolean;
|
|
5
|
+
arrayItemNaming?: string | false;
|
|
6
|
+
uncountableWords?: string[];
|
|
7
|
+
jsdoc?: boolean;
|
|
5
8
|
}
|
|
6
9
|
/**
|
|
7
10
|
* Converts a JSON Schema to a TypeScript type string using ajsc.
|
|
@@ -12,3 +15,29 @@ export interface AjscOptions {
|
|
|
12
15
|
* Returns undefined for undefined or null schema.
|
|
13
16
|
*/
|
|
14
17
|
export declare function jsonSchemaToTypeString(typeName: string, schema: Record<string, unknown> | undefined, options?: AjscOptions): Promise<string | undefined>;
|
|
18
|
+
/**
|
|
19
|
+
* Converts a JSON Schema to a bare TypeScript type body using ajsc.
|
|
20
|
+
*
|
|
21
|
+
* Returns just the type literal (e.g., `{ id: string; }`) without any
|
|
22
|
+
* `export type Name =` wrapper. Used by flat mode in emit-scope.
|
|
23
|
+
*
|
|
24
|
+
* Returns undefined for undefined or null schema.
|
|
25
|
+
*/
|
|
26
|
+
export declare function jsonSchemaToTypeBody(schema: Record<string, unknown> | undefined, options?: AjscOptions): Promise<string | undefined>;
|
|
27
|
+
export interface ExtractedTypeOutput {
|
|
28
|
+
/** Extracted sub-type/enum declarations (e.g., `export type Address = { ... }`, `export enum Status { ... }`). */
|
|
29
|
+
declarations: string[];
|
|
30
|
+
/** The root type body (bare literal, e.g., `{ user: User; }`) without the `export type Root =` wrapper. */
|
|
31
|
+
body: string;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Converts a JSON Schema to extracted TypeScript types using ajsc with
|
|
35
|
+
* `inlineTypes: false`. This produces named sub-types (objects, enums) that
|
|
36
|
+
* are separated from the root type body.
|
|
37
|
+
*
|
|
38
|
+
* Used in namespace mode where sub-types live naturally inside the namespace
|
|
39
|
+
* and ajsc formatting options (enumStyle, depluralize, jsdoc, etc.) take effect.
|
|
40
|
+
*
|
|
41
|
+
* Returns undefined for undefined or null schema.
|
|
42
|
+
*/
|
|
43
|
+
export declare function jsonSchemaToExtractedTypes(schema: Record<string, unknown> | undefined, options?: AjscOptions): Promise<ExtractedTypeOutput | undefined>;
|
|
@@ -10,6 +10,23 @@ async function validateAjscFormat() {
|
|
|
10
10
|
console.warn(`[ts-procedures-codegen] ajsc output format may have changed. Expected "string" for { type: "string" }, got: "${probeCode}"`);
|
|
11
11
|
}
|
|
12
12
|
}
|
|
13
|
+
async function resolveTypeBody(schema, options) {
|
|
14
|
+
await validateAjscFormat();
|
|
15
|
+
const { TypescriptConverter } = await import('ajsc');
|
|
16
|
+
const converter = new TypescriptConverter(schema, {
|
|
17
|
+
...options,
|
|
18
|
+
inlineTypes: true,
|
|
19
|
+
});
|
|
20
|
+
let code = converter.code.trim();
|
|
21
|
+
if (!code) {
|
|
22
|
+
throw new Error(`[ts-procedures-codegen] ajsc produced empty output. Schema: ${JSON.stringify(schema)}`);
|
|
23
|
+
}
|
|
24
|
+
// Strip any 'export type X = ' or 'type X = ' prefix ajsc might add
|
|
25
|
+
code = code.replace(/^(?:export\s+)?type\s+\w+\s*=\s*/, '');
|
|
26
|
+
// Remove trailing semicolons and newlines
|
|
27
|
+
code = code.replace(/;\s*$/, '').trim();
|
|
28
|
+
return code;
|
|
29
|
+
}
|
|
13
30
|
/**
|
|
14
31
|
* Converts a JSON Schema to a TypeScript type string using ajsc.
|
|
15
32
|
*
|
|
@@ -19,22 +36,76 @@ async function validateAjscFormat() {
|
|
|
19
36
|
* Returns undefined for undefined or null schema.
|
|
20
37
|
*/
|
|
21
38
|
export async function jsonSchemaToTypeString(typeName, schema, options) {
|
|
39
|
+
if (schema == null)
|
|
40
|
+
return undefined;
|
|
41
|
+
const code = await resolveTypeBody(schema, options);
|
|
42
|
+
return `export type ${typeName} = ${code}`;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Converts a JSON Schema to a bare TypeScript type body using ajsc.
|
|
46
|
+
*
|
|
47
|
+
* Returns just the type literal (e.g., `{ id: string; }`) without any
|
|
48
|
+
* `export type Name =` wrapper. Used by flat mode in emit-scope.
|
|
49
|
+
*
|
|
50
|
+
* Returns undefined for undefined or null schema.
|
|
51
|
+
*/
|
|
52
|
+
export async function jsonSchemaToTypeBody(schema, options) {
|
|
53
|
+
if (schema == null)
|
|
54
|
+
return undefined;
|
|
55
|
+
return resolveTypeBody(schema, options);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Converts a JSON Schema to extracted TypeScript types using ajsc with
|
|
59
|
+
* `inlineTypes: false`. This produces named sub-types (objects, enums) that
|
|
60
|
+
* are separated from the root type body.
|
|
61
|
+
*
|
|
62
|
+
* Used in namespace mode where sub-types live naturally inside the namespace
|
|
63
|
+
* and ajsc formatting options (enumStyle, depluralize, jsdoc, etc.) take effect.
|
|
64
|
+
*
|
|
65
|
+
* Returns undefined for undefined or null schema.
|
|
66
|
+
*/
|
|
67
|
+
export async function jsonSchemaToExtractedTypes(schema, options) {
|
|
22
68
|
if (schema == null)
|
|
23
69
|
return undefined;
|
|
24
70
|
await validateAjscFormat();
|
|
25
71
|
const { TypescriptConverter } = await import('ajsc');
|
|
26
72
|
const converter = new TypescriptConverter(schema, {
|
|
27
73
|
...options,
|
|
28
|
-
inlineTypes:
|
|
74
|
+
inlineTypes: false,
|
|
29
75
|
});
|
|
30
|
-
|
|
76
|
+
const code = converter.code.trim();
|
|
31
77
|
if (!code) {
|
|
32
|
-
throw new Error(`[ts-procedures-codegen] ajsc produced empty output
|
|
78
|
+
throw new Error(`[ts-procedures-codegen] ajsc produced empty output. Schema: ${JSON.stringify(schema)}`);
|
|
33
79
|
}
|
|
34
|
-
//
|
|
35
|
-
|
|
36
|
-
//
|
|
37
|
-
|
|
38
|
-
|
|
80
|
+
// ajsc with inlineTypes: false produces blocks separated by blank lines:
|
|
81
|
+
// export enum Status { Active = "active" }
|
|
82
|
+
// export type Contact = { name: string; };
|
|
83
|
+
// export type Root = { status: Status; contacts: Array<Contact>; };
|
|
84
|
+
//
|
|
85
|
+
// The Root type is always the last declaration.
|
|
86
|
+
const blocks = code.split(/\n\n+/).map((b) => b.trim()).filter(Boolean);
|
|
87
|
+
const declarations = [];
|
|
88
|
+
let body = '';
|
|
89
|
+
for (const block of blocks) {
|
|
90
|
+
if (block.startsWith('export type Root')) {
|
|
91
|
+
// Strip "export type Root = " prefix and trailing ";"
|
|
92
|
+
body = block
|
|
93
|
+
.replace(/^export\s+type\s+Root\s*=\s*/, '')
|
|
94
|
+
.replace(/;\s*$/, '')
|
|
95
|
+
.trim();
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
// Sub-type or enum declaration — remove trailing ";" for consistency
|
|
99
|
+
declarations.push(block.replace(/;\s*$/, ''));
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
if (!body) {
|
|
103
|
+
// Fallback: treat whole output as inline body
|
|
104
|
+
body = code
|
|
105
|
+
.replace(/^(?:export\s+)?type\s+\w+\s*=\s*/, '')
|
|
106
|
+
.replace(/;\s*$/, '')
|
|
107
|
+
.trim();
|
|
108
|
+
}
|
|
109
|
+
return { declarations, body };
|
|
39
110
|
}
|
|
40
111
|
//# sourceMappingURL=emit-types.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emit-types.js","sourceRoot":"","sources":["../../src/codegen/emit-types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"emit-types.js","sourceRoot":"","sources":["../../src/codegen/emit-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { describe, expect, it, vi } from 'vitest';
|
|
2
|
-
import { jsonSchemaToTypeString } from './emit-types.js';
|
|
2
|
+
import { jsonSchemaToTypeString, jsonSchemaToTypeBody, jsonSchemaToExtractedTypes } from './emit-types.js';
|
|
3
3
|
// ---------------------------------------------------------------------------
|
|
4
4
|
// Tests
|
|
5
5
|
// ---------------------------------------------------------------------------
|
|
@@ -59,6 +59,108 @@ describe('jsonSchemaToTypeString', () => {
|
|
|
59
59
|
const result = await jsonSchemaToTypeString('MyType', schema);
|
|
60
60
|
expect(result).toBe('export type MyType = { id: string; }');
|
|
61
61
|
});
|
|
62
|
+
it('returns undefined for null schema', async () => {
|
|
63
|
+
const result = await jsonSchemaToTypeString('Missing', null);
|
|
64
|
+
expect(result).toBeUndefined();
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
describe('jsonSchemaToTypeBody', () => {
|
|
68
|
+
it('returns bare type literal without export wrapper', async () => {
|
|
69
|
+
const schema = {
|
|
70
|
+
type: 'object',
|
|
71
|
+
properties: { id: { type: 'string' } },
|
|
72
|
+
required: ['id'],
|
|
73
|
+
};
|
|
74
|
+
const result = await jsonSchemaToTypeBody(schema);
|
|
75
|
+
expect(result).toBe('{ id: string; }');
|
|
76
|
+
});
|
|
77
|
+
it('returns undefined for undefined schema', async () => {
|
|
78
|
+
const result = await jsonSchemaToTypeBody(undefined);
|
|
79
|
+
expect(result).toBeUndefined();
|
|
80
|
+
});
|
|
81
|
+
it('returns plain type for scalar schema', async () => {
|
|
82
|
+
const result = await jsonSchemaToTypeBody({ type: 'string' });
|
|
83
|
+
expect(result).toBe('string');
|
|
84
|
+
});
|
|
85
|
+
it('returns union for enum schema', async () => {
|
|
86
|
+
const result = await jsonSchemaToTypeBody({ type: 'string', enum: ['a', 'b'] });
|
|
87
|
+
expect(result).toBe('"a" | "b"');
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
describe('jsonSchemaToExtractedTypes', () => {
|
|
91
|
+
it('returns undefined for undefined schema', async () => {
|
|
92
|
+
const result = await jsonSchemaToExtractedTypes(undefined);
|
|
93
|
+
expect(result).toBeUndefined();
|
|
94
|
+
});
|
|
95
|
+
it('extracts nested object types as declarations', async () => {
|
|
96
|
+
const schema = {
|
|
97
|
+
type: 'object',
|
|
98
|
+
properties: {
|
|
99
|
+
user: {
|
|
100
|
+
type: 'object',
|
|
101
|
+
properties: { name: { type: 'string' } },
|
|
102
|
+
required: ['name'],
|
|
103
|
+
},
|
|
104
|
+
},
|
|
105
|
+
required: ['user'],
|
|
106
|
+
};
|
|
107
|
+
const result = await jsonSchemaToExtractedTypes(schema);
|
|
108
|
+
expect(result).not.toBeUndefined();
|
|
109
|
+
expect(result.declarations.length).toBeGreaterThan(0);
|
|
110
|
+
expect(result.declarations.some((d) => d.includes('export type User'))).toBe(true);
|
|
111
|
+
expect(result.body).toContain('user: User');
|
|
112
|
+
});
|
|
113
|
+
it('returns empty declarations for flat schemas', async () => {
|
|
114
|
+
const schema = { type: 'string' };
|
|
115
|
+
const result = await jsonSchemaToExtractedTypes(schema);
|
|
116
|
+
expect(result).not.toBeUndefined();
|
|
117
|
+
expect(result.declarations).toEqual([]);
|
|
118
|
+
expect(result.body).toBe('string');
|
|
119
|
+
});
|
|
120
|
+
it('extracts enums with enumStyle: enum', async () => {
|
|
121
|
+
const schema = {
|
|
122
|
+
type: 'object',
|
|
123
|
+
properties: {
|
|
124
|
+
status: { type: 'string', enum: ['active', 'pending'] },
|
|
125
|
+
},
|
|
126
|
+
required: ['status'],
|
|
127
|
+
};
|
|
128
|
+
const result = await jsonSchemaToExtractedTypes(schema, { enumStyle: 'enum' });
|
|
129
|
+
expect(result).not.toBeUndefined();
|
|
130
|
+
expect(result.declarations.some((d) => d.includes('export enum Status'))).toBe(true);
|
|
131
|
+
expect(result.body).toContain('status: Status');
|
|
132
|
+
});
|
|
133
|
+
it('strips trailing semicolons from declarations', async () => {
|
|
134
|
+
const schema = {
|
|
135
|
+
type: 'object',
|
|
136
|
+
properties: {
|
|
137
|
+
item: {
|
|
138
|
+
type: 'object',
|
|
139
|
+
properties: { id: { type: 'string' } },
|
|
140
|
+
required: ['id'],
|
|
141
|
+
},
|
|
142
|
+
},
|
|
143
|
+
required: ['item'],
|
|
144
|
+
};
|
|
145
|
+
const result = await jsonSchemaToExtractedTypes(schema);
|
|
146
|
+
expect(result).not.toBeUndefined();
|
|
147
|
+
for (const decl of result.declarations) {
|
|
148
|
+
expect(decl.trimEnd()).not.toMatch(/;\s*$/);
|
|
149
|
+
}
|
|
150
|
+
});
|
|
151
|
+
it('body does not contain export type Root prefix', async () => {
|
|
152
|
+
const schema = {
|
|
153
|
+
type: 'object',
|
|
154
|
+
properties: { id: { type: 'string' } },
|
|
155
|
+
required: ['id'],
|
|
156
|
+
};
|
|
157
|
+
const result = await jsonSchemaToExtractedTypes(schema);
|
|
158
|
+
expect(result).not.toBeUndefined();
|
|
159
|
+
expect(result.body).not.toContain('export type Root');
|
|
160
|
+
expect(result.body).toContain('id: string');
|
|
161
|
+
});
|
|
162
|
+
});
|
|
163
|
+
describe('jsonSchemaToTypeString (prefix stripping)', () => {
|
|
62
164
|
it('strips "export type Root = " prefix and does not double-wrap', async () => {
|
|
63
165
|
vi.resetModules();
|
|
64
166
|
vi.doMock('ajsc', () => ({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emit-types.test.js","sourceRoot":"","sources":["../../src/codegen/emit-types.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AACjD,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"emit-types.test.js","sourceRoot":"","sources":["../../src/codegen/emit-types.test.ts"],"names":[],"mappings":"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"}
|
package/build/codegen/index.d.ts
CHANGED
|
@@ -6,6 +6,8 @@ export interface GenerateClientOptions extends ResolveInput {
|
|
|
6
6
|
ajsc?: AjscOptions;
|
|
7
7
|
clientImportPath?: string;
|
|
8
8
|
dryRun?: boolean;
|
|
9
|
+
namespaceTypes?: boolean;
|
|
10
|
+
selfContained?: boolean;
|
|
9
11
|
}
|
|
10
12
|
export declare function generateClient(options: GenerateClientOptions): Promise<GeneratedFile[]>;
|
|
11
13
|
export type { AjscOptions } from './emit-types.js';
|
package/build/codegen/index.js
CHANGED
|
@@ -8,6 +8,8 @@ export async function generateClient(options) {
|
|
|
8
8
|
ajsc: options.ajsc,
|
|
9
9
|
clientImportPath: options.clientImportPath,
|
|
10
10
|
dryRun: options.dryRun,
|
|
11
|
+
namespaceTypes: options.namespaceTypes,
|
|
12
|
+
selfContained: options.selfContained,
|
|
11
13
|
});
|
|
12
14
|
}
|
|
13
15
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/codegen/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAqB,MAAM,uBAAuB,CAAA;AAC1E,OAAO,EAAE,WAAW,EAAsB,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/codegen/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAqB,MAAM,uBAAuB,CAAA;AAC1E,OAAO,EAAE,WAAW,EAAsB,MAAM,eAAe,CAAA;AAY/D,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAA8B;IACjE,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,CAAA;IAC/C,OAAO,WAAW,CAAC;QACjB,QAAQ;QACR,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;QAC1C,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,cAAc,EAAE,OAAO,CAAC,cAAc;QACtC,aAAa,EAAE,OAAO,CAAC,aAAa;KACrC,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -5,21 +5,34 @@ import { groupRoutesByScope } from './group-routes.js';
|
|
|
5
5
|
import { emitScopeFile } from './emit-scope.js';
|
|
6
6
|
import { emitIndexFile } from './emit-index.js';
|
|
7
7
|
import { emitErrorsFile } from './emit-errors.js';
|
|
8
|
+
import { emitClientTypesFile } from './emit-client-types.js';
|
|
9
|
+
import { emitClientRuntimeFile } from './emit-client-runtime.js';
|
|
8
10
|
export async function runPipeline(options) {
|
|
9
|
-
const { envelope, outDir, ajsc: ajscOpts,
|
|
11
|
+
const { envelope, outDir, ajsc: ajscOpts, dryRun = false, namespaceTypes = false, selfContained = false } = options;
|
|
12
|
+
const clientImportPath = selfContained ? './_types' : options.clientImportPath;
|
|
13
|
+
if (selfContained && options.clientImportPath != null) {
|
|
14
|
+
console.warn('[ts-procedures-codegen] --self-contained overrides --client-import-path; using ./_types');
|
|
15
|
+
}
|
|
10
16
|
const hash = createHash('md5').update(JSON.stringify(envelope)).digest('hex');
|
|
11
17
|
const hashComment = `// Source hash: ${hash}`;
|
|
12
18
|
const groups = groupRoutesByScope(envelope.routes);
|
|
13
19
|
const groupArray = Array.from(groups.values());
|
|
20
|
+
if (selfContained) {
|
|
21
|
+
for (const group of groupArray) {
|
|
22
|
+
if (group.scopeKey === '_types' || group.scopeKey === '_client') {
|
|
23
|
+
throw new Error(`[ts-procedures-codegen] Scope "${group.scopeKey}" conflicts with self-contained mode reserved filename "${group.scopeKey}.ts". Rename the scope to avoid collision.`);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
14
27
|
const files = [];
|
|
15
28
|
for (const group of groupArray) {
|
|
16
|
-
const rawCode = await emitScopeFile(group, ajscOpts, clientImportPath);
|
|
29
|
+
const rawCode = await emitScopeFile(group, { ajsc: ajscOpts, clientImportPath, namespaceTypes });
|
|
17
30
|
const lines = rawCode.split('\n');
|
|
18
31
|
lines.splice(1, 0, hashComment);
|
|
19
32
|
const code = lines.join('\n');
|
|
20
33
|
files.push({ path: join(outDir, `${group.scopeKey}.ts`), code });
|
|
21
34
|
}
|
|
22
|
-
const errorsCode = await emitErrorsFile(envelope.errors, ajscOpts, clientImportPath);
|
|
35
|
+
const errorsCode = await emitErrorsFile(envelope.errors, { ajsc: ajscOpts, clientImportPath, namespaceTypes });
|
|
23
36
|
const hasErrors = errorsCode != null;
|
|
24
37
|
if (errorsCode != null) {
|
|
25
38
|
const errorsLines = errorsCode.split('\n');
|
|
@@ -27,11 +40,23 @@ export async function runPipeline(options) {
|
|
|
27
40
|
const errorsWithHash = errorsLines.join('\n');
|
|
28
41
|
files.push({ path: join(outDir, '_errors.ts'), code: errorsWithHash });
|
|
29
42
|
}
|
|
30
|
-
const rawIndexCode = emitIndexFile(groupArray, clientImportPath, hasErrors);
|
|
43
|
+
const rawIndexCode = emitIndexFile(groupArray, { clientImportPath, hasErrors });
|
|
31
44
|
const indexLines = rawIndexCode.split('\n');
|
|
32
45
|
indexLines.splice(1, 0, hashComment);
|
|
33
46
|
const indexCode = indexLines.join('\n');
|
|
34
47
|
files.push({ path: join(outDir, 'index.ts'), code: indexCode });
|
|
48
|
+
if (selfContained) {
|
|
49
|
+
const rawTypesCode = await emitClientTypesFile();
|
|
50
|
+
const typesLines = rawTypesCode.split('\n');
|
|
51
|
+
typesLines.splice(1, 0, hashComment);
|
|
52
|
+
const typesCode = typesLines.join('\n');
|
|
53
|
+
files.push({ path: join(outDir, '_types.ts'), code: typesCode });
|
|
54
|
+
const rawClientCode = await emitClientRuntimeFile();
|
|
55
|
+
const clientLines = rawClientCode.split('\n');
|
|
56
|
+
clientLines.splice(1, 0, hashComment);
|
|
57
|
+
const clientCode = clientLines.join('\n');
|
|
58
|
+
files.push({ path: join(outDir, '_client.ts'), code: clientCode });
|
|
59
|
+
}
|
|
35
60
|
if (dryRun) {
|
|
36
61
|
for (const file of files) {
|
|
37
62
|
const bytes = Buffer.byteLength(file.code, 'utf-8');
|