@chatlychat/cli 0.4.0 → 0.5.1
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/commands/auth.d.ts +1 -1
- package/dist/commands/auth.d.ts.map +1 -1
- package/dist/commands/auth.js +40 -3
- package/dist/commands/auth.js.map +1 -1
- package/dist/commands/init.d.ts +29 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +176 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/integrations.d.ts +27 -0
- package/dist/commands/integrations.d.ts.map +1 -1
- package/dist/commands/integrations.js +133 -3
- package/dist/commands/integrations.js.map +1 -1
- package/dist/commands/platform-as-code.d.ts +54 -0
- package/dist/commands/platform-as-code.d.ts.map +1 -0
- package/dist/commands/platform-as-code.js +185 -0
- package/dist/commands/platform-as-code.js.map +1 -0
- package/dist/commands/workspace-as-code.d.ts +65 -11
- package/dist/commands/workspace-as-code.d.ts.map +1 -1
- package/dist/commands/workspace-as-code.js +35 -177
- package/dist/commands/workspace-as-code.js.map +1 -1
- package/dist/help.d.ts +1 -1
- package/dist/help.d.ts.map +1 -1
- package/dist/help.js +30 -1
- package/dist/help.js.map +1 -1
- package/dist/init/shared.d.ts +61 -0
- package/dist/init/shared.d.ts.map +1 -0
- package/dist/init/shared.js +110 -0
- package/dist/init/shared.js.map +1 -0
- package/dist/init/templates.d.ts +29 -0
- package/dist/init/templates.d.ts.map +1 -0
- package/dist/init/templates.js +362 -0
- package/dist/init/templates.js.map +1 -0
- package/dist/pac/platform-document.d.ts +65 -0
- package/dist/pac/platform-document.d.ts.map +1 -0
- package/dist/pac/platform-document.js +149 -0
- package/dist/pac/platform-document.js.map +1 -0
- package/dist/pac/platform-live.d.ts +65 -0
- package/dist/pac/platform-live.d.ts.map +1 -0
- package/dist/pac/platform-live.js +263 -0
- package/dist/pac/platform-live.js.map +1 -0
- package/dist/pac/platform-resources.d.ts +141 -0
- package/dist/pac/platform-resources.d.ts.map +1 -0
- package/dist/pac/platform-resources.js +509 -0
- package/dist/pac/platform-resources.js.map +1 -0
- package/dist/run.d.ts.map +1 -1
- package/dist/run.js +23 -2
- package/dist/run.js.map +1 -1
- package/dist/wac/apply.d.ts.map +1 -1
- package/dist/wac/apply.js +52 -15
- package/dist/wac/apply.js.map +1 -1
- package/dist/wac/diff-warnings.d.ts +35 -0
- package/dist/wac/diff-warnings.d.ts.map +1 -0
- package/dist/wac/diff-warnings.js +87 -0
- package/dist/wac/diff-warnings.js.map +1 -0
- package/dist/wac/diff.d.ts +40 -70
- package/dist/wac/diff.d.ts.map +1 -1
- package/dist/wac/diff.js +90 -91
- package/dist/wac/diff.js.map +1 -1
- package/dist/wac/document-key.d.ts +30 -0
- package/dist/wac/document-key.d.ts.map +1 -0
- package/dist/wac/document-key.js +80 -0
- package/dist/wac/document-key.js.map +1 -0
- package/dist/wac/document.d.ts +75 -65
- package/dist/wac/document.d.ts.map +1 -1
- package/dist/wac/document.js +60 -46
- package/dist/wac/document.js.map +1 -1
- package/dist/wac/execute.d.ts +25 -0
- package/dist/wac/execute.d.ts.map +1 -0
- package/dist/wac/execute.js +126 -0
- package/dist/wac/execute.js.map +1 -0
- package/dist/wac/load.d.ts +15 -0
- package/dist/wac/load.d.ts.map +1 -0
- package/dist/wac/load.js +91 -0
- package/dist/wac/load.js.map +1 -0
- package/dist/wac/resource-def.d.ts +85 -1
- package/dist/wac/resource-def.d.ts.map +1 -1
- package/dist/wac/resource-def.js +4 -0
- package/dist/wac/resource-def.js.map +1 -1
- package/dist/wac/values.d.ts +7 -0
- package/dist/wac/values.d.ts.map +1 -1
- package/dist/wac/values.js +16 -0
- package/dist/wac/values.js.map +1 -1
- package/package.json +2 -2
package/dist/wac/diff.js
CHANGED
|
@@ -47,14 +47,29 @@
|
|
|
47
47
|
* the reason on the line. The alternative in every case is picking one and
|
|
48
48
|
* being wrong silently, which is how the wrong resource gets overwritten.
|
|
49
49
|
*/
|
|
50
|
-
import {
|
|
51
|
-
import {
|
|
50
|
+
import { sectionWarnings } from './diff-warnings.js';
|
|
51
|
+
import { normalizedKey, projected, routeForField, } from './resources.js';
|
|
52
|
+
import { isRedacted, narrowTo, REDACTED, sameValue } from './values.js';
|
|
52
53
|
export { isRedacted, REDACTED, sameValue } from './values.js';
|
|
54
|
+
export { vocabularyWarnings } from './diff-warnings.js';
|
|
53
55
|
function indexLive(def, rows) {
|
|
54
56
|
const byKey = new Map();
|
|
55
57
|
const ambiguous = new Set();
|
|
56
58
|
let keyless = 0;
|
|
57
59
|
for (const raw of rows) {
|
|
60
|
+
/*
|
|
61
|
+
* A row the document can never match, dropped before anything else.
|
|
62
|
+
*
|
|
63
|
+
* `ignoreLive` is the revoked credential: the Platform API keeps a
|
|
64
|
+
* revoked `ck_` key and a revoked bot credential in their lists with
|
|
65
|
+
* `revokedAt` set. Filtered HERE rather than in the reader because this
|
|
66
|
+
* is the one function that decides what a document row may be matched
|
|
67
|
+
* to — a filter in the reader would leave a second path (a test driving
|
|
68
|
+
* `buildPlan` with literal rows) able to match one.
|
|
69
|
+
*/
|
|
70
|
+
if (def.ignoreLive?.(raw) === true) {
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
58
73
|
const row = projected(def, raw);
|
|
59
74
|
const key = row[def.naturalKey];
|
|
60
75
|
if (typeof key !== 'string' || key.length === 0) {
|
|
@@ -75,6 +90,14 @@ export function buildPlan(doc, live, opts = {}) {
|
|
|
75
90
|
const warnings = [];
|
|
76
91
|
const pruneUnsafe = [];
|
|
77
92
|
const known = new Map();
|
|
93
|
+
for (const { def, section } of opts.referenced ?? []) {
|
|
94
|
+
const ids = new Map();
|
|
95
|
+
for (const [key, row] of indexLive(def, section.rows).byKey) {
|
|
96
|
+
const id = row[def.idField];
|
|
97
|
+
ids.set(key, typeof id === 'string' ? id : '');
|
|
98
|
+
}
|
|
99
|
+
known.set(def.type, ids);
|
|
100
|
+
}
|
|
78
101
|
for (const section of doc.sections) {
|
|
79
102
|
const { def } = section;
|
|
80
103
|
const liveSection = live.get(def.type) ?? { rows: [] };
|
|
@@ -118,15 +141,41 @@ export function buildPlan(doc, live, opts = {}) {
|
|
|
118
141
|
reason: undefined,
|
|
119
142
|
row: undefined,
|
|
120
143
|
resolved: {},
|
|
144
|
+
/*
|
|
145
|
+
* Off the LIVE row, because there is no document row to resolve a
|
|
146
|
+
* reference from — this is a resource the file does not mention. A
|
|
147
|
+
* nested DELETE path needs its parent's id
|
|
148
|
+
* (`/v1/platform/workspaces/{workspaceId}/users/{id}`), and the only
|
|
149
|
+
* place that id exists here is the row the reader fetched. The reader
|
|
150
|
+
* stamps it; see `platform-live.ts`.
|
|
151
|
+
*/
|
|
152
|
+
pathParams: orphanPathParams(def, row),
|
|
121
153
|
dependsOn: [],
|
|
122
154
|
});
|
|
123
155
|
}
|
|
124
156
|
}
|
|
125
157
|
return { items, warnings, pruneUnsafe };
|
|
126
158
|
}
|
|
159
|
+
/**
|
|
160
|
+
* The parent id a nested DELETE needs, read off the live row.
|
|
161
|
+
*
|
|
162
|
+
* `{}` for every workspace-level resource: none declares a `parent`, so
|
|
163
|
+
* nothing changes for them. A parented row whose stamped parent id is missing
|
|
164
|
+
* gets `{}` as well rather than a guess — `apply.ts` then refuses to build a
|
|
165
|
+
* path with an unfilled placeholder, which is a loud failure instead of a
|
|
166
|
+
* DELETE sent to a literal `{workspaceId}`.
|
|
167
|
+
*/
|
|
168
|
+
function orphanPathParams(def, row) {
|
|
169
|
+
if (def.parent === undefined) {
|
|
170
|
+
return {};
|
|
171
|
+
}
|
|
172
|
+
const id = row[def.parent.wire];
|
|
173
|
+
return typeof id === 'string' && id.length > 0 ? { [def.parent.wire]: id } : {};
|
|
174
|
+
}
|
|
127
175
|
function planRow(def, row, norm, index, known, opts) {
|
|
128
176
|
const notes = [];
|
|
129
177
|
const resolved = {};
|
|
178
|
+
const pathParams = {};
|
|
130
179
|
const dependsOn = [];
|
|
131
180
|
/* ── References first: an unresolvable one blocks the whole row. ────── */
|
|
132
181
|
for (const [wire, ref] of Object.entries(row.refs)) {
|
|
@@ -141,6 +190,9 @@ function planRow(def, row, norm, index, known, opts) {
|
|
|
141
190
|
if (id === null || id === undefined || id === '') {
|
|
142
191
|
notes.push(`${wire} resolves to ${ref.type}/${normRef}, which this plan creates first.`);
|
|
143
192
|
}
|
|
193
|
+
else if (ref.pathParam === true) {
|
|
194
|
+
pathParams[wire] = id;
|
|
195
|
+
}
|
|
144
196
|
else {
|
|
145
197
|
resolved[wire] = id;
|
|
146
198
|
}
|
|
@@ -153,17 +205,17 @@ function planRow(def, row, norm, index, known, opts) {
|
|
|
153
205
|
}
|
|
154
206
|
const liveRow = index.byKey.get(norm);
|
|
155
207
|
if (liveRow === undefined) {
|
|
156
|
-
return planCreate(def, row, notes, resolved, dependsOn);
|
|
208
|
+
return planCreate(def, row, notes, resolved, pathParams, dependsOn);
|
|
157
209
|
}
|
|
158
|
-
return planUpdate(def, row, liveRow, notes, resolved, dependsOn, opts);
|
|
210
|
+
return planUpdate(def, row, liveRow, notes, resolved, pathParams, dependsOn, opts);
|
|
159
211
|
}
|
|
160
|
-
function planCreate(def, row, notes, resolved, dependsOn) {
|
|
212
|
+
function planCreate(def, row, notes, resolved, pathParams, dependsOn) {
|
|
161
213
|
if (def.create === null) {
|
|
162
214
|
return blocked(def, row, def.type === 'emailTemplates'
|
|
163
215
|
? `"${row.key}" is not one of the five template kinds. \`chatly email-templates list\` ` +
|
|
164
216
|
'names them, and all five always exist — so a kind that is missing here is a ' +
|
|
165
217
|
'misspelling, not an absence.'
|
|
166
|
-
: `there is no route that creates a ${def.label}.`, dependsOn);
|
|
218
|
+
: `there is no route that creates a ${def.label}.`, dependsOn, pathParams);
|
|
167
219
|
}
|
|
168
220
|
const changes = Object.entries(row.body)
|
|
169
221
|
.filter(([name]) => !def.opaque.includes(name))
|
|
@@ -189,19 +241,31 @@ function planCreate(def, row, notes, resolved, dependsOn) {
|
|
|
189
241
|
reason: undefined,
|
|
190
242
|
row,
|
|
191
243
|
resolved,
|
|
244
|
+
pathParams,
|
|
192
245
|
dependsOn,
|
|
193
246
|
};
|
|
194
247
|
}
|
|
195
|
-
function planUpdate(def, row, liveRow, notes, resolved, dependsOn, opts) {
|
|
248
|
+
function planUpdate(def, row, liveRow, notes, resolved, pathParams, dependsOn, opts) {
|
|
196
249
|
const liveIdRaw = liveRow[def.idField];
|
|
197
250
|
const liveId = typeof liveIdRaw === 'string' ? liveIdRaw : undefined;
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
251
|
+
/*
|
|
252
|
+
* No early refusal for a type with no update route.
|
|
253
|
+
*
|
|
254
|
+
* There was one — `update.length === 0` returned `blocked` before a single
|
|
255
|
+
* field was compared — and it was harmless while every workspace-level type
|
|
256
|
+
* either had an update route or was an upsert. Every Platform API type has
|
|
257
|
+
* neither (CHT-F04), so a tenant that matched its document exactly planned
|
|
258
|
+
* as BLOCKED: `plan` could never say "everything matches", which is the one
|
|
259
|
+
* sentence the feature exists to print. Unchanged rows are now `noop`, and
|
|
260
|
+
* a changed field is refused below by `routeForField` finding no route,
|
|
261
|
+
* with the resource's own `updateBlocked` sentence.
|
|
262
|
+
*/
|
|
201
263
|
const changes = [];
|
|
202
264
|
const extra = [...notes];
|
|
203
265
|
const compare = (name, desired) => {
|
|
204
|
-
|
|
266
|
+
// A parented row's child key is HALF its natural key (`acme/ops@…`), so
|
|
267
|
+
// it is skipped for the same reason — it matched, modulo `normalizeKey`.
|
|
268
|
+
if (name === def.naturalKey || name === def.parent?.childKey) {
|
|
205
269
|
/*
|
|
206
270
|
* The key is what matched this row; it is not a field to change. A
|
|
207
271
|
* document that renames a key is describing a DIFFERENT resource — the
|
|
@@ -211,9 +275,11 @@ function planUpdate(def, row, liveRow, notes, resolved, dependsOn, opts) {
|
|
|
211
275
|
*/
|
|
212
276
|
return;
|
|
213
277
|
}
|
|
278
|
+
// A MERGE-written field is compared on the keys the document names only.
|
|
279
|
+
const live = def.mergeFields?.includes(name) === true ? narrowTo(liveRow[name], desired) : liveRow[name];
|
|
214
280
|
const unreadable = def.opaque.includes(name)
|
|
215
281
|
? 'write-only'
|
|
216
|
-
: isRedacted(
|
|
282
|
+
: isRedacted(live)
|
|
217
283
|
? `redacted (reads back as \`${REDACTED}\`)`
|
|
218
284
|
: undefined;
|
|
219
285
|
if (unreadable !== undefined) {
|
|
@@ -236,7 +302,7 @@ function planUpdate(def, row, liveRow, notes, resolved, dependsOn, opts) {
|
|
|
236
302
|
extra.push(`${name} is ${unreadable}; --write-only sends it without a comparison.`);
|
|
237
303
|
return;
|
|
238
304
|
}
|
|
239
|
-
const current =
|
|
305
|
+
const current = live;
|
|
240
306
|
if (!sameValue(current, desired)) {
|
|
241
307
|
changes.push({
|
|
242
308
|
name,
|
|
@@ -264,6 +330,7 @@ function planUpdate(def, row, liveRow, notes, resolved, dependsOn, opts) {
|
|
|
264
330
|
reason: undefined,
|
|
265
331
|
row,
|
|
266
332
|
resolved,
|
|
333
|
+
pathParams,
|
|
267
334
|
dependsOn,
|
|
268
335
|
};
|
|
269
336
|
}
|
|
@@ -281,7 +348,7 @@ function planUpdate(def, row, liveRow, notes, resolved, dependsOn, opts) {
|
|
|
281
348
|
if (unroutable.length > 0) {
|
|
282
349
|
return {
|
|
283
350
|
...blocked(def, row, `${unroutable.map((c) => `\`${c.name}\``).join(', ')} changed, and ` +
|
|
284
|
-
(def.updateBlocked ?? `no route can change that on a ${def.label}.`), dependsOn),
|
|
351
|
+
(def.updateBlocked ?? `no route can change that on a ${def.label}.`), dependsOn, pathParams),
|
|
285
352
|
liveId,
|
|
286
353
|
changes,
|
|
287
354
|
};
|
|
@@ -302,10 +369,11 @@ function planUpdate(def, row, liveRow, notes, resolved, dependsOn, opts) {
|
|
|
302
369
|
reason: undefined,
|
|
303
370
|
row,
|
|
304
371
|
resolved,
|
|
372
|
+
pathParams,
|
|
305
373
|
dependsOn,
|
|
306
374
|
};
|
|
307
375
|
}
|
|
308
|
-
function blocked(def, row, reason, dependsOn) {
|
|
376
|
+
function blocked(def, row, reason, dependsOn, pathParams = {}) {
|
|
309
377
|
return {
|
|
310
378
|
type: def.type,
|
|
311
379
|
label: def.label,
|
|
@@ -317,85 +385,16 @@ function blocked(def, row, reason, dependsOn) {
|
|
|
317
385
|
reason,
|
|
318
386
|
row,
|
|
319
387
|
resolved: {},
|
|
388
|
+
/*
|
|
389
|
+
* KEPT on a blocked row. `apply` never writes one, so it is not needed
|
|
390
|
+
* for a request — but `--prune` and the JSON renderer both read a plan
|
|
391
|
+
* item without knowing its action, and a field that is sometimes absent
|
|
392
|
+
* is a field somebody reads as "this row has no parent".
|
|
393
|
+
*/
|
|
394
|
+
pathParams,
|
|
320
395
|
dependsOn,
|
|
321
396
|
};
|
|
322
397
|
}
|
|
323
|
-
/* ── Warnings ─────────────────────────────────────────────────────────── */
|
|
324
|
-
function sectionWarnings(def, rows, live, index) {
|
|
325
|
-
const out = [];
|
|
326
|
-
if (live.possiblyTruncated === true) {
|
|
327
|
-
out.push(`${def.type}: the list route is @PaginationExempt and answered at its cap, so there may ` +
|
|
328
|
-
'be rows this plan cannot see. `--prune` is refused for this type while that holds — ' +
|
|
329
|
-
'a row past the cap is invisible, not absent.');
|
|
330
|
-
}
|
|
331
|
-
if (index.keyless > 0) {
|
|
332
|
-
out.push(`${def.type}: ${String(index.keyless)} ${def.label}(s) on the server have no ` +
|
|
333
|
-
`\`${def.naturalKey}\`, so this file can neither match nor prune them. They are not ` +
|
|
334
|
-
'listed below at all — give them one in the dashboard to bring them under management.');
|
|
335
|
-
}
|
|
336
|
-
for (const key of index.ambiguous) {
|
|
337
|
-
out.push(`${def.type}: ${def.naturalKey} "${key}" is on more than one ${def.label}` +
|
|
338
|
-
(def.keyEnforced
|
|
339
|
-
? '.'
|
|
340
|
-
: ` — the database does not make \`${def.naturalKey}\` unique for this resource, so ` +
|
|
341
|
-
'only this file does.'));
|
|
342
|
-
}
|
|
343
|
-
out.push(...vocabularyWarnings(def, rows, live.rows));
|
|
344
|
-
return out;
|
|
345
|
-
}
|
|
346
|
-
/**
|
|
347
|
-
* A field the document declares that NO live row carries.
|
|
348
|
-
*
|
|
349
|
-
* This is what stands in for a per-resource field allow-list, and it is
|
|
350
|
-
* better evidence than one: the vocabulary comes from the server on every
|
|
351
|
-
* run, so it cannot drift out of step with an API that shipped a field
|
|
352
|
-
* yesterday. CLAUDE.md's `helpProfile` / `profile` bug — a key zod strips,
|
|
353
|
-
* answering 200 while doing nothing — is exactly what it catches, and
|
|
354
|
-
* `unwritable` in `resources.ts` catches the mirror case (a field the server
|
|
355
|
-
* returns and no write path accepts).
|
|
356
|
-
*
|
|
357
|
-
* Two limits, both reported rather than hidden:
|
|
358
|
-
*
|
|
359
|
-
* - With no live rows there is nothing to compare against, so a brand-new
|
|
360
|
-
* workspace gets no warnings at all.
|
|
361
|
-
* - A legitimately optional field nobody in this workspace has set produces
|
|
362
|
-
* a false positive. That is why it is a warning and not a refusal: being
|
|
363
|
-
* wrong costs one line of output, where refusing wrongly costs a config
|
|
364
|
-
* file that cannot be applied.
|
|
365
|
-
*/
|
|
366
|
-
export function vocabularyWarnings(def, rows, liveRows) {
|
|
367
|
-
if (liveRows.length === 0 || rows.length === 0) {
|
|
368
|
-
return [];
|
|
369
|
-
}
|
|
370
|
-
const serverFields = new Set();
|
|
371
|
-
for (const raw of liveRows) {
|
|
372
|
-
for (const field of Object.keys(projected(def, raw))) {
|
|
373
|
-
serverFields.add(field);
|
|
374
|
-
}
|
|
375
|
-
}
|
|
376
|
-
const unknown = new Set();
|
|
377
|
-
for (const row of rows) {
|
|
378
|
-
for (const field of Object.keys(row.body)) {
|
|
379
|
-
if (serverFields.has(field) || def.opaque.includes(field)) {
|
|
380
|
-
continue;
|
|
381
|
-
}
|
|
382
|
-
// A credential-looking name is write-only by nature, not a typo.
|
|
383
|
-
if (looksLikeCredential(field)) {
|
|
384
|
-
continue;
|
|
385
|
-
}
|
|
386
|
-
unknown.add(field);
|
|
387
|
-
}
|
|
388
|
-
}
|
|
389
|
-
if (unknown.size === 0) {
|
|
390
|
-
return [];
|
|
391
|
-
}
|
|
392
|
-
return [
|
|
393
|
-
`${def.type}: ${[...unknown].map((f) => `\`${f}\``).join(', ')} — no ${def.label} on this ` +
|
|
394
|
-
`server carries ${unknown.size === 1 ? 'that field' : 'those fields'}. The API validates ` +
|
|
395
|
-
'with zod and zod STRIPS an unknown key, so a misspelling is a 200 that did nothing. ' +
|
|
396
|
-
`The fields it does return: ${[...serverFields].sort().join(', ')}.`,
|
|
397
|
-
];
|
|
398
|
-
}
|
|
399
398
|
/** Counts for the summary line. */
|
|
400
399
|
export function tally(plan) {
|
|
401
400
|
const out = {
|
package/dist/wac/diff.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/wac/diff.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/wac/diff.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EACL,aAAa,EACb,SAAS,EACT,aAAa,GAId,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAIxE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAwExD,SAAS,SAAS,CAAC,GAAgB,EAAE,IAA4C;IAC/E,MAAM,KAAK,GAAG,IAAI,GAAG,EAAmC,CAAC;IACzD,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IACpC,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB;;;;;;;;;WASG;QACH,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;YACnC,SAAS;QACX,CAAC;QACD,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAChC,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAChC,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChD,OAAO,IAAI,CAAC,CAAC;YACb,SAAS;QACX,CAAC;QACD,MAAM,IAAI,GAAG,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACrC,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACpB,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACpB,SAAS;QACX,CAAC;QACD,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;AACvC,CAAC;AAyCD,MAAM,UAAU,SAAS,CACvB,GAAgB,EAChB,IAAsC,EACtC,OAAoB,EAAE;IAEtB,MAAM,KAAK,GAAe,EAAE,CAAC;IAC7B,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC1C,KAAK,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,IAAI,CAAC,UAAU,IAAI,EAAE,EAAE,CAAC;QACrD,MAAM,GAAG,GAAa,IAAI,GAAG,EAAE,CAAC;QAChC,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,SAAS,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;YAC5D,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAC5B,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACjD,CAAC;QACD,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAC3B,CAAC;IAED,KAAK,MAAM,OAAO,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;QACnC,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC;QACxB,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;QACvD,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;QAE/C,MAAM,GAAG,GAAa,IAAI,GAAG,EAAE,CAAC;QAChC,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YACrC,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAC5B,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACjD,CAAC;QACD,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAEzB,QAAQ,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC;QACzE,IAAI,WAAW,CAAC,iBAAiB,KAAK,IAAI,EAAE,CAAC;YAC3C,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;QACnC,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YAC/B,MAAM,IAAI,GAAG,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;YACzC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACnB,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;YACzD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjB,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC7B,mEAAmE;gBACnE,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACtB,CAAC;QACH,CAAC;QAED,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YACrC,IAAI,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACtB,SAAS;YACX,CAAC;YACD,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAC5B,KAAK,CAAC,IAAI,CAAC;gBACT,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,KAAK,EAAE,GAAG,CAAC,KAAK;gBAChB,GAAG,EAAE,OAAO,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG;gBAChF,MAAM,EAAE,QAAQ;gBAChB,MAAM,EAAE,OAAO,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS;gBAC/C,OAAO,EAAE,EAAE;gBACX,KAAK,EACH,GAAG,CAAC,MAAM,KAAK,IAAI;oBACjB,CAAC,CAAC,CAAC,mCAAmC,GAAG,CAAC,aAAa,IAAI,kBAAkB,EAAE,CAAC;oBAChF,CAAC,CAAC,EAAE;gBACR,MAAM,EAAE,SAAS;gBACjB,GAAG,EAAE,SAAS;gBACd,QAAQ,EAAE,EAAE;gBACZ;;;;;;;mBAOG;gBACH,UAAU,EAAE,gBAAgB,CAAC,GAAG,EAAE,GAAG,CAAC;gBACtC,SAAS,EAAE,EAAE;aACd,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;AAC1C,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,gBAAgB,CACvB,GAAgB,EAChB,GAA4B;IAE5B,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC7B,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAChC,OAAO,OAAO,EAAE,KAAK,QAAQ,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAClF,CAAC;AAED,SAAS,OAAO,CACd,GAAgB,EAChB,GAAgB,EAChB,IAAY,EACZ,KAAgB,EAChB,KAAoC,EACpC,IAAiB;IAEjB,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,QAAQ,GAA2B,EAAE,CAAC;IAC5C,MAAM,UAAU,GAA2B,EAAE,CAAC;IAC9C,MAAM,SAAS,GAAa,EAAE,CAAC;IAE/B,2EAA2E;IAC3E,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QACnD,SAAS,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;QACzC,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACnC,MAAM,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC;QACxB,IAAI,MAAM,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YACjD,OAAO,OAAO,CACZ,GAAG,EACH,GAAG,EACH,SAAS,GAAG,CAAC,IAAI,IAAI,OAAO,uDAAuD;gBACjF,kCAAkC,GAAG,CAAC,IAAI,yBAAyB,EACrE,SAAS,CACV,CAAC;QACJ,CAAC;QACD,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC/B,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,SAAS,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YACjD,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,gBAAgB,GAAG,CAAC,IAAI,IAAI,OAAO,kCAAkC,CAAC,CAAC;QAC3F,CAAC;aAAM,IAAI,GAAG,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;YAClC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QACxB,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QACtB,CAAC;IACH,CAAC;IAED,IAAI,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9B,OAAO,OAAO,CACZ,GAAG,EACH,GAAG,EACH,iBAAiB,GAAG,CAAC,KAAK,sBAAsB,GAAG,CAAC,UAAU,KAAK,GAAG,CAAC,GAAG,SAAS;YACjF,GAAG,GAAG,CAAC,UAAU,qEAAqE;YACtF,sFAAsF;YACtF,kBAAkB,EACpB,SAAS,CACV,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACtC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;IACtE,CAAC;IACD,OAAO,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;AACrF,CAAC;AAED,SAAS,UAAU,CACjB,GAAgB,EAChB,GAAgB,EAChB,KAAe,EACf,QAAgC,EAChC,UAAkC,EAClC,SAAgC;IAEhC,IAAI,GAAG,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;QACxB,OAAO,OAAO,CACZ,GAAG,EACH,GAAG,EACH,GAAG,CAAC,IAAI,KAAK,gBAAgB;YAC3B,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,2EAA2E;gBACpF,8EAA8E;gBAC9E,8BAA8B;YAClC,CAAC,CAAC,oCAAoC,GAAG,CAAC,KAAK,GAAG,EACpD,SAAS,EACT,UAAU,CACX,CAAC;IACJ,CAAC;IACD,MAAM,OAAO,GAAkB,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;SACpD,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;SAC9C,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;IACzD,MAAM,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;IACzB,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;QAC/B,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,SAAS,EAAE,CAAC;YAClC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,oEAAoE,CAAC,CAAC;QAC3F,CAAC;IACH,CAAC;IACD,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,KAAK,CAAC,IAAI,CACR,0CAA0C,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,sBAAsB;YACrF,gCAAgC,CACnC,CAAC;IACJ,CAAC;IACD,OAAO;QACL,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,GAAG,EAAE,GAAG,CAAC,GAAG;QACZ,MAAM,EAAE,QAAQ;QAChB,MAAM,EAAE,SAAS;QACjB,OAAO;QACP,KAAK,EAAE,KAAK;QACZ,MAAM,EAAE,SAAS;QACjB,GAAG;QACH,QAAQ;QACR,UAAU;QACV,SAAS;KACV,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CACjB,GAAgB,EAChB,GAAgB,EAChB,OAAgC,EAChC,KAAe,EACf,QAAgC,EAChC,UAAkC,EAClC,SAAgC,EAChC,IAAiB;IAEjB,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACvC,MAAM,MAAM,GAAG,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IACrE;;;;;;;;;;;OAWG;IACH,MAAM,OAAO,GAAkB,EAAE,CAAC;IAClC,MAAM,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;IAEzB,MAAM,OAAO,GAAG,CAAC,IAAY,EAAE,OAAgB,EAAQ,EAAE;QACvD,wEAAwE;QACxE,yEAAyE;QACzE,IAAI,IAAI,KAAK,GAAG,CAAC,UAAU,IAAI,IAAI,KAAK,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC;YAC7D;;;;;;eAMG;YACH,OAAO;QACT,CAAC;QACD,yEAAyE;QACzE,MAAM,IAAI,GACR,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC9F,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;YAC1C,CAAC,CAAC,YAAY;YACd,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC;gBAChB,CAAC,CAAC,6BAA6B,QAAQ,KAAK;gBAC5C,CAAC,CAAC,SAAS,CAAC;QAChB,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;YAC7B,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;gBAC5B,KAAK,CAAC,IAAI,CACR,GAAG,IAAI,OAAO,UAAU,2DAA2D;oBACjF,kCAAkC,CACrC,CAAC;gBACF,OAAO;YACT,CAAC;YACD;;;;eAIG;YACH,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI;gBACJ,IAAI,EAAE,SAAS;gBACf,EAAE,EAAE,OAAO;gBACX,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC;aAC1E,CAAC,CAAC;YACH,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,OAAO,UAAU,+CAA+C,CAAC,CAAC;YACpF,OAAO;QACT,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC;YACjC,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI;gBACJ,IAAI,EAAE,OAAO;gBACb,EAAE,EAAE,OAAO;gBACX,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC;aAC1E,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC;IAEF,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QACvD,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACzB,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClD,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACpB,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO;YACL,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,GAAG,EAAE,GAAG,CAAC,GAAG;YACZ,MAAM,EAAE,MAAM;YACd,MAAM;YACN,OAAO;YACP,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,SAAS;YACjB,GAAG;YACH,QAAQ;YACR,UAAU;YACV,SAAS;SACV,CAAC;IACJ,CAAC;IAED;;;;;;;;OAQG;IACH,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,EAAE,CAAC;QAChC,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC;QAChE,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,OAAO;gBACL,GAAG,OAAO,CACR,GAAG,EACH,GAAG,EACH,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB;oBAClE,CAAC,GAAG,CAAC,aAAa,IAAI,iCAAiC,GAAG,CAAC,KAAK,GAAG,CAAC,EACtE,SAAS,EACT,UAAU,CACX;gBACD,MAAM;gBACN,OAAO;aACR,CAAC;QACJ,CAAC;IACH,CAAC;IAED,IAAI,GAAG,CAAC,WAAW,KAAK,IAAI,EAAE,CAAC;QAC7B,KAAK,CAAC,IAAI,CACR,2BAA2B,GAAG,CAAC,KAAK,kDAAkD;YACpF,2EAA2E,CAC9E,CAAC;IACJ,CAAC;IAED,OAAO;QACL,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,GAAG,EAAE,GAAG,CAAC,GAAG;QACZ,MAAM,EAAE,QAAQ;QAChB,MAAM;QACN,OAAO;QACP,KAAK,EAAE,KAAK;QACZ,MAAM,EAAE,SAAS;QACjB,GAAG;QACH,QAAQ;QACR,UAAU;QACV,SAAS;KACV,CAAC;AACJ,CAAC;AAED,SAAS,OAAO,CACd,GAAgB,EAChB,GAAgB,EAChB,MAAc,EACd,SAAgC,EAChC,aAA+C,EAAE;IAEjD,OAAO;QACL,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,GAAG,EAAE,GAAG,CAAC,GAAG;QACZ,MAAM,EAAE,SAAS;QACjB,MAAM,EAAE,SAAS;QACjB,OAAO,EAAE,EAAE;QACX,KAAK,EAAE,EAAE;QACT,MAAM;QACN,GAAG;QACH,QAAQ,EAAE,EAAE;QACZ;;;;;WAKG;QACH,UAAU;QACV,SAAS;KACV,CAAC;AACJ,CAAC;AAED,mCAAmC;AACnC,MAAM,UAAU,KAAK,CAAC,IAAU;IAC9B,MAAM,GAAG,GAA2B;QAClC,MAAM,EAAE,CAAC;QACT,MAAM,EAAE,CAAC;QACT,IAAI,EAAE,CAAC;QACP,MAAM,EAAE,CAAC;QACT,OAAO,EAAE,CAAC;KACX,CAAC;IACF,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QAC9B,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Which value a document row is matched on — split out of `document.ts` when
|
|
3
|
+
* CHT-F04's parented rows pushed it past the 650-line ceiling.
|
|
4
|
+
*
|
|
5
|
+
* A real seam: `parseSection` decides what a row IS, this decides only what
|
|
6
|
+
* it is CALLED, and the two shapes (one authored field, or a parent and a
|
|
7
|
+
* child joined) are the whole of the difference between the workspace and
|
|
8
|
+
* the platform document at the row level.
|
|
9
|
+
*/
|
|
10
|
+
import { type ResourceDef } from './resource-def.js';
|
|
11
|
+
import type { Issue } from './document.js';
|
|
12
|
+
/** `a`, `b` and `c` — these go in error messages, so they read as English. */
|
|
13
|
+
export declare function list(names: ReadonlyArray<string>): string;
|
|
14
|
+
/**
|
|
15
|
+
* The value this row is matched on, or `undefined` with the issue recorded.
|
|
16
|
+
*
|
|
17
|
+
* Two shapes. A FLAT resource is matched on one authored field — a slug, a
|
|
18
|
+
* short code, a url — and that field is `def.naturalKey`. A PARENTED one is
|
|
19
|
+
* matched on `<parent>/<child>`, because an email identifies a member inside
|
|
20
|
+
* one workspace and nothing at all across a platform document that describes
|
|
21
|
+
* four of them; `def.naturalKey` is then the synthetic `address` and appears
|
|
22
|
+
* on neither side of the wire.
|
|
23
|
+
*
|
|
24
|
+
* The parent field itself is NOT consumed here. It is a reference
|
|
25
|
+
* (`def.references`), so the loop below strips it out of the body and
|
|
26
|
+
* resolves the slug to an id — this only reads it, and reads it before that
|
|
27
|
+
* loop runs, because a row with no parent cannot be addressed at all.
|
|
28
|
+
*/
|
|
29
|
+
export declare function keyOf(issues: Issue[], def: ResourceDef, row: Record<string, unknown>, path: string): string | undefined;
|
|
30
|
+
//# sourceMappingURL=document-key.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"document-key.d.ts","sourceRoot":"","sources":["../../src/wac/document-key.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAa,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAE3C,8EAA8E;AAC9E,wBAAgB,IAAI,CAAC,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,MAAM,CAKzD;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,KAAK,CACnB,MAAM,EAAE,KAAK,EAAE,EACf,GAAG,EAAE,WAAW,EAChB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,IAAI,EAAE,MAAM,GACX,MAAM,GAAG,SAAS,CAmDpB"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Which value a document row is matched on — split out of `document.ts` when
|
|
3
|
+
* CHT-F04's parented rows pushed it past the 650-line ceiling.
|
|
4
|
+
*
|
|
5
|
+
* A real seam: `parseSection` decides what a row IS, this decides only what
|
|
6
|
+
* it is CALLED, and the two shapes (one authored field, or a parent and a
|
|
7
|
+
* child joined) are the whole of the difference between the workspace and
|
|
8
|
+
* the platform document at the row level.
|
|
9
|
+
*/
|
|
10
|
+
import { addressOf } from './resource-def.js';
|
|
11
|
+
/** `a`, `b` and `c` — these go in error messages, so they read as English. */
|
|
12
|
+
export function list(names) {
|
|
13
|
+
if (names.length <= 1) {
|
|
14
|
+
return names[0] ?? '(none)';
|
|
15
|
+
}
|
|
16
|
+
return `${names.slice(0, -1).join(', ')} and ${String(names[names.length - 1])}`;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* The value this row is matched on, or `undefined` with the issue recorded.
|
|
20
|
+
*
|
|
21
|
+
* Two shapes. A FLAT resource is matched on one authored field — a slug, a
|
|
22
|
+
* short code, a url — and that field is `def.naturalKey`. A PARENTED one is
|
|
23
|
+
* matched on `<parent>/<child>`, because an email identifies a member inside
|
|
24
|
+
* one workspace and nothing at all across a platform document that describes
|
|
25
|
+
* four of them; `def.naturalKey` is then the synthetic `address` and appears
|
|
26
|
+
* on neither side of the wire.
|
|
27
|
+
*
|
|
28
|
+
* The parent field itself is NOT consumed here. It is a reference
|
|
29
|
+
* (`def.references`), so the loop below strips it out of the body and
|
|
30
|
+
* resolves the slug to an id — this only reads it, and reads it before that
|
|
31
|
+
* loop runs, because a row with no parent cannot be addressed at all.
|
|
32
|
+
*/
|
|
33
|
+
export function keyOf(issues, def, row, path) {
|
|
34
|
+
/** What the message adds when only this file keeps the key unique. */
|
|
35
|
+
const notUnique = (what) => def.keyEnforced
|
|
36
|
+
? ''
|
|
37
|
+
: ` Note the database does NOT make \`${what}\` unique for this resource, so this file ` +
|
|
38
|
+
'is the only thing keeping it unique.';
|
|
39
|
+
if (def.parent !== undefined) {
|
|
40
|
+
const { field, childKey, type } = def.parent;
|
|
41
|
+
const parentValue = row[field];
|
|
42
|
+
const childValue = row[childKey];
|
|
43
|
+
const missing = [];
|
|
44
|
+
if (typeof parentValue !== 'string' || parentValue.length === 0) {
|
|
45
|
+
missing.push(`\`${field}\`: the \`${type}\` natural key, as a string`);
|
|
46
|
+
}
|
|
47
|
+
if (typeof childValue !== 'string' || childValue.length === 0) {
|
|
48
|
+
missing.push(`\`${childKey}\`: a non-empty string`);
|
|
49
|
+
}
|
|
50
|
+
if (missing.length > 0) {
|
|
51
|
+
issues.push({
|
|
52
|
+
path,
|
|
53
|
+
message: `every ${def.label} needs ${list(missing)}. Together they are what this file ` +
|
|
54
|
+
`matches on — ${childKey} alone cannot identify a ${def.label}, because the same ` +
|
|
55
|
+
`${childKey} in two workspaces is two different things.` +
|
|
56
|
+
notUnique(`${field}` + ' plus ' + `${childKey}`),
|
|
57
|
+
});
|
|
58
|
+
return undefined;
|
|
59
|
+
}
|
|
60
|
+
return addressOf(String(parentValue), String(childValue));
|
|
61
|
+
}
|
|
62
|
+
const keyValue = row[def.naturalKey];
|
|
63
|
+
if (typeof keyValue !== 'string' || keyValue.length === 0) {
|
|
64
|
+
/*
|
|
65
|
+
* The one field this file insists on, and the message says why rather
|
|
66
|
+
* than just "required": somebody reading it on a fresh checkout needs
|
|
67
|
+
* to know that the uuid they were about to paste is the wrong answer.
|
|
68
|
+
*/
|
|
69
|
+
issues.push({
|
|
70
|
+
path: `${path}.${def.naturalKey}`,
|
|
71
|
+
message: `every ${def.label} needs \`${def.naturalKey}\`: a non-empty string. It is the ` +
|
|
72
|
+
'natural key this file matches on, so `plan` can tell a create from an update ' +
|
|
73
|
+
'without a server uuid — which does not exist yet in a new environment.' +
|
|
74
|
+
notUnique(def.naturalKey),
|
|
75
|
+
});
|
|
76
|
+
return undefined;
|
|
77
|
+
}
|
|
78
|
+
return keyValue;
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=document-key.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"document-key.js","sourceRoot":"","sources":["../../src/wac/document-key.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,SAAS,EAAoB,MAAM,mBAAmB,CAAC;AAIhE,8EAA8E;AAC9E,MAAM,UAAU,IAAI,CAAC,KAA4B;IAC/C,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QACtB,OAAO,KAAK,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC;IAC9B,CAAC;IACD,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;AACnF,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,KAAK,CACnB,MAAe,EACf,GAAgB,EAChB,GAA4B,EAC5B,IAAY;IAEZ,sEAAsE;IACtE,MAAM,SAAS,GAAG,CAAC,IAAY,EAAU,EAAE,CACzC,GAAG,CAAC,WAAW;QACb,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,sCAAsC,IAAI,4CAA4C;YACtF,sCAAsC,CAAC;IAE7C,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC7B,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC;QAC7C,MAAM,WAAW,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;QAC/B,MAAM,UAAU,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC;QACjC,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChE,OAAO,CAAC,IAAI,CAAC,KAAK,KAAK,aAAa,IAAI,6BAA6B,CAAC,CAAC;QACzE,CAAC;QACD,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9D,OAAO,CAAC,IAAI,CAAC,KAAK,QAAQ,wBAAwB,CAAC,CAAC;QACtD,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI;gBACJ,OAAO,EACL,SAAS,GAAG,CAAC,KAAK,UAAU,IAAI,CAAC,OAAO,CAAC,qCAAqC;oBAC9E,gBAAgB,QAAQ,4BAA4B,GAAG,CAAC,KAAK,qBAAqB;oBAClF,GAAG,QAAQ,6CAA6C;oBACxD,SAAS,CAAC,GAAG,KAAK,EAAE,GAAG,QAAQ,GAAG,GAAG,QAAQ,EAAE,CAAC;aACnD,CAAC,CAAC;YACH,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;IAC5D,CAAC;IAED,MAAM,QAAQ,GAAG,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACrC,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1D;;;;WAIG;QACH,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,GAAG,IAAI,IAAI,GAAG,CAAC,UAAU,EAAE;YACjC,OAAO,EACL,SAAS,GAAG,CAAC,KAAK,YAAY,GAAG,CAAC,UAAU,oCAAoC;gBAChF,+EAA+E;gBAC/E,wEAAwE;gBACxE,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC;SAC5B,CAAC,CAAC;QACH,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|