@redocly/client-generator 0.7.10 → 0.7.12
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/eject-assets/generators/cli/docs.ts +1 -1
- package/eject-assets/generators/cli/engine-source.ts +1 -1
- package/eject-assets/generators/cli/index.ts +2 -2
- package/eject-assets/generators/cli/render.ts +1 -1
- package/eject-assets/generators/go/client.ts +1 -1
- package/eject-assets/generators/go/descriptor.ts +1 -1
- package/eject-assets/generators/go/index.ts +2 -2
- package/eject-assets/generators/go/models.ts +7 -2
- package/eject-assets/generators/go/naming.ts +1 -1
- package/eject-assets/generators/go/operations.ts +1 -1
- package/eject-assets/generators/go/pagination.ts +1 -1
- package/eject-assets/generators/go/types.ts +1 -1
- package/eject-assets/generators/mock/faker.ts +17 -9
- package/eject-assets/generators/mock/index.ts +4 -3
- package/eject-assets/generators/mock/render.ts +128 -9
- package/eject-assets/generators/mock/sample.ts +87 -4
- package/eject-assets/generators/mock/values.ts +1 -1
- package/eject-assets/generators/php/client.ts +1 -1
- package/eject-assets/generators/php/descriptor.ts +10 -1
- package/eject-assets/generators/php/index.ts +2 -2
- package/eject-assets/generators/php/models.ts +8 -3
- package/eject-assets/generators/php/naming.ts +1 -1
- package/eject-assets/generators/php/operations.ts +11 -6
- package/eject-assets/generators/php/pagination.ts +3 -2
- package/eject-assets/generators/php/types.ts +12 -2
- package/eject-assets/generators/python/client.ts +1 -1
- package/eject-assets/generators/python/descriptor.ts +1 -1
- package/eject-assets/generators/python/index.ts +3 -3
- package/eject-assets/generators/python/models.ts +9 -3
- package/eject-assets/generators/python/naming.ts +1 -1
- package/eject-assets/generators/python/operations.ts +6 -5
- package/eject-assets/generators/python/pagination.ts +1 -1
- package/eject-assets/generators/python/types.ts +1 -1
- package/eject-assets/generators/swr/index.ts +2 -2
- package/eject-assets/generators/swr/render.ts +1 -1
- package/eject-assets/generators/tanstack-query/index.ts +2 -2
- package/eject-assets/generators/tanstack-query/render.ts +6 -5
- package/eject-assets/generators/transformers/index.ts +2 -2
- package/eject-assets/generators/transformers/render.ts +34 -7
- package/eject-assets/generators/typescript/banner.ts +1 -1
- package/eject-assets/generators/typescript/client.ts +1 -1
- package/eject-assets/generators/typescript/descriptor.ts +1 -1
- package/eject-assets/generators/typescript/index.ts +2 -2
- package/eject-assets/generators/typescript/inline-runtime.ts +1 -1
- package/eject-assets/generators/typescript/operation-signature.ts +1 -1
- package/eject-assets/generators/typescript/operation-types.ts +1 -1
- package/eject-assets/generators/typescript/operations.ts +1 -1
- package/eject-assets/generators/typescript/response-headers.ts +1 -1
- package/eject-assets/generators/typescript/type-guards.ts +1 -1
- package/eject-assets/generators/typescript/types.ts +1 -1
- package/eject-assets/generators/zod/index.ts +2 -2
- package/eject-assets/generators/zod/schemas.ts +1 -1
- package/eject-assets/skills/go-generator/SKILL.md +3 -0
- package/eject-assets/skills/mock-generator/SKILL.md +22 -0
- package/eject-assets/skills/php-generator/SKILL.md +9 -2
- package/eject-assets/skills/python-generator/SKILL.md +6 -0
- package/eject-assets/skills/tanstack-query-generator/SKILL.md +2 -1
- package/eject-assets/skills/transformers-generator/SKILL.md +4 -0
- package/eject-assets/skills/typescript-generator/SKILL.md +5 -0
- package/lib/authoring/schema.d.ts.map +1 -1
- package/lib/authoring/schema.js +4 -1
- package/lib/authoring/schema.js.map +1 -1
- package/lib/generators/go/models.d.ts.map +1 -1
- package/lib/generators/go/models.js +4 -1
- package/lib/generators/go/models.js.map +1 -1
- package/lib/generators/mock/faker.js +18 -8
- package/lib/generators/mock/faker.js.map +1 -1
- package/lib/generators/mock/index.d.ts.map +1 -1
- package/lib/generators/mock/index.js +2 -1
- package/lib/generators/mock/index.js.map +1 -1
- package/lib/generators/mock/render.d.ts +3 -1
- package/lib/generators/mock/render.d.ts.map +1 -1
- package/lib/generators/mock/render.js +119 -9
- package/lib/generators/mock/render.js.map +1 -1
- package/lib/generators/mock/sample.d.ts +18 -1
- package/lib/generators/mock/sample.d.ts.map +1 -1
- package/lib/generators/mock/sample.js +71 -2
- package/lib/generators/mock/sample.js.map +1 -1
- package/lib/generators/php/descriptor.d.ts +6 -0
- package/lib/generators/php/descriptor.d.ts.map +1 -1
- package/lib/generators/php/descriptor.js +8 -0
- package/lib/generators/php/descriptor.js.map +1 -1
- package/lib/generators/php/models.d.ts.map +1 -1
- package/lib/generators/php/models.js +5 -2
- package/lib/generators/php/models.js.map +1 -1
- package/lib/generators/php/operations.d.ts.map +1 -1
- package/lib/generators/php/operations.js +5 -5
- package/lib/generators/php/operations.js.map +1 -1
- package/lib/generators/php/pagination.d.ts.map +1 -1
- package/lib/generators/php/pagination.js +2 -1
- package/lib/generators/php/pagination.js.map +1 -1
- package/lib/generators/php/types.d.ts.map +1 -1
- package/lib/generators/php/types.js +13 -2
- package/lib/generators/php/types.js.map +1 -1
- package/lib/generators/python/index.js +1 -1
- package/lib/generators/python/index.js.map +1 -1
- package/lib/generators/python/models.d.ts.map +1 -1
- package/lib/generators/python/models.js +6 -2
- package/lib/generators/python/models.js.map +1 -1
- package/lib/generators/python/operations.d.ts.map +1 -1
- package/lib/generators/python/operations.js +5 -4
- package/lib/generators/python/operations.js.map +1 -1
- package/lib/generators/tanstack-query/render.js +5 -4
- package/lib/generators/tanstack-query/render.js.map +1 -1
- package/lib/generators/transformers/render.d.ts +1 -1
- package/lib/generators/transformers/render.d.ts.map +1 -1
- package/lib/generators/transformers/render.js +24 -5
- package/lib/generators/transformers/render.js.map +1 -1
- package/lib/generators/typescript/runtime/create-client.js +1 -1
- package/lib/generators/typescript/runtime/create-client.js.map +1 -1
- package/lib/generators/typescript/runtime/paginate.d.ts.map +1 -1
- package/lib/generators/typescript/runtime/paginate.js +5 -4
- package/lib/generators/typescript/runtime/paginate.js.map +1 -1
- package/lib/generators/typescript/runtime/send.d.ts.map +1 -1
- package/lib/generators/typescript/runtime/send.js +10 -4
- package/lib/generators/typescript/runtime/send.js.map +1 -1
- package/lib/generators/typescript/runtime/sse.d.ts.map +1 -1
- package/lib/generators/typescript/runtime/sse.js +6 -1
- package/lib/generators/typescript/runtime/sse.js.map +1 -1
- package/lib/intermediate-representation/build.d.ts.map +1 -1
- package/lib/intermediate-representation/build.js +51 -26
- package/lib/intermediate-representation/build.js.map +1 -1
- package/lib/intermediate-representation/model.d.ts +6 -2
- package/lib/intermediate-representation/model.d.ts.map +1 -1
- package/lib/intermediate-representation/model.js.map +1 -1
- package/lib/runtime-contract.d.ts +1 -1
- package/lib/runtime-contract.d.ts.map +1 -1
- package/lib/runtime-contract.js.map +1 -1
- package/lib/runtime-sources/python.d.ts +2 -2
- package/lib/runtime-sources/python.js +2 -2
- package/lib/runtime-sources/python.js.map +1 -1
- package/lib/runtime-sources/typescript.d.ts +10 -10
- package/lib/runtime-sources/typescript.js +10 -10
- package/lib/runtime-sources/typescript.js.map +1 -1
- package/package.json +2 -2
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Ejected from @redocly/client-generator@0.7.
|
|
1
|
+
// Ejected from @redocly/client-generator@0.7.12 — the built-in "php" generator.
|
|
2
2
|
// This file is yours: edit freely; the generated client stays machine-owned and is
|
|
3
3
|
// rebuilt by `redocly generate-client`. Newer generator versions merge in with
|
|
4
4
|
// `redocly eject-generator php --update`.
|
|
@@ -18,7 +18,7 @@ import {
|
|
|
18
18
|
} from '@redocly/client-generator';
|
|
19
19
|
import type { PhpPrinter } from '@redocly/client-generator/printers/php';
|
|
20
20
|
|
|
21
|
-
import { envelopeHeaderSpecs } from './descriptor.ts';
|
|
21
|
+
import { envelopeHeaderSpecs, phpSecurityArg } from './descriptor.ts';
|
|
22
22
|
import { hydration, serialization } from './models.ts';
|
|
23
23
|
import { PHP, phpString } from './naming.ts';
|
|
24
24
|
import { phpElementType, phpNullable, phpType } from './types.ts';
|
|
@@ -94,10 +94,15 @@ export function methodArgs(
|
|
|
94
94
|
}
|
|
95
95
|
|
|
96
96
|
/** The shared prologue: resolve auth, build query/url, merge headers. */
|
|
97
|
-
function writeRequestSetup(
|
|
97
|
+
function writeRequestSetup(
|
|
98
|
+
printer: PhpPrinter,
|
|
99
|
+
op: OperationModel,
|
|
100
|
+
model: ApiModel,
|
|
101
|
+
args: MethodArgs
|
|
102
|
+
): void {
|
|
98
103
|
printer.line(`$op = self::OPERATIONS[${phpString(op.specName ?? op.name)}];`);
|
|
99
104
|
printer.line(
|
|
100
|
-
|
|
105
|
+
`[$authHeaders, $query, $cookies] = resolveAuth(${phpSecurityArg(op, model)}, $this->config->auth);`
|
|
101
106
|
);
|
|
102
107
|
for (const { php, wire, value } of args.queryArgs) {
|
|
103
108
|
printer.block(
|
|
@@ -154,13 +159,13 @@ export function writePhpMethod(
|
|
|
154
159
|
envelope
|
|
155
160
|
? `Like ${ident}(), returning an Envelope with the declared response headers.`
|
|
156
161
|
: (op.summary ?? `${op.method.toUpperCase()} ${op.path}`),
|
|
157
|
-
element === undefined ? [] : [`@return ${element}[]`]
|
|
162
|
+
element === undefined ? [] : [`@return ${element.includes('|') ? `(${element})` : element}[]`]
|
|
158
163
|
);
|
|
159
164
|
printer.line(`public function ${name}(${args.signature.join(', ')}): ${returnType}`);
|
|
160
165
|
printer.block(
|
|
161
166
|
'{',
|
|
162
167
|
() => {
|
|
163
|
-
writeRequestSetup(printer, op, args);
|
|
168
|
+
writeRequestSetup(printer, op, model, args);
|
|
164
169
|
if (sse !== undefined) {
|
|
165
170
|
const jsonData = sse.schema !== undefined && sse.schema.kind !== 'unknown';
|
|
166
171
|
printer.line('$url = appendQuery($url, $query);');
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Ejected from @redocly/client-generator@0.7.
|
|
1
|
+
// Ejected from @redocly/client-generator@0.7.12 — the built-in "php" generator.
|
|
2
2
|
// This file is yours: edit freely; the generated client stays machine-owned and is
|
|
3
3
|
// rebuilt by `redocly generate-client`. Newer generator versions merge in with
|
|
4
4
|
// `redocly eject-generator php --update`.
|
|
@@ -13,6 +13,7 @@ import {
|
|
|
13
13
|
} from '@redocly/client-generator';
|
|
14
14
|
import type { PhpPrinter } from '@redocly/client-generator/printers/php';
|
|
15
15
|
|
|
16
|
+
import { phpSecurityArg } from './descriptor.ts';
|
|
16
17
|
import { phpString } from './naming.ts';
|
|
17
18
|
import { methodArgs } from './operations.ts';
|
|
18
19
|
import { phpType } from './types.ts';
|
|
@@ -51,7 +52,7 @@ export function writePhpPaginationWrappers(
|
|
|
51
52
|
'$call = function (array $params) use ($op, $headers): array {',
|
|
52
53
|
() => {
|
|
53
54
|
printer.line(
|
|
54
|
-
|
|
55
|
+
`[$authHeaders, $authQuery, $cookies] = resolveAuth(${phpSecurityArg(op, model)}, $this->config->auth);`
|
|
55
56
|
);
|
|
56
57
|
printer.line(`$url = buildUrl($this->config->serverUrl, $op['path'], [${pathDict}]);`);
|
|
57
58
|
printer.line('$requestHeaders = array_merge($authHeaders, $headers ?? []);');
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Ejected from @redocly/client-generator@0.7.
|
|
1
|
+
// Ejected from @redocly/client-generator@0.7.12 — the built-in "php" generator.
|
|
2
2
|
// This file is yours: edit freely; the generated client stays machine-owned and is
|
|
3
3
|
// rebuilt by `redocly generate-client`. Newer generator versions merge in with
|
|
4
4
|
// `redocly eject-generator php --update`.
|
|
@@ -9,6 +9,7 @@ import {
|
|
|
9
9
|
type ApiModel,
|
|
10
10
|
type DateType,
|
|
11
11
|
deref,
|
|
12
|
+
discriminatorCases,
|
|
12
13
|
enumValues,
|
|
13
14
|
flattenAllOf,
|
|
14
15
|
isNullable,
|
|
@@ -61,7 +62,16 @@ export function phpType(
|
|
|
61
62
|
const kind = classify(schema.name, model);
|
|
62
63
|
if (kind === 'class' || kind === 'enum') return className(schema.name);
|
|
63
64
|
const target = deref(schema, model);
|
|
64
|
-
|
|
65
|
+
if (target === undefined) return 'mixed';
|
|
66
|
+
const type = phpType(target, model, dateType);
|
|
67
|
+
// A discriminated union hydrates through `unmarshalX`, which hands a value with an
|
|
68
|
+
// unknown discriminator back as the raw array.
|
|
69
|
+
// A nullable type drops its `?` first, because PHP forbids `?` inside a union.
|
|
70
|
+
const raw = discriminatorCases(target, model) !== undefined;
|
|
71
|
+
if (!raw || type === 'mixed' || type.split('|').includes('array')) return type;
|
|
72
|
+
const nullable = type.startsWith('?') || type.endsWith('|null');
|
|
73
|
+
const bare = type.startsWith('?') ? type.slice(1) : type.replace(/\|null$/, '');
|
|
74
|
+
return nullable ? phpNullable(`${bare}|array`) : `${bare}|array`;
|
|
65
75
|
}
|
|
66
76
|
case 'enum':
|
|
67
77
|
// Anonymous (inline) enums keep the wire scalar; only NAMED enums get types.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Ejected from @redocly/client-generator@0.7.
|
|
1
|
+
// Ejected from @redocly/client-generator@0.7.12 — the built-in "python" generator.
|
|
2
2
|
// This file is yours: edit freely; the generated client stays machine-owned and is
|
|
3
3
|
// rebuilt by `redocly generate-client`. Newer generator versions merge in with
|
|
4
4
|
// `redocly eject-generator python --update`.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Ejected from @redocly/client-generator@0.7.
|
|
1
|
+
// Ejected from @redocly/client-generator@0.7.12 — the built-in "python" generator.
|
|
2
2
|
// This file is yours: edit freely; the generated client stays machine-owned and is
|
|
3
3
|
// rebuilt by `redocly generate-client`. Newer generator versions merge in with
|
|
4
4
|
// `redocly eject-generator python --update`.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Ejected from @redocly/client-generator@0.7.
|
|
1
|
+
// Ejected from @redocly/client-generator@0.7.12 — the built-in "python" generator.
|
|
2
2
|
// This file is yours: edit freely; the generated client stays machine-owned and is
|
|
3
3
|
// rebuilt by `redocly generate-client`. Newer generator versions merge in with
|
|
4
4
|
// `redocly eject-generator python --update`.
|
|
@@ -138,7 +138,7 @@ export const pythonGenerator: Generator = ({
|
|
|
138
138
|
for (const { op, ident } of operationIdents(model)) {
|
|
139
139
|
paginationSpecs.set(ident, paginationSpec(pagination?.get(op.name)?.spec));
|
|
140
140
|
}
|
|
141
|
-
printer.line('_OPERATIONS = {');
|
|
141
|
+
printer.line('_OPERATIONS: Dict[str, Dict[str, Any]] = {');
|
|
142
142
|
printer.indent(() => {
|
|
143
143
|
for (const { op, ident } of operationIdents(model)) {
|
|
144
144
|
const descriptor = {
|
|
@@ -247,5 +247,5 @@ export default {
|
|
|
247
247
|
"argsStyle": "inputs follow the target language's own idiom",
|
|
248
248
|
"importExt": "the generated file has no relative imports"
|
|
249
249
|
},
|
|
250
|
-
requiresGenerator: '^0.7.
|
|
250
|
+
requiresGenerator: '^0.7.12',
|
|
251
251
|
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Ejected from @redocly/client-generator@0.7.
|
|
1
|
+
// Ejected from @redocly/client-generator@0.7.12 — the built-in "python" generator.
|
|
2
2
|
// This file is yours: edit freely; the generated client stays machine-owned and is
|
|
3
3
|
// rebuilt by `redocly generate-client`. Newer generator versions merge in with
|
|
4
4
|
// `redocly eject-generator python --update`.
|
|
@@ -84,6 +84,11 @@ function writeDataclass(
|
|
|
84
84
|
/** The discriminator value this class is mapped to, pinned as a `Literal` (pydantic). */
|
|
85
85
|
pinned?: DiscriminatorPin
|
|
86
86
|
): void {
|
|
87
|
+
// A response never carries a `writeOnly` property, and responses decode into this same
|
|
88
|
+
// class, so the property is optional even when the description requires it.
|
|
89
|
+
const fields = properties.map((property) =>
|
|
90
|
+
property.writeOnly ? { ...property, required: false } : property
|
|
91
|
+
);
|
|
87
92
|
const pydantic = models === 'pydantic';
|
|
88
93
|
if (!pydantic) printer.line('@dataclass');
|
|
89
94
|
const header = pydantic ? `class ${className(name)}(BaseModel):` : `class ${className(name)}:`;
|
|
@@ -97,8 +102,8 @@ function writeDataclass(
|
|
|
97
102
|
}
|
|
98
103
|
// Required fields first — a dataclass field without a default may not follow one with.
|
|
99
104
|
const ordered = [
|
|
100
|
-
...
|
|
101
|
-
...
|
|
105
|
+
...fields.filter((property) => property.required),
|
|
106
|
+
...fields.filter((property) => !property.required),
|
|
102
107
|
];
|
|
103
108
|
const fieldMap: Array<[string, string]> = [];
|
|
104
109
|
if (ordered.length === 0) printer.line('pass');
|
|
@@ -157,6 +162,7 @@ export function renderPythonModels(
|
|
|
157
162
|
'Optional',
|
|
158
163
|
'Tuple',
|
|
159
164
|
'Union',
|
|
165
|
+
'cast',
|
|
160
166
|
];
|
|
161
167
|
if (models === 'dataclass') typingNames.splice(2, 0, 'ClassVar');
|
|
162
168
|
if (unions.size > 0) typingNames.unshift('Annotated');
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Ejected from @redocly/client-generator@0.7.
|
|
1
|
+
// Ejected from @redocly/client-generator@0.7.12 — the built-in "python" generator.
|
|
2
2
|
// This file is yours: edit freely; the generated client stays machine-owned and is
|
|
3
3
|
// rebuilt by `redocly generate-client`. Newer generator versions merge in with
|
|
4
4
|
// `redocly eject-generator python --update`.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Ejected from @redocly/client-generator@0.7.
|
|
1
|
+
// Ejected from @redocly/client-generator@0.7.12 — the built-in "python" generator.
|
|
2
2
|
// This file is yours: edit freely; the generated client stays machine-owned and is
|
|
3
3
|
// rebuilt by `redocly generate-client`. Newer generator versions merge in with
|
|
4
4
|
// `redocly eject-generator python --update`.
|
|
@@ -72,7 +72,7 @@ export function writeMethod(
|
|
|
72
72
|
: sse !== undefined
|
|
73
73
|
? `${isAsync ? 'AsyncIterator' : 'Iterator'}[ServerSentEvent]`
|
|
74
74
|
: errorMode === 'result'
|
|
75
|
-
?
|
|
75
|
+
? `Result[${success === undefined ? 'None' : pythonType(success, dateType)}, Any]`
|
|
76
76
|
: success === undefined
|
|
77
77
|
? 'None'
|
|
78
78
|
: pythonType(success, dateType);
|
|
@@ -103,7 +103,7 @@ export function writeMethod(
|
|
|
103
103
|
printer.line(`url = build_url(self._server_url, op["path"], {${pathDict}})`);
|
|
104
104
|
if (sse !== undefined) {
|
|
105
105
|
const dataKind = sse.schema !== undefined && sse.schema.kind !== 'unknown' ? 'json' : 'text';
|
|
106
|
-
printer.block('def _open(extra_headers: Dict[str, str]):', () => {
|
|
106
|
+
printer.block('def _open(extra_headers: Dict[str, str]) -> Any:', () => {
|
|
107
107
|
printer.line(
|
|
108
108
|
'return self._http.stream(op["method"], url, ' +
|
|
109
109
|
'headers={**auth_headers, **(headers or {}), **extra_headers}, params=params, timeout=timeout)'
|
|
@@ -129,10 +129,11 @@ export function writeMethod(
|
|
|
129
129
|
`headers={**auth_headers, **(headers or {})}, params=params${bodyKw}, ` +
|
|
130
130
|
'timeout=timeout, retry=retry, idempotency_key=idempotency_key)'
|
|
131
131
|
);
|
|
132
|
+
const successType = success === undefined ? undefined : pythonType(success, dateType);
|
|
132
133
|
const decoded =
|
|
133
|
-
|
|
134
|
+
successType === undefined
|
|
134
135
|
? 'None'
|
|
135
|
-
: `
|
|
136
|
+
: `cast(${successType}, decode(${successType}, _safe_json(response)))`;
|
|
136
137
|
if (envelope) {
|
|
137
138
|
printer.block('if not response.is_success:', () => {
|
|
138
139
|
printer.line(
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Ejected from @redocly/client-generator@0.7.
|
|
1
|
+
// Ejected from @redocly/client-generator@0.7.12 — the built-in "python" generator.
|
|
2
2
|
// This file is yours: edit freely; the generated client stays machine-owned and is
|
|
3
3
|
// rebuilt by `redocly generate-client`. Newer generator versions merge in with
|
|
4
4
|
// `redocly eject-generator python --update`.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Ejected from @redocly/client-generator@0.7.
|
|
1
|
+
// Ejected from @redocly/client-generator@0.7.12 — the built-in "python" generator.
|
|
2
2
|
// This file is yours: edit freely; the generated client stays machine-owned and is
|
|
3
3
|
// rebuilt by `redocly generate-client`. Newer generator versions merge in with
|
|
4
4
|
// `redocly eject-generator python --update`.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Ejected from @redocly/client-generator@0.7.
|
|
1
|
+
// Ejected from @redocly/client-generator@0.7.12 — the built-in "swr" generator.
|
|
2
2
|
// This file is yours: edit freely; the generated client stays machine-owned and is
|
|
3
3
|
// rebuilt by `redocly generate-client`. Newer generator versions merge in with
|
|
4
4
|
// `redocly eject-generator swr --update`.
|
|
@@ -33,5 +33,5 @@ export default {
|
|
|
33
33
|
run: swrGenerator,
|
|
34
34
|
requires: ["typescript"],
|
|
35
35
|
errorModes: ["throw"],
|
|
36
|
-
requiresGenerator: '^0.7.
|
|
36
|
+
requiresGenerator: '^0.7.12',
|
|
37
37
|
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Ejected from @redocly/client-generator@0.7.
|
|
1
|
+
// Ejected from @redocly/client-generator@0.7.12 — the built-in "swr" generator.
|
|
2
2
|
// This file is yours: edit freely; the generated client stays machine-owned and is
|
|
3
3
|
// rebuilt by `redocly generate-client`. Newer generator versions merge in with
|
|
4
4
|
// `redocly eject-generator swr --update`.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Ejected from @redocly/client-generator@0.7.
|
|
1
|
+
// Ejected from @redocly/client-generator@0.7.12 — the built-in "tanstack-query" generator.
|
|
2
2
|
// This file is yours: edit freely; the generated client stays machine-owned and is
|
|
3
3
|
// rebuilt by `redocly generate-client`. Newer generator versions merge in with
|
|
4
4
|
// `redocly eject-generator tanstack-query --update`.
|
|
@@ -44,5 +44,5 @@ export default {
|
|
|
44
44
|
run: tanstackQueryGenerator('react'),
|
|
45
45
|
requires: ["typescript"],
|
|
46
46
|
errorModes: ["throw"],
|
|
47
|
-
requiresGenerator: '^0.7.
|
|
47
|
+
requiresGenerator: '^0.7.12',
|
|
48
48
|
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Ejected from @redocly/client-generator@0.7.
|
|
1
|
+
// Ejected from @redocly/client-generator@0.7.12 — the built-in "tanstack-query" generator.
|
|
2
2
|
// This file is yours: edit freely; the generated client stays machine-owned and is
|
|
3
3
|
// rebuilt by `redocly generate-client`. Newer generator versions merge in with
|
|
4
4
|
// `redocly eject-generator tanstack-query --update`.
|
|
@@ -236,12 +236,13 @@ function infiniteMember(
|
|
|
236
236
|
);
|
|
237
237
|
}
|
|
238
238
|
// The cursor is a query parameter, so it lands in the sdk's own spelling for one:
|
|
239
|
-
// inside the `query` layer, or at the top level of a merged call.
|
|
240
|
-
|
|
239
|
+
// inside the `query` layer, or at the top level of a merged call. A first page without
|
|
240
|
+
// a cursor leaves the key out, so `exactOptionalPropertyTypes` accepts the call.
|
|
241
|
+
const cursor = `...(pageParam === undefined ? {} : { ${safeIdent(spec.param)}: pageParam })`;
|
|
241
242
|
const override =
|
|
242
243
|
argsStyle === 'flat'
|
|
243
|
-
? `{ ...vars, ${cursor}
|
|
244
|
-
: `{ ...vars, query: { ...vars.query, ${cursor}
|
|
244
|
+
? `{ ...vars, ${cursor} }`
|
|
245
|
+
: `{ ...vars, query: { ...vars.query, ${cursor} } }`;
|
|
245
246
|
return (
|
|
246
247
|
` ${op.name}InfiniteOptions: (${params}) => infiniteQueryOptions({\n` +
|
|
247
248
|
` queryKey: [...${op.name}QueryKey(${keyArg}), "infinite"] as const,\n` +
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Ejected from @redocly/client-generator@0.7.
|
|
1
|
+
// Ejected from @redocly/client-generator@0.7.12 — the built-in "transformers" generator.
|
|
2
2
|
// This file is yours: edit freely; the generated client stays machine-owned and is
|
|
3
3
|
// rebuilt by `redocly generate-client`. Newer generator versions merge in with
|
|
4
4
|
// `redocly eject-generator transformers --update`.
|
|
@@ -42,5 +42,5 @@ export default {
|
|
|
42
42
|
run: transformersGenerator,
|
|
43
43
|
requires: ["typescript"],
|
|
44
44
|
dateTypes: ["Date"],
|
|
45
|
-
requiresGenerator: '^0.7.
|
|
45
|
+
requiresGenerator: '^0.7.12',
|
|
46
46
|
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Ejected from @redocly/client-generator@0.7.
|
|
1
|
+
// Ejected from @redocly/client-generator@0.7.12 — the built-in "transformers" generator.
|
|
2
2
|
// This file is yours: edit freely; the generated client stays machine-owned and is
|
|
3
3
|
// rebuilt by `redocly generate-client`. Newer generator versions merge in with
|
|
4
4
|
// `redocly eject-generator transformers --update`.
|
|
@@ -13,7 +13,12 @@
|
|
|
13
13
|
// `transformPet` calls `transformOwner(data["owner"])` when `Pet.owner` is an
|
|
14
14
|
// `Owner` that has dates. Source-text templates throughout.
|
|
15
15
|
|
|
16
|
-
import
|
|
16
|
+
import {
|
|
17
|
+
type ApiModel,
|
|
18
|
+
flattenAllOf,
|
|
19
|
+
type NamedSchemaModel,
|
|
20
|
+
type SchemaModel,
|
|
21
|
+
} from '@redocly/client-generator';
|
|
17
22
|
import { pascalCase, safeIdent } from '@redocly/client-generator/printers/typescript';
|
|
18
23
|
|
|
19
24
|
const INDENT = ' ';
|
|
@@ -467,8 +472,17 @@ function convertCollection(
|
|
|
467
472
|
);
|
|
468
473
|
}
|
|
469
474
|
|
|
470
|
-
/**
|
|
471
|
-
|
|
475
|
+
/**
|
|
476
|
+
* `export const transform<Name> = (data: <Name>): <Name> => { … };`. A schema with
|
|
477
|
+
* `writeOnly` properties is never returned whole: its responses are typed
|
|
478
|
+
* `Omit<Name, …>`. Its transform takes that shape and returns the type it was given:
|
|
479
|
+
* `<T extends Omit<Name, …>>(input: T): T`.
|
|
480
|
+
*/
|
|
481
|
+
function transformBlock(
|
|
482
|
+
named: NamedSchemaModel,
|
|
483
|
+
model: ApiModel,
|
|
484
|
+
byName: Map<string, SchemaModel>
|
|
485
|
+
): string {
|
|
472
486
|
// The sdk exports the type verbatim; only the `transform<Pascal>` NAME is PascalCased.
|
|
473
487
|
const typeName = named.name;
|
|
474
488
|
const data = ident('data');
|
|
@@ -476,10 +490,23 @@ function transformBlock(named: NamedSchemaModel, byName: Map<string, SchemaModel
|
|
|
476
490
|
named.schema.kind === 'ref'
|
|
477
491
|
? convertRef(data, named.schema.name, byName, new Set(), INDENT)
|
|
478
492
|
: convert(data, named.schema, byName, new Set(), 'data', INDENT);
|
|
493
|
+
const writeOnly = (flattenAllOf(named.schema, model)?.properties ?? [])
|
|
494
|
+
.filter((property) => property.writeOnly)
|
|
495
|
+
.map((property) => JSON.stringify(property.name));
|
|
496
|
+
if (writeOnly.length === 0) {
|
|
497
|
+
return [
|
|
498
|
+
`export const ${transformName(named.name)} = (data: ${typeName}): ${typeName} => {`,
|
|
499
|
+
...body,
|
|
500
|
+
`${INDENT}return data;`,
|
|
501
|
+
'};',
|
|
502
|
+
].join('\n');
|
|
503
|
+
}
|
|
504
|
+
const response = `Omit<${typeName}, ${writeOnly.join(' | ')}>`;
|
|
479
505
|
return [
|
|
480
|
-
`export const ${transformName(named.name)} =
|
|
506
|
+
`export const ${transformName(named.name)} = <T extends ${response}>(input: T): T => {`,
|
|
507
|
+
`${INDENT}const data: ${response} = input;`,
|
|
481
508
|
...body,
|
|
482
|
-
`${INDENT}return
|
|
509
|
+
`${INDENT}return input;`,
|
|
483
510
|
'};',
|
|
484
511
|
].join('\n');
|
|
485
512
|
}
|
|
@@ -496,7 +523,7 @@ export function renderTransformersModule(model: ApiModel, opts: { sdkModule: str
|
|
|
496
523
|
if (dated.length === 0) return '';
|
|
497
524
|
const types = dated.map((s) => safeIdent(s.name)).join(', ');
|
|
498
525
|
writableUsed = false; // reset the per-render flag `writableLhs` sets
|
|
499
|
-
const transforms = dated.map((s) => transformBlock(s, byName));
|
|
526
|
+
const transforms = dated.map((s) => transformBlock(s, model, byName));
|
|
500
527
|
const blocks = [
|
|
501
528
|
`import type { ${types} } from ${JSON.stringify(opts.sdkModule)};`,
|
|
502
529
|
...(writableUsed ? [WRITABLE_DECL] : []),
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Ejected from @redocly/client-generator@0.7.
|
|
1
|
+
// Ejected from @redocly/client-generator@0.7.12 — the built-in "typescript" generator.
|
|
2
2
|
// This file is yours: edit freely; the generated client stays machine-owned and is
|
|
3
3
|
// rebuilt by `redocly generate-client`. Newer generator versions merge in with
|
|
4
4
|
// `redocly eject-generator typescript --update`.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Ejected from @redocly/client-generator@0.7.
|
|
1
|
+
// Ejected from @redocly/client-generator@0.7.12 — the built-in "typescript" generator.
|
|
2
2
|
// This file is yours: edit freely; the generated client stays machine-owned and is
|
|
3
3
|
// rebuilt by `redocly generate-client`. Newer generator versions merge in with
|
|
4
4
|
// `redocly eject-generator typescript --update`.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Ejected from @redocly/client-generator@0.7.
|
|
1
|
+
// Ejected from @redocly/client-generator@0.7.12 — the built-in "typescript" generator.
|
|
2
2
|
// This file is yours: edit freely; the generated client stays machine-owned and is
|
|
3
3
|
// rebuilt by `redocly generate-client`. Newer generator versions merge in with
|
|
4
4
|
// `redocly eject-generator typescript --update`.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Ejected from @redocly/client-generator@0.7.
|
|
1
|
+
// Ejected from @redocly/client-generator@0.7.12 — the built-in "typescript" generator.
|
|
2
2
|
// This file is yours: edit freely; the generated client stays machine-owned and is
|
|
3
3
|
// rebuilt by `redocly generate-client`. Newer generator versions merge in with
|
|
4
4
|
// `redocly eject-generator typescript --update`.
|
|
@@ -123,5 +123,5 @@ export default {
|
|
|
123
123
|
run: typescriptGenerator,
|
|
124
124
|
sample: typescriptSample,
|
|
125
125
|
docs: typescriptDocs,
|
|
126
|
-
requiresGenerator: '^0.7.
|
|
126
|
+
requiresGenerator: '^0.7.12',
|
|
127
127
|
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Ejected from @redocly/client-generator@0.7.
|
|
1
|
+
// Ejected from @redocly/client-generator@0.7.12 — the built-in "typescript" generator.
|
|
2
2
|
// This file is yours: edit freely; the generated client stays machine-owned and is
|
|
3
3
|
// rebuilt by `redocly generate-client`. Newer generator versions merge in with
|
|
4
4
|
// `redocly eject-generator typescript --update`.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Ejected from @redocly/client-generator@0.7.
|
|
1
|
+
// Ejected from @redocly/client-generator@0.7.12 — the built-in "typescript" generator.
|
|
2
2
|
// This file is yours: edit freely; the generated client stays machine-owned and is
|
|
3
3
|
// rebuilt by `redocly generate-client`. Newer generator versions merge in with
|
|
4
4
|
// `redocly eject-generator typescript --update`.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Ejected from @redocly/client-generator@0.7.
|
|
1
|
+
// Ejected from @redocly/client-generator@0.7.12 — the built-in "typescript" generator.
|
|
2
2
|
// This file is yours: edit freely; the generated client stays machine-owned and is
|
|
3
3
|
// rebuilt by `redocly generate-client`. Newer generator versions merge in with
|
|
4
4
|
// `redocly eject-generator typescript --update`.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Ejected from @redocly/client-generator@0.7.
|
|
1
|
+
// Ejected from @redocly/client-generator@0.7.12 — the built-in "typescript" generator.
|
|
2
2
|
// This file is yours: edit freely; the generated client stays machine-owned and is
|
|
3
3
|
// rebuilt by `redocly generate-client`. Newer generator versions merge in with
|
|
4
4
|
// `redocly eject-generator typescript --update`.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Ejected from @redocly/client-generator@0.7.
|
|
1
|
+
// Ejected from @redocly/client-generator@0.7.12 — the built-in "typescript" generator.
|
|
2
2
|
// This file is yours: edit freely; the generated client stays machine-owned and is
|
|
3
3
|
// rebuilt by `redocly generate-client`. Newer generator versions merge in with
|
|
4
4
|
// `redocly eject-generator typescript --update`.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Ejected from @redocly/client-generator@0.7.
|
|
1
|
+
// Ejected from @redocly/client-generator@0.7.12 — the built-in "typescript" generator.
|
|
2
2
|
// This file is yours: edit freely; the generated client stays machine-owned and is
|
|
3
3
|
// rebuilt by `redocly generate-client`. Newer generator versions merge in with
|
|
4
4
|
// `redocly eject-generator typescript --update`.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Ejected from @redocly/client-generator@0.7.
|
|
1
|
+
// Ejected from @redocly/client-generator@0.7.12 — the built-in "typescript" generator.
|
|
2
2
|
// This file is yours: edit freely; the generated client stays machine-owned and is
|
|
3
3
|
// rebuilt by `redocly generate-client`. Newer generator versions merge in with
|
|
4
4
|
// `redocly eject-generator typescript --update`.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Ejected from @redocly/client-generator@0.7.
|
|
1
|
+
// Ejected from @redocly/client-generator@0.7.12 — the built-in "zod" generator.
|
|
2
2
|
// This file is yours: edit freely; the generated client stays machine-owned and is
|
|
3
3
|
// rebuilt by `redocly generate-client`. Newer generator versions merge in with
|
|
4
4
|
// `redocly eject-generator zod --update`.
|
|
@@ -28,5 +28,5 @@ export const zodGenerator: Generator = ({ model, output, banner }) => {
|
|
|
28
28
|
export default {
|
|
29
29
|
name: 'zod',
|
|
30
30
|
run: zodGenerator,
|
|
31
|
-
requiresGenerator: '^0.7.
|
|
31
|
+
requiresGenerator: '^0.7.12',
|
|
32
32
|
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Ejected from @redocly/client-generator@0.7.
|
|
1
|
+
// Ejected from @redocly/client-generator@0.7.12 — the built-in "zod" generator.
|
|
2
2
|
// This file is yours: edit freely; the generated client stays machine-owned and is
|
|
3
3
|
// rebuilt by `redocly generate-client`. Newer generator versions merge in with
|
|
4
4
|
// `redocly eject-generator zod --update`.
|
|
@@ -19,6 +19,9 @@ runtime. Go ≥ 1.21, standard library only — zero dependencies.
|
|
|
19
19
|
|
|
20
20
|
- **Models are structs**: required fields by value, optionals as pointers with
|
|
21
21
|
`,omitempty`; the `json` tag always carries the exact wire name.
|
|
22
|
+
- **A `writeOnly` property is optional** even when required: requests and responses share
|
|
23
|
+
one struct, and a response never carries it. A pointer with `,omitempty` still sends it
|
|
24
|
+
in a request, and leaves it `nil` in a response instead of claiming a zero value.
|
|
22
25
|
- **Package clause:** `package client` by default, `goPackage` to override — a generated
|
|
23
26
|
file usually lands in a package the consumer already owns. The value is checked against
|
|
24
27
|
Go's own rule (lowercase letters, digits, `_`, no leading digit, not a keyword) and an
|
|
@@ -22,6 +22,28 @@ A standalone MSW module: `create<Name>()` data factories, `<op>Handler()` /
|
|
|
22
22
|
- **Interpolated identifiers are gated** (`codeIdent`): an operation name or method
|
|
23
23
|
reaching a code position is validated, never trusted, even though the pipeline
|
|
24
24
|
sanitizes upstream.
|
|
25
|
+
- **Mock data satisfies the description** it came from, so it passes the zod schemas
|
|
26
|
+
generated from the same description:
|
|
27
|
+
- Numeric samples respect `minimum`, `maximum`, `exclusiveMinimum`,
|
|
28
|
+
`exclusiveMaximum`, and `multipleOf`. A static sample is `0` when `0` is in range,
|
|
29
|
+
else the lowest valid value (the highest one when only an upper bound is set).
|
|
30
|
+
Faker mode passes the same inclusive range to `faker.number.*`; when only one side
|
|
31
|
+
is set, the other side is 100 steps away, because faker's own defaults can sit on
|
|
32
|
+
the wrong side of the bound.
|
|
33
|
+
- Mocks are response data, and responses never carry `writeOnly` properties. An
|
|
34
|
+
optional one is never emitted. A required one stays in the factories, because the
|
|
35
|
+
named type (and its zod schema) demands it. A handler whose response leaves the
|
|
36
|
+
`writeOnly` properties out (an `omit` body) samples that shape inline, typed
|
|
37
|
+
`Partial<Omit<Name, …>>`, so its body leaves them out too.
|
|
38
|
+
- The default handler of a paginated operation ends the walk. A cursor page is the
|
|
39
|
+
last page: the next cursor is `null` when nullable, absent when optional, and `""`
|
|
40
|
+
otherwise, and `hasMore` is `false`. A `body-link` page is the last page the same
|
|
41
|
+
way, through its next link. So `.pages()` ends after one page. Offset and
|
|
42
|
+
page-number styles stop only on an empty page, so the handler answers any position
|
|
43
|
+
past the first with an empty item list, and `.pages()` ends after that empty page.
|
|
44
|
+
The handler's `override` sets the first page: it is spread into an object page, or
|
|
45
|
+
replaces a page that is the item array. The empty page sets its items after the
|
|
46
|
+
spread, so an override cannot refill it.
|
|
25
47
|
- Handlers are opt-in overrides: `<op>ErrorHandler` is NOT in `handlers`.
|
|
26
48
|
- The module references the sdk's TYPES only — never its runtime.
|
|
27
49
|
|
|
@@ -23,8 +23,15 @@ extension — zero Composer dependencies. The namespace derives from the API tit
|
|
|
23
23
|
`fromArray(array $data): self` and `toArray(): array` (wire names inline; nulls
|
|
24
24
|
skipped on serialize) — no reflection. `omit` schemas hydrate/serialize through their
|
|
25
25
|
base class. A property or response typed as a DISCRIMINATED union hydrates through the
|
|
26
|
-
union's `unmarshalX` dispatcher, so consumers can narrow with `instanceof`;
|
|
27
|
-
|
|
26
|
+
union's `unmarshalX` dispatcher, so consumers can narrow with `instanceof`; its type
|
|
27
|
+
includes `array`, because a value with an unknown discriminator stays the raw array.
|
|
28
|
+
Undiscriminated unions stay raw arrays.
|
|
29
|
+
- **The file passes PHPStan level 5.** It lands in the user's own project, so their
|
|
30
|
+
analyser reads it. The operations table is a constant PHPStan knows exactly, so a method
|
|
31
|
+
reads `$op['security']` only when the table has that entry, and passes `[]` otherwise.
|
|
32
|
+
- **A `writeOnly` property is optional** even when required: requests and responses share
|
|
33
|
+
one class, and a response never carries it. It is nullable `= null`, so `fromArray`
|
|
34
|
+
hydrates a response without it and `toArray` still sends it in a request.
|
|
28
35
|
- The `Client` class is NOT `final` — PHP test suites mock concrete classes
|
|
29
36
|
(`createMock(Client::class)`), and `final` would force a wrapper interface on every
|
|
30
37
|
consumer. Model classes stay `final`.
|
|
@@ -26,6 +26,12 @@ One self-contained `<stem>.py`: typed dataclass models, a sync `Client` and an a
|
|
|
26
26
|
- **Models are dataclasses by default**, required fields first (a dataclass constraint),
|
|
27
27
|
optionals `Optional[T] = None`. Wire names live in a `_field_map: ClassVar[Dict[str, str]]`;
|
|
28
28
|
decode/encode is reflective (`_decode.py`, `get_type_hints`) — no per-model codecs.
|
|
29
|
+
- **The file passes `mypy --strict`.** It lands in the user's own package, so their
|
|
30
|
+
strictest checker reads it: every function is annotated, the operation table is typed,
|
|
31
|
+
and a decoded body is `cast` to the declared return type (`decode` returns `Any`).
|
|
32
|
+
- **A `writeOnly` property is optional** even when required: requests and responses share
|
|
33
|
+
one model, and a response never carries it. It is `Optional[T] = None`, so a response
|
|
34
|
+
decodes without it and a request still sends it.
|
|
29
35
|
- **`models: pydantic` emits `BaseModel` classes instead**, for the FastAPI-shaped half of
|
|
30
36
|
the ecosystem that expects them. A wire name becomes `Field(alias=…)` with
|
|
31
37
|
`populate_by_name=True`, so `_field_map` is not emitted in this mode — the alias is the
|
|
@@ -25,7 +25,8 @@ query keys. One generator, four framework variants (`react` default, `-vue`,
|
|
|
25
25
|
`body-link` rule gets one when the operation has a query parameter: the next page's
|
|
26
26
|
URL is the page param, and each later page merges the URL's query parameters over
|
|
27
27
|
`vars`. A `Link` header is invisible to a `queryFn`, so `link`-style operations get
|
|
28
|
-
only the sdk's `.pages()`/`.items()`.
|
|
28
|
+
only the sdk's `.pages()`/`.items()`. A page without a page parameter leaves the key
|
|
29
|
+
out of the call, so `exactOptionalPropertyTypes` holds.
|
|
29
30
|
- **`envelope` is excluded and stripped** — cached data is the plain body.
|
|
30
31
|
- Requires `typescript`; throw-mode only (it wraps thrown errors into query errors).
|
|
31
32
|
|
|
@@ -22,6 +22,10 @@ values and back — the bridge for `dateType: Date` clients.
|
|
|
22
22
|
- **Imports the sdk's schema TYPES** (so `typescript` is required) and nothing else.
|
|
23
23
|
- Converters are pure and total: every named schema gets a pair, nested structures
|
|
24
24
|
recurse, and a missing optional stays missing.
|
|
25
|
+
- **A transform takes response data.** A response never carries `writeOnly`
|
|
26
|
+
properties, so the sdk types it `Omit<Name, …>`. The transform of a schema with
|
|
27
|
+
`writeOnly` properties takes that shape and returns the type it was given:
|
|
28
|
+
`<T extends Omit<Name, …>>(input: T): T`. Other transforms keep `(data: Name): Name`.
|
|
25
29
|
|
|
26
30
|
## The stage files
|
|
27
31
|
|
|
@@ -30,6 +30,11 @@ it with `use(telemetry({ sdkName, sdkVersion, client }))`.
|
|
|
30
30
|
an entry that `export *`s it; the entry type-imports only the schema names it
|
|
31
31
|
references (`collectEntrySchemaRefs`).
|
|
32
32
|
- **Zero runtime dependencies.** `Date`, `Blob`, `fetch` — nothing else.
|
|
33
|
+
- **It type-checks under the strictest common settings.** The output compiles as part of
|
|
34
|
+
the user's sources, so `skipLibCheck` does not cover it: `strict`,
|
|
35
|
+
`noUncheckedIndexedAccess`, and `exactOptionalPropertyTypes` must all pass. Guard an
|
|
36
|
+
index access explicitly instead of asserting it, and leave an absent optional key out
|
|
37
|
+
(a conditional spread) instead of setting it to `undefined`.
|
|
33
38
|
- **Timeouts need no platform statics.** `send()` uses `AbortSignal.timeout()` and
|
|
34
39
|
`AbortSignal.any()` where they exist and builds the same signal from an `AbortController`
|
|
35
40
|
and `setTimeout` where they do not (Chrome before 116, Safari before 17.4, Firefox before
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/authoring/schema.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,QAAQ,EACR,gBAAgB,EAChB,aAAa,EACb,WAAW,EACZ,MAAM,yCAAyC,CAAC;AAGjD,4FAA4F;AAC5F,wBAAgB,KAAK,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,QAAQ,GAAG,WAAW,GAAG,SAAS,CAYnF;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,QAAQ,GACd;IAAE,UAAU,EAAE,aAAa,EAAE,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAcnE;AAED,6FAA6F;AAC7F,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,QAAQ,GAEb;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,WAAW,CAAA;KAAE,CAAC,CAAA;CAAE,GAC9F,SAAS,CAUZ;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAEvD;AAED,oFAAoF;AACpF,wBAAgB,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,WAAW,CAI/D;AAED,8EAA8E;AAC9E,wBAAgB,UAAU,CACxB,MAAM,EAAE,WAAW,GAClB;IAAE,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,SAAS,CAcjG;AAED,2FAA2F;AAC3F,wBAAgB,OAAO,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAMtD;AAuBD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,QAAQ,GACd,WAAW,GAAG,SAAS,
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/authoring/schema.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,QAAQ,EACR,gBAAgB,EAChB,aAAa,EACb,WAAW,EACZ,MAAM,yCAAyC,CAAC;AAGjD,4FAA4F;AAC5F,wBAAgB,KAAK,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,QAAQ,GAAG,WAAW,GAAG,SAAS,CAYnF;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,QAAQ,GACd;IAAE,UAAU,EAAE,aAAa,EAAE,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAcnE;AAED,6FAA6F;AAC7F,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,QAAQ,GAEb;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,WAAW,CAAA;KAAE,CAAC,CAAA;CAAE,GAC9F,SAAS,CAUZ;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAEvD;AAED,oFAAoF;AACpF,wBAAgB,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,WAAW,CAI/D;AAED,8EAA8E;AAC9E,wBAAgB,UAAU,CACxB,MAAM,EAAE,WAAW,GAClB;IAAE,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,SAAS,CAcjG;AAED,2FAA2F;AAC3F,wBAAgB,OAAO,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAMtD;AAuBD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,QAAQ,GACd,WAAW,GAAG,SAAS,CAezB;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE;IAAE,OAAO,EAAE,SAAS,gBAAgB,EAAE,CAAA;CAAE,EAC/C,IAAI,GAAE,GAAG,CAAC,MAAM,CAAa,GAC5B,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,CAoC7C"}
|