@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.
Files changed (83) hide show
  1. package/dist/commands/auth.d.ts +1 -1
  2. package/dist/commands/auth.d.ts.map +1 -1
  3. package/dist/commands/auth.js +40 -3
  4. package/dist/commands/auth.js.map +1 -1
  5. package/dist/commands/init.d.ts +29 -0
  6. package/dist/commands/init.d.ts.map +1 -0
  7. package/dist/commands/init.js +176 -0
  8. package/dist/commands/init.js.map +1 -0
  9. package/dist/commands/integrations.d.ts +27 -0
  10. package/dist/commands/integrations.d.ts.map +1 -1
  11. package/dist/commands/integrations.js +133 -3
  12. package/dist/commands/integrations.js.map +1 -1
  13. package/dist/commands/platform-as-code.d.ts +54 -0
  14. package/dist/commands/platform-as-code.d.ts.map +1 -0
  15. package/dist/commands/platform-as-code.js +185 -0
  16. package/dist/commands/platform-as-code.js.map +1 -0
  17. package/dist/commands/workspace-as-code.d.ts +65 -11
  18. package/dist/commands/workspace-as-code.d.ts.map +1 -1
  19. package/dist/commands/workspace-as-code.js +35 -177
  20. package/dist/commands/workspace-as-code.js.map +1 -1
  21. package/dist/help.d.ts +1 -1
  22. package/dist/help.d.ts.map +1 -1
  23. package/dist/help.js +30 -1
  24. package/dist/help.js.map +1 -1
  25. package/dist/init/shared.d.ts +61 -0
  26. package/dist/init/shared.d.ts.map +1 -0
  27. package/dist/init/shared.js +110 -0
  28. package/dist/init/shared.js.map +1 -0
  29. package/dist/init/templates.d.ts +29 -0
  30. package/dist/init/templates.d.ts.map +1 -0
  31. package/dist/init/templates.js +362 -0
  32. package/dist/init/templates.js.map +1 -0
  33. package/dist/pac/platform-document.d.ts +65 -0
  34. package/dist/pac/platform-document.d.ts.map +1 -0
  35. package/dist/pac/platform-document.js +149 -0
  36. package/dist/pac/platform-document.js.map +1 -0
  37. package/dist/pac/platform-live.d.ts +65 -0
  38. package/dist/pac/platform-live.d.ts.map +1 -0
  39. package/dist/pac/platform-live.js +263 -0
  40. package/dist/pac/platform-live.js.map +1 -0
  41. package/dist/pac/platform-resources.d.ts +141 -0
  42. package/dist/pac/platform-resources.d.ts.map +1 -0
  43. package/dist/pac/platform-resources.js +509 -0
  44. package/dist/pac/platform-resources.js.map +1 -0
  45. package/dist/run.d.ts.map +1 -1
  46. package/dist/run.js +23 -2
  47. package/dist/run.js.map +1 -1
  48. package/dist/wac/apply.d.ts.map +1 -1
  49. package/dist/wac/apply.js +52 -15
  50. package/dist/wac/apply.js.map +1 -1
  51. package/dist/wac/diff-warnings.d.ts +35 -0
  52. package/dist/wac/diff-warnings.d.ts.map +1 -0
  53. package/dist/wac/diff-warnings.js +87 -0
  54. package/dist/wac/diff-warnings.js.map +1 -0
  55. package/dist/wac/diff.d.ts +40 -70
  56. package/dist/wac/diff.d.ts.map +1 -1
  57. package/dist/wac/diff.js +90 -91
  58. package/dist/wac/diff.js.map +1 -1
  59. package/dist/wac/document-key.d.ts +30 -0
  60. package/dist/wac/document-key.d.ts.map +1 -0
  61. package/dist/wac/document-key.js +80 -0
  62. package/dist/wac/document-key.js.map +1 -0
  63. package/dist/wac/document.d.ts +75 -65
  64. package/dist/wac/document.d.ts.map +1 -1
  65. package/dist/wac/document.js +60 -46
  66. package/dist/wac/document.js.map +1 -1
  67. package/dist/wac/execute.d.ts +25 -0
  68. package/dist/wac/execute.d.ts.map +1 -0
  69. package/dist/wac/execute.js +126 -0
  70. package/dist/wac/execute.js.map +1 -0
  71. package/dist/wac/load.d.ts +15 -0
  72. package/dist/wac/load.d.ts.map +1 -0
  73. package/dist/wac/load.js +91 -0
  74. package/dist/wac/load.js.map +1 -0
  75. package/dist/wac/resource-def.d.ts +85 -1
  76. package/dist/wac/resource-def.d.ts.map +1 -1
  77. package/dist/wac/resource-def.js +4 -0
  78. package/dist/wac/resource-def.js.map +1 -1
  79. package/dist/wac/values.d.ts +7 -0
  80. package/dist/wac/values.d.ts.map +1 -1
  81. package/dist/wac/values.js +16 -0
  82. package/dist/wac/values.js.map +1 -1
  83. 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 { looksLikeCredential, normalizedKey, projected, routeForField, } from './resources.js';
51
- import { isRedacted, REDACTED, sameValue } from './values.js';
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
- if (def.update.length === 0 && def.create?.upsert !== true) {
199
- return blocked(def, row, `it exists and there is no route that changes a ${def.label} in place.`, dependsOn);
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
- if (name === def.naturalKey) {
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(liveRow[name])
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 = liveRow[name];
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 = {
@@ -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":"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"}
@@ -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"}