@furystack/rest 8.0.42 → 8.1.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 (54) hide show
  1. package/CHANGELOG.md +71 -0
  2. package/README.md +37 -1
  3. package/esm/api-endpoint-schema.d.ts +47 -2
  4. package/esm/api-endpoint-schema.d.ts.map +1 -1
  5. package/esm/index.d.ts +4 -1
  6. package/esm/index.d.ts.map +1 -1
  7. package/esm/index.js +4 -1
  8. package/esm/index.js.map +1 -1
  9. package/esm/openapi-document.d.ts +303 -0
  10. package/esm/openapi-document.d.ts.map +1 -0
  11. package/esm/openapi-document.js +2 -0
  12. package/esm/openapi-document.js.map +1 -0
  13. package/esm/openapi-resolve-refs.d.ts +20 -0
  14. package/esm/openapi-resolve-refs.d.ts.map +1 -0
  15. package/esm/openapi-resolve-refs.js +68 -0
  16. package/esm/openapi-resolve-refs.js.map +1 -0
  17. package/esm/openapi-resolve-refs.spec.d.ts +2 -0
  18. package/esm/openapi-resolve-refs.spec.d.ts.map +1 -0
  19. package/esm/openapi-resolve-refs.spec.js +294 -0
  20. package/esm/openapi-resolve-refs.spec.js.map +1 -0
  21. package/esm/openapi-to-rest-api.d.ts +197 -0
  22. package/esm/openapi-to-rest-api.d.ts.map +1 -0
  23. package/esm/openapi-to-rest-api.js +2 -0
  24. package/esm/openapi-to-rest-api.js.map +1 -0
  25. package/esm/openapi-to-rest-api.spec.d.ts +2 -0
  26. package/esm/openapi-to-rest-api.spec.d.ts.map +1 -0
  27. package/esm/openapi-to-rest-api.spec.js +665 -0
  28. package/esm/openapi-to-rest-api.spec.js.map +1 -0
  29. package/esm/openapi-to-schema.d.ts +24 -0
  30. package/esm/openapi-to-schema.d.ts.map +1 -0
  31. package/esm/openapi-to-schema.js +145 -0
  32. package/esm/openapi-to-schema.js.map +1 -0
  33. package/esm/openapi-to-schema.spec.d.ts +2 -0
  34. package/esm/openapi-to-schema.spec.d.ts.map +1 -0
  35. package/esm/openapi-to-schema.spec.js +610 -0
  36. package/esm/openapi-to-schema.spec.js.map +1 -0
  37. package/esm/rest-api.d.ts +21 -4
  38. package/esm/rest-api.d.ts.map +1 -1
  39. package/esm/swagger-document.d.ts +2 -195
  40. package/esm/swagger-document.d.ts.map +1 -1
  41. package/esm/swagger-document.js +2 -1
  42. package/esm/swagger-document.js.map +1 -1
  43. package/package.json +3 -3
  44. package/src/api-endpoint-schema.ts +56 -3
  45. package/src/index.ts +4 -1
  46. package/src/openapi-document.ts +328 -0
  47. package/src/openapi-resolve-refs.spec.ts +324 -0
  48. package/src/openapi-resolve-refs.ts +71 -0
  49. package/src/openapi-to-rest-api.spec.ts +823 -0
  50. package/src/openapi-to-rest-api.ts +263 -0
  51. package/src/openapi-to-schema.spec.ts +707 -0
  52. package/src/openapi-to-schema.ts +163 -0
  53. package/src/rest-api.ts +26 -5
  54. package/src/swagger-document.ts +2 -220
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=openapi-resolve-refs.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openapi-resolve-refs.spec.d.ts","sourceRoot":"","sources":["../src/openapi-resolve-refs.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,294 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { resolveOpenApiRefs } from './openapi-resolve-refs.js';
3
+ describe('resolveOpenApiRefs', () => {
4
+ describe('Schema $ref resolution', () => {
5
+ it('Should resolve $ref to components/schemas', () => {
6
+ const doc = {
7
+ openapi: '3.1.0',
8
+ info: { title: 'Test', version: '1.0.0' },
9
+ paths: {
10
+ '/users': {
11
+ get: {
12
+ responses: {
13
+ '200': {
14
+ description: 'OK',
15
+ content: {
16
+ 'application/json': {
17
+ schema: { $ref: '#/components/schemas/User' },
18
+ },
19
+ },
20
+ },
21
+ },
22
+ },
23
+ },
24
+ },
25
+ components: {
26
+ schemas: {
27
+ User: { type: 'object', properties: { id: { type: 'string' }, name: { type: 'string' } } },
28
+ },
29
+ },
30
+ };
31
+ const resolved = resolveOpenApiRefs(doc);
32
+ const { schema } = (resolved.paths?.['/users']?.get?.responses?.['200']).content['application/json'];
33
+ expect(schema).toEqual({ type: 'object', properties: { id: { type: 'string' }, name: { type: 'string' } } });
34
+ });
35
+ it('Should resolve nested $ref chains', () => {
36
+ const doc = {
37
+ openapi: '3.1.0',
38
+ info: { title: 'Test', version: '1.0.0' },
39
+ paths: {
40
+ '/items': {
41
+ get: {
42
+ responses: {
43
+ '200': {
44
+ description: 'OK',
45
+ content: {
46
+ 'application/json': {
47
+ schema: {
48
+ type: 'object',
49
+ properties: {
50
+ category: { $ref: '#/components/schemas/Category' },
51
+ },
52
+ },
53
+ },
54
+ },
55
+ },
56
+ },
57
+ },
58
+ },
59
+ },
60
+ components: {
61
+ schemas: {
62
+ Category: { type: 'object', properties: { id: { type: 'integer' }, name: { type: 'string' } } },
63
+ },
64
+ },
65
+ };
66
+ const resolved = resolveOpenApiRefs(doc);
67
+ const schema = (resolved.paths?.['/items']?.get?.responses?.['200']).content['application/json'].schema;
68
+ const props = schema.properties.category;
69
+ expect(props.type).toBe('object');
70
+ expect(props.properties).toEqual({ id: { type: 'integer' }, name: { type: 'string' } });
71
+ });
72
+ });
73
+ describe('Parameter $ref resolution', () => {
74
+ it('Should resolve $ref parameters', () => {
75
+ const doc = {
76
+ openapi: '3.1.0',
77
+ info: { title: 'Test', version: '1.0.0' },
78
+ paths: {
79
+ '/items': {
80
+ get: {
81
+ parameters: [{ $ref: '#/components/parameters/LimitParam' }],
82
+ responses: { '200': { description: 'OK' } },
83
+ },
84
+ },
85
+ },
86
+ components: {
87
+ parameters: {
88
+ LimitParam: { name: 'limit', in: 'query', schema: { type: 'integer' } },
89
+ },
90
+ },
91
+ };
92
+ const resolved = resolveOpenApiRefs(doc);
93
+ const params = resolved.paths?.['/items']?.get?.parameters;
94
+ expect(params[0].name).toBe('limit');
95
+ expect(params[0].in).toBe('query');
96
+ });
97
+ });
98
+ describe('Response $ref resolution', () => {
99
+ it('Should resolve $ref responses', () => {
100
+ const doc = {
101
+ openapi: '3.1.0',
102
+ info: { title: 'Test', version: '1.0.0' },
103
+ paths: {
104
+ '/items': {
105
+ get: {
106
+ responses: {
107
+ '400': { $ref: '#/components/responses/BadRequest' },
108
+ },
109
+ },
110
+ },
111
+ },
112
+ components: {
113
+ responses: {
114
+ BadRequest: {
115
+ description: 'Bad request',
116
+ content: {
117
+ 'application/json': {
118
+ schema: { type: 'object', properties: { message: { type: 'string' } } },
119
+ },
120
+ },
121
+ },
122
+ },
123
+ },
124
+ };
125
+ const resolved = resolveOpenApiRefs(doc);
126
+ const resp = resolved.paths?.['/items']?.get?.responses?.['400'];
127
+ expect(resp.description).toBe('Bad request');
128
+ });
129
+ });
130
+ describe('RequestBody $ref resolution', () => {
131
+ it('Should resolve $ref in requestBody schema', () => {
132
+ const doc = {
133
+ openapi: '3.1.0',
134
+ info: { title: 'Test', version: '1.0.0' },
135
+ paths: {
136
+ '/items': {
137
+ post: {
138
+ requestBody: {
139
+ content: {
140
+ 'application/json': {
141
+ schema: { $ref: '#/components/schemas/Item' },
142
+ },
143
+ },
144
+ },
145
+ responses: { '201': { description: 'Created' } },
146
+ },
147
+ },
148
+ },
149
+ components: {
150
+ schemas: {
151
+ Item: { type: 'object', properties: { name: { type: 'string' } } },
152
+ },
153
+ },
154
+ };
155
+ const resolved = resolveOpenApiRefs(doc);
156
+ const body = resolved.paths?.['/items']?.post?.requestBody;
157
+ const schema = body.content['application/json']
158
+ .schema;
159
+ expect(schema.type).toBe('object');
160
+ });
161
+ });
162
+ describe('Edge cases', () => {
163
+ it('Should handle circular $ref by breaking the cycle with empty object', () => {
164
+ const doc = {
165
+ openapi: '3.1.0',
166
+ info: { title: 'Test', version: '1.0.0' },
167
+ components: {
168
+ schemas: {
169
+ Node: {
170
+ type: 'object',
171
+ properties: {
172
+ value: { type: 'string' },
173
+ child: { $ref: '#/components/schemas/Node' },
174
+ },
175
+ },
176
+ },
177
+ },
178
+ };
179
+ const resolved = resolveOpenApiRefs(doc);
180
+ const nodeSchema = resolved.components?.schemas?.Node;
181
+ expect(nodeSchema.type).toBe('object');
182
+ const props = nodeSchema.properties;
183
+ expect(props.value).toEqual({ type: 'string' });
184
+ // The circular child ref is resolved, but the nested self-ref within it breaks the cycle
185
+ expect(props.child.type).toBe('object');
186
+ const childProps = props.child.properties;
187
+ expect(childProps.value).toEqual({ type: 'string' });
188
+ expect(childProps.child).toEqual({});
189
+ });
190
+ it('Should not modify the original document', () => {
191
+ const doc = {
192
+ openapi: '3.1.0',
193
+ info: { title: 'Test', version: '1.0.0' },
194
+ paths: {
195
+ '/items': {
196
+ get: {
197
+ responses: {
198
+ '200': {
199
+ description: 'OK',
200
+ content: { 'application/json': { schema: { $ref: '#/components/schemas/Item' } } },
201
+ },
202
+ },
203
+ },
204
+ },
205
+ },
206
+ components: { schemas: { Item: { type: 'object' } } },
207
+ };
208
+ resolveOpenApiRefs(doc);
209
+ const schema = doc.paths?.['/items']?.get?.responses?.['200'];
210
+ expect(schema.content['application/json'].schema).toEqual({
211
+ $ref: '#/components/schemas/Item',
212
+ });
213
+ });
214
+ it('Should leave external $ref as-is', () => {
215
+ const doc = {
216
+ openapi: '3.1.0',
217
+ info: { title: 'Test', version: '1.0.0' },
218
+ paths: {
219
+ '/items': {
220
+ get: {
221
+ responses: {
222
+ '200': {
223
+ description: 'OK',
224
+ content: { 'application/json': { schema: { $ref: 'external.json#/Schema' } } },
225
+ },
226
+ },
227
+ },
228
+ },
229
+ },
230
+ };
231
+ const resolved = resolveOpenApiRefs(doc);
232
+ const { schema } = (resolved.paths?.['/items']?.get?.responses?.['200']).content['application/json'];
233
+ expect(schema).toEqual({ $ref: 'external.json#/Schema' });
234
+ });
235
+ it('Should leave unresolvable $ref as-is', () => {
236
+ const doc = {
237
+ openapi: '3.1.0',
238
+ info: { title: 'Test', version: '1.0.0' },
239
+ paths: {
240
+ '/items': {
241
+ get: {
242
+ responses: {
243
+ '200': {
244
+ description: 'OK',
245
+ content: { 'application/json': { schema: { $ref: '#/components/schemas/Missing' } } },
246
+ },
247
+ },
248
+ },
249
+ },
250
+ },
251
+ };
252
+ const resolved = resolveOpenApiRefs(doc);
253
+ const { schema } = (resolved.paths?.['/items']?.get?.responses?.['200']).content['application/json'];
254
+ expect(schema).toEqual({ $ref: '#/components/schemas/Missing' });
255
+ });
256
+ it('Should handle documents with no $ref', () => {
257
+ const doc = {
258
+ openapi: '3.1.0',
259
+ info: { title: 'Test', version: '1.0.0' },
260
+ paths: {
261
+ '/health': { get: { responses: { '200': { description: 'OK' } } } },
262
+ },
263
+ };
264
+ const resolved = resolveOpenApiRefs(doc);
265
+ expect(resolved.paths?.['/health']?.get?.responses?.['200']).toEqual({ description: 'OK' });
266
+ });
267
+ it('Should resolve arrays of items with $ref', () => {
268
+ const doc = {
269
+ openapi: '3.1.0',
270
+ info: { title: 'Test', version: '1.0.0' },
271
+ paths: {
272
+ '/items': {
273
+ get: {
274
+ parameters: [{ $ref: '#/components/parameters/A' }, { $ref: '#/components/parameters/B' }],
275
+ responses: { '200': { description: 'OK' } },
276
+ },
277
+ },
278
+ },
279
+ components: {
280
+ parameters: {
281
+ A: { name: 'a', in: 'query', schema: { type: 'string' } },
282
+ B: { name: 'b', in: 'query', schema: { type: 'integer' } },
283
+ },
284
+ },
285
+ };
286
+ const resolved = resolveOpenApiRefs(doc);
287
+ const params = resolved.paths?.['/items']?.get?.parameters;
288
+ expect(params).toHaveLength(2);
289
+ expect(params[0].name).toBe('a');
290
+ expect(params[1].name).toBe('b');
291
+ });
292
+ });
293
+ });
294
+ //# sourceMappingURL=openapi-resolve-refs.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openapi-resolve-refs.spec.js","sourceRoot":"","sources":["../src/openapi-resolve-refs.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,197 @@
1
+ import type { OpenApiDocument } from './openapi-document.js';
2
+ import type { RestApi } from './rest-api.js';
3
+ /**
4
+ * Converts an OpenAPI `{param}` path to FuryStack `:param` format at the type level.
5
+ */
6
+ export type ConvertOpenApiPath<P extends string> = P extends `${infer Before}{${infer Param}}${infer After}` ? `${Before}:${Param}${ConvertOpenApiPath<After>}` : P;
7
+ type ResolveRef<Doc extends OpenApiDocument, Ref extends string> = Ref extends `#/components/schemas/${infer Name}` ? Doc['components'] extends {
8
+ schemas: infer S;
9
+ } ? Name extends keyof S ? S[Name] : unknown : unknown : Ref extends `#/components/parameters/${infer Name}` ? Doc['components'] extends {
10
+ parameters: infer S;
11
+ } ? Name extends keyof S ? S[Name] : unknown : unknown : Ref extends `#/components/responses/${infer Name}` ? Doc['components'] extends {
12
+ responses: infer S;
13
+ } ? Name extends keyof S ? S[Name] : unknown : unknown : Ref extends `#/components/requestBodies/${infer Name}` ? Doc['components'] extends {
14
+ requestBodies: infer S;
15
+ } ? Name extends keyof S ? S[Name] : unknown : unknown : unknown;
16
+ type ResolveSchemaOrRef<Doc extends OpenApiDocument, S> = S extends {
17
+ $ref: infer Ref extends string;
18
+ } ? ResolveRef<Doc, Ref> : S;
19
+ type UnionToIntersection<U> = (U extends unknown ? (k: U) => void : never) extends (k: infer I) => void ? I : never;
20
+ /**
21
+ * Maps a JSON Schema type keyword to its TypeScript equivalent.
22
+ * Supports primitives, arrays, objects, enum, const, oneOf/anyOf/allOf, nullable, and $ref.
23
+ *
24
+ * The `Doc` parameter is threaded through for `$ref` resolution within schemas.
25
+ */
26
+ export type JsonSchemaToType<S, Doc extends OpenApiDocument = OpenApiDocument> = S extends {
27
+ $ref: infer Ref extends string;
28
+ } ? JsonSchemaToType<ResolveRef<Doc, Ref>, Doc> : S extends {
29
+ const: infer C;
30
+ } ? C : S extends {
31
+ type: 'string';
32
+ enum: ReadonlyArray<infer E>;
33
+ } ? E : S extends {
34
+ type: 'string';
35
+ } ? string : S extends {
36
+ type: 'number' | 'integer';
37
+ } ? number : S extends {
38
+ type: 'boolean';
39
+ } ? boolean : S extends {
40
+ type: 'null';
41
+ } ? null : S extends {
42
+ type: readonly [infer T, 'null'];
43
+ } ? JsonSchemaToType<{
44
+ type: T;
45
+ }, Doc> | null : S extends {
46
+ type: readonly ['null', infer T];
47
+ } ? JsonSchemaToType<{
48
+ type: T;
49
+ }, Doc> | null : S extends {
50
+ type: 'array';
51
+ items: infer Items;
52
+ } ? Array<JsonSchemaToType<Items, Doc>> : S extends {
53
+ type: 'object';
54
+ properties: infer Props extends Record<string, unknown>;
55
+ } ? S extends {
56
+ required: ReadonlyArray<infer R extends string>;
57
+ } ? {
58
+ [K in keyof Props & R]: JsonSchemaToType<Props[K], Doc>;
59
+ } & {
60
+ [K in Exclude<keyof Props, R>]?: JsonSchemaToType<Props[K], Doc>;
61
+ } : {
62
+ [K in keyof Props]?: JsonSchemaToType<Props[K], Doc>;
63
+ } : S extends {
64
+ type: 'object';
65
+ } ? Record<string, unknown> : S extends {
66
+ allOf: ReadonlyArray<infer Items>;
67
+ } ? UnionToIntersection<JsonSchemaToType<Items, Doc>> : S extends {
68
+ oneOf: ReadonlyArray<infer Items>;
69
+ } ? JsonSchemaToType<Items, Doc> : S extends {
70
+ anyOf: ReadonlyArray<infer Items>;
71
+ } ? JsonSchemaToType<Items, Doc> : unknown;
72
+ type LowercaseHttpMethod = 'get' | 'put' | 'post' | 'delete' | 'patch' | 'head' | 'options' | 'trace';
73
+ type MethodMap = {
74
+ get: 'GET';
75
+ put: 'PUT';
76
+ post: 'POST';
77
+ delete: 'DELETE';
78
+ patch: 'PATCH';
79
+ head: 'HEAD';
80
+ options: 'OPTIONS';
81
+ trace: 'TRACE';
82
+ };
83
+ type UppercaseMethod<M extends string> = M extends keyof MethodMap ? MethodMap[M] : never;
84
+ type PathsWithMethod<T extends OpenApiDocument, M extends LowercaseHttpMethod> = {
85
+ [P in keyof NonNullable<T['paths']> & string]: NonNullable<T['paths']>[P] extends infer PathItem ? M extends keyof PathItem ? PathItem[M] extends object ? P : never : never : never;
86
+ }[keyof NonNullable<T['paths']> & string];
87
+ type GetOperation<T extends OpenApiDocument, P extends string, M extends LowercaseHttpMethod> = NonNullable<T['paths']>[P] extends infer PathItem ? M extends keyof PathItem ? PathItem[M] : never : never;
88
+ type ExtractResponseSchema<Doc extends OpenApiDocument, Op> = Op extends {
89
+ responses: infer R;
90
+ } ? R extends {
91
+ '200': infer Resp200;
92
+ } ? ResolveSchemaOrRef<Doc, Resp200> extends {
93
+ content: {
94
+ 'application/json': {
95
+ schema: infer S;
96
+ };
97
+ };
98
+ } ? JsonSchemaToType<S, Doc> : unknown : R extends {
99
+ '201': infer Resp201;
100
+ } ? ResolveSchemaOrRef<Doc, Resp201> extends {
101
+ content: {
102
+ 'application/json': {
103
+ schema: infer S;
104
+ };
105
+ };
106
+ } ? JsonSchemaToType<S, Doc> : unknown : unknown : unknown;
107
+ type ExtractRequestBodySchema<Doc extends OpenApiDocument, Op> = Op extends {
108
+ requestBody: infer RB;
109
+ } ? ResolveSchemaOrRef<Doc, RB> extends {
110
+ content: {
111
+ 'application/json': {
112
+ schema: infer S;
113
+ };
114
+ };
115
+ } ? JsonSchemaToType<S, Doc> : never : never;
116
+ type ExtractPathParamsFromPath<P extends string> = P extends `${string}{${infer Param}}${infer Rest}` ? {
117
+ [K in Param | keyof ExtractPathParamsFromPath<Rest>]: string;
118
+ } : never;
119
+ type HasPathParams<P extends string> = P extends `${string}{${string}}${string}` ? true : false;
120
+ type ResolvedParam<Doc extends OpenApiDocument, P> = P extends {
121
+ $ref: infer Ref extends string;
122
+ } ? ResolveRef<Doc, Ref> : P;
123
+ type ExtractQueryParamEntry<Doc extends OpenApiDocument, P> = ResolvedParam<Doc, P> extends {
124
+ in: 'query';
125
+ name: infer N extends string;
126
+ schema: infer S;
127
+ } ? {
128
+ [K in N]: JsonSchemaToType<S, Doc>;
129
+ } : ResolvedParam<Doc, P> extends {
130
+ in: 'query';
131
+ name: infer N extends string;
132
+ } ? {
133
+ [K in N]: string;
134
+ } : never;
135
+ type BuildQueryParamsFromTuple<Doc extends OpenApiDocument, T> = T extends readonly [infer Head, ...infer Tail] ? [ExtractQueryParamEntry<Doc, Head>] extends [never] ? BuildQueryParamsFromTuple<Doc, Tail> : ExtractQueryParamEntry<Doc, Head> & BuildQueryParamsFromTuple<Doc, Tail> : unknown;
136
+ type HasQueryParams<Doc extends OpenApiDocument, T> = T extends readonly [infer Head, ...infer Tail] ? [ExtractQueryParamEntry<Doc, Head>] extends [never] ? HasQueryParams<Doc, Tail> : true : false;
137
+ type BuildQueryParams<Doc extends OpenApiDocument, Op> = Op extends {
138
+ parameters: infer Params extends readonly unknown[];
139
+ } ? HasQueryParams<Doc, Params> extends true ? BuildQueryParamsFromTuple<Doc, Params> : never : never;
140
+ type ExtractTags<Op> = Op extends {
141
+ tags: infer T;
142
+ } ? T : never;
143
+ type ExtractDeprecated<Op> = Op extends {
144
+ deprecated: true;
145
+ } ? true : never;
146
+ type ExtractSummary<Op> = Op extends {
147
+ summary: infer S extends string;
148
+ } ? S : never;
149
+ type ExtractDescription<Op> = Op extends {
150
+ description: infer S extends string;
151
+ } ? S : never;
152
+ type BuildEndpoint<T extends OpenApiDocument, P extends string, M extends LowercaseHttpMethod> = {
153
+ result: ExtractResponseSchema<T, GetOperation<T, P, M>>;
154
+ } & ([ExtractRequestBodySchema<T, GetOperation<T, P, M>>] extends [never] ? unknown : {
155
+ body: ExtractRequestBodySchema<T, GetOperation<T, P, M>>;
156
+ }) & (HasPathParams<P> extends true ? {
157
+ url: ExtractPathParamsFromPath<P>;
158
+ } : unknown) & ([BuildQueryParams<T, GetOperation<T, P, M>>] extends [never] ? unknown : {
159
+ query: BuildQueryParams<T, GetOperation<T, P, M>>;
160
+ }) & ([ExtractTags<GetOperation<T, P, M>>] extends [never] ? unknown : {
161
+ tags: ExtractTags<GetOperation<T, P, M>>;
162
+ }) & ([ExtractDeprecated<GetOperation<T, P, M>>] extends [never] ? unknown : {
163
+ deprecated: true;
164
+ }) & ([ExtractSummary<GetOperation<T, P, M>>] extends [never] ? unknown : {
165
+ summary: ExtractSummary<GetOperation<T, P, M>>;
166
+ }) & ([ExtractDescription<GetOperation<T, P, M>>] extends [never] ? unknown : {
167
+ description: ExtractDescription<GetOperation<T, P, M>>;
168
+ });
169
+ type EndpointsForMethod<T extends OpenApiDocument, M extends LowercaseHttpMethod> = string extends PathsWithMethod<T, M> ? never : [PathsWithMethod<T, M>] extends [never] ? never : {
170
+ [P in PathsWithMethod<T, M> as ConvertOpenApiPath<P>]: BuildEndpoint<T, P, M>;
171
+ };
172
+ type CleanObject<T> = {
173
+ [K in keyof T as [T[K]] extends [never] ? never : K]: T[K];
174
+ };
175
+ /**
176
+ * Extracts a strongly-typed `RestApi` from an OpenAPI document type.
177
+ *
178
+ * Supports `$ref` resolution, `allOf`/`oneOf`/`anyOf` composition, `nullable`, `const`,
179
+ * and metadata extraction (`tags`, `deprecated`, `summary`, `description`).
180
+ *
181
+ * Use with `as const satisfies OpenApiDocument` to get full type inference:
182
+ *
183
+ * @example
184
+ * ```typescript
185
+ * import type { OpenApiDocument, OpenApiToRestApi } from '@furystack/rest'
186
+ * import { createClient } from '@furystack/rest-client-fetch'
187
+ *
188
+ * const apiDoc = { ... } as const satisfies OpenApiDocument
189
+ * type MyApi = OpenApiToRestApi<typeof apiDoc>
190
+ * const client = createClient<MyApi>({ endpointUrl: 'https://api.example.com' })
191
+ * ```
192
+ */
193
+ export type OpenApiToRestApi<T extends OpenApiDocument> = CleanObject<{
194
+ [M in LowercaseHttpMethod as [EndpointsForMethod<T, M>] extends [never] ? never : UppercaseMethod<M>]: EndpointsForMethod<T, M>;
195
+ }> extends infer R extends RestApi ? R : never;
196
+ export {};
197
+ //# sourceMappingURL=openapi-to-rest-api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openapi-to-rest-api.d.ts","sourceRoot":"","sources":["../src/openapi-to-rest-api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=openapi-to-rest-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openapi-to-rest-api.js","sourceRoot":"","sources":["../src/openapi-to-rest-api.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=openapi-to-rest-api.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openapi-to-rest-api.spec.d.ts","sourceRoot":"","sources":["../src/openapi-to-rest-api.spec.ts"],"names":[],"mappings":""}