@ingestron/authoring 0.0.0-stage → 1.1.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 (148) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +4 -0
  3. package/README.md +17 -2
  4. package/dist/annotations.d.ts +24 -0
  5. package/dist/annotations.d.ts.map +1 -0
  6. package/dist/annotations.js +132 -0
  7. package/dist/annotations.js.map +1 -0
  8. package/dist/completion.d.ts +8 -0
  9. package/dist/completion.d.ts.map +1 -0
  10. package/dist/completion.js +183 -0
  11. package/dist/completion.js.map +1 -0
  12. package/dist/context.d.ts +36 -0
  13. package/dist/context.d.ts.map +1 -0
  14. package/dist/context.js +98 -0
  15. package/dist/context.js.map +1 -0
  16. package/dist/contract-uses.d.ts +8 -0
  17. package/dist/contract-uses.d.ts.map +1 -0
  18. package/dist/contract-uses.js +40 -0
  19. package/dist/contract-uses.js.map +1 -0
  20. package/dist/diagnostics.d.ts +20 -0
  21. package/dist/diagnostics.d.ts.map +1 -0
  22. package/dist/diagnostics.js +143 -0
  23. package/dist/diagnostics.js.map +1 -0
  24. package/dist/docs-entries.d.ts +5 -0
  25. package/dist/docs-entries.d.ts.map +1 -0
  26. package/dist/docs-entries.js +109 -0
  27. package/dist/docs-entries.js.map +1 -0
  28. package/dist/docs.d.ts +7 -0
  29. package/dist/docs.d.ts.map +1 -0
  30. package/dist/docs.js +23 -0
  31. package/dist/docs.js.map +1 -0
  32. package/dist/explain.d.ts +14 -0
  33. package/dist/explain.d.ts.map +1 -0
  34. package/dist/explain.js +55 -0
  35. package/dist/explain.js.map +1 -0
  36. package/dist/fields.d.ts +19 -0
  37. package/dist/fields.d.ts.map +1 -0
  38. package/dist/fields.js +151 -0
  39. package/dist/fields.js.map +1 -0
  40. package/dist/fix-all.d.ts +5 -0
  41. package/dist/fix-all.d.ts.map +1 -0
  42. package/dist/fix-all.js +23 -0
  43. package/dist/fix-all.js.map +1 -0
  44. package/dist/fixed.d.ts +6 -0
  45. package/dist/fixed.d.ts.map +1 -0
  46. package/dist/fixed.js +43 -0
  47. package/dist/fixed.js.map +1 -0
  48. package/dist/fixes.d.ts +33 -0
  49. package/dist/fixes.d.ts.map +1 -0
  50. package/dist/fixes.js +99 -0
  51. package/dist/fixes.js.map +1 -0
  52. package/dist/flow.d.ts +16 -0
  53. package/dist/flow.d.ts.map +1 -0
  54. package/dist/flow.js +62 -0
  55. package/dist/flow.js.map +1 -0
  56. package/dist/hover.d.ts +7 -0
  57. package/dist/hover.d.ts.map +1 -0
  58. package/dist/hover.js +172 -0
  59. package/dist/hover.js.map +1 -0
  60. package/dist/index.d.ts +19 -0
  61. package/dist/index.d.ts.map +1 -0
  62. package/dist/index.js +22 -0
  63. package/dist/index.js.map +1 -0
  64. package/dist/inline.d.ts +7 -0
  65. package/dist/inline.d.ts.map +1 -0
  66. package/dist/inline.js +57 -0
  67. package/dist/inline.js.map +1 -0
  68. package/dist/inputs.d.ts +5 -0
  69. package/dist/inputs.d.ts.map +1 -0
  70. package/dist/inputs.js +72 -0
  71. package/dist/inputs.js.map +1 -0
  72. package/dist/method-suggestions.d.ts +5 -0
  73. package/dist/method-suggestions.d.ts.map +1 -0
  74. package/dist/method-suggestions.js +24 -0
  75. package/dist/method-suggestions.js.map +1 -0
  76. package/dist/methods.d.ts +26 -0
  77. package/dist/methods.d.ts.map +1 -0
  78. package/dist/methods.js +67 -0
  79. package/dist/methods.js.map +1 -0
  80. package/dist/moves.d.ts +5 -0
  81. package/dist/moves.d.ts.map +1 -0
  82. package/dist/moves.js +82 -0
  83. package/dist/moves.js.map +1 -0
  84. package/dist/navigation.d.ts +24 -0
  85. package/dist/navigation.d.ts.map +1 -0
  86. package/dist/navigation.js +176 -0
  87. package/dist/navigation.js.map +1 -0
  88. package/dist/platform-request.d.ts +6 -0
  89. package/dist/platform-request.d.ts.map +1 -0
  90. package/dist/platform-request.js +13 -0
  91. package/dist/platform-request.js.map +1 -0
  92. package/dist/preview.d.ts +20 -0
  93. package/dist/preview.d.ts.map +1 -0
  94. package/dist/preview.js +51 -0
  95. package/dist/preview.js.map +1 -0
  96. package/dist/problems-at.d.ts +17 -0
  97. package/dist/problems-at.d.ts.map +1 -0
  98. package/dist/problems-at.js +32 -0
  99. package/dist/problems-at.js.map +1 -0
  100. package/dist/project.d.ts +27 -0
  101. package/dist/project.d.ts.map +1 -0
  102. package/dist/project.js +96 -0
  103. package/dist/project.js.map +1 -0
  104. package/dist/reference.d.ts +50 -0
  105. package/dist/reference.d.ts.map +1 -0
  106. package/dist/reference.js +152 -0
  107. package/dist/reference.js.map +1 -0
  108. package/dist/references.d.ts +8 -0
  109. package/dist/references.d.ts.map +1 -0
  110. package/dist/references.js +68 -0
  111. package/dist/references.js.map +1 -0
  112. package/dist/rename.d.ts +22 -0
  113. package/dist/rename.d.ts.map +1 -0
  114. package/dist/rename.js +64 -0
  115. package/dist/rename.js.map +1 -0
  116. package/dist/schema.d.ts +23 -0
  117. package/dist/schema.d.ts.map +1 -0
  118. package/dist/schema.js +46 -0
  119. package/dist/schema.js.map +1 -0
  120. package/dist/skeletons.d.ts +7 -0
  121. package/dist/skeletons.d.ts.map +1 -0
  122. package/dist/skeletons.js +107 -0
  123. package/dist/skeletons.js.map +1 -0
  124. package/dist/smart.d.ts +24 -0
  125. package/dist/smart.d.ts.map +1 -0
  126. package/dist/smart.js +113 -0
  127. package/dist/smart.js.map +1 -0
  128. package/dist/suggestion.d.ts +23 -0
  129. package/dist/suggestion.d.ts.map +1 -0
  130. package/dist/suggestion.js +2 -0
  131. package/dist/suggestion.js.map +1 -0
  132. package/dist/symbols.d.ts +12 -0
  133. package/dist/symbols.d.ts.map +1 -0
  134. package/dist/symbols.js +21 -0
  135. package/dist/symbols.js.map +1 -0
  136. package/dist/target.d.ts +4 -0
  137. package/dist/target.d.ts.map +1 -0
  138. package/dist/target.js +7 -0
  139. package/dist/target.js.map +1 -0
  140. package/dist/value-help.d.ts +7 -0
  141. package/dist/value-help.d.ts.map +1 -0
  142. package/dist/value-help.js +206 -0
  143. package/dist/value-help.js.map +1 -0
  144. package/dist/yaml.d.ts +33 -0
  145. package/dist/yaml.d.ts.map +1 -0
  146. package/dist/yaml.js +179 -0
  147. package/dist/yaml.js.map +1 -0
  148. package/package.json +58 -3
@@ -0,0 +1,36 @@
1
+ import type { Project } from "./project.js";
2
+ /** The place being edited in one open file. */
3
+ export interface Place {
4
+ file: string;
5
+ text: string;
6
+ /** The document's `kind`, also while the text does not parse. */
7
+ kind?: string;
8
+ /** The document as data, as far as it parses. */
9
+ data: Record<string, unknown>;
10
+ /** Keys from the root to the value being typed, or to the mapping a new key goes in. */
11
+ path: string[];
12
+ part: "key" | "value" | "item";
13
+ /** A value typed straight after `key:`, with no space yet. */
14
+ tight: boolean;
15
+ /** Inside `{ }` or `[ ]`, where only flow-style YAML is valid. */
16
+ inFlow?: boolean;
17
+ /** The text before the cursor. */
18
+ before: string;
19
+ }
20
+ /** The place at `offset` in `text`, the open text of `file`. */
21
+ export declare function placeAt(file: string, text: string, offset: number): Place;
22
+ /** The keys already written in the mapping at the place's path. */
23
+ export declare function writtenKeys(place: Place): Set<string>;
24
+ /** A document's `kind`, also while the text does not parse. */
25
+ export declare function kindOf(text: string, data?: Record<string, unknown>): string | undefined;
26
+ /** A flow's source, and its connection's connector and connectivity. */
27
+ export declare function flowFacts(project: Project, place: Place): {
28
+ source?: string;
29
+ connector?: string;
30
+ connectivity?: string;
31
+ };
32
+ /** The ids of the project's documents of a kind, in file order. */
33
+ export declare function idsOf(project: Project, kind: string): string[];
34
+ /** The parsed document of a kind with an id (or the first one), if it parses. */
35
+ export declare function documentOf(project: Project, kind: string, id?: string): Record<string, unknown> | undefined;
36
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAI5C,+CAA+C;AAC/C,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,iEAAiE;IACjE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iDAAiD;IACjD,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,wFAAwF;IACxF,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,IAAI,EAAE,KAAK,GAAG,OAAO,GAAG,MAAM,CAAC;IAC/B,8DAA8D;IAC9D,KAAK,EAAE,OAAO,CAAC;IACf,kEAAkE;IAClE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,kCAAkC;IAClC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,gEAAgE;AAChE,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,KAAK,CAkBzE;AAyBD,mEAAmE;AACnE,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,CAOrD;AAED,+DAA+D;AAC/D,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,0BAAe,GAAG,MAAM,GAAG,SAAS,CAE5E;AAcD,wEAAwE;AACxE,wBAAgB,SAAS,CACvB,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,KAAK,GACX;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,CAMhE;AAED,mEAAmE;AACnE,wBAAgB,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAM9D;AAED,iFAAiF;AACjF,wBAAgB,UAAU,CACxB,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,MAAM,EACZ,EAAE,CAAC,EAAE,MAAM,GACV,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAMrC"}
@@ -0,0 +1,98 @@
1
+ // What is at the cursor, worked out once for every feature: the document's
2
+ // kind and data, the keys from the root, whether a key, a value or a list item
3
+ // is being typed, and the facts of a flow's source. It tolerates text that
4
+ // does not parse, because the user is in the middle of typing.
5
+ import { parseDocument } from "yaml";
6
+ import { occurrences } from "./navigation.js";
7
+ import { flowPlace, lineStart } from "./flow.js";
8
+ import { itemIndex, keyPath } from "./yaml.js";
9
+ /** The place at `offset` in `text`, the open text of `file`. */
10
+ export function placeAt(file, text, offset) {
11
+ const before = text.slice(0, offset);
12
+ const line = before.slice(before.lastIndexOf("\n") + 1);
13
+ const data = dataOf(text);
14
+ // project.yaml has no kind; it is described as the Project kind.
15
+ const kind = kindOf(text, data) ?? (file === "project.yaml" ? "Project" : undefined);
16
+ const base = { file, text, data, before, tight: false, ...(kind && { kind }) };
17
+ const path = keyPath(text, offset);
18
+ const inFlow = flowAt(text, offset);
19
+ if (inFlow) {
20
+ const { outer, ...place } = inFlow;
21
+ return { ...base, ...place, inFlow: true, path: [...(outer ?? path), ...place.path] };
22
+ }
23
+ const value = /^\s*(?:- )?([\w.-]+):\s*\S*$/.exec(line);
24
+ if (value)
25
+ return { ...base, part: "value", path: [...path, value[1]], tight: /:\S*$/.test(line) };
26
+ if (/^\s*-\s*\S*$/.test(line))
27
+ return { ...base, part: "item", path };
28
+ return { ...base, part: "key", path };
29
+ }
30
+ /**
31
+ * Inside `{ }` or `[ ]`: the keys from the line where the collection opens
32
+ * (this line, or up to 50 lines above it), and what is typed.
33
+ */
34
+ function flowAt(text, offset) {
35
+ const lines = text.slice(0, offset).split("\n");
36
+ const last = lines.length - 1;
37
+ for (let first = last; first >= Math.max(0, last - 50); first -= 1) {
38
+ const start = lineStart(lines[first]);
39
+ const flow = start && flowPlace([start.rest, ...lines.slice(first + 1)].join(" "));
40
+ if (!start || !flow)
41
+ continue;
42
+ const own = [
43
+ ...(start.item ? [String(itemIndex(lines, first))] : []),
44
+ ...(start.key ? [start.key] : []),
45
+ ];
46
+ // The keys that lead to the line where it opens, from that line's place.
47
+ const lineOffset = lines.slice(0, first).reduce((sum, line) => sum + line.length + 1, 0);
48
+ const outer = first === last ? undefined : keyPath(text, lineOffset + lines[first].length);
49
+ return { part: flow.part, tight: flow.tight, path: [...own, ...flow.keys], outer };
50
+ }
51
+ return undefined;
52
+ }
53
+ /** The keys already written in the mapping at the place's path. */
54
+ export function writtenKeys(place) {
55
+ let node = place.data;
56
+ for (const key of place.path) {
57
+ if (!node || typeof node !== "object")
58
+ return new Set();
59
+ node = node[key];
60
+ }
61
+ return new Set(node && typeof node === "object" && !Array.isArray(node) ? Object.keys(node) : []);
62
+ }
63
+ /** A document's `kind`, also while the text does not parse. */
64
+ export function kindOf(text, data = dataOf(text)) {
65
+ return typeof data.kind === "string" ? data.kind : /^kind:\s*(\S+)/m.exec(text)?.[1];
66
+ }
67
+ /** The text as data, as far as it parses; empty when nothing does. */
68
+ function dataOf(text) {
69
+ try {
70
+ const data = parseDocument(text).toJS();
71
+ return data && typeof data === "object" && !Array.isArray(data)
72
+ ? data
73
+ : {};
74
+ }
75
+ catch {
76
+ return {};
77
+ }
78
+ }
79
+ /** A flow's source, and its connection's connector and connectivity. */
80
+ export function flowFacts(project, place) {
81
+ const source = typeof place.data.source === "string" ? place.data.source : undefined;
82
+ const connection = source ? documentOf(project, "Connection", source) : undefined;
83
+ const pick = (key) => typeof connection?.[key] === "string" ? { [key]: connection[key] } : {};
84
+ return { ...(source && { source }), ...pick("connector"), ...pick("connectivity") };
85
+ }
86
+ /** The ids of the project's documents of a kind, in file order. */
87
+ export function idsOf(project, kind) {
88
+ const prefix = `doc:${kind}:`;
89
+ const found = occurrences(project).filter((item) => item.definition && item.symbol.startsWith(prefix));
90
+ return [...new Set(found.map((item) => item.symbol.slice(prefix.length)))];
91
+ }
92
+ /** The parsed document of a kind with an id (or the first one), if it parses. */
93
+ export function documentOf(project, kind, id) {
94
+ const symbol = `doc:${kind}:${id ?? ""}`;
95
+ const found = occurrences(project).find((item) => item.definition && (id ? item.symbol === symbol : item.symbol.startsWith(symbol)));
96
+ return found && dataOf(project.files.read(found.file) ?? "");
97
+ }
98
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { type Project } from "./project.js";
2
+ /** What each of the project's packs does with a contract field, with the environment's switches. */
3
+ export declare function contractUses(project: Project, path: string, environment: string | undefined): {
4
+ pack: string;
5
+ status: string;
6
+ text: string;
7
+ }[];
8
+ //# sourceMappingURL=contract-uses.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contract-uses.d.ts","sourceRoot":"","sources":["../src/contract-uses.ts"],"names":[],"mappings":"AAEA,OAAO,EAAY,KAAK,OAAO,EAAE,MAAM,cAAc,CAAC;AAUtD,oGAAoG;AACpG,wBAAgB,YAAY,CAC1B,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,GAAG,SAAS,GAC9B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,CAelD"}
@@ -0,0 +1,40 @@
1
+ // What each of the project's packs does with a contract field, in words.
2
+ import { contractUseOf } from "@ingestron/definitions";
3
+ import { resolved } from "./project.js";
4
+ import { standardPacks } from "./smart.js";
5
+ const statuses = {
6
+ used: "Used",
7
+ "not-yet": "Not yet",
8
+ elsewhere: "Elsewhere",
9
+ documentation: "Documentation only",
10
+ };
11
+ /** What each of the project's packs does with a contract field, with the environment's switches. */
12
+ export function contractUses(project, path, environment) {
13
+ const manage = resolved(project, environment).model?.platform.manage;
14
+ return standardPacks(project).flatMap((pack) => {
15
+ const use = contractUseOf(pack, path);
16
+ if (!use)
17
+ return [];
18
+ if (use.use === "used" && use.needs)
19
+ return [needing(pack, use, manage?.[use.needs])];
20
+ const text = use.use === "used"
21
+ ? use.does
22
+ : use.use === "documentation"
23
+ ? "Never changes what is generated."
24
+ : use.reason;
25
+ return [{ pack: pack.id, status: statuses[use.use], text }];
26
+ });
27
+ }
28
+ /** A use that needs a capability: used when the platform turns it on, otherwise how to. */
29
+ function needing(pack, use, on) {
30
+ if (on)
31
+ return { pack: pack.id, status: "Used", text: use.does };
32
+ const capability = pack.capabilities?.find((item) => item.id === use.needs);
33
+ const needs = capability?.needs.length ? ` It needs: ${capability.needs.join("; ")}.` : "";
34
+ return {
35
+ pack: pack.id,
36
+ status: on === false ? "Off" : "Used when on",
37
+ text: `${use.does} Turn on \`manage.${use.needs}\` in the platform.${needs}`,
38
+ };
39
+ }
40
+ //# sourceMappingURL=contract-uses.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contract-uses.js","sourceRoot":"","sources":["../src/contract-uses.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,OAAO,EAAE,aAAa,EAAmC,MAAM,wBAAwB,CAAC;AACxF,OAAO,EAAE,QAAQ,EAAgB,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C,MAAM,QAAQ,GAAG;IACf,IAAI,EAAE,MAAM;IACZ,SAAS,EAAE,SAAS;IACpB,SAAS,EAAE,WAAW;IACtB,aAAa,EAAE,oBAAoB;CACpC,CAAC;AAEF,oGAAoG;AACpG,MAAM,UAAU,YAAY,CAC1B,OAAgB,EAChB,IAAY,EACZ,WAA+B;IAE/B,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAC,MACzB,CAAC;IACtC,OAAO,aAAa,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QAC7C,MAAM,GAAG,GAAG,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACtC,IAAI,CAAC,GAAG;YAAE,OAAO,EAAE,CAAC;QACpB,IAAI,GAAG,CAAC,GAAG,KAAK,MAAM,IAAI,GAAG,CAAC,KAAK;YAAE,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACtF,MAAM,IAAI,GACR,GAAG,CAAC,GAAG,KAAK,MAAM;YAChB,CAAC,CAAC,GAAG,CAAC,IAAI;YACV,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,eAAe;gBAC3B,CAAC,CAAC,kCAAkC;gBACpC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;AACL,CAAC;AAED,2FAA2F;AAC3F,SAAS,OAAO,CACd,IAAc,EACd,GAA0C,EAC1C,EAAuB;IAEvB,IAAI,EAAE;QAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC;IACjE,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC;IAC5E,MAAM,KAAK,GAAG,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3F,OAAO;QACL,IAAI,EAAE,IAAI,CAAC,EAAE;QACb,MAAM,EAAE,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,cAAc;QAC7C,IAAI,EAAE,GAAG,GAAG,CAAC,IAAI,qBAAqB,GAAG,CAAC,KAAK,sBAAsB,KAAK,EAAE;KAC7E,CAAC;AACJ,CAAC"}
@@ -0,0 +1,20 @@
1
+ import type { Fix } from "@ingestron/config";
2
+ import { type Project } from "./project.js";
3
+ import type { Position } from "./yaml.js";
4
+ /** One problem in one file of the project. */
5
+ export interface Problem {
6
+ /** Path relative to the project, with "/". */
7
+ file: string;
8
+ range: {
9
+ start: Position;
10
+ end: Position;
11
+ };
12
+ severity: "error" | "warning";
13
+ code: string;
14
+ message: string;
15
+ /** Changes that each solve it, when the definitions know them. */
16
+ fixes?: Fix[];
17
+ }
18
+ /** Every problem for the environment, checked once per project snapshot. */
19
+ export declare function problems(project: Project, environment: string | undefined): Problem[];
20
+ //# sourceMappingURL=diagnostics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../src/diagnostics.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAA6B,KAAK,OAAO,EAAE,MAAM,cAAc,CAAC;AACvE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAE1C,8CAA8C;AAC9C,MAAM,WAAW,OAAO;IACtB,8CAA8C;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE;QAAE,KAAK,EAAE,QAAQ,CAAC;QAAC,GAAG,EAAE,QAAQ,CAAA;KAAE,CAAC;IAC1C,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,kEAAkE;IAClE,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC;CACf;AAMD,4EAA4E;AAC5E,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,EAAE,CAerF"}
@@ -0,0 +1,143 @@
1
+ // Problems as the CLI finds them, for one environment, at their file and
2
+ // line: loading and resolving with the CLI's packs, template.yaml, and
3
+ // generated files changed by hand.
4
+ import { parseTemplate } from "@ingestron/cli";
5
+ import { kinds } from "@ingestron/definitions";
6
+ import { digestOf } from "@ingestron/generate";
7
+ import { loadedDocuments, resolved } from "./project.js";
8
+ // The editor replaces the project after edits or filesystem events, just as
9
+ // resolution and navigation do. Cursor requests can share the same checks.
10
+ const snapshots = new WeakMap();
11
+ /** Every problem for the environment, checked once per project snapshot. */
12
+ export function problems(project, environment) {
13
+ let byEnvironment = snapshots.get(project);
14
+ if (!byEnvironment)
15
+ snapshots.set(project, (byEnvironment = new Map()));
16
+ let result = byEnvironment.get(environment);
17
+ if (!result) {
18
+ result = [
19
+ ...definitionProblems(project, environment),
20
+ ...templateProblems(project),
21
+ ...editedProblems(project),
22
+ ...notImportedProblems(project, environment),
23
+ ];
24
+ byEnvironment.set(environment, result);
25
+ }
26
+ // Callers may edit their diagnostics without changing another feature's view.
27
+ return structuredClone(result);
28
+ }
29
+ /**
30
+ * Definition files that project.yaml's imports leave out. They are not part
31
+ * of the project, so nothing is generated from them and nothing else reports
32
+ * them; say so, with a fix that imports their folder.
33
+ */
34
+ function notImportedProblems(project, environment) {
35
+ const imported = importedFiles(project, environment);
36
+ if (!imported)
37
+ return [];
38
+ const names = new Set(Object.values(kinds).map((kind) => kind.kind));
39
+ return project.files
40
+ .list()
41
+ .filter((path) => /\.ya?ml$/.test(path) && !imported.has(path))
42
+ .filter((path) => !/(^|\/)build\//.test(path) && !/^(project|template)\.ya?ml$/.test(path))
43
+ .filter((path) => names.has(kindOf(project.files.read(path) ?? "") ?? ""))
44
+ .map((path) => {
45
+ const folder = path.includes("/") ? path.slice(0, path.lastIndexOf("/")) : "";
46
+ const pattern = folder ? `${folder}/*${path.slice(path.lastIndexOf("."))}` : path;
47
+ return {
48
+ ...atStart(path, "warning", "NOT_IMPORTED", "This file is not part of the project: no import in project.yaml matches it, so nothing is generated from it."),
49
+ fixes: [
50
+ {
51
+ title: `Import "${pattern}" in project.yaml`,
52
+ edits: [{ file: "project.yaml", pointer: "/imports/-", set: pattern }],
53
+ },
54
+ ],
55
+ };
56
+ });
57
+ }
58
+ /** The files the project's imports load; undefined when it does not load. */
59
+ function importedFiles(project, environment) {
60
+ const documents = loadedDocuments(project, environment);
61
+ return documents && new Set(documents.map((document) => document.file));
62
+ }
63
+ /** The `kind:` a YAML file declares at its top level, if any. */
64
+ function kindOf(text) {
65
+ return /^kind:\s*["']?([A-Za-z]+)["']?\s*$/m.exec(text)?.[1];
66
+ }
67
+ function definitionProblems(project, environment) {
68
+ const { diagnostics } = resolved(project, environment);
69
+ return diagnostics.map((diagnostic) => {
70
+ const file = diagnostic.location?.file ?? "project.yaml";
71
+ const line = (diagnostic.location?.line ?? 1) - 1;
72
+ const character = (diagnostic.location?.column ?? 1) - 1;
73
+ const text = project.files.read(file) ?? "";
74
+ const message = diagnostic.hint
75
+ ? `${diagnostic.message}\n${diagnostic.hint}`
76
+ : diagnostic.message;
77
+ return {
78
+ file,
79
+ range: {
80
+ start: { line, character },
81
+ end: { line, character: tokenEnd(text, line, character) },
82
+ },
83
+ severity: diagnostic.severity,
84
+ code: diagnostic.code,
85
+ message,
86
+ ...(diagnostic.fixes && { fixes: diagnostic.fixes }),
87
+ };
88
+ });
89
+ }
90
+ function templateProblems(project) {
91
+ const text = project.files.read("template.yaml");
92
+ if (text === undefined)
93
+ return [];
94
+ try {
95
+ parseTemplate(text, "template", project.folder);
96
+ return [];
97
+ }
98
+ catch (error) {
99
+ const message = error instanceof Error ? error.message : String(error);
100
+ return [atStart("template.yaml", "error", "TEMPLATE", message)];
101
+ }
102
+ }
103
+ /** Generated files whose text no longer matches the digest their manifest records. */
104
+ function editedProblems(project) {
105
+ return project.files
106
+ .list()
107
+ .filter((path) => path === ".generated.json" || path.endsWith("/.generated.json"))
108
+ .flatMap((manifest) => {
109
+ const base = manifest.slice(0, -".generated.json".length);
110
+ const recorded = manifestFiles(project.files.read(manifest));
111
+ return Object.entries(recorded).flatMap(([path, digest]) => {
112
+ const text = project.files.read(`${base}${path}`);
113
+ if (text === undefined || digestOf(text) === digest)
114
+ return [];
115
+ const message = "Changed by hand since it was generated: the next apply reports a conflict. Move the change into the definitions, or delete the file to generate it again.";
116
+ return [atStart(`${base}${path}`, "warning", "EDITED", message)];
117
+ });
118
+ });
119
+ }
120
+ function manifestFiles(text) {
121
+ try {
122
+ return JSON.parse(text ?? "{}").files ?? {};
123
+ }
124
+ catch {
125
+ return {};
126
+ }
127
+ }
128
+ function atStart(file, severity, code, message) {
129
+ return {
130
+ file,
131
+ severity,
132
+ code,
133
+ message,
134
+ range: { start: { line: 0, character: 0 }, end: { line: 0, character: 0 } },
135
+ };
136
+ }
137
+ /** The end of the word at a position, so the squiggle covers the value, not the line. */
138
+ function tokenEnd(text, line, character) {
139
+ const rest = (text.split("\n")[line] ?? "").slice(character);
140
+ const word = /^[^\s,}\]]+/.exec(rest)?.[0].length ?? 0;
141
+ return character + Math.max(word, 1);
142
+ }
143
+ //# sourceMappingURL=diagnostics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../src/diagnostics.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { Project } from "./project.js";
2
+ import { type ReferenceEntry } from "./reference.js";
3
+ /** The entry for a docs path such as `/docs/reference/packs/adf#adf-copy`, else undefined. */
4
+ export declare function referenceForDocs(project: Project, path: string, environment: string | undefined): ReferenceEntry | undefined;
5
+ //# sourceMappingURL=docs-entries.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs-entries.d.ts","sourceRoot":"","sources":["../src/docs-entries.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAA0C,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAU7F,8FAA8F;AAC9F,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,GAAG,SAAS,GAC9B,cAAc,GAAG,SAAS,CAQ5B"}
@@ -0,0 +1,109 @@
1
+ // A docs link as a Reference panel entry, for what the code describes: a
2
+ // document kind, a field and the fields under it, a method and its settings,
3
+ // a problem code and a connector. Other pages are left to the site.
4
+ import { packs } from "@ingestron/cli";
5
+ import { codeHelp, documentReference, loadingCodeHelp, methodReference, referenceKinds, } from "@ingestron/definitions";
6
+ import { methodInfo } from "./methods.js";
7
+ import { documentEntry, fieldEntry, methodEntry } from "./reference.js";
8
+ const noSpot = {
9
+ part: "key",
10
+ segments: [],
11
+ pointer: "",
12
+ text: "",
13
+ range: [0, 0],
14
+ };
15
+ /** The entry for a docs path such as `/docs/reference/packs/adf#adf-copy`, else undefined. */
16
+ export function referenceForDocs(project, path, environment) {
17
+ const [page = "", anchor = ""] = path.split("#");
18
+ if (page === "/docs/reference/documents")
19
+ return documentsEntry(anchor);
20
+ if (page === "/docs/reference/errors")
21
+ return codeEntry(anchor);
22
+ const pack = /^\/docs\/reference\/packs\/([\w-]+)$/.exec(page)?.[1];
23
+ if (pack)
24
+ return packEntry(project, pack, anchor, path, environment);
25
+ const connector = /^\/docs\/connectors\/([\w-]+)$/.exec(page)?.[1];
26
+ return connector ? connectorEntry(connector, path) : undefined;
27
+ }
28
+ function documentsEntry(anchor) {
29
+ const kind = Object.keys(referenceKinds).find((name) => name.toLowerCase() === anchor);
30
+ if (kind)
31
+ return documentEntry(kind);
32
+ for (const name of Object.keys(referenceKinds)) {
33
+ const fields = documentReference(name);
34
+ const field = fields.find((item) => item.docs.endsWith(`#${anchor}`));
35
+ if (field)
36
+ return withChildren(fieldEntry(field, noSpot, `Field of ${name}`), field, fields);
37
+ }
38
+ return undefined;
39
+ }
40
+ function packEntry(project, id, anchor, path, environment) {
41
+ const pack = packs.find((item) => item.id === id);
42
+ if (!pack)
43
+ return undefined;
44
+ if (pack.methods[anchor]) {
45
+ const info = methodInfo(project, anchor, environment);
46
+ return info && methodEntry(info);
47
+ }
48
+ for (const method of Object.keys(pack.methods)) {
49
+ const fields = methodReference(pack, method);
50
+ const field = fields.find((item) => item.docs === path);
51
+ if (field)
52
+ return withChildren(fieldEntry(field, noSpot, `Setting of ${method}`), field, fields);
53
+ }
54
+ return undefined;
55
+ }
56
+ /** The fields directly under a field, to go further. */
57
+ function withChildren(entry, field, all) {
58
+ const depth = field.path.length;
59
+ const children = all.filter((item) => item.path.length > depth &&
60
+ item.path.slice(0, depth).join("/") === field.path.join("/") &&
61
+ item.path.slice(depth).every((key, index, rest) => key === "*" || index === rest.length - 1));
62
+ return children.length > 0
63
+ ? {
64
+ ...entry,
65
+ fields: children.map((item) => ({
66
+ name: item.name,
67
+ docs: item.docs,
68
+ ...(item.description && { text: item.description }),
69
+ })),
70
+ }
71
+ : entry;
72
+ }
73
+ function codeEntry(code) {
74
+ const help = codeHelp[code] ??
75
+ loadingCodeHelp[code];
76
+ if (!help)
77
+ return undefined;
78
+ return {
79
+ title: code,
80
+ subtitle: "Problem code",
81
+ text: help.meaning,
82
+ facts: [{ label: "Fix", value: help.fix }],
83
+ docs: `/docs/reference/errors#${code}`,
84
+ };
85
+ }
86
+ function connectorEntry(id, path) {
87
+ const found = packs.flatMap((pack) => (pack.connectors ?? [])
88
+ .filter((item) => item.id === id)
89
+ .map((connector) => ({ pack, connector })));
90
+ const [first] = found;
91
+ if (!first)
92
+ return undefined;
93
+ return {
94
+ title: first.connector.title,
95
+ subtitle: "Connector",
96
+ text: found
97
+ .map(({ pack, connector }) => `${pack.id}, \`${connector.method}\`: ${connector.generates}`)
98
+ .join(" "),
99
+ facts: [{ label: "Object", value: first.connector.object }],
100
+ fields: first.connector.settings.map((setting) => ({
101
+ name: setting.name,
102
+ text: `${setting.description}${setting.secret ? " A secret." : ""}`,
103
+ docs: `${path}#settings`,
104
+ })),
105
+ fieldsHeading: "Settings",
106
+ docs: path,
107
+ };
108
+ }
109
+ //# sourceMappingURL=docs-entries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs-entries.js","sourceRoot":"","sources":["../src/docs-entries.ts"],"names":[],"mappings":"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"}
package/dist/docs.d.ts ADDED
@@ -0,0 +1,7 @@
1
+ /** The errors page entry for a problem code, if the code is documented there. */
2
+ export declare function codeDocs(code: string): string | undefined;
3
+ /** Every documentation link the editor can show, once each. */
4
+ export declare function docsLinks(): string[];
5
+ /** A link on the docs site at `base`, such as https://docs.ingestron.io. */
6
+ export declare function docsUrl(base: string, link: string): string;
7
+ //# sourceMappingURL=docs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs.d.ts","sourceRoot":"","sources":["../src/docs.ts"],"names":[],"mappings":"AAWA,iFAAiF;AACjF,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAEzD;AAED,+DAA+D;AAC/D,wBAAgB,SAAS,IAAI,MAAM,EAAE,CAgBpC;AAED,4EAA4E;AAC5E,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAE1D"}
package/dist/docs.js ADDED
@@ -0,0 +1,23 @@
1
+ // The documentation pages the editor links to: each field and setting, and
2
+ // each problem code. The docs site checks that every one of them exists.
3
+ import { packs } from "@ingestron/cli";
4
+ import { codeHelp, documentReference, loadingCodeHelp, methodReference, referenceKinds, } from "@ingestron/definitions";
5
+ /** The errors page entry for a problem code, if the code is documented there. */
6
+ export function codeDocs(code) {
7
+ return code in codeHelp || code in loadingCodeHelp ? `/docs/reference/errors#${code}` : undefined;
8
+ }
9
+ /** Every documentation link the editor can show, once each. */
10
+ export function docsLinks() {
11
+ const fields = [
12
+ ...Object.keys(referenceKinds).flatMap((kind) => documentReference(kind)),
13
+ ...packs.flatMap((pack) => Object.keys(pack.methods).flatMap((id) => methodReference(pack, id))),
14
+ ].map((field) => field.docs);
15
+ const methods = packs.flatMap((pack) => Object.keys(pack.methods).map((id) => `/docs/reference/packs/${pack.id}#${id}`));
16
+ const codes = [...Object.keys(codeHelp), ...Object.keys(loadingCodeHelp)].map((code) => `/docs/reference/errors#${code}`);
17
+ return [...new Set([...fields, ...methods, ...codes])];
18
+ }
19
+ /** A link on the docs site at `base`, such as https://docs.ingestron.io. */
20
+ export function docsUrl(base, link) {
21
+ return `${base.replace(/\/+$/, "")}${link}`;
22
+ }
23
+ //# sourceMappingURL=docs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs.js","sourceRoot":"","sources":["../src/docs.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,yEAAyE;AACzE,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,EACL,QAAQ,EACR,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,cAAc,GACf,MAAM,wBAAwB,CAAC;AAEhC,iFAAiF;AACjF,MAAM,UAAU,QAAQ,CAAC,IAAY;IACnC,OAAO,IAAI,IAAI,QAAQ,IAAI,IAAI,IAAI,eAAe,CAAC,CAAC,CAAC,0BAA0B,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AACpG,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,SAAS;IACvB,MAAM,MAAM,GAAG;QACb,GAAG,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAC9C,iBAAiB,CAAC,IAAmC,CAAC,CACvD;QACD,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CACxB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CACrE;KACF,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC7B,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CACrC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,yBAAyB,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,CAChF,CAAC;IACF,MAAM,KAAK,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,CAC3E,CAAC,IAAI,EAAE,EAAE,CAAC,0BAA0B,IAAI,EAAE,CAC3C,CAAC;IACF,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,EAAE,GAAG,OAAO,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AACzD,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,OAAO,CAAC,IAAY,EAAE,IAAY;IAChD,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC;AAC9C,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { Place } from "./context.js";
2
+ import type { MethodInfo } from "./methods.js";
3
+ import type { Project } from "./project.js";
4
+ import type { Spot } from "./yaml.js";
5
+ /** How the editor shows documentation links. */
6
+ export interface HoverOptions {
7
+ /** A full URL for a docs path such as `/docs/reference/errors#SCHEMA`. */
8
+ docs?: (link: string) => string;
9
+ }
10
+ /** The described field at the spot, explained; undefined when nothing describes it. */
11
+ export declare function explainField(project: Project, place: Place, spot: Spot, environment: string | undefined, options: HoverOptions): string | undefined;
12
+ /** A method: what it does, which tables use it and what chose it, and its page. */
13
+ export declare function methodText(info: MethodInfo, { docs }: HoverOptions): string;
14
+ //# sourceMappingURL=explain.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explain.d.ts","sourceRoot":"","sources":["../src/explain.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAI1C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEtC,gDAAgD;AAChD,MAAM,WAAW,YAAY;IAC3B,0EAA0E;IAC1E,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;CACjC;AAED,uFAAuF;AACvF,wBAAgB,YAAY,CAC1B,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,IAAI,EACV,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,OAAO,EAAE,YAAY,GACpB,MAAM,GAAG,SAAS,CAOpB;AAED,mFAAmF;AACnF,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,IAAqB,EAAE,EAAE,YAAY,GAAG,MAAM,CAQ5F"}