@kollors/react-codegen 2.0.0-alpha.2 → 2.0.0-alpha.4

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.
@@ -0,0 +1,328 @@
1
+ import { list, object, pointer, string } from './document.js';
2
+ import { comment, identifier } from './names.js';
3
+ const methods = ['get', 'put', 'post', 'delete', 'options', 'head', 'patch', 'trace'];
4
+ export class Operations {
5
+ schemas;
6
+ baseUrl;
7
+ constructor(schemas, baseUrl = '') {
8
+ this.schemas = schemas;
9
+ this.baseUrl = baseUrl;
10
+ }
11
+ render() {
12
+ const root = this.schemas.document.root;
13
+ const paths = root.paths === undefined ? {} : object(root.paths, '#/paths');
14
+ const result = [];
15
+ for (const path of Object.keys(paths).sort()) {
16
+ if (path.startsWith('x-'))
17
+ continue;
18
+ const location = pointer('paths', path);
19
+ if (!path.startsWith('/') || path.includes('?') || path.includes('#'))
20
+ throw new Error(`${location}: expected a path starting with / without a query or fragment.`);
21
+ const item = this.schemas.document.resolve(paths[path], location);
22
+ for (const method of methods) {
23
+ if (item[method] === undefined)
24
+ continue;
25
+ const operation = object(item[method], `${location}/${method}`);
26
+ result.push(this.operation(path, method, item, operation, `${location}/${method}`));
27
+ }
28
+ }
29
+ return result.join('\n\n');
30
+ }
31
+ media(content, location, input) {
32
+ if (content === undefined)
33
+ return [];
34
+ return Object.entries(object(content, location)).map(([mime, value]) => {
35
+ const media = object(value, `${location}/${mime}`);
36
+ if (input && media.encoding !== undefined && Object.keys(object(media.encoding, `${location}/${mime}/encoding`)).length) {
37
+ throw new Error(`${location}/${mime}: custom body encoding is not supported.`);
38
+ }
39
+ let type;
40
+ if (mime === 'application/json' || /^application\/[^;]+\+json$/.test(mime)) {
41
+ type =
42
+ media.schema === undefined
43
+ ? 'unknown'
44
+ : this.schemas.type(media.schema, `${location}/${mime}/schema`, input ? 'input' : 'output');
45
+ }
46
+ else if (input && ['multipart/form-data', 'application/x-www-form-urlencoded'].includes(mime)) {
47
+ if (media.schema === undefined)
48
+ throw new Error(`${location}/${mime}: form bodies require an object schema.`);
49
+ const schema = this.schemas.document.resolve(media.schema, `${location}/${mime}/schema`);
50
+ if (schema.type !== 'object')
51
+ throw new Error(`${location}/${mime}: form bodies require an object schema.`);
52
+ type = this.schemas.type(media.schema, `${location}/${mime}/schema`, 'input');
53
+ }
54
+ else if (mime === '*/*') {
55
+ const schema = media.schema === undefined ? undefined : this.schemas.document.resolve(media.schema, `${location}/${mime}/schema`);
56
+ if (schema?.type !== 'string' || schema.format !== 'binary') {
57
+ throw new Error(`${location}/${mime}: wildcard content requires a binary string schema.`);
58
+ }
59
+ type = this.schemas.type(media.schema, `${location}/${mime}/schema`, input ? 'input' : 'output');
60
+ }
61
+ else if (mime.startsWith('text/') || mime === 'application/xml' || mime.endsWith('+xml')) {
62
+ type = 'string';
63
+ }
64
+ else if (mime === 'application/octet-stream' ||
65
+ mime.startsWith('image/') ||
66
+ mime.startsWith('audio/') ||
67
+ mime.startsWith('video/') ||
68
+ mime === 'application/pdf') {
69
+ type = 'Blob';
70
+ }
71
+ else {
72
+ throw new Error(`${location}: unsupported content type "${mime}".`);
73
+ }
74
+ return { mime, type };
75
+ });
76
+ }
77
+ parameters(values, location) {
78
+ if (values === undefined)
79
+ return [];
80
+ const seen = new Set();
81
+ return list(values, location).flatMap((value, index) => {
82
+ const at = `${location}/${index}`;
83
+ const parameter = this.schemas.document.resolve(value, at);
84
+ const name = string(parameter.name, `${at}/name`);
85
+ const where = string(parameter.in, `${at}/in`);
86
+ if (where !== 'path' && where !== 'query' && where !== 'header')
87
+ throw new Error(`${at}: unsupported parameter location "${where}".`);
88
+ const key = `${where}:${where === 'header' ? name.toLowerCase() : name}`;
89
+ if (seen.has(key))
90
+ throw new Error(`${at}: duplicate parameter "${name}".`);
91
+ seen.add(key);
92
+ // OpenAPI explicitly ignores these header parameter definitions.
93
+ if (where === 'header' && ['accept', 'content-type', 'authorization'].includes(name.toLowerCase()))
94
+ return [];
95
+ if (parameter.content !== undefined)
96
+ throw new Error(`${at}: parameter content is not supported; use schema.`);
97
+ if (parameter.allowReserved === true)
98
+ throw new Error(`${at}: allowReserved is not supported.`);
99
+ if (where === 'path' && parameter.required !== true)
100
+ throw new Error(`${at}: path parameters must be required.`);
101
+ const style = parameter.style ?? (where === 'query' ? 'form' : 'simple');
102
+ const allowed = where === 'query' ? ['form', 'deepObject', 'spaceDelimited', 'pipeDelimited'] : ['simple'];
103
+ if (typeof style !== 'string' || !allowed.includes(style))
104
+ throw new Error(`${at}: unsupported ${where} parameter style "${String(style)}".`);
105
+ const explode = parameter.explode ?? style === 'form';
106
+ if (typeof explode !== 'boolean')
107
+ throw new Error(`${at}/explode must be a boolean.`);
108
+ if (style === 'deepObject' && explode !== true)
109
+ throw new Error(`${at}: deepObject requires explode: true.`);
110
+ const schema = this.schemas.document.resolve(parameter.schema, `${at}/schema`);
111
+ if (['spaceDelimited', 'pipeDelimited'].includes(style) && (explode || schema.type !== 'array'))
112
+ throw new Error(`${at}: ${style} requires an array and explode: false.`);
113
+ if (style === 'deepObject' && schema.type !== 'object')
114
+ throw new Error(`${at}: deepObject requires an object.`);
115
+ this.flatParameter(schema, `${at}/schema`);
116
+ return [
117
+ {
118
+ name,
119
+ in: where,
120
+ style: style,
121
+ explode,
122
+ required: parameter.required === true,
123
+ type: this.schemas.type(parameter.schema, `${at}/schema`, 'input'),
124
+ description: parameter.description,
125
+ },
126
+ ];
127
+ });
128
+ }
129
+ flatParameter(schema, location) {
130
+ const scalar = (value, at) => {
131
+ const child = this.schemas.document.resolve(value, at);
132
+ const kinds = Array.isArray(child.type) ? child.type : [child.type];
133
+ if (!kinds.every((kind) => ['string', 'integer', 'number', 'boolean', 'null'].includes(String(kind))) || child.format === 'binary') {
134
+ throw new Error(`${at}: parameter arrays/objects must contain scalar values.`);
135
+ }
136
+ };
137
+ if (schema.type === 'array')
138
+ scalar(schema.items, `${location}/items`);
139
+ else if (schema.type === 'object') {
140
+ for (const [key, value] of Object.entries(object(schema.properties ?? {}, `${location}/properties`)))
141
+ scalar(value, `${location}/properties/${key}`);
142
+ if (schema.additionalProperties !== undefined && schema.additionalProperties !== false && schema.additionalProperties !== true)
143
+ scalar(schema.additionalProperties, `${location}/additionalProperties`);
144
+ }
145
+ else
146
+ scalar(schema, location);
147
+ }
148
+ operation(path, method, item, operation, at) {
149
+ if (operation.callbacks !== undefined && Object.keys(object(operation.callbacks, `${at}/callbacks`)).length)
150
+ throw new Error(`${at}: callbacks are not supported.`);
151
+ if (method === 'trace')
152
+ throw new Error(`${at}: Fetch does not support the TRACE method.`);
153
+ const rawName = operation.operationId === undefined
154
+ ? `${method} ${path.replace(/\{([^}]+)}/g, ' by $1 ')}`
155
+ : string(operation.operationId, `${at}/operationId`);
156
+ const name = identifier(rawName);
157
+ const title = identifier(rawName, true);
158
+ const reserve = (symbol) => this.schemas.names.reserve(symbol, at);
159
+ const responseName = reserve(`${title}Response`);
160
+ const errorName = reserve(`${title}Error`);
161
+ const variablesName = reserve(`${title}Variables`);
162
+ const fetchName = reserve(`fetch${title}`);
163
+ const hookName = reserve(`use${title}`);
164
+ const declarations = [];
165
+ const fields = [];
166
+ let required = false;
167
+ const merged = new Map();
168
+ for (const parameter of [
169
+ ...this.parameters(item.parameters, `${at}/../parameters`),
170
+ ...this.parameters(operation.parameters, `${at}/parameters`),
171
+ ]) {
172
+ merged.set(`${parameter.in}:${parameter.in === 'header' ? parameter.name.toLowerCase() : parameter.name}`, parameter);
173
+ }
174
+ const parameters = [...merged.values()];
175
+ const placeholders = [...path.matchAll(/\{([^}]+)}/g)].map((match) => match[1]);
176
+ for (const placeholder of placeholders) {
177
+ if (!parameters.some((parameter) => parameter.in === 'path' && parameter.name === placeholder))
178
+ throw new Error(`${at}: missing path parameter definition "${placeholder}".`);
179
+ }
180
+ for (const parameter of parameters) {
181
+ if (parameter.in === 'path' && !placeholders.includes(parameter.name))
182
+ throw new Error(`${at}: path parameter "${parameter.name}" is absent from the path.`);
183
+ }
184
+ for (const [where, field, suffix] of [
185
+ ['path', 'pathParams', 'PathParams'],
186
+ ['query', 'queryParams', 'QueryParams'],
187
+ ['header', 'headers', 'Headers'],
188
+ ]) {
189
+ const group = parameters.filter((parameter) => parameter.in === where);
190
+ if (!group.length) {
191
+ if (where === 'header')
192
+ fields.push('headers?: HeadersInit;');
193
+ continue;
194
+ }
195
+ const typeName = reserve(title + suffix);
196
+ const groupRequired = group.some((parameter) => parameter.required);
197
+ required ||= groupRequired;
198
+ const properties = group
199
+ .map((parameter) => `${comment(parameter.description)}${JSON.stringify(parameter.name)}${parameter.required ? '' : '?'}: ${parameter.type};`)
200
+ .join('\n');
201
+ declarations.push(`export type ${typeName} = {\n${properties}${where === 'header' ? '\n[key: string]: unknown;' : ''}\n};`);
202
+ fields.push(`${field + (groupRequired ? '' : '?')}: ${typeName};`);
203
+ }
204
+ let body;
205
+ if (operation.requestBody !== undefined) {
206
+ if (method === 'get' || method === 'head')
207
+ throw new Error(`${at}: Fetch cannot send a request body with ${method.toUpperCase()}.`);
208
+ const request = this.schemas.document.resolve(operation.requestBody, `${at}/requestBody`);
209
+ const choices = this.media(request.content, `${at}/requestBody/content`, true);
210
+ if (!choices.length)
211
+ throw new Error(`${at}/requestBody/content must not be empty.`);
212
+ const rank = (mime) => mime === 'application/json'
213
+ ? 0
214
+ : mime.endsWith('+json')
215
+ ? 1
216
+ : mime === 'application/x-www-form-urlencoded'
217
+ ? 2
218
+ : mime === 'multipart/form-data'
219
+ ? 3
220
+ : 4;
221
+ body = choices.sort((a, b) => rank(a.mime) - rank(b.mime) || a.mime.localeCompare(b.mime))[0];
222
+ const bodyName = reserve(`${title}RequestBody`);
223
+ declarations.push(`export type ${bodyName} = ${body?.type};`);
224
+ fields.push(`body${request.required === true ? '' : '?'}: ${bodyName};`);
225
+ required ||= request.required === true;
226
+ }
227
+ const responses = object(operation.responses, `${at}/responses`);
228
+ const hasSuccess = Object.keys(responses).some((status) => status.startsWith('2'));
229
+ const success = [];
230
+ const errors = [];
231
+ const accepted = new Set();
232
+ const responseTypes = {};
233
+ for (const [status, value] of Object.entries(responses)) {
234
+ if (status.startsWith('x-'))
235
+ continue;
236
+ if (!/^[1-5](\d\d|XX)$/.test(status) && status !== 'default')
237
+ throw new Error(`${at}/responses: invalid status "${status}".`);
238
+ const response = this.schemas.document.resolve(value, `${at}/responses/${status}`);
239
+ const media = this.media(response.content, `${at}/responses/${status}/content`, false);
240
+ responseTypes[status] = Object.fromEntries(media.map(({ mime, type }) => [mime, mime === '*/*' || type === 'Blob' ? 'blob' : 'auto']));
241
+ const types = method === 'head' || status === '204' || status === '205' || !media.length ? ['void'] : media.map((entry) => entry.type);
242
+ if (status.startsWith('2') || (status === 'default' && !hasSuccess)) {
243
+ success.push(...types);
244
+ for (const entry of media)
245
+ accepted.add(entry.mime);
246
+ }
247
+ if (!status.startsWith('2'))
248
+ errors.push(...types);
249
+ }
250
+ if (!Object.keys(responses).length)
251
+ throw new Error(`${at}/responses must not be empty.`);
252
+ if (accepted.has('*/*') && accepted.size > 1) {
253
+ throw new Error(`${at}: wildcard binary responses cannot be combined with other successful content types.`);
254
+ }
255
+ if (method === 'get' && success.includes('void'))
256
+ throw new Error(`${at}: GET responses without a body cannot be cached by React Query. Declare a response body or use the fetcher directly.`);
257
+ declarations.push(`export type ${responseName} = ${union(success, 'unknown')};`);
258
+ declarations.push(`export type ${errorName} = OpenapiHttpError<${union(errors, 'unknown')}> | globalThis.Error;`);
259
+ declarations.push(`export type ${variablesName} = {\n${fields.join('\n')}\n};`);
260
+ const variables = `variables: ${variablesName}${required ? '' : ' = {}'}`;
261
+ const metadata = parameters.map(({ name, in: where, style, explode, required }) => ({ name, in: where, style, explode, required }));
262
+ const requestOptions = [
263
+ '...variables',
264
+ `url: ${JSON.stringify(path)}`,
265
+ `method: ${JSON.stringify(method)}`,
266
+ '...(signal ? { signal } : {})',
267
+ ...(body ? [`contentType: ${JSON.stringify(body.mime)}`] : []),
268
+ ...(accepted.size ? [`accept: ${JSON.stringify([...accepted].join(', '))}`] : []),
269
+ ...(Object.values(responseTypes).some((content) => Object.values(content).includes('blob'))
270
+ ? [`responseTypes: ${JSON.stringify(responseTypes)}`]
271
+ : []),
272
+ ...(metadata.length ? [`parameters: ${JSON.stringify(metadata)}`] : []),
273
+ ];
274
+ declarations.push(`${comment(operation.description ?? operation.summary)}export function ${fetchName}(${variables}, signal?: AbortSignal): Promise<${responseName}> {
275
+ return openapiFetcher<${responseName}>({
276
+ ${requestOptions.join(',\n ')}
277
+ });
278
+ }`);
279
+ if (method === 'get') {
280
+ const queryName = reserve(`${name}Query`);
281
+ const suspenseName = reserve(`useSuspense${title}`);
282
+ const keyName = reserve(`${name}QueryKey`);
283
+ const queryVariables = `variables: ${variablesName} | reactQuery.SkipToken${required ? '' : ' = {}'}`;
284
+ const keyPrefix = [this.baseUrl, method, path, name].map((part) => JSON.stringify(part)).join(', ');
285
+ const headerMetadata = metadata.filter((parameter) => parameter.in === 'header');
286
+ declarations.push(`export function ${keyName}(${variables}) {
287
+ const headers: Record<string, string> = Object.create(null);
288
+ const serializedHeaders = requestHeaders(variables.headers, ${JSON.stringify(headerMetadata)});
289
+ ${accepted.size ? `if (!serializedHeaders.has('accept')) serializedHeaders.set('accept', ${JSON.stringify([...accepted].join(', '))});\n ` : ''}serializedHeaders.forEach((value, key) => {
290
+ headers[key] = value;
291
+ });
292
+ return [${keyPrefix}, { ...variables, headers }] as const;
293
+ }`);
294
+ declarations.push(`export function ${queryName}(${queryVariables}) {
295
+ return reactQuery.queryOptions<${responseName}, ${errorName}>({
296
+ queryKey: variables === reactQuery.skipToken ? [${keyPrefix}] : ${keyName}(variables),
297
+ queryFn: variables === reactQuery.skipToken ? reactQuery.skipToken : ({ signal }) => ${fetchName}(variables, signal),
298
+ });
299
+ }`);
300
+ declarations.push(`export function ${hookName}<TData = ${responseName}>(
301
+ ${queryVariables},
302
+ options?: Omit<reactQuery.UseQueryOptions<${responseName}, ${errorName}, TData>, 'queryKey' | 'queryFn'>,
303
+ ) {
304
+ const { queryKey, queryFn } = ${queryName}(variables);
305
+ return reactQuery.useQuery<${responseName}, ${errorName}, TData>({ ...options, queryKey, queryFn: queryFn ?? reactQuery.skipToken });
306
+ }`);
307
+ declarations.push(`export function ${suspenseName}<TData = ${responseName}>(
308
+ ${variables},
309
+ options?: Omit<reactQuery.UseSuspenseQueryOptions<${responseName}, ${errorName}, TData>, 'queryKey' | 'queryFn'>,
310
+ ) {
311
+ return reactQuery.useSuspenseQuery({ ...options, queryKey: ${keyName}(variables), queryFn: ({ signal }) => ${fetchName}(variables, signal) });
312
+ }`);
313
+ }
314
+ else {
315
+ declarations.push(`export function ${hookName}<TContext = unknown>(
316
+ options?: Omit<reactQuery.UseMutationOptions<${responseName}, ${errorName}, ${variablesName}, TContext>, 'mutationFn'>,
317
+ ) {
318
+ return reactQuery.useMutation({ ...options, mutationFn: (variables: ${variablesName}) => ${fetchName}(variables) });
319
+ }`);
320
+ }
321
+ return declarations.join('\n\n');
322
+ }
323
+ }
324
+ function union(types, fallback) {
325
+ const distinct = [...new Set(types)];
326
+ return distinct.length === 1 ? distinct[0] : distinct.length ? distinct.map((type) => `(${type})`).join(' | ') : fallback;
327
+ }
328
+ //# sourceMappingURL=operations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operations.js","sourceRoot":"","sources":["../../src/openapi/operations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { type OpenapiDocument } from './document.js';
2
+ import { type Names } from './names.js';
3
+ export type SchemaMode = 'model' | 'input' | 'output';
4
+ export declare class Schemas {
5
+ readonly document: OpenapiDocument;
6
+ readonly names: Names;
7
+ private readonly models;
8
+ private readonly variants;
9
+ private readonly contexts;
10
+ constructor(document: OpenapiDocument, names: Names);
11
+ private checkAliases;
12
+ private needsVariant;
13
+ private metadata;
14
+ private excludedProperties;
15
+ declarations(): string;
16
+ private contextualType;
17
+ type(value: unknown, location: string, mode?: SchemaMode, trail?: string[], excluded?: Set<string>): string;
18
+ private objectType;
19
+ }