@hozu/cli 0.10.0 → 0.11.0

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 (99) hide show
  1. package/dist/commands/add-widget.d.ts.map +1 -1
  2. package/dist/commands/add-widget.js +5 -4
  3. package/dist/commands/add-widget.js.map +1 -1
  4. package/dist/commands/app.d.ts.map +1 -1
  5. package/dist/commands/app.js +10 -0
  6. package/dist/commands/app.js.map +1 -1
  7. package/dist/commands/build.d.ts.map +1 -1
  8. package/dist/commands/build.js +5 -1
  9. package/dist/commands/build.js.map +1 -1
  10. package/dist/commands/map.d.ts.map +1 -1
  11. package/dist/commands/map.js +7 -2
  12. package/dist/commands/map.js.map +1 -1
  13. package/dist/commands/migrate.d.ts +17 -16
  14. package/dist/commands/migrate.d.ts.map +1 -1
  15. package/dist/commands/migrate.js +202 -297
  16. package/dist/commands/migrate.js.map +1 -1
  17. package/dist/commands/scaffold.d.ts.map +1 -1
  18. package/dist/commands/scaffold.js +8 -4
  19. package/dist/commands/scaffold.js.map +1 -1
  20. package/dist/contract.d.ts +49 -0
  21. package/dist/contract.d.ts.map +1 -1
  22. package/dist/main.d.ts.map +1 -1
  23. package/dist/main.js +9 -2
  24. package/dist/main.js.map +1 -1
  25. package/dist/migrate/ast.d.ts +31 -0
  26. package/dist/migrate/ast.d.ts.map +1 -0
  27. package/dist/migrate/ast.js +61 -0
  28. package/dist/migrate/ast.js.map +1 -0
  29. package/dist/migrate/record-ir.d.ts +2 -0
  30. package/dist/migrate/record-ir.d.ts.map +1 -0
  31. package/dist/migrate/record-ir.js +16 -0
  32. package/dist/migrate/record-ir.js.map +1 -0
  33. package/dist/migrate/step-0.11.d.ts +15 -0
  34. package/dist/migrate/step-0.11.d.ts.map +1 -0
  35. package/dist/migrate/step-0.11.js +88 -0
  36. package/dist/migrate/step-0.11.js.map +1 -0
  37. package/dist/migrate/steps.d.ts +23 -0
  38. package/dist/migrate/steps.d.ts.map +1 -0
  39. package/dist/migrate/steps.js +33 -0
  40. package/dist/migrate/steps.js.map +1 -0
  41. package/dist/output.d.ts.map +1 -1
  42. package/dist/output.js +2 -0
  43. package/dist/output.js.map +1 -1
  44. package/package.json +8 -8
  45. package/schema/check.schema.json +3 -1
  46. package/schema/inspect.schema.json +41 -3
  47. package/schema/map.schema.json +17 -0
  48. package/schema/migrate.schema.json +718 -0
  49. package/schema/plan.schema.json +4 -2
  50. package/schema/render.schema.json +3 -1
  51. package/schema/validate.schema.json +3 -1
  52. package/dist/commands/migrate-agent.d.ts +0 -12
  53. package/dist/commands/migrate-agent.d.ts.map +0 -1
  54. package/dist/commands/migrate-agent.js +0 -6
  55. package/dist/commands/migrate-agent.js.map +0 -1
  56. package/dist/commands/migrate-app.d.ts +0 -15
  57. package/dist/commands/migrate-app.d.ts.map +0 -1
  58. package/dist/commands/migrate-app.js +0 -334
  59. package/dist/commands/migrate-app.js.map +0 -1
  60. package/dist/commands/migrate-ast.d.ts +0 -63
  61. package/dist/commands/migrate-ast.d.ts.map +0 -1
  62. package/dist/commands/migrate-ast.js +0 -257
  63. package/dist/commands/migrate-ast.js.map +0 -1
  64. package/dist/commands/migrate-forms.d.ts +0 -4
  65. package/dist/commands/migrate-forms.d.ts.map +0 -1
  66. package/dist/commands/migrate-forms.js +0 -120
  67. package/dist/commands/migrate-forms.js.map +0 -1
  68. package/dist/commands/migrate-freshness.d.ts +0 -4
  69. package/dist/commands/migrate-freshness.d.ts.map +0 -1
  70. package/dist/commands/migrate-freshness.js +0 -47
  71. package/dist/commands/migrate-freshness.js.map +0 -1
  72. package/dist/commands/migrate-head.d.ts +0 -8
  73. package/dist/commands/migrate-head.d.ts.map +0 -1
  74. package/dist/commands/migrate-head.js +0 -132
  75. package/dist/commands/migrate-head.js.map +0 -1
  76. package/dist/commands/migrate-links.d.ts +0 -5
  77. package/dist/commands/migrate-links.d.ts.map +0 -1
  78. package/dist/commands/migrate-links.js +0 -55
  79. package/dist/commands/migrate-links.js.map +0 -1
  80. package/dist/commands/migrate-lists.d.ts +0 -9
  81. package/dist/commands/migrate-lists.d.ts.map +0 -1
  82. package/dist/commands/migrate-lists.js +0 -225
  83. package/dist/commands/migrate-lists.js.map +0 -1
  84. package/dist/commands/migrate-normalize.d.ts +0 -27
  85. package/dist/commands/migrate-normalize.d.ts.map +0 -1
  86. package/dist/commands/migrate-normalize.js +0 -252
  87. package/dist/commands/migrate-normalize.js.map +0 -1
  88. package/dist/commands/migrate-ops.d.ts +0 -4
  89. package/dist/commands/migrate-ops.d.ts.map +0 -1
  90. package/dist/commands/migrate-ops.js +0 -192
  91. package/dist/commands/migrate-ops.js.map +0 -1
  92. package/dist/commands/migrate-parts.d.ts +0 -7
  93. package/dist/commands/migrate-parts.d.ts.map +0 -1
  94. package/dist/commands/migrate-parts.js +0 -166
  95. package/dist/commands/migrate-parts.js.map +0 -1
  96. package/dist/commands/migrate-stale.d.ts +0 -24
  97. package/dist/commands/migrate-stale.d.ts.map +0 -1
  98. package/dist/commands/migrate-stale.js +0 -114
  99. package/dist/commands/migrate-stale.js.map +0 -1
@@ -0,0 +1,88 @@
1
+ import { applyEdits, coreLocals, endOf, lineOf, parseStripped, walk, } from './ast.js';
2
+ const keyOf = (p) => p.type === 'Property' ? (p.key.type === 'Identifier' ? p.key.name : String(p.key.value)) : null;
3
+ /** The quote the object already uses for a string value, else the module's usual quote. */
4
+ function quoteOf(source, object) {
5
+ for (const p of object.properties)
6
+ if (p.type === 'Property' && p.value.type === 'Literal' && typeof p.value.value === 'string')
7
+ return source[p.value.start] === '"' ? '"' : "'";
8
+ return (source.match(/'/g)?.length ?? 0) >= (source.match(/"/g)?.length ?? 0) ? "'" : '"';
9
+ }
10
+ /**
11
+ * 0.10 → 0.11 (ADR 0049): every query and mutation without `runs` gets `runs: 'server'`, because 0.11 defaults to
12
+ * `'either'` and every 0.10 implementation lives in the server resolvers. Written in the style of the object: a new
13
+ * line with the indentation of its last property, or `, runs: 'server'` on one line.
14
+ */
15
+ export function addRunsServer(file, source) {
16
+ if (!source.includes('@hozu/core'))
17
+ return { code: source, notes: [], count: 0 };
18
+ let program;
19
+ let js;
20
+ try {
21
+ ;
22
+ ({ program, js } = parseStripped(source));
23
+ }
24
+ catch {
25
+ return { code: source, notes: [], count: 0 };
26
+ }
27
+ const locals = coreLocals(program, ['query', 'mutation']);
28
+ if (!locals.size)
29
+ return { code: source, notes: [], count: 0 };
30
+ const edits = [];
31
+ const notes = [];
32
+ walk(program, (n) => {
33
+ if (n.type !== 'CallExpression' || n.callee.type !== 'Identifier' || !locals.has(n.callee.name))
34
+ return;
35
+ const arg = n.arguments[0];
36
+ if (arg?.type !== 'ObjectExpression') {
37
+ notes.push({
38
+ file,
39
+ line: lineOf(source, n.start),
40
+ message: `${locals.get(n.callee.name)}(…) without an object literal: add runs: 'server' by hand if its resolver is on the server`,
41
+ see: 'fetch',
42
+ });
43
+ return;
44
+ }
45
+ if (arg.properties.some((p) => keyOf(p) === 'runs'))
46
+ return;
47
+ if (arg.properties.some((p) => p.type === 'SpreadElement')) {
48
+ notes.push({
49
+ file,
50
+ line: lineOf(source, n.start),
51
+ message: `${locals.get(n.callee.name)}({ ...spread }): add runs: 'server' by hand if its resolver is on the server`,
52
+ see: 'fetch',
53
+ });
54
+ return;
55
+ }
56
+ const q = quoteOf(source, arg);
57
+ const last = arg.properties.at(-1);
58
+ const prop = `runs: ${q}server${q}`;
59
+ if (!last) {
60
+ edits.push([arg.start, arg.end, `{ ${prop} }`]);
61
+ return;
62
+ }
63
+ const multiline = source.slice(arg.start, arg.end).includes('\n');
64
+ const end = endOf(source, js, last.end);
65
+ const comma = /^\s*,/.exec(js.slice(end, arg.end));
66
+ if (multiline) {
67
+ const lineStart = source.lastIndexOf('\n', last.start) + 1;
68
+ const indent = /^[ \t]*/.exec(source.slice(lineStart))[0];
69
+ const at = comma ? end + comma[0].length : end;
70
+ edits.push([at, at, `${comma ? '' : ','}\n${indent}${prop}${comma ? ',' : ''}`]);
71
+ }
72
+ else
73
+ edits.push([end, end, `, ${prop}`]);
74
+ });
75
+ return { code: applyEdits(source, edits), notes, count: edits.length };
76
+ }
77
+ /** The 0.10 IR in 0.11 terms: every effect ran on the server, and no feature had a fetch module. */
78
+ export function normalize010(ir) {
79
+ const out = structuredClone(ir);
80
+ for (const f of Object.values(out.features ?? {})) {
81
+ for (const kind of ['queries', 'mutations'])
82
+ for (const e of Object.values((f[kind] ?? {})))
83
+ e.runs = 'server';
84
+ f.fetch = null;
85
+ }
86
+ return out;
87
+ }
88
+ //# sourceMappingURL=step-0.11.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"step-0.11.js","sourceRoot":"","sources":["../../src/migrate/step-0.11.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import type { Json } from '@hozu/core/ir';
2
+ import type { Note } from './ast.ts';
3
+ export interface Step {
4
+ from: string;
5
+ to: string;
6
+ /** What the step changes, in one line for the plan. */
7
+ summary: string;
8
+ rewrite(file: string, source: string): {
9
+ code: string;
10
+ notes: Note[];
11
+ count: number;
12
+ };
13
+ /** The IR of `from` in `to` terms: every difference left after it is a behaviour change to review. */
14
+ normalize(ir: Json): Json;
15
+ }
16
+ /** One step per release from 0.11 on (ADR 0049 §6); 0.10.0 is the oldest supported starting point. */
17
+ export declare const steps: Step[];
18
+ export declare const OLDEST: string;
19
+ export declare const minorOf: (version: string) => string;
20
+ export declare const compareMinor: (a: string, b: string) => number;
21
+ /** The steps that take `from` to `to`, in order; null when there is no path. */
22
+ export declare function chain(from: string, to: string): Step[] | null;
23
+ //# sourceMappingURL=steps.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"steps.d.ts","sourceRoot":"","sources":["../../src/migrate/steps.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAA;AACzC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,UAAU,CAAA;AAGpC,MAAM,WAAW,IAAI;IACnB,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,EAAE,MAAM,CAAA;IACV,uDAAuD;IACvD,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,IAAI,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;IACrF,sGAAsG;IACtG,SAAS,CAAC,EAAE,EAAE,IAAI,GAAG,IAAI,CAAA;CAC1B;AAED,sGAAsG;AACtG,eAAO,MAAM,KAAK,EAAE,IAAI,EAQvB,CAAA;AAED,eAAO,MAAM,MAAM,QAAiB,CAAA;AAEpC,eAAO,MAAM,OAAO,YAAa,MAAM,KAAG,MAAkD,CAAA;AAI5F,eAAO,MAAM,YAAY,MAAO,MAAM,KAAK,MAAM,KAAG,MAInD,CAAA;AAED,gFAAgF;AAChF,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,EAAE,GAAG,IAAI,CAU7D"}
@@ -0,0 +1,33 @@
1
+ import { addRunsServer, normalize010 } from './step-0.11.js';
2
+ /** One step per release from 0.11 on (ADR 0049 §6); 0.10.0 is the oldest supported starting point. */
3
+ export const steps = [
4
+ {
5
+ from: '0.10',
6
+ to: '0.11',
7
+ summary: "runs: 'server' on every query and mutation without runs (0.11 defaults to 'either')",
8
+ rewrite: addRunsServer,
9
+ normalize: normalize010,
10
+ },
11
+ ];
12
+ export const OLDEST = steps[0].from;
13
+ export const minorOf = (version) => version.split('.').slice(0, 2).join('.');
14
+ const rank = (minor) => minor.split('.').map(Number);
15
+ export const compareMinor = (a, b) => {
16
+ const [a0, a1] = rank(a);
17
+ const [b0, b1] = rank(b);
18
+ return a0 - b0 || a1 - b1;
19
+ };
20
+ /** The steps that take `from` to `to`, in order; null when there is no path. */
21
+ export function chain(from, to) {
22
+ const out = [];
23
+ let at = from;
24
+ while (compareMinor(at, to) < 0) {
25
+ const next = steps.find((s) => s.from === at);
26
+ if (!next)
27
+ return null;
28
+ out.push(next);
29
+ at = next.to;
30
+ }
31
+ return out;
32
+ }
33
+ //# sourceMappingURL=steps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"steps.js","sourceRoot":"","sources":["../../src/migrate/steps.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAY5D,sGAAsG;AACtG,MAAM,CAAC,MAAM,KAAK,GAAW;IAC3B;QACE,IAAI,EAAE,MAAM;QACZ,EAAE,EAAE,MAAM;QACV,OAAO,EAAE,qFAAqF;QAC9F,OAAO,EAAE,aAAa;QACtB,SAAS,EAAE,YAAY;KACxB;CACF,CAAA;AAED,MAAM,CAAC,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC,IAAI,CAAA;AAEpC,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,OAAe,EAAU,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAE5F,MAAM,IAAI,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAqB,CAAA;AAEhF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAS,EAAE,CAAS,EAAU,EAAE;IAC3D,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;IACxB,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAA;IACxB,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAA;AAC3B,CAAC,CAAA;AAED,gFAAgF;AAChF,MAAM,UAAU,KAAK,CAAC,IAAY,EAAE,EAAU;IAC5C,MAAM,GAAG,GAAW,EAAE,CAAA;IACtB,IAAI,EAAE,GAAG,IAAI,CAAA;IACb,OAAO,YAAY,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC,CAAA;QAC7C,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAA;QACtB,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACd,EAAE,GAAG,IAAI,CAAC,EAAE,CAAA;IACd,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"AACA,OAAO,EAAsB,KAAK,UAAU,EAAE,MAAM,eAAe,CAAA;AAEnE,eAAO,MAAM,IAAI,UAAW,OAAO,KAAG,MACiC,CAAA;AAEvE,eAAO,MAAM,UAAU,gBAAiB,UAAU,EAAE,OAAO,MAAM,KAAG,UAAU,EAW3E,CAAA;AAkFH,wBAAgB,KAAK,CAAC,CAAC,EAAE,UAAU,GAAG,MAAM,CAa3C"}
1
+ {"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"AACA,OAAO,EAAsB,KAAK,UAAU,EAAE,MAAM,eAAe,CAAA;AAEnE,eAAO,MAAM,IAAI,UAAW,OAAO,KAAG,MACiC,CAAA;AAEvE,eAAO,MAAM,UAAU,gBAAiB,UAAU,EAAE,OAAO,MAAM,KAAG,UAAU,EAW3E,CAAA;AAoFH,wBAAgB,KAAK,CAAC,CAAC,EAAE,UAAU,GAAG,MAAM,CAa3C"}
package/dist/output.js CHANGED
@@ -77,6 +77,8 @@ const TOPICS = {
77
77
  HZ078: 'components',
78
78
  HZ079: 'components',
79
79
  HZ080: 'components',
80
+ HZ081: 'fetch',
81
+ HZ082: 'fetch',
80
82
  };
81
83
  const CAUSE_LINES = 10;
82
84
  const cap = (cause) => {
@@ -1 +1 @@
1
- {"version":3,"file":"output.js","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"output.js","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hozu/cli",
3
- "version": "0.10.0",
3
+ "version": "0.11.0",
4
4
  "description": "The hozu command: validate, inspect, graph, explain, impact, plan, build and skill (all with --json)",
5
5
  "keywords": [
6
6
  "hozu",
@@ -45,12 +45,12 @@
45
45
  "access": "public"
46
46
  },
47
47
  "dependencies": {
48
- "@hozu/core": "0.10.0",
49
- "@hozu/devtools": "0.10.0",
50
- "@hozu/machine": "0.10.0",
51
- "@hozu/validator": "0.10.0",
52
- "@hozu/compiler": "0.10.0",
53
- "@hozu/transform": "0.10.0",
54
- "create-hozu": "0.10.0"
48
+ "@hozu/core": "0.11.0",
49
+ "@hozu/devtools": "0.11.0",
50
+ "@hozu/validator": "0.11.0",
51
+ "@hozu/compiler": "0.11.0",
52
+ "@hozu/machine": "0.11.0",
53
+ "create-hozu": "0.11.0",
54
+ "@hozu/transform": "0.11.0"
55
55
  }
56
56
  }
@@ -282,7 +282,9 @@
282
282
  "HZ077",
283
283
  "HZ078",
284
284
  "HZ079",
285
- "HZ080"
285
+ "HZ080",
286
+ "HZ081",
287
+ "HZ082"
286
288
  ]
287
289
  },
288
290
  "Severity": {
@@ -241,6 +241,26 @@
241
241
  "type": "null"
242
242
  }
243
243
  ]
244
+ },
245
+ "fetch": {
246
+ "anyOf": [
247
+ {
248
+ "type": "object",
249
+ "properties": {
250
+ "sourceHash": {
251
+ "type": "string"
252
+ }
253
+ },
254
+ "required": [
255
+ "sourceHash"
256
+ ],
257
+ "additionalProperties": false
258
+ },
259
+ {
260
+ "type": "null"
261
+ }
262
+ ],
263
+ "description": "The feature's `fetch.ts` (ADR 0049): implementations of its `'either'` / `'browser'` effects."
244
264
  }
245
265
  },
246
266
  "required": [
@@ -259,7 +279,8 @@
259
279
  "components",
260
280
  "endpoints",
261
281
  "contracts",
262
- "messages"
282
+ "messages",
283
+ "fetch"
263
284
  ],
264
285
  "additionalProperties": false
265
286
  },
@@ -369,6 +390,9 @@
369
390
  "items": {
370
391
  "$ref": "#/definitions/TagExprIR"
371
392
  }
393
+ },
394
+ "runs": {
395
+ "$ref": "#/definitions/Runs"
372
396
  }
373
397
  },
374
398
  "required": [
@@ -377,7 +401,8 @@
377
401
  "errors",
378
402
  "scope",
379
403
  "freshness",
380
- "tags"
404
+ "tags",
405
+ "runs"
381
406
  ],
382
407
  "additionalProperties": false
383
408
  },
@@ -760,6 +785,15 @@
760
785
  ],
761
786
  "additionalProperties": false
762
787
  },
788
+ "Runs": {
789
+ "type": "string",
790
+ "enum": [
791
+ "server",
792
+ "browser",
793
+ "either"
794
+ ],
795
+ "description": "What an effect's implementation needs (ADR 0049): server secrets, browser credentials, or neither."
796
+ },
763
797
  "MutationIR": {
764
798
  "type": "object",
765
799
  "properties": {
@@ -780,13 +814,17 @@
780
814
  "items": {
781
815
  "$ref": "#/definitions/TagExprIR"
782
816
  }
817
+ },
818
+ "runs": {
819
+ "$ref": "#/definitions/Runs"
783
820
  }
784
821
  },
785
822
  "required": [
786
823
  "input",
787
824
  "output",
788
825
  "errors",
789
- "invalidates"
826
+ "invalidates",
827
+ "runs"
790
828
  ],
791
829
  "additionalProperties": false
792
830
  },
@@ -165,6 +165,10 @@
165
165
  "type": "string"
166
166
  }
167
167
  },
168
+ "runs": {
169
+ "type": "string",
170
+ "description": "Where it runs (ADR 0049): 'server', 'browser' or 'either'."
171
+ },
168
172
  "at": {
169
173
  "type": [
170
174
  "string",
@@ -178,6 +182,7 @@
178
182
  "freshness",
179
183
  "errors",
180
184
  "tags",
185
+ "runs",
181
186
  "at"
182
187
  ],
183
188
  "additionalProperties": false
@@ -203,6 +208,9 @@
203
208
  "type": "string"
204
209
  }
205
210
  },
211
+ "runs": {
212
+ "type": "string"
213
+ },
206
214
  "at": {
207
215
  "type": [
208
216
  "string",
@@ -214,11 +222,19 @@
214
222
  "name",
215
223
  "errors",
216
224
  "invalidates",
225
+ "runs",
217
226
  "at"
218
227
  ],
219
228
  "additionalProperties": false
220
229
  }
221
230
  },
231
+ "fetch": {
232
+ "type": [
233
+ "string",
234
+ "null"
235
+ ],
236
+ "description": "The feature's fetch.ts (ADR 0049), when it has one."
237
+ },
222
238
  "endpoints": {
223
239
  "type": "array",
224
240
  "items": {
@@ -374,6 +390,7 @@
374
390
  "id",
375
391
  "queries",
376
392
  "mutations",
393
+ "fetch",
377
394
  "endpoints",
378
395
  "events",
379
396
  "fns",