@wild-framework/cli 0.1.1 → 0.2.2
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/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +109 -5
- package/dist/cli.js.map +1 -1
- package/dist/client/codegen.d.ts +32 -0
- package/dist/client/codegen.d.ts.map +1 -0
- package/dist/client/codegen.js +94 -0
- package/dist/client/codegen.js.map +1 -0
- package/dist/client/command.d.ts +29 -0
- package/dist/client/command.d.ts.map +1 -0
- package/dist/client/command.js +95 -0
- package/dist/client/command.js.map +1 -0
- package/dist/client/contract.d.ts +86 -0
- package/dist/client/contract.d.ts.map +1 -0
- package/dist/client/contract.js +12 -0
- package/dist/client/contract.js.map +1 -0
- package/dist/client/core.d.ts +80 -0
- package/dist/client/core.d.ts.map +1 -0
- package/dist/client/core.js +52 -0
- package/dist/client/core.js.map +1 -0
- package/dist/client/fs-writer.d.ts +13 -0
- package/dist/client/fs-writer.d.ts.map +1 -0
- package/dist/client/fs-writer.js +24 -0
- package/dist/client/fs-writer.js.map +1 -0
- package/dist/client/inspector.d.ts +19 -0
- package/dist/client/inspector.d.ts.map +1 -0
- package/dist/client/inspector.js +71 -0
- package/dist/client/inspector.js.map +1 -0
- package/dist/client/spec.d.ts +13 -0
- package/dist/client/spec.d.ts.map +1 -0
- package/dist/client/spec.js +235 -0
- package/dist/client/spec.js.map +1 -0
- package/dist/client/targets/index.d.ts +9 -0
- package/dist/client/targets/index.d.ts.map +1 -0
- package/dist/client/targets/index.js +11 -0
- package/dist/client/targets/index.js.map +1 -0
- package/dist/client/targets/react.d.ts +20 -0
- package/dist/client/targets/react.d.ts.map +1 -0
- package/dist/client/targets/react.js +519 -0
- package/dist/client/targets/react.js.map +1 -0
- package/dist/commands/ci.d.ts +5 -0
- package/dist/commands/ci.d.ts.map +1 -0
- package/dist/commands/ci.js +254 -0
- package/dist/commands/ci.js.map +1 -0
- package/dist/commands/db.d.ts +13 -0
- package/dist/commands/db.d.ts.map +1 -0
- package/dist/commands/db.js +104 -0
- package/dist/commands/db.js.map +1 -0
- package/dist/commands/docker.d.ts +9 -0
- package/dist/commands/docker.d.ts.map +1 -0
- package/dist/commands/docker.js +175 -0
- package/dist/commands/docker.js.map +1 -0
- package/dist/commands/graph.d.ts +9 -0
- package/dist/commands/graph.d.ts.map +1 -0
- package/dist/commands/graph.js +36 -0
- package/dist/commands/graph.js.map +1 -0
- package/dist/commands/make.d.ts +1 -1
- package/dist/commands/make.d.ts.map +1 -1
- package/dist/commands/make.js +51 -0
- package/dist/commands/make.js.map +1 -1
- package/dist/commands/new.d.ts +24 -0
- package/dist/commands/new.d.ts.map +1 -0
- package/dist/commands/new.js +374 -0
- package/dist/commands/new.js.map +1 -0
- package/dist/commands/resource.d.ts +33 -0
- package/dist/commands/resource.d.ts.map +1 -0
- package/dist/commands/resource.js +291 -0
- package/dist/commands/resource.js.map +1 -0
- package/dist/templates/resource-slice.d.ts +87 -0
- package/dist/templates/resource-slice.d.ts.map +1 -0
- package/dist/templates/resource-slice.js +513 -0
- package/dist/templates/resource-slice.js.map +1 -0
- package/package.json +9 -3
|
@@ -0,0 +1,519 @@
|
|
|
1
|
+
import { camelCase, capitalize, pluralize, toPascal, toCamelKebab, pathParamKeys, pathToTemplateLiteral, requestEntityName, fieldToTs, knownTypeNames, resourcesInContract, } from "../codegen.js";
|
|
2
|
+
/**
|
|
3
|
+
* React + TanStack Query adapter.
|
|
4
|
+
*
|
|
5
|
+
* Generates, per resource, under `generated/<resource>/`:
|
|
6
|
+
* api.ts — typed fetch client (list/get/create/update/delete)
|
|
7
|
+
* types.ts — request/response TypeScript types
|
|
8
|
+
* schemas.ts — Zod schemas (for runtime validation in the client)
|
|
9
|
+
* queries.ts — TanStack Query hooks (useUsers, useUser, …)
|
|
10
|
+
* mutations.ts — TanStack Query mutations (useCreateUser, …)
|
|
11
|
+
*
|
|
12
|
+
* Optionally (`--examples`) emits example components under
|
|
13
|
+
* `generated/examples/` — clearly labelled as examples, never owned by
|
|
14
|
+
* the framework.
|
|
15
|
+
*
|
|
16
|
+
* This adapter NEVER scaffolds an app: no package.json, no bundler config,
|
|
17
|
+
* no entry points, no routing, no styling system.
|
|
18
|
+
*/
|
|
19
|
+
export const reactTarget = {
|
|
20
|
+
name: "react",
|
|
21
|
+
label: "React + TanStack Query + Zod",
|
|
22
|
+
generateFiles(request) {
|
|
23
|
+
const { contract, baseUrl, examples } = request;
|
|
24
|
+
const files = [];
|
|
25
|
+
const add = (path, content) => files.push({ path, content });
|
|
26
|
+
const known = knownTypeNames(contract.schemas);
|
|
27
|
+
// --- shared client primitive ---
|
|
28
|
+
add("generated/client.ts", generateClientPrimitive(baseUrl));
|
|
29
|
+
// --- per-resource modules ---
|
|
30
|
+
for (const resource of resourcesInContract(contract.operations)) {
|
|
31
|
+
const ops = contract.operations.filter((o) => o.resourceKebab === resource);
|
|
32
|
+
// Singular Pascal type name comes from the contract (e.g. "Product"),
|
|
33
|
+
// NOT from pluralizing the kebab path segment.
|
|
34
|
+
const resourceType = ops[0]?.resource ?? toPascal(resource);
|
|
35
|
+
const plural = pluralize(resourceType);
|
|
36
|
+
// Only the schemas this resource actually uses (no global dumping)
|
|
37
|
+
const used = new Set(ops.map((o) => o.requestSchema).filter((n) => !!n));
|
|
38
|
+
const resourceSchemas = contract.schemas.filter((s) => used.has(s.name));
|
|
39
|
+
add(`generated/${resource}/types.ts`, generateTypes(resourceSchemas, known));
|
|
40
|
+
add(`generated/${resource}/schemas.ts`, generateSchemas(resourceSchemas));
|
|
41
|
+
add(`generated/${resource}/api.ts`, generateApi(ops, resource, resourceType, plural, known, baseUrl));
|
|
42
|
+
add(`generated/${resource}/queries.ts`, generateQueries(ops, resource, resourceType, plural));
|
|
43
|
+
add(`generated/${resource}/mutations.ts`, generateMutations(ops, resource, resourceType, plural));
|
|
44
|
+
}
|
|
45
|
+
// --- optional examples (clearly labelled) ---
|
|
46
|
+
if (examples) {
|
|
47
|
+
for (const resource of resourcesInContract(contract.operations)) {
|
|
48
|
+
const ops = contract.operations.filter((o) => o.resourceKebab === resource);
|
|
49
|
+
const resourceType = ops[0]?.resource ?? toPascal(resource);
|
|
50
|
+
const plural = pluralize(resourceType);
|
|
51
|
+
add(`generated/examples/${resource}-table.tsx`, generateExampleTable(resource, resourceType, plural, ops));
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return files;
|
|
55
|
+
},
|
|
56
|
+
};
|
|
57
|
+
/* ------------------------------------------------------------------ */
|
|
58
|
+
/* Client primitive */
|
|
59
|
+
/* ------------------------------------------------------------------ */
|
|
60
|
+
function generateClientPrimitive(baseUrl) {
|
|
61
|
+
return `/**
|
|
62
|
+
* Generated API client primitive.
|
|
63
|
+
* Do not edit by hand — regenerate with \`wild client\`.
|
|
64
|
+
*
|
|
65
|
+
* Framework-agnostic fetch wrapper used by all generated resource clients.
|
|
66
|
+
* Override \`baseUrl\` at the top for your environment.
|
|
67
|
+
*/
|
|
68
|
+
export const baseUrl = ${JSON.stringify(baseUrl)};
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Optional auth hook. Set this once at app start to attach credentials
|
|
72
|
+
* (e.g. a bearer token) to every generated request:
|
|
73
|
+
*
|
|
74
|
+
* import { setAuthToken } from "./generated/client.js";
|
|
75
|
+
* setAuthToken(() => localStorage.getItem("token"));
|
|
76
|
+
*/
|
|
77
|
+
let tokenGetter: (() => string | null | undefined) | null = null;
|
|
78
|
+
|
|
79
|
+
export function setAuthToken(getter: (() => string | null | undefined) | null): void {
|
|
80
|
+
tokenGetter = getter;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
export interface RequestOptions {
|
|
84
|
+
headers?: Record<string, string>;
|
|
85
|
+
signal?: AbortSignal;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/** Join baseUrl + path without producing a double slash. */
|
|
89
|
+
export function joinUrl(base: string, path: string): string {
|
|
90
|
+
return \`\${base.replace(/\\/+$/, "")}/\${path.replace(/^\\/+/, "")}\`;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
export async function request<T>(path: string, init?: RequestInit): Promise<T> {
|
|
94
|
+
const token = tokenGetter?.() ?? null;
|
|
95
|
+
const res = await fetch(joinUrl(baseUrl, path), {
|
|
96
|
+
...init,
|
|
97
|
+
headers: {
|
|
98
|
+
"Content-Type": "application/json",
|
|
99
|
+
...(token ? { Authorization: \`Bearer \${token}\` } : {}),
|
|
100
|
+
...init?.headers,
|
|
101
|
+
},
|
|
102
|
+
});
|
|
103
|
+
if (!res.ok) {
|
|
104
|
+
let message = \`HTTP \${res.status} \${res.statusText}\`;
|
|
105
|
+
try {
|
|
106
|
+
const body = await res.json();
|
|
107
|
+
if (body && typeof body === "object" && "message" in body) {
|
|
108
|
+
message = String((body as { message?: unknown }).message);
|
|
109
|
+
}
|
|
110
|
+
} catch {
|
|
111
|
+
/* non-JSON error body */
|
|
112
|
+
}
|
|
113
|
+
throw new Error(message);
|
|
114
|
+
}
|
|
115
|
+
return res.json() as Promise<T>;
|
|
116
|
+
}
|
|
117
|
+
`;
|
|
118
|
+
}
|
|
119
|
+
/* ------------------------------------------------------------------ */
|
|
120
|
+
/* types.ts */
|
|
121
|
+
/* ------------------------------------------------------------------ */
|
|
122
|
+
function generateTypes(schemas, known) {
|
|
123
|
+
const lines = [];
|
|
124
|
+
lines.push(`/**`);
|
|
125
|
+
lines.push(` * Generated request/response types.`);
|
|
126
|
+
lines.push(` * Do not edit by hand — regenerate with \`wild client\`.`);
|
|
127
|
+
lines.push(` */`);
|
|
128
|
+
lines.push("");
|
|
129
|
+
for (const schema of schemas) {
|
|
130
|
+
lines.push(`export interface ${schema.name} {`);
|
|
131
|
+
if (schema.fields.length === 0) {
|
|
132
|
+
lines.push(` [key: string]: unknown;`);
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
for (const field of schema.fields) {
|
|
136
|
+
if (!field.name)
|
|
137
|
+
continue; // $ref placeholder
|
|
138
|
+
const opt = field.optional ? "?" : "";
|
|
139
|
+
lines.push(` ${field.name}${opt}: ${fieldToTs(field, known, 2)};`);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
lines.push(`}`);
|
|
143
|
+
lines.push("");
|
|
144
|
+
}
|
|
145
|
+
return lines.join("\n");
|
|
146
|
+
}
|
|
147
|
+
/* ------------------------------------------------------------------ */
|
|
148
|
+
/* schemas.ts — Zod runtime validation */
|
|
149
|
+
/* ------------------------------------------------------------------ */
|
|
150
|
+
function generateSchemas(schemas) {
|
|
151
|
+
const lines = [];
|
|
152
|
+
lines.push(`import { z } from "zod";`);
|
|
153
|
+
lines.push(``);
|
|
154
|
+
lines.push(`/**`);
|
|
155
|
+
lines.push(` * Generated Zod schemas for client-side validation.`);
|
|
156
|
+
lines.push(` * Do not edit by hand — regenerate with \`wild client\`.`);
|
|
157
|
+
lines.push(` */`);
|
|
158
|
+
lines.push("");
|
|
159
|
+
for (const schema of schemas) {
|
|
160
|
+
if (schema.fields.length === 0) {
|
|
161
|
+
lines.push(`export const ${camelCase(schema.name)}Schema = z.record(z.unknown());`);
|
|
162
|
+
lines.push("");
|
|
163
|
+
continue;
|
|
164
|
+
}
|
|
165
|
+
lines.push(`export const ${camelCase(schema.name)}Schema = z.object({`);
|
|
166
|
+
for (const field of schema.fields) {
|
|
167
|
+
if (!field.name)
|
|
168
|
+
continue;
|
|
169
|
+
const shape = zodShapeFor(field);
|
|
170
|
+
lines.push(` ${field.name}: ${field.optional ? `${shape}.optional()` : shape},`);
|
|
171
|
+
}
|
|
172
|
+
lines.push(`});`);
|
|
173
|
+
lines.push("");
|
|
174
|
+
}
|
|
175
|
+
return lines.join("\n");
|
|
176
|
+
}
|
|
177
|
+
function zodShapeFor(field) {
|
|
178
|
+
if (field.type === "array") {
|
|
179
|
+
// Array of inline objects (e.g. order line items)
|
|
180
|
+
if (field.itemFields && field.itemFields.length > 0) {
|
|
181
|
+
const inner = field.itemFields
|
|
182
|
+
.map((f) => ` ${f.name}: ${f.optional ? `${zodShapeFor(f)}.optional()` : zodShapeFor(f)}`)
|
|
183
|
+
.join(",\n");
|
|
184
|
+
return `z.array(\n z.object({\n${inner}\n })\n )`;
|
|
185
|
+
}
|
|
186
|
+
const item = field.itemType ?? "unknown";
|
|
187
|
+
const inner = knownZodScalar(item) ?? "z.unknown()";
|
|
188
|
+
return `z.array(${inner})`;
|
|
189
|
+
}
|
|
190
|
+
if (field.type === "object" && field.fields && field.fields.length > 0) {
|
|
191
|
+
const inner = field.fields
|
|
192
|
+
.map((f) => ` ${f.name}: ${f.optional ? `${zodShapeFor(f)}.optional()` : zodShapeFor(f)}`)
|
|
193
|
+
.join(",\n");
|
|
194
|
+
return `z.object({\n${inner}\n})`;
|
|
195
|
+
}
|
|
196
|
+
return knownZodScalar(field.type) ?? "z.unknown()";
|
|
197
|
+
}
|
|
198
|
+
function knownZodScalar(type) {
|
|
199
|
+
switch (type) {
|
|
200
|
+
case "string": return "z.string()";
|
|
201
|
+
case "number": return "z.number()";
|
|
202
|
+
case "boolean": return "z.boolean()";
|
|
203
|
+
default: return null;
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
/* ------------------------------------------------------------------ */
|
|
207
|
+
/* api.ts */
|
|
208
|
+
/* ------------------------------------------------------------------ */
|
|
209
|
+
function generateApi(ops, resourceKebab, resourceType, plural, known, baseUrl) {
|
|
210
|
+
const lines = [];
|
|
211
|
+
const typeNames = contractTypeNames(ops);
|
|
212
|
+
lines.push(`import { request } from "../client.js";`);
|
|
213
|
+
if (typeNames) {
|
|
214
|
+
lines.push(`import type { ${typeNames} } from "./types.js";`);
|
|
215
|
+
}
|
|
216
|
+
lines.push("");
|
|
217
|
+
lines.push(`/**`);
|
|
218
|
+
lines.push(` * Typed API client for "${resourceKebab}".`);
|
|
219
|
+
lines.push(` * Do not edit by hand — regenerate with \`wild client\`.`);
|
|
220
|
+
lines.push(` */`);
|
|
221
|
+
lines.push("");
|
|
222
|
+
// Emit a function per operation that ACTUALLY exists in the spec —
|
|
223
|
+
// never invented CRUD.
|
|
224
|
+
for (const op of ops) {
|
|
225
|
+
lines.push(...apiFunctionFor(op, resourceType, plural));
|
|
226
|
+
lines.push("");
|
|
227
|
+
}
|
|
228
|
+
return lines.join("\n");
|
|
229
|
+
}
|
|
230
|
+
/** Emit one typed client function for a single spec operation. */
|
|
231
|
+
function apiFunctionFor(op, resourceType, plural) {
|
|
232
|
+
const lines = [];
|
|
233
|
+
const pathParams = pathParamKeys(op.path);
|
|
234
|
+
// Real URL from the spec's path template (preserves prefixes like /auth/login)
|
|
235
|
+
const url = pathToTemplateLiteral(op.path);
|
|
236
|
+
// Build the argument list
|
|
237
|
+
const args = [];
|
|
238
|
+
if (pathParams.length > 0) {
|
|
239
|
+
// Use the actual param name from the path (e.g. "id")
|
|
240
|
+
for (const key of pathParams)
|
|
241
|
+
args.push(`${key}: string | number`);
|
|
242
|
+
}
|
|
243
|
+
if (op.requestSchema)
|
|
244
|
+
args.push(`data: ${op.requestSchema}`);
|
|
245
|
+
const body = op.requestSchema ? `, body: JSON.stringify(data)` : "";
|
|
246
|
+
const init = op.method === "get"
|
|
247
|
+
? ""
|
|
248
|
+
: `, { method: ${JSON.stringify(op.method.toUpperCase())}${body} }`;
|
|
249
|
+
switch (op.kind) {
|
|
250
|
+
case "list":
|
|
251
|
+
lines.push(`export async function list${capitalize(plural)}(): Promise<unknown[]> {`);
|
|
252
|
+
break;
|
|
253
|
+
case "detail":
|
|
254
|
+
lines.push(`export async function get${resourceType}ById(${args.join(", ")}): Promise<unknown> {`);
|
|
255
|
+
break;
|
|
256
|
+
case "create":
|
|
257
|
+
lines.push(`export async function create${resourceType}(${args.join(", ")}): Promise<unknown> {`);
|
|
258
|
+
break;
|
|
259
|
+
case "update":
|
|
260
|
+
lines.push(`export async function update${resourceType}(${args.join(", ")}): Promise<unknown> {`);
|
|
261
|
+
break;
|
|
262
|
+
case "delete":
|
|
263
|
+
lines.push(`export async function delete${resourceType}(${args.join(", ")}): Promise<unknown> {`);
|
|
264
|
+
break;
|
|
265
|
+
default:
|
|
266
|
+
// Non-CRUD action (e.g. POST /auth/login) — name it method + path tail
|
|
267
|
+
lines.push(`export async function ${op.method}${actionName(op)}(${args.join(", ")}): Promise<unknown> {`);
|
|
268
|
+
break;
|
|
269
|
+
}
|
|
270
|
+
lines.push(` return request(${url}${init});`);
|
|
271
|
+
lines.push(`}`);
|
|
272
|
+
return lines;
|
|
273
|
+
}
|
|
274
|
+
/** Derive an action name from a non-CRUD operation's path ("/auth/login" → "Login"). */
|
|
275
|
+
function actionName(op) {
|
|
276
|
+
const segments = op.path.split("/").filter(Boolean);
|
|
277
|
+
// Use trailing non-param segments so /auth/login → Login, /auth/me → Me
|
|
278
|
+
const tail = segments.filter((s) => !/\{[^}]+\}/.test(s)).slice(1);
|
|
279
|
+
const from = tail.length > 0 ? tail.join("-") : (segments.at(-1) ?? "action");
|
|
280
|
+
return toPascal(from.replace(/[^a-zA-Z0-9]+/g, "-"));
|
|
281
|
+
}
|
|
282
|
+
function contractTypeNames(ops) {
|
|
283
|
+
const names = new Set();
|
|
284
|
+
for (const op of ops) {
|
|
285
|
+
if (op.requestSchema)
|
|
286
|
+
names.add(op.requestSchema);
|
|
287
|
+
}
|
|
288
|
+
return [...names].join(", ");
|
|
289
|
+
}
|
|
290
|
+
function createBodyType(ops) {
|
|
291
|
+
const create = ops.find((o) => o.kind === "create");
|
|
292
|
+
return create?.requestSchema ?? null;
|
|
293
|
+
}
|
|
294
|
+
function updateBodyType(ops) {
|
|
295
|
+
const update = ops.find((o) => o.kind === "update");
|
|
296
|
+
return update?.requestSchema ?? null;
|
|
297
|
+
}
|
|
298
|
+
/* ------------------------------------------------------------------ */
|
|
299
|
+
/* queries.ts */
|
|
300
|
+
/* ------------------------------------------------------------------ */
|
|
301
|
+
function generateQueries(ops, resourceKebab, resourceType, plural) {
|
|
302
|
+
const lines = [];
|
|
303
|
+
const keyVar = `${toCamelKebab(resourceKebab)}Keys`;
|
|
304
|
+
const listOps = ops.filter((o) => o.kind === "list");
|
|
305
|
+
const detailOps = ops.filter((o) => o.kind === "detail");
|
|
306
|
+
// GET actions (e.g. GET /auth/me) are reads → query hooks, not mutations
|
|
307
|
+
const getActions = ops.filter((o) => o.kind === "action" && o.method === "get");
|
|
308
|
+
const hasKeys = listOps.length > 0 || detailOps.length > 0 || getActions.length > 0;
|
|
309
|
+
lines.push(`import { useQuery } from "@tanstack/react-query";`);
|
|
310
|
+
lines.push(`import * as api from "./api.js";`);
|
|
311
|
+
lines.push("");
|
|
312
|
+
lines.push(`/**`);
|
|
313
|
+
lines.push(` * TanStack Query hooks for "${resourceKebab}".`);
|
|
314
|
+
lines.push(` * Do not edit by hand — regenerate with \`wild client\`.`);
|
|
315
|
+
lines.push(` */`);
|
|
316
|
+
lines.push("");
|
|
317
|
+
// Query keys are only needed when there is something to query.
|
|
318
|
+
if (hasKeys) {
|
|
319
|
+
lines.push(`export const ${keyVar} = {`);
|
|
320
|
+
lines.push(` all: ["${resourceKebab}"] as const,`);
|
|
321
|
+
if (listOps.length > 0) {
|
|
322
|
+
lines.push(` list: () => [...${keyVar}.all, "list"] as const,`);
|
|
323
|
+
}
|
|
324
|
+
for (const op of detailOps) {
|
|
325
|
+
const keys = pathParamKeys(op.path);
|
|
326
|
+
const argTypes = keys.map((k) => `${k}: string | number`).join("; ");
|
|
327
|
+
lines.push(` detail: (${argTypes}) => [${keyVar}.all, "detail", ${keys.join(", ")}] as const,`);
|
|
328
|
+
}
|
|
329
|
+
for (const op of getActions) {
|
|
330
|
+
const name = toCamelKebab(actionName(op));
|
|
331
|
+
lines.push(` ${name}: () => [${keyVar}.all, "${name}"] as const,`);
|
|
332
|
+
}
|
|
333
|
+
lines.push(`};`);
|
|
334
|
+
lines.push("");
|
|
335
|
+
}
|
|
336
|
+
// list hook — only when a list operation exists
|
|
337
|
+
for (const _op of listOps) {
|
|
338
|
+
lines.push(`export function use${capitalize(plural)}(options?: { enabled?: boolean }) {`);
|
|
339
|
+
lines.push(` return useQuery({`);
|
|
340
|
+
lines.push(` queryKey: ${keyVar}.list(),`);
|
|
341
|
+
lines.push(` queryFn: () => api.list${capitalize(plural)}(),`);
|
|
342
|
+
lines.push(` ...options,`);
|
|
343
|
+
lines.push(` });`);
|
|
344
|
+
lines.push(`}`);
|
|
345
|
+
lines.push("");
|
|
346
|
+
}
|
|
347
|
+
// detail hook(s) — only when a detail operation exists
|
|
348
|
+
for (const op of detailOps) {
|
|
349
|
+
const keys = pathParamKeys(op.path);
|
|
350
|
+
const first = keys[0] ?? "id";
|
|
351
|
+
const argTypes = keys.map((k) => `${k}: string | number`).join(", ");
|
|
352
|
+
lines.push(`export function use${resourceType}(${argTypes}, options?: { enabled?: boolean }) {`);
|
|
353
|
+
lines.push(` return useQuery({`);
|
|
354
|
+
lines.push(` queryKey: ${keyVar}.detail(${keys.join(", ")}),`);
|
|
355
|
+
lines.push(` queryFn: () => api.get${resourceType}ById(${keys.join(", ")}),`);
|
|
356
|
+
lines.push(` enabled: ${first} != null && ${first} !== "",`);
|
|
357
|
+
lines.push(` ...options,`);
|
|
358
|
+
lines.push(` });`);
|
|
359
|
+
lines.push(`}`);
|
|
360
|
+
lines.push("");
|
|
361
|
+
}
|
|
362
|
+
// GET action hooks (e.g. useGetMe for GET /auth/me)
|
|
363
|
+
for (const op of getActions) {
|
|
364
|
+
const name = actionName(op);
|
|
365
|
+
const camel = toCamelKebab(name);
|
|
366
|
+
lines.push(`export function useGet${name}(options?: { enabled?: boolean }) {`);
|
|
367
|
+
lines.push(` return useQuery({`);
|
|
368
|
+
lines.push(` queryKey: ${keyVar}.${camel}(),`);
|
|
369
|
+
lines.push(` queryFn: () => api.get${name}(),`);
|
|
370
|
+
lines.push(` ...options,`);
|
|
371
|
+
lines.push(` });`);
|
|
372
|
+
lines.push(`}`);
|
|
373
|
+
lines.push("");
|
|
374
|
+
}
|
|
375
|
+
return lines.join("\n");
|
|
376
|
+
}
|
|
377
|
+
/* ------------------------------------------------------------------ */
|
|
378
|
+
/* mutations.ts */
|
|
379
|
+
/* ------------------------------------------------------------------ */
|
|
380
|
+
function generateMutations(ops, resourceKebab, resourceType, plural) {
|
|
381
|
+
const lines = [];
|
|
382
|
+
const keyVar = `${toCamelKebab(resourceKebab)}Keys`;
|
|
383
|
+
const createOp = ops.find((o) => o.kind === "create");
|
|
384
|
+
const updateOp = ops.find((o) => o.kind === "update");
|
|
385
|
+
const deleteOp = ops.find((o) => o.kind === "delete");
|
|
386
|
+
// Non-GET actions are writes (e.g. POST /auth/login); GET actions are reads
|
|
387
|
+
const actionOps = ops.filter((o) => o.kind === "action" && o.method !== "get");
|
|
388
|
+
// Only CRUD mutations invalidate the cache; action-only resources
|
|
389
|
+
// must not import the query keys (would be an unused import).
|
|
390
|
+
const invalidates = !!(createOp || updateOp || deleteOp);
|
|
391
|
+
// Mutations reference request body types — import only those used.
|
|
392
|
+
const bodyTypes = [
|
|
393
|
+
createOp?.requestSchema,
|
|
394
|
+
updateOp?.requestSchema,
|
|
395
|
+
...actionOps.map((o) => o.requestSchema),
|
|
396
|
+
].filter((n) => !!n);
|
|
397
|
+
const uniqueBodyTypes = [...new Set(bodyTypes)];
|
|
398
|
+
lines.push(`import { useMutation${invalidates ? ", useQueryClient" : ""} } from "@tanstack/react-query";`);
|
|
399
|
+
lines.push(`import * as api from "./api.js";`);
|
|
400
|
+
if (uniqueBodyTypes.length > 0) {
|
|
401
|
+
lines.push(`import type { ${uniqueBodyTypes.join(", ")} } from "./types.js";`);
|
|
402
|
+
}
|
|
403
|
+
if (invalidates) {
|
|
404
|
+
lines.push(`import { ${keyVar} } from "./queries.js";`);
|
|
405
|
+
}
|
|
406
|
+
lines.push("");
|
|
407
|
+
lines.push(`/**`);
|
|
408
|
+
lines.push(` * TanStack Query mutations for "${resourceKebab}".`);
|
|
409
|
+
lines.push(` * Do not edit by hand — regenerate with \`wild client\`.`);
|
|
410
|
+
lines.push(` */`);
|
|
411
|
+
lines.push("");
|
|
412
|
+
if (createOp?.requestSchema) {
|
|
413
|
+
lines.push(`export function useCreate${resourceType}() {`);
|
|
414
|
+
lines.push(` const queryClient = useQueryClient();`);
|
|
415
|
+
lines.push(` return useMutation({`);
|
|
416
|
+
lines.push(` mutationFn: (data: ${createOp.requestSchema}) => api.create${resourceType}(data),`);
|
|
417
|
+
lines.push(` onSuccess: () => {`);
|
|
418
|
+
lines.push(` queryClient.invalidateQueries({ queryKey: ${keyVar}.all });`);
|
|
419
|
+
lines.push(` },`);
|
|
420
|
+
lines.push(` });`);
|
|
421
|
+
lines.push(`}`);
|
|
422
|
+
lines.push("");
|
|
423
|
+
}
|
|
424
|
+
if (updateOp) {
|
|
425
|
+
const keys = pathParamKeys(updateOp.path);
|
|
426
|
+
const first = keys[0] ?? "id";
|
|
427
|
+
const bodyType = updateOp.requestSchema ?? "unknown";
|
|
428
|
+
lines.push(`export function useUpdate${resourceType}() {`);
|
|
429
|
+
lines.push(` const queryClient = useQueryClient();`);
|
|
430
|
+
lines.push(` return useMutation({`);
|
|
431
|
+
lines.push(` mutationFn: (vars: { ${first}: string | number; data: ${bodyType} }) => api.update${resourceType}(vars.${first}, vars.data),`);
|
|
432
|
+
lines.push(` onSuccess: () => {`);
|
|
433
|
+
lines.push(` queryClient.invalidateQueries({ queryKey: ${keyVar}.all });`);
|
|
434
|
+
lines.push(` },`);
|
|
435
|
+
lines.push(` });`);
|
|
436
|
+
lines.push(`}`);
|
|
437
|
+
lines.push("");
|
|
438
|
+
}
|
|
439
|
+
if (deleteOp) {
|
|
440
|
+
const keys = pathParamKeys(deleteOp.path);
|
|
441
|
+
const first = keys[0] ?? "id";
|
|
442
|
+
lines.push(`export function useDelete${resourceType}() {`);
|
|
443
|
+
lines.push(` const queryClient = useQueryClient();`);
|
|
444
|
+
lines.push(` return useMutation({`);
|
|
445
|
+
lines.push(` mutationFn: (${first}: string | number) => api.delete${resourceType}(${first}),`);
|
|
446
|
+
lines.push(` onSuccess: () => {`);
|
|
447
|
+
lines.push(` queryClient.invalidateQueries({ queryKey: ${keyVar}.all });`);
|
|
448
|
+
lines.push(` },`);
|
|
449
|
+
lines.push(` });`);
|
|
450
|
+
lines.push(`}`);
|
|
451
|
+
lines.push("");
|
|
452
|
+
}
|
|
453
|
+
// Non-GET actions (e.g. POST /auth/login) — no invalidation by default
|
|
454
|
+
for (const op of actionOps) {
|
|
455
|
+
const name = actionName(op);
|
|
456
|
+
const fn = `${op.method}${name}`;
|
|
457
|
+
const bodyType = op.requestSchema;
|
|
458
|
+
lines.push(`export function use${capitalize(fn)}() {`);
|
|
459
|
+
lines.push(` return useMutation({`);
|
|
460
|
+
lines.push(` mutationFn: (${bodyType ? `data: ${bodyType}` : ""}) => api.${fn}(${bodyType ? "data" : ""}),`);
|
|
461
|
+
lines.push(` });`);
|
|
462
|
+
lines.push(`}`);
|
|
463
|
+
lines.push("");
|
|
464
|
+
}
|
|
465
|
+
return lines.join("\n");
|
|
466
|
+
}
|
|
467
|
+
/* ------------------------------------------------------------------ */
|
|
468
|
+
/* examples (optional, clearly not framework-owned) */
|
|
469
|
+
/* ------------------------------------------------------------------ */
|
|
470
|
+
function generateExampleTable(resourceKebab, resourceType, plural, ops) {
|
|
471
|
+
const createBody = createBodyType(ops);
|
|
472
|
+
const updateBody = updateBodyType(ops);
|
|
473
|
+
const entity = requestEntityName(createBody ?? updateBody ?? `${resourceType}Request`);
|
|
474
|
+
const lines = [];
|
|
475
|
+
lines.push(`/**`);
|
|
476
|
+
lines.push(` * EXAMPLE component — not framework-owned.`);
|
|
477
|
+
lines.push(` * Shows a minimal read/write table for "${resourceKebab}".`);
|
|
478
|
+
lines.push(` * Copy, adapt, or delete. Regenerate with \`wild client --examples\`.`);
|
|
479
|
+
lines.push(` */`);
|
|
480
|
+
lines.push(`import { use${capitalize(plural)}, useDelete${resourceType} } from "../${resourceKebab}/queries.js";`);
|
|
481
|
+
lines.push(`import { useCreate${resourceType}() } from "../${resourceKebab}/mutations.js";`);
|
|
482
|
+
lines.push("");
|
|
483
|
+
lines.push(`interface ${entity} {`);
|
|
484
|
+
lines.push(` id: string | number;`);
|
|
485
|
+
lines.push(` [key: string]: unknown;`);
|
|
486
|
+
lines.push(`}`);
|
|
487
|
+
lines.push("");
|
|
488
|
+
lines.push(`export function ${resourceType}Table() {`);
|
|
489
|
+
lines.push(` const { data, isLoading } = use${capitalize(plural)}();`);
|
|
490
|
+
lines.push(` const create = useCreate${resourceType}();`);
|
|
491
|
+
lines.push(` const remove = useDelete${resourceType}();`);
|
|
492
|
+
lines.push(` const items = (data as ${entity}[] | undefined) ?? [];`);
|
|
493
|
+
lines.push("");
|
|
494
|
+
lines.push(` if (isLoading) return <p>Loading…</p>;`);
|
|
495
|
+
lines.push("");
|
|
496
|
+
lines.push(` return (`);
|
|
497
|
+
lines.push(` <div>`);
|
|
498
|
+
lines.push(` <button onClick={() => create.mutate({} as never)}>New</button>`);
|
|
499
|
+
lines.push(` <table>`);
|
|
500
|
+
lines.push(` <thead>`);
|
|
501
|
+
lines.push(` <tr><th>id</th><th>name</th><th></th></tr>`);
|
|
502
|
+
lines.push(` </thead>`);
|
|
503
|
+
lines.push(` <tbody>`);
|
|
504
|
+
lines.push(` {items.map((item) => (`);
|
|
505
|
+
lines.push(` <tr key={String(item.id)}>`);
|
|
506
|
+
lines.push(` <td>{String(item.id)}</td>`);
|
|
507
|
+
lines.push(` <td>{String((item as Record<string, unknown>).name ?? "")}</td>`);
|
|
508
|
+
lines.push(` <td><button onClick={() => remove.mutate(item.id)}>Delete</button></td>`);
|
|
509
|
+
lines.push(` </tr>`);
|
|
510
|
+
lines.push(` ))}`);
|
|
511
|
+
lines.push(` </tbody>`);
|
|
512
|
+
lines.push(` </table>`);
|
|
513
|
+
lines.push(` </div>`);
|
|
514
|
+
lines.push(` );`);
|
|
515
|
+
lines.push(`}`);
|
|
516
|
+
lines.push("");
|
|
517
|
+
return lines.join("\n");
|
|
518
|
+
}
|
|
519
|
+
//# sourceMappingURL=react.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"react.js","sourceRoot":"","sources":["../../../src/client/targets/react.ts"],"names":[],"mappings":"AAEA,OAAO,EACH,SAAS,EACT,UAAU,EACV,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,aAAa,EACb,qBAAqB,EACrB,iBAAiB,EACjB,SAAS,EACT,cAAc,EACd,mBAAmB,GACtB,MAAM,eAAe,CAAC;AAEvB;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,MAAM,WAAW,GAAiB;IACrC,IAAI,EAAE,OAAO;IACb,KAAK,EAAE,8BAA8B;IAErC,aAAa,CAAC,OAAsB;QAChC,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;QAChD,MAAM,KAAK,GAAoB,EAAE,CAAC;QAClC,MAAM,GAAG,GAAG,CAAC,IAAY,EAAE,OAAe,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QAE7E,MAAM,KAAK,GAAG,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAE/C,kCAAkC;QAClC,GAAG,CAAC,qBAAqB,EAAE,uBAAuB,CAAC,OAAO,CAAC,CAAC,CAAC;QAE7D,+BAA+B;QAC/B,KAAK,MAAM,QAAQ,IAAI,mBAAmB,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9D,MAAM,GAAG,GAAG,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,KAAK,QAAQ,CAAC,CAAC;YAC5E,sEAAsE;YACtE,+CAA+C;YAC/C,MAAM,YAAY,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAC5D,MAAM,MAAM,GAAG,SAAS,CAAC,YAAY,CAAC,CAAC;YAEvC,mEAAmE;YACnE,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACtF,MAAM,eAAe,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YAEzE,GAAG,CAAC,aAAa,QAAQ,WAAW,EAAE,aAAa,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC,CAAC;YAC7E,GAAG,CAAC,aAAa,QAAQ,aAAa,EAAE,eAAe,CAAC,eAAe,CAAC,CAAC,CAAC;YAC1E,GAAG,CAAC,aAAa,QAAQ,SAAS,EAAE,WAAW,CAAC,GAAG,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;YACtG,GAAG,CAAC,aAAa,QAAQ,aAAa,EAAE,eAAe,CAAC,GAAG,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC;YAC9F,GAAG,CAAC,aAAa,QAAQ,eAAe,EAAE,iBAAiB,CAAC,GAAG,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC;QACtG,CAAC;QAED,+CAA+C;QAC/C,IAAI,QAAQ,EAAE,CAAC;YACX,KAAK,MAAM,QAAQ,IAAI,mBAAmB,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC9D,MAAM,GAAG,GAAG,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,KAAK,QAAQ,CAAC,CAAC;gBAC5E,MAAM,YAAY,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,QAAQ,IAAI,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBAC5D,MAAM,MAAM,GAAG,SAAS,CAAC,YAAY,CAAC,CAAC;gBACvC,GAAG,CAAC,sBAAsB,QAAQ,YAAY,EAAE,oBAAoB,CAAC,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;YAC/G,CAAC;QACL,CAAC;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;CACJ,CAAC;AAEF,wEAAwE;AACxE,yEAAyE;AACzE,wEAAwE;AAExE,SAAS,uBAAuB,CAAC,OAAe;IAC5C,OAAO;;;;;;;yBAOc,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiD/C,CAAC;AACF,CAAC;AAED,wEAAwE;AACxE,wEAAwE;AACxE,wEAAwE;AAExE,SAAS,aAAa,CAAC,OAAyB,EAAE,KAAkB;IAChE,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClB,KAAK,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;IACnD,KAAK,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC;IACxE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,oBAAoB,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC;QAChD,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QAC5C,CAAC;aAAM,CAAC;YACJ,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;gBAChC,IAAI,CAAC,KAAK,CAAC,IAAI;oBAAE,SAAS,CAAC,mBAAmB;gBAC9C,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtC,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,GAAG,GAAG,KAAK,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;YACxE,CAAC;QACL,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACnB,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED,wEAAwE;AACxE,uEAAuE;AACvE,wEAAwE;AAExE,SAAS,eAAe,CAAC,OAAyB;IAC9C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;IACvC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClB,KAAK,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;IACnE,KAAK,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC;IACxE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC3B,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,KAAK,CAAC,IAAI,CAAC,gBAAgB,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;YACpF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACf,SAAS;QACb,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,gBAAgB,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QACxE,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAChC,IAAI,CAAC,KAAK,CAAC,IAAI;gBAAE,SAAS;YAC1B,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;YACjC,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,KAAK,aAAa,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;QACtF,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACnB,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,WAAW,CAAC,KAAoB;IACrC,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QACzB,kDAAkD;QAClD,IAAI,KAAK,CAAC,UAAU,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClD,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU;iBACzB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC9F,IAAI,CAAC,KAAK,CAAC,CAAC;YACjB,OAAO,6BAA6B,KAAK,eAAe,CAAC;QAC7D,CAAC;QACD,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,IAAI,SAAS,CAAC;QACzC,MAAM,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,IAAI,aAAa,CAAC;QACpD,OAAO,WAAW,KAAK,GAAG,CAAC;IAC/B,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrE,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM;aACrB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;aAC1F,IAAI,CAAC,KAAK,CAAC,CAAC;QACjB,OAAO,eAAe,KAAK,MAAM,CAAC;IACtC,CAAC;IACD,OAAO,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,aAAa,CAAC;AACvD,CAAC;AAED,SAAS,cAAc,CAAC,IAAY;IAChC,QAAQ,IAAI,EAAE,CAAC;QACX,KAAK,QAAQ,CAAC,CAAC,OAAO,YAAY,CAAC;QACnC,KAAK,QAAQ,CAAC,CAAC,OAAO,YAAY,CAAC;QACnC,KAAK,SAAS,CAAC,CAAC,OAAO,aAAa,CAAC;QACrC,OAAO,CAAC,CAAC,OAAO,IAAI,CAAC;IACzB,CAAC;AACL,CAAC;AAED,wEAAwE;AACxE,wEAAwE;AACxE,wEAAwE;AAExE,SAAS,WAAW,CAChB,GAAwB,EACxB,aAAqB,EACrB,YAAoB,EACpB,MAAc,EACd,KAAkB,EAClB,OAAe;IAEf,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,SAAS,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;IAEzC,KAAK,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;IACtD,IAAI,SAAS,EAAE,CAAC;QACZ,KAAK,CAAC,IAAI,CAAC,iBAAiB,SAAS,uBAAuB,CAAC,CAAC;IAClE,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClB,KAAK,CAAC,IAAI,CAAC,4BAA4B,aAAa,IAAI,CAAC,CAAC;IAC1D,KAAK,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC;IACxE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,mEAAmE;IACnE,uBAAuB;IACvB,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;QACnB,KAAK,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,EAAE,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC;QACxD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACnB,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED,kEAAkE;AAClE,SAAS,cAAc,CAAC,EAAqB,EAAE,YAAoB,EAAE,MAAc;IAC/E,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,UAAU,GAAG,aAAa,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;IAC1C,+EAA+E;IAC/E,MAAM,GAAG,GAAG,qBAAqB,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;IAE3C,0BAA0B;IAC1B,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,sDAAsD;QACtD,KAAK,MAAM,GAAG,IAAI,UAAU;YAAE,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,mBAAmB,CAAC,CAAC;IACvE,CAAC;IACD,IAAI,EAAE,CAAC,aAAa;QAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,aAAa,EAAE,CAAC,CAAC;IAE7D,MAAM,IAAI,GAAG,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAC,EAAE,CAAC;IACpE,MAAM,IAAI,GAAG,EAAE,CAAC,MAAM,KAAK,KAAK;QAC5B,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,eAAe,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,GAAG,IAAI,IAAI,CAAC;IAExE,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;QACd,KAAK,MAAM;YACP,KAAK,CAAC,IAAI,CAAC,6BAA6B,UAAU,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC;YACtF,MAAM;QACV,KAAK,QAAQ;YACT,KAAK,CAAC,IAAI,CAAC,4BAA4B,YAAY,QAAQ,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;YACnG,MAAM;QACV,KAAK,QAAQ;YACT,KAAK,CAAC,IAAI,CAAC,+BAA+B,YAAY,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;YAClG,MAAM;QACV,KAAK,QAAQ;YACT,KAAK,CAAC,IAAI,CAAC,+BAA+B,YAAY,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;YAClG,MAAM;QACV,KAAK,QAAQ;YACT,KAAK,CAAC,IAAI,CAAC,+BAA+B,YAAY,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;YAClG,MAAM;QACV;YACI,uEAAuE;YACvE,KAAK,CAAC,IAAI,CAAC,yBAAyB,EAAE,CAAC,MAAM,GAAG,UAAU,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;YAC1G,MAAM;IACd,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,oBAAoB,GAAG,GAAG,IAAI,IAAI,CAAC,CAAC;IAC/C,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChB,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,wFAAwF;AACxF,SAAS,UAAU,CAAC,EAAqB;IACrC,MAAM,QAAQ,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACpD,wEAAwE;IACxE,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnE,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC;IAC9E,OAAO,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC,CAAC;AACzD,CAAC;AAED,SAAS,iBAAiB,CAAC,GAAwB;IAC/C,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;QACnB,IAAI,EAAE,CAAC,aAAa;YAAE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjC,CAAC;AAED,SAAS,cAAc,CAAC,GAAwB;IAC5C,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;IACpD,OAAO,MAAM,EAAE,aAAa,IAAI,IAAI,CAAC;AACzC,CAAC;AAED,SAAS,cAAc,CAAC,GAAwB;IAC5C,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;IACpD,OAAO,MAAM,EAAE,aAAa,IAAI,IAAI,CAAC;AACzC,CAAC;AAED,wEAAwE;AACxE,wEAAwE;AACxE,wEAAwE;AAExE,SAAS,eAAe,CAAC,GAAwB,EAAE,aAAqB,EAAE,YAAoB,EAAE,MAAc;IAC1G,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,MAAM,GAAG,GAAG,YAAY,CAAC,aAAa,CAAC,MAAM,CAAC;IACpD,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;IACrD,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;IACzD,yEAAyE;IACzE,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC;IAEhF,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;IAEpF,KAAK,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;IAChE,KAAK,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;IAC/C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClB,KAAK,CAAC,IAAI,CAAC,gCAAgC,aAAa,IAAI,CAAC,CAAC;IAC9D,KAAK,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC;IACxE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,+DAA+D;IAC/D,IAAI,OAAO,EAAE,CAAC;QACV,KAAK,CAAC,IAAI,CAAC,gBAAgB,MAAM,MAAM,CAAC,CAAC;QACzC,KAAK,CAAC,IAAI,CAAC,YAAY,aAAa,cAAc,CAAC,CAAC;QACpD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrB,KAAK,CAAC,IAAI,CAAC,qBAAqB,MAAM,yBAAyB,CAAC,CAAC;QACrE,CAAC;QACD,KAAK,MAAM,EAAE,IAAI,SAAS,EAAE,CAAC;YACzB,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;YACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrE,KAAK,CAAC,IAAI,CAAC,cAAc,QAAQ,SAAS,MAAM,mBAAmB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACrG,CAAC;QACD,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;YAC1B,MAAM,IAAI,GAAG,YAAY,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;YAC1C,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,YAAY,MAAM,UAAU,IAAI,cAAc,CAAC,CAAC;QACxE,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACnB,CAAC;IAED,gDAAgD;IAChD,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,sBAAsB,UAAU,CAAC,MAAM,CAAC,qCAAqC,CAAC,CAAC;QAC1F,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAClC,KAAK,CAAC,IAAI,CAAC,iBAAiB,MAAM,UAAU,CAAC,CAAC;QAC9C,KAAK,CAAC,IAAI,CAAC,8BAA8B,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAClE,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACnB,CAAC;IAED,uDAAuD;IACvD,KAAK,MAAM,EAAE,IAAI,SAAS,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,aAAa,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;QAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrE,KAAK,CAAC,IAAI,CAAC,sBAAsB,YAAY,IAAI,QAAQ,sCAAsC,CAAC,CAAC;QACjG,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAClC,KAAK,CAAC,IAAI,CAAC,iBAAiB,MAAM,WAAW,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClE,KAAK,CAAC,IAAI,CAAC,6BAA6B,YAAY,QAAQ,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjF,KAAK,CAAC,IAAI,CAAC,gBAAgB,KAAK,eAAe,KAAK,UAAU,CAAC,CAAC;QAChE,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACnB,CAAC;IAED,oDAAoD;IACpD,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC;QAC5B,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;QACjC,KAAK,CAAC,IAAI,CAAC,yBAAyB,IAAI,qCAAqC,CAAC,CAAC;QAC/E,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAClC,KAAK,CAAC,IAAI,CAAC,iBAAiB,MAAM,IAAI,KAAK,KAAK,CAAC,CAAC;QAClD,KAAK,CAAC,IAAI,CAAC,6BAA6B,IAAI,KAAK,CAAC,CAAC;QACnD,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACnB,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED,wEAAwE;AACxE,wEAAwE;AACxE,wEAAwE;AAExE,SAAS,iBAAiB,CAAC,GAAwB,EAAE,aAAqB,EAAE,YAAoB,EAAE,MAAc;IAC5G,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,MAAM,GAAG,GAAG,YAAY,CAAC,aAAa,CAAC,MAAM,CAAC;IAEpD,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;IACtD,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;IACtD,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;IACtD,4EAA4E;IAC5E,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC;IAE/E,kEAAkE;IAClE,8DAA8D;IAC9D,MAAM,WAAW,GAAG,CAAC,CAAC,CAAC,QAAQ,IAAI,QAAQ,IAAI,QAAQ,CAAC,CAAC;IAEzD,mEAAmE;IACnE,MAAM,SAAS,GAAG;QACd,QAAQ,EAAE,aAAa;QACvB,QAAQ,EAAE,aAAa;QACvB,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC;KAC3C,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClC,MAAM,eAAe,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;IAEhD,KAAK,CAAC,IAAI,CAAC,uBAAuB,WAAW,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,kCAAkC,CAAC,CAAC;IAC3G,KAAK,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;IAC/C,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,iBAAiB,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;IACnF,CAAC;IACD,IAAI,WAAW,EAAE,CAAC;QACd,KAAK,CAAC,IAAI,CAAC,YAAY,MAAM,yBAAyB,CAAC,CAAC;IAC5D,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClB,KAAK,CAAC,IAAI,CAAC,oCAAoC,aAAa,IAAI,CAAC,CAAC;IAClE,KAAK,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC;IACxE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,IAAI,QAAQ,EAAE,aAAa,EAAE,CAAC;QAC1B,KAAK,CAAC,IAAI,CAAC,4BAA4B,YAAY,MAAM,CAAC,CAAC;QAC3D,KAAK,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;QACtD,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC,0BAA0B,QAAQ,CAAC,aAAa,kBAAkB,YAAY,SAAS,CAAC,CAAC;QACpG,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC,mDAAmD,MAAM,UAAU,CAAC,CAAC;QAChF,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACnB,CAAC;IAED,IAAI,QAAQ,EAAE,CAAC;QACX,MAAM,IAAI,GAAG,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;QAC9B,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,IAAI,SAAS,CAAC;QACrD,KAAK,CAAC,IAAI,CAAC,4BAA4B,YAAY,MAAM,CAAC,CAAC;QAC3D,KAAK,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;QACtD,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC,4BAA4B,KAAK,4BAA4B,QAAQ,oBAAoB,YAAY,SAAS,KAAK,eAAe,CAAC,CAAC;QAC/I,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC,mDAAmD,MAAM,UAAU,CAAC,CAAC;QAChF,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACnB,CAAC;IAED,IAAI,QAAQ,EAAE,CAAC;QACX,MAAM,IAAI,GAAG,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,4BAA4B,YAAY,MAAM,CAAC,CAAC;QAC3D,KAAK,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;QACtD,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC,oBAAoB,KAAK,mCAAmC,YAAY,IAAI,KAAK,IAAI,CAAC,CAAC;QAClG,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC,mDAAmD,MAAM,UAAU,CAAC,CAAC;QAChF,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACnB,CAAC;IAED,uEAAuE;IACvE,KAAK,MAAM,EAAE,IAAI,SAAS,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC;QAC5B,MAAM,EAAE,GAAG,GAAG,EAAE,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC;QACjC,MAAM,QAAQ,GAAG,EAAE,CAAC,aAAa,CAAC;QAClC,KAAK,CAAC,IAAI,CAAC,sBAAsB,UAAU,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;QACvD,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC,oBAAoB,QAAQ,CAAC,CAAC,CAAC,SAAS,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QAChH,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACnB,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED,wEAAwE;AACxE,uEAAuE;AACvE,wEAAwE;AAExE,SAAS,oBAAoB,CAAC,aAAqB,EAAE,YAAoB,EAAE,MAAc,EAAE,GAAwB;IAC/G,MAAM,UAAU,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IACvC,MAAM,UAAU,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IACvC,MAAM,MAAM,GAAG,iBAAiB,CAAC,UAAU,IAAI,UAAU,IAAI,GAAG,YAAY,SAAS,CAAC,CAAC;IAEvF,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClB,KAAK,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;IAC1D,KAAK,CAAC,IAAI,CAAC,4CAA4C,aAAa,IAAI,CAAC,CAAC;IAC1E,KAAK,CAAC,IAAI,CAAC,wEAAwE,CAAC,CAAC;IACrF,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClB,KAAK,CAAC,IAAI,CAAC,eAAe,UAAU,CAAC,MAAM,CAAC,cAAc,YAAY,eAAe,aAAa,eAAe,CAAC,CAAC;IACnH,KAAK,CAAC,IAAI,CAAC,qBAAqB,YAAY,iBAAiB,aAAa,iBAAiB,CAAC,CAAC;IAC7F,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,aAAa,MAAM,IAAI,CAAC,CAAC;IACpC,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;IACrC,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;IACxC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,mBAAmB,YAAY,WAAW,CAAC,CAAC;IACvD,KAAK,CAAC,IAAI,CAAC,oCAAoC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACxE,KAAK,CAAC,IAAI,CAAC,6BAA6B,YAAY,KAAK,CAAC,CAAC;IAC3D,KAAK,CAAC,IAAI,CAAC,6BAA6B,YAAY,KAAK,CAAC,CAAC;IAC3D,KAAK,CAAC,IAAI,CAAC,4BAA4B,MAAM,wBAAwB,CAAC,CAAC;IACvE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;IACvD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACzB,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACxB,KAAK,CAAC,IAAI,CAAC,uEAAuE,CAAC,CAAC;IACpF,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAC5B,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAC9B,KAAK,CAAC,IAAI,CAAC,sDAAsD,CAAC,CAAC;IACnE,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAC/B,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAC9B,KAAK,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;IAC/C,KAAK,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;IACrD,KAAK,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;IACvD,KAAK,CAAC,IAAI,CAAC,+EAA+E,CAAC,CAAC;IAC5F,KAAK,CAAC,IAAI,CAAC,uFAAuF,CAAC,CAAC;IACpG,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAChC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAC5B,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAC/B,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC7B,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACzB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACnB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ci.d.ts","sourceRoot":"","sources":["../../src/commands/ci.ts"],"names":[],"mappings":"AAqNA;;GAEG;AACH,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAkB,GAAG,MAAM,CA2CzF"}
|