ts-procedures 5.16.0 → 6.0.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.
Files changed (146) hide show
  1. package/README.md +2 -0
  2. package/agent_config/claude-code/agents/ts-procedures-architect.md +13 -6
  3. package/agent_config/claude-code/skills/ts-procedures/SKILL.md +26 -4
  4. package/agent_config/claude-code/skills/ts-procedures/anti-patterns.md +85 -17
  5. package/agent_config/claude-code/skills/ts-procedures/api-reference.md +163 -5
  6. package/agent_config/claude-code/skills/ts-procedures/patterns.md +169 -13
  7. package/agent_config/claude-code/skills/ts-procedures-review/SKILL.md +1 -1
  8. package/agent_config/claude-code/skills/ts-procedures-review/checklist.md +20 -12
  9. package/agent_config/claude-code/skills/ts-procedures-scaffold/SKILL.md +2 -1
  10. package/agent_config/claude-code/skills/ts-procedures-scaffold/templates/client.md +22 -15
  11. package/agent_config/claude-code/skills/ts-procedures-scaffold/templates/express-rpc.md +20 -17
  12. package/agent_config/claude-code/skills/ts-procedures-scaffold/templates/hono-api.md +20 -16
  13. package/agent_config/claude-code/skills/ts-procedures-scaffold/templates/hono-rpc.md +20 -17
  14. package/agent_config/claude-code/skills/ts-procedures-scaffold/templates/hono-stream.md +16 -3
  15. package/agent_config/copilot/copilot-instructions.md +77 -12
  16. package/agent_config/cursor/cursorrules +77 -12
  17. package/build/client/call.d.ts +2 -1
  18. package/build/client/call.js +9 -1
  19. package/build/client/call.js.map +1 -1
  20. package/build/client/error-dispatch.d.ts +13 -0
  21. package/build/client/error-dispatch.js +26 -0
  22. package/build/client/error-dispatch.js.map +1 -0
  23. package/build/client/error-dispatch.test.d.ts +1 -0
  24. package/build/client/error-dispatch.test.js +56 -0
  25. package/build/client/error-dispatch.test.js.map +1 -0
  26. package/build/client/fetch-adapter.js +10 -4
  27. package/build/client/fetch-adapter.js.map +1 -1
  28. package/build/client/index.d.ts +2 -1
  29. package/build/client/index.js +5 -1
  30. package/build/client/index.js.map +1 -1
  31. package/build/client/stream.d.ts +2 -1
  32. package/build/client/stream.js +13 -3
  33. package/build/client/stream.js.map +1 -1
  34. package/build/client/typed-error-dispatch.test.d.ts +1 -0
  35. package/build/client/typed-error-dispatch.test.js +168 -0
  36. package/build/client/typed-error-dispatch.test.js.map +1 -0
  37. package/build/client/types.d.ts +37 -0
  38. package/build/codegen/e2e.test.js +9 -4
  39. package/build/codegen/e2e.test.js.map +1 -1
  40. package/build/codegen/emit-client-runtime.js +4 -0
  41. package/build/codegen/emit-client-runtime.js.map +1 -1
  42. package/build/codegen/emit-errors.d.ts +17 -6
  43. package/build/codegen/emit-errors.integration.test.d.ts +1 -0
  44. package/build/codegen/emit-errors.integration.test.js +162 -0
  45. package/build/codegen/emit-errors.integration.test.js.map +1 -0
  46. package/build/codegen/emit-errors.js +50 -39
  47. package/build/codegen/emit-errors.js.map +1 -1
  48. package/build/codegen/emit-errors.test.js +75 -78
  49. package/build/codegen/emit-errors.test.js.map +1 -1
  50. package/build/codegen/emit-index.d.ts +7 -0
  51. package/build/codegen/emit-index.js +26 -4
  52. package/build/codegen/emit-index.js.map +1 -1
  53. package/build/codegen/emit-index.test.js +55 -23
  54. package/build/codegen/emit-index.test.js.map +1 -1
  55. package/build/codegen/emit-scope.d.ts +8 -0
  56. package/build/codegen/emit-scope.js +82 -7
  57. package/build/codegen/emit-scope.js.map +1 -1
  58. package/build/codegen/pipeline.js +22 -2
  59. package/build/codegen/pipeline.js.map +1 -1
  60. package/build/implementations/http/doc-registry.d.ts +21 -0
  61. package/build/implementations/http/doc-registry.js +51 -78
  62. package/build/implementations/http/doc-registry.js.map +1 -1
  63. package/build/implementations/http/doc-registry.test.js +8 -6
  64. package/build/implementations/http/doc-registry.test.js.map +1 -1
  65. package/build/implementations/http/error-taxonomy.d.ts +240 -0
  66. package/build/implementations/http/error-taxonomy.js +230 -0
  67. package/build/implementations/http/error-taxonomy.js.map +1 -0
  68. package/build/implementations/http/error-taxonomy.test.d.ts +1 -0
  69. package/build/implementations/http/error-taxonomy.test.js +399 -0
  70. package/build/implementations/http/error-taxonomy.test.js.map +1 -0
  71. package/build/implementations/http/express-rpc/error-taxonomy.test.d.ts +1 -0
  72. package/build/implementations/http/express-rpc/error-taxonomy.test.js +83 -0
  73. package/build/implementations/http/express-rpc/error-taxonomy.test.js.map +1 -0
  74. package/build/implementations/http/express-rpc/index.d.ts +39 -8
  75. package/build/implementations/http/express-rpc/index.js +39 -8
  76. package/build/implementations/http/express-rpc/index.js.map +1 -1
  77. package/build/implementations/http/hono-api/error-taxonomy.test.d.ts +1 -0
  78. package/build/implementations/http/hono-api/error-taxonomy.test.js +137 -0
  79. package/build/implementations/http/hono-api/error-taxonomy.test.js.map +1 -0
  80. package/build/implementations/http/hono-api/index.d.ts +38 -1
  81. package/build/implementations/http/hono-api/index.js +32 -0
  82. package/build/implementations/http/hono-api/index.js.map +1 -1
  83. package/build/implementations/http/hono-rpc/error-taxonomy.test.d.ts +1 -0
  84. package/build/implementations/http/hono-rpc/error-taxonomy.test.js +64 -0
  85. package/build/implementations/http/hono-rpc/error-taxonomy.test.js.map +1 -0
  86. package/build/implementations/http/hono-rpc/index.d.ts +34 -7
  87. package/build/implementations/http/hono-rpc/index.js +31 -4
  88. package/build/implementations/http/hono-rpc/index.js.map +1 -1
  89. package/build/implementations/http/hono-stream/error-taxonomy.test.d.ts +1 -0
  90. package/build/implementations/http/hono-stream/error-taxonomy.test.js +87 -0
  91. package/build/implementations/http/hono-stream/error-taxonomy.test.js.map +1 -0
  92. package/build/implementations/http/hono-stream/index.d.ts +40 -3
  93. package/build/implementations/http/hono-stream/index.js +37 -10
  94. package/build/implementations/http/hono-stream/index.js.map +1 -1
  95. package/build/implementations/http/hono-stream/index.test.js +45 -18
  96. package/build/implementations/http/hono-stream/index.test.js.map +1 -1
  97. package/build/implementations/http/on-request-error.test.d.ts +1 -0
  98. package/build/implementations/http/on-request-error.test.js +173 -0
  99. package/build/implementations/http/on-request-error.test.js.map +1 -0
  100. package/build/implementations/http/route-errors.test.d.ts +1 -0
  101. package/build/implementations/http/route-errors.test.js +140 -0
  102. package/build/implementations/http/route-errors.test.js.map +1 -0
  103. package/build/implementations/types.d.ts +30 -2
  104. package/docs/client-and-codegen.md +105 -12
  105. package/docs/core.md +14 -5
  106. package/docs/http-integrations.md +135 -4
  107. package/docs/streaming.md +3 -1
  108. package/package.json +7 -2
  109. package/src/client/call.ts +10 -1
  110. package/src/client/error-dispatch.test.ts +72 -0
  111. package/src/client/error-dispatch.ts +27 -0
  112. package/src/client/fetch-adapter.ts +11 -5
  113. package/src/client/index.ts +9 -0
  114. package/src/client/stream.ts +14 -3
  115. package/src/client/typed-error-dispatch.test.ts +211 -0
  116. package/src/client/types.ts +42 -0
  117. package/src/codegen/e2e.test.ts +9 -4
  118. package/src/codegen/emit-client-runtime.ts +4 -0
  119. package/src/codegen/emit-errors.integration.test.ts +183 -0
  120. package/src/codegen/emit-errors.test.ts +91 -87
  121. package/src/codegen/emit-errors.ts +123 -41
  122. package/src/codegen/emit-index.test.ts +68 -24
  123. package/src/codegen/emit-index.ts +66 -4
  124. package/src/codegen/emit-scope.ts +124 -7
  125. package/src/codegen/pipeline.ts +25 -2
  126. package/src/implementations/http/README.md +19 -4
  127. package/src/implementations/http/doc-registry.test.ts +10 -6
  128. package/src/implementations/http/doc-registry.ts +63 -80
  129. package/src/implementations/http/error-taxonomy.test.ts +438 -0
  130. package/src/implementations/http/error-taxonomy.ts +337 -0
  131. package/src/implementations/http/express-rpc/README.md +21 -22
  132. package/src/implementations/http/express-rpc/error-taxonomy.test.ts +103 -0
  133. package/src/implementations/http/express-rpc/index.ts +75 -14
  134. package/src/implementations/http/hono-api/README.md +284 -0
  135. package/src/implementations/http/hono-api/error-taxonomy.test.ts +179 -0
  136. package/src/implementations/http/hono-api/index.ts +76 -1
  137. package/src/implementations/http/hono-rpc/README.md +18 -19
  138. package/src/implementations/http/hono-rpc/error-taxonomy.test.ts +82 -0
  139. package/src/implementations/http/hono-rpc/index.ts +65 -9
  140. package/src/implementations/http/hono-stream/README.md +44 -25
  141. package/src/implementations/http/hono-stream/error-taxonomy.test.ts +98 -0
  142. package/src/implementations/http/hono-stream/index.test.ts +54 -18
  143. package/src/implementations/http/hono-stream/index.ts +83 -13
  144. package/src/implementations/http/on-request-error.test.ts +201 -0
  145. package/src/implementations/http/route-errors.test.ts +177 -0
  146. package/src/implementations/types.ts +30 -2
@@ -26,9 +26,10 @@ describe('emitIndexFile', () => {
26
26
  const output = emitIndexFile([usersGroup]);
27
27
  expect(output).toContain('// Auto-generated by ts-procedures-codegen — do not edit');
28
28
  });
29
- it('imports ClientInstance from ts-procedures/client', () => {
29
+ it('imports createClient as a value and client types for the factory', () => {
30
30
  const output = emitIndexFile([usersGroup]);
31
- expect(output).toContain("import type { ClientInstance } from 'ts-procedures/client'");
31
+ expect(output).toContain("import { createClient } from 'ts-procedures/client'");
32
+ expect(output).toContain("import type { ClientInstance, CreateClientConfig } from 'ts-procedures/client'");
32
33
  });
33
34
  it('imports each scope as a namespace using an underscore-prefixed alias', () => {
34
35
  const output = emitIndexFile([usersGroup, billingGroup]);
@@ -43,24 +44,30 @@ describe('emitIndexFile', () => {
43
44
  const output = emitIndexFile([adminUsersGroup]);
44
45
  expect(output).toContain("import * as _adminUsers from './admin-users'");
45
46
  });
46
- it('generates the factory using the default service name (Api)', () => {
47
+ it('generates the bindings factory using the default service name (Api)', () => {
47
48
  const output = emitIndexFile([usersGroup, billingGroup]);
48
49
  expect(output).toContain('export function createApiBindings(client: ClientInstance)');
49
50
  expect(output).toContain('users: _users.bindUsersScope(client)');
50
51
  expect(output).toContain('billing: _billing.bindBillingScope(client)');
51
52
  });
53
+ it('always emits a createApiClient convenience factory', () => {
54
+ const output = emitIndexFile([usersGroup]);
55
+ expect(output).toContain('export function createApiClient(');
56
+ expect(output).toContain('return createClient({');
57
+ expect(output).toContain('scopes: (client) => createApiBindings(client)');
58
+ });
59
+ it('createApiClient wires the error registry when hasErrors is true', () => {
60
+ const output = emitIndexFile([usersGroup], { hasErrors: true });
61
+ expect(output).toContain('errorRegistry: _errorsModule.ApiErrorRegistry');
62
+ });
63
+ it('createApiClient omits the registry wiring when hasErrors is false', () => {
64
+ const output = emitIndexFile([usersGroup], { hasErrors: false });
65
+ expect(output).not.toContain('errorRegistry:');
66
+ });
52
67
  it('uses camelCase as the binding property key (not the underscored alias)', () => {
53
68
  const output = emitIndexFile([adminUsersGroup]);
54
69
  expect(output).toContain('adminUsers: _adminUsers.bindAdminUsersScope(client)');
55
70
  });
56
- it('places imports before the namespace block before the factory', () => {
57
- const output = emitIndexFile([usersGroup, billingGroup], { namespaceTypes: true });
58
- const importIdx = output.indexOf("import * as _users");
59
- const namespaceIdx = output.indexOf('export namespace Api');
60
- const factoryIdx = output.indexOf('export function createApiBindings');
61
- expect(importIdx).toBeLessThan(namespaceIdx);
62
- expect(namespaceIdx).toBeLessThan(factoryIdx);
63
- });
64
71
  describe('service namespace (namespaceTypes: true)', () => {
65
72
  it('emits a service namespace named after the default Api', () => {
66
73
  const output = emitIndexFile([usersGroup, billingGroup], { namespaceTypes: true });
@@ -69,19 +76,30 @@ describe('emitIndexFile', () => {
69
76
  expect(output).toContain('export import Billing = _billing.Billing');
70
77
  });
71
78
  it('emits a service namespace named after a provided serviceName', () => {
72
- const output = emitIndexFile([usersGroup], { namespaceTypes: true, serviceName: 'UsersApi' });
79
+ const output = emitIndexFile([usersGroup], {
80
+ namespaceTypes: true,
81
+ serviceName: 'UsersApi',
82
+ });
73
83
  expect(output).toContain('export namespace UsersApi {');
74
84
  expect(output).toContain('export import Users = _users.Users');
75
85
  expect(output).toContain('export function createUsersApiBindings(client: ClientInstance)');
86
+ expect(output).toContain('export function createUsersApiClient(');
76
87
  });
77
88
  it('PascalCases each scope when re-exporting', () => {
78
89
  const output = emitIndexFile([adminUsersGroup], { namespaceTypes: true });
79
90
  expect(output).toContain('export import AdminUsers = _adminUsers.AdminUsers');
80
91
  });
81
- it('PascalCases a kebab-case serviceName for both namespace and factory', () => {
82
- const output = emitIndexFile([usersGroup], { namespaceTypes: true, serviceName: 'auth-service' });
92
+ it('PascalCases a kebab-case serviceName for both namespace and factories', () => {
93
+ const output = emitIndexFile([usersGroup], {
94
+ namespaceTypes: true,
95
+ serviceName: 'auth-service',
96
+ hasErrors: true,
97
+ });
83
98
  expect(output).toContain('export namespace AuthService {');
84
99
  expect(output).toContain('export function createAuthServiceBindings(client: ClientInstance)');
100
+ expect(output).toContain('export function createAuthServiceClient(');
101
+ // In namespace mode the registry lives inside the errors namespace.
102
+ expect(output).toContain('errorRegistry: _errorsModule.AuthServiceErrors.AuthServiceErrorRegistry');
85
103
  });
86
104
  it('folds errors into the service namespace as `Errors` when hasErrors is true', () => {
87
105
  const output = emitIndexFile([usersGroup], {
@@ -92,10 +110,9 @@ describe('emitIndexFile', () => {
92
110
  expect(output).toContain("import * as _errorsModule from './_errors'");
93
111
  expect(output).toContain('export import Errors = _errorsModule.UsersApiErrors');
94
112
  });
95
- it('omits the errors import and re-export when hasErrors is false', () => {
113
+ it('omits the errors re-export from the namespace when hasErrors is false', () => {
96
114
  const output = emitIndexFile([usersGroup], { namespaceTypes: true, hasErrors: false });
97
- expect(output).not.toContain("from './_errors'");
98
- expect(output).not.toContain('Errors');
115
+ expect(output).not.toContain("import * as _errorsModule from './_errors'");
99
116
  });
100
117
  });
101
118
  describe('namespaceTypes: false', () => {
@@ -104,26 +121,41 @@ describe('emitIndexFile', () => {
104
121
  expect(output).not.toContain('export namespace');
105
122
  expect(output).not.toContain('export import');
106
123
  });
107
- it('still imports scopes and emits the factory', () => {
124
+ it('still imports scopes and emits both factories', () => {
108
125
  const output = emitIndexFile([usersGroup, billingGroup]);
109
126
  expect(output).toContain("import * as _users from './users'");
110
127
  expect(output).toContain('export function createApiBindings(client: ClientInstance)');
111
- expect(output).toContain('users: _users.bindUsersScope(client)');
128
+ expect(output).toContain('export function createApiClient(');
112
129
  });
113
- it('does not import errors even when hasErrors is true', () => {
130
+ it('imports _errors as a value when hasErrors, regardless of namespaceTypes', () => {
114
131
  const output = emitIndexFile([usersGroup], { hasErrors: true });
132
+ // Registry is a runtime value, so the import is NOT `import type`.
133
+ expect(output).toContain("import * as _errorsModule from './_errors'");
134
+ // In flat mode the registry is a top-level export of the module.
135
+ expect(output).toContain('errorRegistry: _errorsModule.ApiErrorRegistry');
136
+ });
137
+ it('qualifies the registry path through the errors namespace in namespace mode', () => {
138
+ const output = emitIndexFile([usersGroup], {
139
+ hasErrors: true,
140
+ namespaceTypes: true,
141
+ });
142
+ expect(output).toContain('errorRegistry: _errorsModule.ApiErrors.ApiErrorRegistry');
143
+ });
144
+ it('omits the _errors import when hasErrors is false', () => {
145
+ const output = emitIndexFile([usersGroup], { hasErrors: false });
115
146
  expect(output).not.toContain("from './_errors'");
116
147
  });
117
148
  });
118
149
  describe('clientImportPath', () => {
119
- it('uses custom clientImportPath in import statement', () => {
150
+ it('uses custom clientImportPath in both import statements', () => {
120
151
  const output = emitIndexFile([usersGroup], { clientImportPath: '@my-app/client' });
121
- expect(output).toContain("import type { ClientInstance } from '@my-app/client'");
152
+ expect(output).toContain("import { createClient } from '@my-app/client'");
153
+ expect(output).toContain("import type { ClientInstance, CreateClientConfig } from '@my-app/client'");
122
154
  expect(output).not.toContain("from 'ts-procedures/client'");
123
155
  });
124
156
  it('defaults to ts-procedures/client when not specified', () => {
125
157
  const output = emitIndexFile([usersGroup]);
126
- expect(output).toContain("import type { ClientInstance } from 'ts-procedures/client'");
158
+ expect(output).toContain("import { createClient } from 'ts-procedures/client'");
127
159
  });
128
160
  });
129
161
  });
@@ -1 +1 @@
1
- {"version":3,"file":"emit-index.test.js","sourceRoot":"","sources":["../../src/codegen/emit-index.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAG/C,8EAA8E;AAC9E,WAAW;AACX,8EAA8E;AAE9E,MAAM,UAAU,GAAe;IAC7B,QAAQ,EAAE,OAAO;IACjB,SAAS,EAAE,OAAO;IAClB,MAAM,EAAE,EAAE;CACX,CAAA;AAED,MAAM,YAAY,GAAe;IAC/B,QAAQ,EAAE,SAAS;IACnB,SAAS,EAAE,SAAS;IACpB,MAAM,EAAE,EAAE;CACX,CAAA;AAED,MAAM,eAAe,GAAe;IAClC,QAAQ,EAAE,aAAa;IACvB,SAAS,EAAE,YAAY;IACvB,MAAM,EAAE,EAAE;CACX,CAAA;AAED,8EAA8E;AAC9E,QAAQ;AACR,8EAA8E;AAE9E,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,UAAU,CAAC,CAAC,CAAA;QAC1C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,0DAA0D,CAAC,CAAA;IACtF,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,UAAU,CAAC,CAAC,CAAA;QAC1C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,4DAA4D,CAAC,CAAA;IACxF,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,sEAAsE,EAAE,GAAG,EAAE;QAC9E,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC,CAAA;QACxD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,mCAAmC,CAAC,CAAA;QAC7D,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,uCAAuC,CAAC,CAAA;IACnE,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC,CAAA;QACxD,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,UAAU,CAAC,CAAA;IAC1C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,4FAA4F,EAAE,GAAG,EAAE;QACpG,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,eAAe,CAAC,CAAC,CAAA;QAC/C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,8CAA8C,CAAC,CAAA;IAC1E,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QACpE,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC,CAAA;QACxD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,2DAA2D,CAAC,CAAA;QACrF,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,sCAAsC,CAAC,CAAA;QAChE,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,4CAA4C,CAAC,CAAA;IACxE,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,wEAAwE,EAAE,GAAG,EAAE;QAChF,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,eAAe,CAAC,CAAC,CAAA;QAC/C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,qDAAqD,CAAC,CAAA;IACjF,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;QACtE,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,UAAU,EAAE,YAAY,CAAC,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAA;QAClF,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAA;QACtD,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAA;QAC3D,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,mCAAmC,CAAC,CAAA;QACtE,MAAM,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,YAAY,CAAC,CAAA;QAC5C,MAAM,CAAC,YAAY,CAAC,CAAC,YAAY,CAAC,UAAU,CAAC,CAAA;IAC/C,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,0CAA0C,EAAE,GAAG,EAAE;QACxD,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;YAC/D,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,UAAU,EAAE,YAAY,CAAC,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAA;YAClF,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAA;YAClD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,oCAAoC,CAAC,CAAA;YAC9D,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,0CAA0C,CAAC,CAAA;QACtE,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;YACtE,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,UAAU,CAAC,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC,CAAA;YAC7F,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,6BAA6B,CAAC,CAAA;YACvD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,oCAAoC,CAAC,CAAA;YAC9D,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,gEAAgE,CAAC,CAAA;QAC5F,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;YAClD,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,eAAe,CAAC,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAA;YACzE,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,mDAAmD,CAAC,CAAA;QAC/E,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,qEAAqE,EAAE,GAAG,EAAE;YAC7E,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,UAAU,CAAC,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,WAAW,EAAE,cAAc,EAAE,CAAC,CAAA;YACjG,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,gCAAgC,CAAC,CAAA;YAC1D,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,mEAAmE,CAAC,CAAA;QAC/F,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,4EAA4E,EAAE,GAAG,EAAE;YACpF,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,UAAU,CAAC,EAAE;gBACzC,cAAc,EAAE,IAAI;gBACpB,SAAS,EAAE,IAAI;gBACf,WAAW,EAAE,UAAU;aACxB,CAAC,CAAA;YACF,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,4CAA4C,CAAC,CAAA;YACtE,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,qDAAqD,CAAC,CAAA;QACjF,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;YACvE,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,UAAU,CAAC,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAA;YACtF,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAA;YAChD,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;QACxC,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;QACrC,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;YACpD,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC,CAAA;YACxD,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAA;YAChD,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,eAAe,CAAC,CAAA;QAC/C,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;YACpD,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC,CAAA;YACxD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,mCAAmC,CAAC,CAAA;YAC7D,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,2DAA2D,CAAC,CAAA;YACrF,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,sCAAsC,CAAC,CAAA;QAClE,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;YAC5D,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;YAC/D,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAA;QAClD,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;QAChC,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;YAC1D,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,UAAU,CAAC,EAAE,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,CAAC,CAAA;YAClF,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,sDAAsD,CAAC,CAAA;YAChF,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,6BAA6B,CAAC,CAAA;QAC7D,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;YAC7D,MAAM,MAAM,GAAG,aAAa,CAAC,CAAC,UAAU,CAAC,CAAC,CAAA;YAC1C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,4DAA4D,CAAC,CAAA;QACxF,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"emit-index.test.js","sourceRoot":"","sources":["../../src/codegen/emit-index.test.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,14 @@ export interface EmitScopeOptions {
4
4
  ajsc?: AjscOptions;
5
5
  clientImportPath?: string;
6
6
  namespaceTypes?: boolean;
7
+ /** Service identifier used to namespace generated error types (defaults to 'Api'). */
8
+ serviceName?: string;
9
+ /**
10
+ * Error keys present in the generated `_errors.ts`. Routes may list keys
11
+ * that aren't emitted (e.g. no schema); those are filtered out at emit time
12
+ * so generated code never references undefined types.
13
+ */
14
+ errorKeys?: Set<string>;
7
15
  }
8
16
  /**
9
17
  * Generates a complete TypeScript scope file for a ScopeGroup.
@@ -101,6 +101,56 @@ async function formatTypes(routePascal, types, ctx) {
101
101
  return { declarations, refs };
102
102
  }
103
103
  // ---------------------------------------------------------------------------
104
+ // Route-level Errors union injection
105
+ // ---------------------------------------------------------------------------
106
+ /**
107
+ * Builds the body of an `Errors` type union from the route's declared error
108
+ * keys. Filters to keys actually emitted in `_errors.ts` so generated code
109
+ * never references undefined types.
110
+ *
111
+ * In namespace mode the union uses qualified names (`ApiErrors.UseCaseError`);
112
+ * in flat mode it uses the bundled wildcard import alias (`_errors.UseCaseError`).
113
+ * Returns `null` when no keys remain.
114
+ */
115
+ function buildErrorUnion(routeErrors, ctx) {
116
+ if (!routeErrors || routeErrors.length === 0)
117
+ return null;
118
+ const available = ctx.errorKeys;
119
+ const filtered = available ? routeErrors.filter((k) => available.has(k)) : routeErrors;
120
+ if (filtered.length === 0)
121
+ return null;
122
+ const qualify = ctx.namespaceTypes
123
+ ? (k) => `${toPascalCase(ctx.serviceName)}Errors.${k}`
124
+ : (k) => `_errors.${k}`;
125
+ return filtered.map(qualify).join(' | ');
126
+ }
127
+ /**
128
+ * Injects `export type Errors = ...` into an existing route namespace block
129
+ * (namespace mode) or appends a flat `export type ${pascal}Errors = ...` in
130
+ * flat mode. Mutates the `declarations` array in place and returns whether an
131
+ * injection happened.
132
+ */
133
+ function injectRouteErrors(declarations, routePascal, errorUnion, namespaceTypes) {
134
+ if (!errorUnion)
135
+ return false;
136
+ if (namespaceTypes) {
137
+ const lastIdx = declarations.length - 1;
138
+ if (lastIdx < 0)
139
+ return false;
140
+ const lastDecl = declarations[lastIdx];
141
+ const closingIdx = lastDecl.lastIndexOf(' }');
142
+ if (closingIdx === -1)
143
+ return false;
144
+ declarations[lastIdx] =
145
+ lastDecl.slice(0, closingIdx) +
146
+ ` export type Errors = ${errorUnion}\n` +
147
+ lastDecl.slice(closingIdx);
148
+ return true;
149
+ }
150
+ declarations.push(`export type ${routePascal}Errors = ${errorUnion}`);
151
+ return true;
152
+ }
153
+ // ---------------------------------------------------------------------------
104
154
  // Route emitters
105
155
  // ---------------------------------------------------------------------------
106
156
  async function emitRpcRoute(route, ctx) {
@@ -125,7 +175,8 @@ async function emitRpcRoute(route, ctx) {
125
175
  ` }, options)`,
126
176
  ` },`,
127
177
  ].join('\n');
128
- return { typeDeclarations: declarations, callable, hasStream: false };
178
+ const hasErrors = injectRouteErrors(declarations, pascal, buildErrorUnion(route.errors, ctx), ctx.namespaceTypes);
179
+ return { typeDeclarations: declarations, callable, hasStream: false, hasErrors };
129
180
  }
130
181
  async function emitApiRoute(route, ctx) {
131
182
  const pascal = toPascalCase(route.name);
@@ -187,7 +238,8 @@ async function emitApiRoute(route, ctx) {
187
238
  ` }, options)`,
188
239
  ` },`,
189
240
  ].join('\n');
190
- return { typeDeclarations: declarations, callable, hasStream: false };
241
+ const hasErrors = injectRouteErrors(declarations, pascal, buildErrorUnion(route.errors, ctx), ctx.namespaceTypes);
242
+ return { typeDeclarations: declarations, callable, hasStream: false, hasErrors };
191
243
  }
192
244
  async function emitStreamRoute(route, ctx) {
193
245
  const pascal = versionedPascal(route.name, route.version);
@@ -219,7 +271,8 @@ async function emitStreamRoute(route, ctx) {
219
271
  ` }, options)`,
220
272
  ` },`,
221
273
  ].join('\n');
222
- return { typeDeclarations: declarations, callable, hasStream: true };
274
+ const hasErrors = injectRouteErrors(declarations, pascal, buildErrorUnion(route.errors, ctx), ctx.namespaceTypes);
275
+ return { typeDeclarations: declarations, callable, hasStream: true, hasErrors };
223
276
  }
224
277
  // ---------------------------------------------------------------------------
225
278
  // emitScopeFile
@@ -232,12 +285,19 @@ async function emitStreamRoute(route, ctx) {
232
285
  * jsdoc, etc.) produce extracted sub-types inside each namespace.
233
286
  */
234
287
  export async function emitScopeFile(group, options) {
235
- const { ajsc: ajscOpts, clientImportPath = 'ts-procedures/client', namespaceTypes = false } = options ?? {};
288
+ const { ajsc: ajscOpts, clientImportPath = 'ts-procedures/client', namespaceTypes = false, serviceName = 'Api', errorKeys, } = options ?? {};
236
289
  const pascal = toPascalCase(group.camelCase);
237
- const ctx = { ajsc: ajscOpts, namespaceTypes, scopePascal: pascal };
290
+ const ctx = {
291
+ ajsc: ajscOpts,
292
+ namespaceTypes,
293
+ scopePascal: pascal,
294
+ serviceName,
295
+ errorKeys,
296
+ };
238
297
  const allTypeDeclarations = [];
239
298
  const callables = [];
240
299
  let hasStream = false;
300
+ let scopeHasErrors = false;
241
301
  for (const route of group.routes) {
242
302
  let chunks;
243
303
  const kind = route.kind ?? inferRouteKind(route);
@@ -263,11 +323,26 @@ export async function emitScopeFile(group, options) {
263
323
  callables.push(chunks.callable);
264
324
  if (chunks.hasStream)
265
325
  hasStream = true;
326
+ if (chunks.hasErrors)
327
+ scopeHasErrors = true;
266
328
  }
267
- // Build import line
329
+ // Build client import line
268
330
  const clientImports = hasStream
269
331
  ? `import type { ClientInstance, ProcedureCallOptions, TypedStream } from '${clientImportPath}'`
270
332
  : `import type { ClientInstance, ProcedureCallOptions } from '${clientImportPath}'`;
333
+ // Build _errors import line when at least one route emits an Errors union.
334
+ // Namespace mode uses the qualified `${Service}Errors` namespace; flat mode
335
+ // pulls classes in via a wildcard alias (`_errors.UseCaseError`).
336
+ let errorsImport = '';
337
+ if (scopeHasErrors) {
338
+ if (namespaceTypes) {
339
+ errorsImport = `import type { ${toPascalCase(serviceName)}Errors } from './_errors'`;
340
+ }
341
+ else {
342
+ errorsImport = `import type * as _errors from './_errors'`;
343
+ }
344
+ }
345
+ const importsBlock = [clientImports, errorsImport].filter(Boolean).join('\n');
271
346
  let typesBlock;
272
347
  if (namespaceTypes && allTypeDeclarations.length > 0) {
273
348
  typesBlock = `export namespace ${pascal} {\n${allTypeDeclarations.join('\n\n')}\n}\n`;
@@ -281,7 +356,7 @@ export async function emitScopeFile(group, options) {
281
356
  const callablesBlock = callables.join('\n\n');
282
357
  return [
283
358
  CODEGEN_HEADER,
284
- clientImports,
359
+ importsBlock,
285
360
  '',
286
361
  '// ── Types ────────────────────────────────────────',
287
362
  '',
@@ -1 +1 @@
1
- {"version":3,"file":"emit-scope.js","sourceRoot":"","sources":["../../src/codegen/emit-scope.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"emit-scope.js","sourceRoot":"","sources":["../../src/codegen/emit-scope.ts"],"names":[],"mappings":"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"}
@@ -20,6 +20,10 @@ export async function runPipeline(options) {
20
20
  const hashComment = `// Source hash: ${hash}`;
21
21
  const groups = groupRoutesByScope(envelope.routes);
22
22
  const groupArray = Array.from(groups.values());
23
+ // Error keys that will be emitted in `_errors.ts` — only those with a schema.
24
+ // Scope emit uses this to filter `route.errors` so generated code never
25
+ // references an undefined error type.
26
+ const errorKeys = new Set(envelope.errors.filter((e) => e.schema != null).map((e) => e.name));
23
27
  if (selfContained) {
24
28
  for (const group of groupArray) {
25
29
  if (group.scopeKey === '_types' || group.scopeKey === '_client') {
@@ -29,7 +33,13 @@ export async function runPipeline(options) {
29
33
  }
30
34
  const files = [];
31
35
  for (const group of groupArray) {
32
- const rawCode = await emitScopeFile(group, { ajsc: ajscOpts, clientImportPath, namespaceTypes });
36
+ const rawCode = await emitScopeFile(group, {
37
+ ajsc: ajscOpts,
38
+ clientImportPath,
39
+ namespaceTypes,
40
+ serviceName,
41
+ errorKeys: errorKeys.size > 0 ? errorKeys : undefined,
42
+ });
33
43
  const lines = rawCode.split('\n');
34
44
  lines.splice(1, 0, hashComment);
35
45
  const code = lines.join('\n');
@@ -43,7 +53,17 @@ export async function runPipeline(options) {
43
53
  const errorsWithHash = errorsLines.join('\n');
44
54
  files.push({ path: join(outDir, '_errors.ts'), code: errorsWithHash });
45
55
  }
46
- const rawIndexCode = emitIndexFile(groupArray, { clientImportPath, hasErrors, namespaceTypes, serviceName });
56
+ // In self-contained mode types come from `./_types` but the runtime
57
+ // (`createClient`) lives in `./_client`. In regular mode both share the
58
+ // single `clientImportPath` (e.g. `ts-procedures/client`).
59
+ const clientRuntimeImportPath = selfContained ? './_client' : clientImportPath;
60
+ const rawIndexCode = emitIndexFile(groupArray, {
61
+ clientImportPath,
62
+ clientRuntimeImportPath,
63
+ hasErrors,
64
+ namespaceTypes,
65
+ serviceName,
66
+ });
47
67
  const indexLines = rawIndexCode.split('\n');
48
68
  indexLines.splice(1, 0, hashComment);
49
69
  const indexCode = indexLines.join('\n');
@@ -1 +1 @@
1
- {"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../src/codegen/pipeline.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../src/codegen/pipeline.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import type { AnyHttpRouteDoc, DocEnvelope, DocRegistryConfig, DocRegistryOutputOptions, DocSource, ErrorDoc } from '../types.js';
2
+ import { ErrorTaxonomy } from './error-taxonomy.js';
2
3
  export type { AnyHttpRouteDoc, DocEnvelope, DocRegistryConfig, DocRegistryOutputOptions, DocSource, ErrorDoc, HeaderDoc, } from '../types.js';
3
4
  export declare class DocRegistry {
4
5
  private readonly basePath;
@@ -8,5 +9,25 @@ export declare class DocRegistry {
8
9
  constructor(config?: DocRegistryConfig);
9
10
  from(source: DocSource<AnyHttpRouteDoc>): this;
10
11
  toJSON<T = DocEnvelope>(options?: DocRegistryOutputOptions<T>): T;
12
+ /**
13
+ * Framework error defaults for the DocEnvelope — derived from
14
+ * {@link defaultErrorTaxonomy} so the documented shape cannot drift from what
15
+ * the HTTP builders actually emit at runtime. `ProcedureRegistrationError` is
16
+ * appended because it's thrown at registration time (never at request time)
17
+ * and therefore lives only in the catalog, not the runtime taxonomy.
18
+ */
11
19
  static defaultErrors(): ErrorDoc[];
20
+ /**
21
+ * Convenience constructor that seeds `config.errors` from a taxonomy so the
22
+ * DocEnvelope automatically documents every error class registered with the
23
+ * HTTP builders. Framework defaults (including `ProcedureRegistrationError`)
24
+ * are included unless `includeDefaults: false` is passed.
25
+ *
26
+ * @example
27
+ * const registry = DocRegistry.fromTaxonomy(appErrors, { basePath: '/api' })
28
+ * .from(apiApp)
29
+ */
30
+ static fromTaxonomy(taxonomy: ErrorTaxonomy, config?: Omit<DocRegistryConfig, 'errors'> & {
31
+ includeDefaults?: boolean;
32
+ }): DocRegistry;
12
33
  }
@@ -1,3 +1,23 @@
1
+ import { defaultErrorTaxonomy, taxonomyToErrorDocs, } from './error-taxonomy.js';
2
+ /**
3
+ * `ProcedureRegistrationError` is thrown at procedure-definition time (never at
4
+ * request time), so it doesn't appear in the runtime taxonomy. It is documented
5
+ * here so consumers still see it in the error catalog.
6
+ */
7
+ const PROCEDURE_REGISTRATION_ERROR_DOC = {
8
+ name: 'ProcedureRegistrationError',
9
+ statusCode: 500,
10
+ description: 'An invalid schema or configuration was detected at procedure registration time.',
11
+ schema: {
12
+ type: 'object',
13
+ properties: {
14
+ name: { type: 'string', const: 'ProcedureRegistrationError' },
15
+ procedureName: { type: 'string' },
16
+ message: { type: 'string' },
17
+ },
18
+ required: ['name', 'procedureName', 'message'],
19
+ },
20
+ };
1
21
  export class DocRegistry {
2
22
  basePath;
3
23
  headers;
@@ -28,87 +48,40 @@ export class DocRegistry {
28
48
  }
29
49
  return envelope;
30
50
  }
31
- // Keep in sync with src/errors.ts
51
+ /**
52
+ * Framework error defaults for the DocEnvelope — derived from
53
+ * {@link defaultErrorTaxonomy} so the documented shape cannot drift from what
54
+ * the HTTP builders actually emit at runtime. `ProcedureRegistrationError` is
55
+ * appended because it's thrown at registration time (never at request time)
56
+ * and therefore lives only in the catalog, not the runtime taxonomy.
57
+ */
32
58
  static defaultErrors() {
33
59
  return [
34
- {
35
- name: 'ProcedureError',
36
- statusCode: 500,
37
- description: 'An error thrown from within a procedure handler via ctx.error().',
38
- schema: {
39
- type: 'object',
40
- properties: {
41
- name: { type: 'string', const: 'ProcedureError' },
42
- procedureName: { type: 'string' },
43
- message: { type: 'string' },
44
- meta: { type: 'object' },
45
- },
46
- required: ['name', 'procedureName', 'message'],
47
- },
48
- },
49
- {
50
- name: 'ProcedureValidationError',
51
- statusCode: 400,
52
- description: 'Schema validation failed for the procedure input parameters.',
53
- schema: {
54
- type: 'object',
55
- properties: {
56
- name: { type: 'string', const: 'ProcedureValidationError' },
57
- procedureName: { type: 'string' },
58
- message: { type: 'string' },
59
- errors: {
60
- type: 'array',
61
- items: {
62
- type: 'object',
63
- properties: {
64
- instancePath: { type: 'string' },
65
- message: { type: 'string' },
66
- },
67
- },
68
- },
69
- },
70
- required: ['name', 'procedureName', 'message'],
71
- },
72
- },
73
- {
74
- name: 'ProcedureYieldValidationError',
75
- statusCode: 500,
76
- description: 'Schema validation failed for a yielded value in a streaming procedure.',
77
- schema: {
78
- type: 'object',
79
- properties: {
80
- name: { type: 'string', const: 'ProcedureYieldValidationError' },
81
- procedureName: { type: 'string' },
82
- message: { type: 'string' },
83
- errors: {
84
- type: 'array',
85
- items: {
86
- type: 'object',
87
- properties: {
88
- instancePath: { type: 'string' },
89
- message: { type: 'string' },
90
- },
91
- },
92
- },
93
- },
94
- required: ['name', 'procedureName', 'message'],
95
- },
96
- },
97
- {
98
- name: 'ProcedureRegistrationError',
99
- statusCode: 500,
100
- description: 'An invalid schema or configuration was detected at procedure registration time.',
101
- schema: {
102
- type: 'object',
103
- properties: {
104
- name: { type: 'string', const: 'ProcedureRegistrationError' },
105
- procedureName: { type: 'string' },
106
- message: { type: 'string' },
107
- },
108
- required: ['name', 'procedureName', 'message'],
109
- },
110
- },
60
+ ...taxonomyToErrorDocs(defaultErrorTaxonomy),
61
+ PROCEDURE_REGISTRATION_ERROR_DOC,
111
62
  ];
112
63
  }
64
+ /**
65
+ * Convenience constructor that seeds `config.errors` from a taxonomy so the
66
+ * DocEnvelope automatically documents every error class registered with the
67
+ * HTTP builders. Framework defaults (including `ProcedureRegistrationError`)
68
+ * are included unless `includeDefaults: false` is passed.
69
+ *
70
+ * @example
71
+ * const registry = DocRegistry.fromTaxonomy(appErrors, { basePath: '/api' })
72
+ * .from(apiApp)
73
+ */
74
+ static fromTaxonomy(taxonomy, config) {
75
+ const { includeDefaults = true, ...rest } = config ?? {};
76
+ const errors = [
77
+ ...taxonomyToErrorDocs(taxonomy),
78
+ ...(includeDefaults ? DocRegistry.defaultErrors() : []),
79
+ ];
80
+ // Dedupe by name — user entries take precedence over defaults with the
81
+ // same key, matching runtime resolution order.
82
+ const seen = new Set();
83
+ const deduped = errors.filter((e) => seen.has(e.name) ? false : (seen.add(e.name), true));
84
+ return new DocRegistry({ ...rest, errors: deduped });
85
+ }
113
86
  }
114
87
  //# sourceMappingURL=doc-registry.js.map