@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
package/dist/hover.js ADDED
@@ -0,0 +1,172 @@
1
+ // Hover answers "why is this value what it is?": for a table, every step's
2
+ // method and each setting's value with the layer that set it; for a setting
3
+ // under `with`, that one value and where it was set; for any described field
4
+ // its meaning, values, default, example, usual place and documentation.
5
+ import {} from "@ingestron/definitions";
6
+ import { kindOf, placeAt } from "./context.js";
7
+ import { referenceAround, referenceValue } from "./references.js";
8
+ import { explainField, methodText } from "./explain.js";
9
+ import { methodAt, methodInfo } from "./methods.js";
10
+ import { resolved } from "./project.js";
11
+ import { schemaFor, schemasAt } from "./schema.js";
12
+ import { spotAt } from "./yaml.js";
13
+ import { targetOf } from "./target.js";
14
+ const actions = ["ingest", "transform", "store"];
15
+ /** Markdown for the hover at `offset` in `text`, the open text of `file`, or undefined. */
16
+ export function hoverAt(project, file, text, offset, environment, options = {}) {
17
+ const reference = referenceAround(text, offset);
18
+ const resolvedTo = reference && referenceValue(project, reference, environment);
19
+ const rest = explainAt(project, file, text, offset, environment, options);
20
+ return resolvedTo ? [resolvedTo, rest].filter(Boolean).join("\n\n") : rest;
21
+ }
22
+ function explainAt(project, file, text, offset, environment, options) {
23
+ const spot = safeSpot(text, offset);
24
+ if (!spot)
25
+ return undefined;
26
+ const tableName = tableAt(text, spot);
27
+ if (tableName)
28
+ return explainTable(project, file, tableName, environment);
29
+ const place = placeAt(file, text, offset);
30
+ const method = methodAt(project, place, spot, environment);
31
+ const info = method && methodInfo(project, method, environment);
32
+ if (info)
33
+ return methodText(info, options);
34
+ return explainSpot(project, file, text, place, spot, environment, options);
35
+ }
36
+ /** A setting's value and where it was set, the field, and a naming pattern's names. */
37
+ function explainSpot(project, file, text, place, spot, environment, options) {
38
+ const setting = settingAt(spot);
39
+ const key = spot.part === "key";
40
+ const parts = [
41
+ setting && explainSetting(project, file, setting, environment),
42
+ explainField(project, place, spot, environment, options) ??
43
+ (key ? describe(file, text, spot) : undefined),
44
+ key && spot.segments[0] === "naming" && namesIn(project, spot.segments[1], environment),
45
+ ];
46
+ return parts.filter(Boolean).join("\n\n") || undefined;
47
+ }
48
+ /** The names a naming pattern gives in the environment, such as every catalog. */
49
+ function namesIn(project, key, environment) {
50
+ const model = resolved(project, environment).model;
51
+ if (!model || !key)
52
+ return undefined;
53
+ const all = key === "pipeline" || key === "job"
54
+ ? [model.names[key]]
55
+ : model.tables.map((table) => table.fullName[key]);
56
+ const names = [...new Set(all.filter(Boolean))];
57
+ if (names.length === 0)
58
+ return undefined;
59
+ const shownNames = names.slice(0, 5).map((name) => `\`${name}\``);
60
+ const more = names.length > 5 ? ` and ${names.length - 5} more` : "";
61
+ return `In ${model.project.environment}: ${shownNames.join(", ")}${more}.`;
62
+ }
63
+ function safeSpot(text, offset) {
64
+ try {
65
+ return spotAt(text, offset);
66
+ }
67
+ catch {
68
+ return undefined;
69
+ }
70
+ }
71
+ /** A flow table's key or a transform's id names a table. */
72
+ function tableAt(text, spot) {
73
+ const kind = kindOf(text);
74
+ if (kind === "Flow" &&
75
+ spot.part === "key" &&
76
+ spot.segments.length === 2 &&
77
+ spot.segments[0] === "tables")
78
+ return spot.text;
79
+ if (kind === "Transform" && spot.part === "value" && spot.pointer === "/id")
80
+ return spot.text;
81
+ return undefined;
82
+ }
83
+ /** A key directly under a step's `with`: the action, the table (if written on one) and the setting. */
84
+ function settingAt(spot) {
85
+ const { segments } = spot;
86
+ if (spot.part !== "key" || segments.at(-2) !== "with")
87
+ return undefined;
88
+ const onTable = segments[0] === "tables" && segments.length === 5;
89
+ const action = onTable ? segments[2] : segments[0];
90
+ if (!actions.includes(action))
91
+ return undefined;
92
+ return { action: action, ...(onTable && { table: segments[1] }), key: segments.at(-1) };
93
+ }
94
+ function resolvedTables(project, file, environment) {
95
+ const { model } = resolved(project, environment);
96
+ return model?.tables.filter((table) => table.origin.file === file);
97
+ }
98
+ const unresolved = "The project has problems; fix them to see how this table resolves.";
99
+ function explainTable(project, file, name, environment) {
100
+ const table = resolvedTables(project, file, environment)?.find((item) => item.name === name);
101
+ if (!table)
102
+ return unresolved;
103
+ const { catalog, schema, table: tableName } = table.fullName;
104
+ const steps = actions.flatMap((action) => {
105
+ const step = table[action];
106
+ return step ? [stepText(action, step, table)] : [];
107
+ });
108
+ const target = table.endsAtFiles
109
+ ? `\`${targetOf(table)}\``
110
+ : `\`${catalog}\`.\`${schema}\`.\`${tableName}\``;
111
+ return [`**\`${name}\`** → ${target}`, ...steps].join("\n\n");
112
+ }
113
+ /** A step's method, then the settings something chose, then the pack's defaults on one line. */
114
+ function stepText(action, step, table) {
115
+ const entries = Object.entries(step.settings);
116
+ const isDefault = ([key]) => step.origins[key]?.layer === "pack";
117
+ const rows = entries
118
+ .filter((entry) => !isDefault(entry))
119
+ .map(([key, value]) => `| \`${key}\` | \`${shown(value)}\` | ${from(step.origins[key], table)} |`);
120
+ const chosen = rows.length > 0
121
+ ? `\n\n| Setting | Value | From |\n| --- | --- | --- |\n${rows.join("\n")}`
122
+ : "";
123
+ const defaults = entries.filter(isDefault).map(([key, value]) => `\`${key}: ${shown(value)}\``);
124
+ const rest = defaults.length > 0 ? `\n\nPack defaults: ${defaults.join(", ")}` : "";
125
+ return `**${action}**: \`${step.method}\` (${step.pack})${chosen}${rest}`;
126
+ }
127
+ function explainSetting(project, file, setting, environment) {
128
+ const tables = resolvedTables(project, file, environment);
129
+ if (!tables)
130
+ return unresolved;
131
+ const table = setting.table ? tables.find((item) => item.name === setting.table) : tables[0];
132
+ const step = table?.[setting.action];
133
+ if (!table || !step || !(setting.key in step.settings))
134
+ return undefined;
135
+ const value = shown(step.settings[setting.key]);
136
+ return `\`${setting.key}\` for \`${table.name}\`: \`${value}\`, set by ${from(step.origins[setting.key], table)}.`;
137
+ }
138
+ /** Which layer set a value, in words, with where it was written. */
139
+ function from(origin, table) {
140
+ if (!origin)
141
+ return "";
142
+ const where = origin.file ? ` (${origin.file}:${origin.line})` : "";
143
+ const layer = {
144
+ pack: "pack default",
145
+ standard: "standard",
146
+ platform: "platform",
147
+ rule: "standard rule",
148
+ definition: table.origin.kind === "Flow" ? "the flow" : "the transform",
149
+ table: "this table",
150
+ fixed: "standard, fixed",
151
+ }[origin.layer];
152
+ return `${layer}${where}`;
153
+ }
154
+ /** A value as definitions write it: YAML flow style. */
155
+ export function shown(value) {
156
+ if (typeof value === "string")
157
+ return value;
158
+ if (Array.isArray(value))
159
+ return `[${value.map(shown).join(", ")}]`;
160
+ if (value && typeof value === "object")
161
+ return `{ ${Object.entries(value)
162
+ .map(([key, item]) => `${key}: ${shown(item)}`)
163
+ .join(", ")} }`;
164
+ return String(value);
165
+ }
166
+ function describe(file, text, spot) {
167
+ const schema = schemaFor(file, kindOf(text));
168
+ if (!schema || !spot)
169
+ return undefined;
170
+ return schemasAt(schema, spot.segments).find((item) => item.description)?.description;
171
+ }
172
+ //# sourceMappingURL=hover.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hover.js","sourceRoot":"","sources":["../src/hover.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ export { annotationsIn, generatedLenses, type Annotation, type GeneratedLens, } from "./annotations.js";
2
+ export { completionsAt, type Suggestion } from "./completion.js";
3
+ export { problems, type Problem } from "./diagnostics.js";
4
+ export { codeDocs, docsLinks, docsUrl } from "./docs.js";
5
+ export { quickFixes, type QuickFix } from "./fixes.js";
6
+ export { moveSetting } from "./moves.js";
7
+ export { fixAll } from "./fix-all.js";
8
+ export { compareEnvironments, platformRequest } from "./platform-request.js";
9
+ export { type HoverOptions } from "./explain.js";
10
+ export { hoverAt } from "./hover.js";
11
+ export { definitionAt, referencesAt } from "./navigation.js";
12
+ export { fileMoveEdits, renameAt, renameProblem } from "./rename.js";
13
+ export { generatedFiles, generatedForTable, tableAtCursor, type Generated } from "./preview.js";
14
+ export { referenceAt, type ProblemEntry, type ReferenceEntry } from "./reference.js";
15
+ export { projectSymbols, type ProjectSymbol } from "./symbols.js";
16
+ export { referenceForDocs } from "./docs-entries.js";
17
+ export { inProject, openProject, projectFolderOf, type Project } from "./project.js";
18
+ export { positionAt, type Position } from "./yaml.js";
19
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,aAAa,EACb,eAAe,EACf,KAAK,UAAU,EACf,KAAK,aAAa,GACnB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,KAAK,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7E,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,aAAa,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAChG,OAAO,EAAE,WAAW,EAAE,KAAK,YAAY,EAAE,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrF,OAAO,EAAE,cAAc,EAAE,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,eAAe,EAAE,KAAK,OAAO,EAAE,MAAM,cAAc,CAAC;AACrF,OAAO,EAAE,UAAU,EAAE,KAAK,QAAQ,EAAE,MAAM,WAAW,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,22 @@
1
+ // Public API of @ingestron/authoring: what an editor needs to help write an
2
+ // Ingestron project, as plain functions over the project's files. The VS Code
3
+ // extension adapts these to its API; another editor can do the same.
4
+ export { annotationsIn, generatedLenses, } from "./annotations.js";
5
+ export { completionsAt } from "./completion.js";
6
+ export { problems } from "./diagnostics.js";
7
+ export { codeDocs, docsLinks, docsUrl } from "./docs.js";
8
+ export { quickFixes } from "./fixes.js";
9
+ export { moveSetting } from "./moves.js";
10
+ export { fixAll } from "./fix-all.js";
11
+ export { compareEnvironments, platformRequest } from "./platform-request.js";
12
+ export {} from "./explain.js";
13
+ export { hoverAt } from "./hover.js";
14
+ export { definitionAt, referencesAt } from "./navigation.js";
15
+ export { fileMoveEdits, renameAt, renameProblem } from "./rename.js";
16
+ export { generatedFiles, generatedForTable, tableAtCursor } from "./preview.js";
17
+ export { referenceAt } from "./reference.js";
18
+ export { projectSymbols } from "./symbols.js";
19
+ export { referenceForDocs } from "./docs-entries.js";
20
+ export { inProject, openProject, projectFolderOf } from "./project.js";
21
+ export { positionAt } from "./yaml.js";
22
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,8EAA8E;AAC9E,qEAAqE;AACrE,OAAO,EACL,aAAa,EACb,eAAe,GAGhB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAmB,MAAM,iBAAiB,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAgB,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzD,OAAO,EAAE,UAAU,EAAiB,MAAM,YAAY,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7E,OAAO,EAAqB,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,aAAa,EAAkB,MAAM,cAAc,CAAC;AAChG,OAAO,EAAE,WAAW,EAA0C,MAAM,gBAAgB,CAAC;AACrF,OAAO,EAAE,cAAc,EAAsB,MAAM,cAAc,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,eAAe,EAAgB,MAAM,cAAc,CAAC;AACrF,OAAO,EAAE,UAAU,EAAiB,MAAM,WAAW,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { type Suggestion } from "./completion.js";
2
+ import type { Project } from "./project.js";
3
+ /** Suggestions when the text before the cursor is inside `${` or `{{ tables.`. */
4
+ export declare function inlineCompletions(project: Project, before: string, file?: string): Suggestion[] | undefined;
5
+ /** The names a naming pattern can use inside `{{ }}`. */
6
+ export declare function patternNames(): Suggestion[];
7
+ //# sourceMappingURL=inline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inline.d.ts","sourceRoot":"","sources":["../src/inline.ts"],"names":[],"mappings":"AAKA,OAAO,EAAS,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAa5C,kFAAkF;AAClF,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,MAAM,EACd,IAAI,SAAK,GACR,UAAU,EAAE,GAAG,SAAS,CAmB1B;AAgBD,yDAAyD;AACzD,wBAAgB,YAAY,IAAI,UAAU,EAAE,CAM3C"}
package/dist/inline.js ADDED
@@ -0,0 +1,57 @@
1
+ // Completion inside text: after `${` the forms a reference takes, after
2
+ // `${values.` the project's values, and inside a naming pattern's `{{ }}` the
3
+ // names a pattern can use. A transform's inputs are in inputs.ts.
4
+ import { nameVariables } from "@ingestron/definitions";
5
+ import { parse } from "yaml";
6
+ import { names } from "./completion.js";
7
+ /** What can follow `${`, as the definitions' syntax allows. */
8
+ const referenceForms = {
9
+ "values.": "A value from project.yaml, for the environment.",
10
+ "environment.name": "The selected environment's name.",
11
+ "project.id": "The project's id.",
12
+ "project.name": "The project's name.",
13
+ "file:": "Another file: YAML is read as data, anything else as text.",
14
+ "envvar:": "An environment variable of the machine that runs Ingestron.",
15
+ "secret:": "A secret's name, resolved by the platform, never written out.",
16
+ };
17
+ /** Suggestions when the text before the cursor is inside `${` or `{{ tables.`. */
18
+ export function inlineCompletions(project, before, file = "") {
19
+ // project.yaml's values may not refer to values.
20
+ const inManifest = file === "project.yaml";
21
+ if (/\$\{values\.\w*$/.test(before))
22
+ return inManifest ? [] : names(project, "value:", "reference");
23
+ const field = /\$\{(project|environment)\.\w*$/.exec(before)?.[1];
24
+ const forms = Object.entries(referenceForms).filter(([label]) => defined(project, label) && !(inManifest && label === "values."));
25
+ if (field)
26
+ return forms
27
+ .filter(([label]) => label.startsWith(`${field}.`))
28
+ .map(([label, documentation]) => ({
29
+ label: label.slice(field.length + 1),
30
+ kind: "reference",
31
+ documentation,
32
+ }));
33
+ if (!/\$\{\w*$/.test(before))
34
+ return undefined;
35
+ return forms.map(([label, documentation]) => ({ label, kind: "reference", documentation }));
36
+ }
37
+ /** `project.name` only when project.yaml has a name, `values.` only when it has values. */
38
+ function defined(project, label) {
39
+ if (label !== "project.name" && label !== "values.")
40
+ return true;
41
+ try {
42
+ const manifest = parse(project.files.read("project.yaml") ?? "");
43
+ return label === "values." ? Boolean(manifest?.values) : manifest?.name !== undefined;
44
+ }
45
+ catch {
46
+ return true;
47
+ }
48
+ }
49
+ /** The names a naming pattern can use inside `{{ }}`. */
50
+ export function patternNames() {
51
+ return Object.entries(nameVariables).map(([label, documentation]) => ({
52
+ label,
53
+ kind: "reference",
54
+ documentation,
55
+ }));
56
+ }
57
+ //# sourceMappingURL=inline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inline.js","sourceRoot":"","sources":["../src/inline.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { Suggestion } from "./completion.js";
2
+ import type { Project } from "./project.js";
3
+ /** Suggestions after `{{ tables.` or `tables["`, or undefined elsewhere. */
4
+ export declare function inputCompletions(project: Project, file: string, before: string): Suggestion[] | undefined;
5
+ //# sourceMappingURL=inputs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inputs.d.ts","sourceRoot":"","sources":["../src/inputs.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAGlD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAU5C,4EAA4E;AAC5E,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,GACb,UAAU,EAAE,GAAG,SAAS,CAwB1B"}
package/dist/inputs.js ADDED
@@ -0,0 +1,72 @@
1
+ import { positioned } from "./fixes.js";
2
+ import { occurrences } from "./navigation.js";
3
+ import { parse } from "yaml";
4
+ /** Suggestions after `{{ tables.` or `tables["`, or undefined elsewhere. */
5
+ export function inputCompletions(project, file, before) {
6
+ const sql = /\{\{\s*tables\.\w*$/.test(before);
7
+ const python = /\btables\[\s*["']\w*$/.test(before);
8
+ if (!sql && !python)
9
+ return undefined;
10
+ const transforms = transformsOf(project);
11
+ const owner = transforms.find((item) => item.file === file) ??
12
+ transforms.find((item) => codeFiles(project, item.file).includes(file));
13
+ if (!owner)
14
+ return python ? undefined : tables(project).map(reference);
15
+ const excluded = new Set([owner.id, ...dependents(transforms, owner.id)]);
16
+ const others = tables(project).filter((name) => !owner.inputs.includes(name) && !excluded.has(name));
17
+ return [
18
+ ...owner.inputs.map((name) => ({ ...reference(name), detail: "input" })),
19
+ ...others.map((name) => ({
20
+ ...reference(name),
21
+ detail: "not an input yet: adds it to inputs",
22
+ edits: positioned(project, {
23
+ title: `Add ${name} to inputs`,
24
+ edits: [{ file: owner.file, pointer: "/inputs/-", set: name }],
25
+ }),
26
+ })),
27
+ ];
28
+ }
29
+ function reference(label) {
30
+ return { label, kind: "reference" };
31
+ }
32
+ /** Every table name the project defines, in order. */
33
+ function tables(project) {
34
+ const names = occurrences(project)
35
+ .filter((item) => item.definition && item.symbol.startsWith("table:"))
36
+ .map((item) => item.symbol.slice("table:".length));
37
+ return [...new Set(names)];
38
+ }
39
+ /** Every Transform document, read from its YAML. */
40
+ function transformsOf(project) {
41
+ return occurrences(project)
42
+ .filter((item) => item.definition && item.symbol.startsWith("doc:Transform:"))
43
+ .flatMap((item) => {
44
+ try {
45
+ const data = parse(project.files.read(item.file) ?? "");
46
+ const inputs = Array.isArray(data?.inputs) ? data.inputs.map(String) : [];
47
+ return [{ file: item.file, id: item.symbol.slice("doc:Transform:".length), inputs }];
48
+ }
49
+ catch {
50
+ return [];
51
+ }
52
+ });
53
+ }
54
+ /** The files a transform includes with `${file:…}`, such as its SQL or Python code. */
55
+ function codeFiles(project, file) {
56
+ return occurrences(project)
57
+ .filter((item) => item.file === file && item.symbol.startsWith("file:"))
58
+ .map((item) => item.symbol.slice("file:".length));
59
+ }
60
+ /** The transforms that read `id`, directly or through others. */
61
+ function dependents(transforms, id) {
62
+ const found = new Set();
63
+ const queue = [id];
64
+ for (let next = queue.shift(); next !== undefined; next = queue.shift())
65
+ for (const item of transforms)
66
+ if (item.inputs.includes(next) && !found.has(item.id)) {
67
+ found.add(item.id);
68
+ queue.push(item.id);
69
+ }
70
+ return [...found];
71
+ }
72
+ //# sourceMappingURL=inputs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inputs.js","sourceRoot":"","sources":["../src/inputs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { Project } from "./project.js";
2
+ import type { Suggestion } from "./suggestion.js";
3
+ /** The standard's packs' methods for an action; a flow's store may also be `none`. */
4
+ export declare function methodsFor(project: Project, action: string, flow: boolean): Suggestion[];
5
+ //# sourceMappingURL=method-suggestions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"method-suggestions.d.ts","sourceRoot":"","sources":["../src/method-suggestions.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD,sFAAsF;AACtF,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,UAAU,EAAE,CAaxF"}
@@ -0,0 +1,24 @@
1
+ // Method names to complete after `uses`, from the standard's packs.
2
+ import { NO_STORE } from "@ingestron/definitions";
3
+ import { standardPacks } from "./smart.js";
4
+ /** The standard's packs' methods for an action; a flow's store may also be `none`. */
5
+ export function methodsFor(project, action, flow) {
6
+ const none = flow && action === "store" ? [noStore] : [];
7
+ return [
8
+ ...standardPacks(project)
9
+ .flatMap((pack) => Object.entries(pack.methods))
10
+ .filter(([, method]) => method.action === action)
11
+ .map(([label, method]) => ({
12
+ label,
13
+ kind: "method",
14
+ documentation: method.description,
15
+ })),
16
+ ...none,
17
+ ].sort((a, b) => a.label.localeCompare(b.label));
18
+ }
19
+ const noStore = {
20
+ label: NO_STORE,
21
+ kind: "method",
22
+ documentation: "End the flow at the files ingest lands: no store step.",
23
+ };
24
+ //# sourceMappingURL=method-suggestions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"method-suggestions.js","sourceRoot":"","sources":["../src/method-suggestions.ts"],"names":[],"mappings":"AAAA,oEAAoE;AACpE,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAElD,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAG3C,sFAAsF;AACtF,MAAM,UAAU,UAAU,CAAC,OAAgB,EAAE,MAAc,EAAE,IAAa;IACxE,MAAM,IAAI,GAAG,IAAI,IAAI,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACzD,OAAO;QACL,GAAG,aAAa,CAAC,OAAO,CAAC;aACtB,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;aAC/C,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC;aAChD,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;YACzB,KAAK;YACL,IAAI,EAAE,QAAiB;YACvB,aAAa,EAAE,MAAM,CAAC,WAAW;SAClC,CAAC,CAAC;QACL,GAAG,IAAI;KACR,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,OAAO,GAAe;IAC1B,KAAK,EAAE,QAAQ;IACf,IAAI,EAAE,QAAQ;IACd,aAAa,EAAE,wDAAwD;CACxE,CAAC"}
@@ -0,0 +1,26 @@
1
+ import { type ChosenBy, type FieldInfo } from "@ingestron/definitions";
2
+ import type { Place } from "./context.js";
3
+ import { type Project } from "./project.js";
4
+ import type { Spot } from "./yaml.js";
5
+ /** What the editor shows about one method. */
6
+ export interface MethodInfo {
7
+ id: string;
8
+ pack: string;
9
+ action: string;
10
+ description: string;
11
+ facts: {
12
+ label: string;
13
+ value: string;
14
+ }[];
15
+ settings: FieldInfo[];
16
+ /** Each table that uses it in the environment, and what chose it, or why that is not known. */
17
+ usedBy: string[];
18
+ docs: string;
19
+ }
20
+ /** The method named at the spot, if any. */
21
+ export declare function methodAt(project: Project, place: Place, spot: Spot, environment: string | undefined): string | undefined;
22
+ /** What the method does, its settings, and its use in the project. */
23
+ export declare function methodInfo(project: Project, id: string, environment: string | undefined): MethodInfo | undefined;
24
+ /** How a method was chosen, in words. */
25
+ export declare function chosenText({ by, when, pack, file, line }: ChosenBy): string;
26
+ //# sourceMappingURL=methods.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"methods.d.ts","sourceRoot":"","sources":["../src/methods.ts"],"names":[],"mappings":"AAIA,OAAO,EAAmB,KAAK,QAAQ,EAAE,KAAK,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxF,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAY,KAAK,OAAO,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEtC,8CAA8C;AAC9C,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC1C,QAAQ,EAAE,SAAS,EAAE,CAAC;IACtB,+FAA+F;IAC/F,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,4CAA4C;AAC5C,wBAAgB,QAAQ,CACtB,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,IAAI,EACV,WAAW,EAAE,MAAM,GAAG,SAAS,GAC9B,MAAM,GAAG,SAAS,CAKpB;AAED,sEAAsE;AACtE,wBAAgB,UAAU,CACxB,OAAO,EAAE,OAAO,EAChB,EAAE,EAAE,MAAM,EACV,WAAW,EAAE,MAAM,GAAG,SAAS,GAC9B,UAAU,GAAG,SAAS,CAqBxB;AAmBD,yCAAyC;AACzC,wBAAgB,UAAU,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,QAAQ,GAAG,MAAM,CAa3E"}
@@ -0,0 +1,67 @@
1
+ // A method at a place: its name under settings or fixed, or the value of a
2
+ // `uses` or a rule's `use`. With what it does, its settings, and which tables
3
+ // use it and what chose it, so a method that no file names is explained.
4
+ import { packs } from "@ingestron/cli";
5
+ import { methodReference } from "@ingestron/definitions";
6
+ import { settingsAt } from "./fields.js";
7
+ import { resolved } from "./project.js";
8
+ /** The method named at the spot, if any. */
9
+ export function methodAt(project, place, spot, environment) {
10
+ if (spot.part === "value" && /^(uses|use)$/.test(spot.segments.at(-1) ?? ""))
11
+ return spot.text;
12
+ if (spot.part !== "key")
13
+ return undefined;
14
+ const settings = settingsAt(project, place, spot.segments, environment);
15
+ return settings && settings.rest.length === 0 ? settings.method : undefined;
16
+ }
17
+ /** What the method does, its settings, and its use in the project. */
18
+ export function methodInfo(project, id, environment) {
19
+ const pack = packs.find((candidate) => candidate.methods[id]);
20
+ const method = pack?.methods[id];
21
+ if (!pack || !method)
22
+ return undefined;
23
+ const facts = [
24
+ method.connectors && { label: "Reads", value: method.connectors.join(", ") },
25
+ method.connectivity && { label: "Connectivity", value: method.connectivity.join(", ") },
26
+ method.accepts && { label: "Accepts", value: method.accepts.join(", ") },
27
+ { label: "Hands over", value: method.produces },
28
+ ].filter((fact) => Boolean(fact));
29
+ const usedBy = usesOf(project, id, environment);
30
+ return {
31
+ id,
32
+ pack: pack.id,
33
+ action: method.action,
34
+ description: method.description,
35
+ facts,
36
+ settings: methodReference(pack, id).filter((field) => field.path.length === 1),
37
+ docs: `/docs/reference/packs/${pack.id}#${id}`,
38
+ usedBy: usedBy ?? ["Fix the project's problems to see which tables use it."],
39
+ };
40
+ }
41
+ function usesOf(project, id, environment) {
42
+ const { model } = resolved(project, environment);
43
+ if (!model)
44
+ return undefined;
45
+ return model.tables.flatMap((table) => ["ingest", "transform", "store"].flatMap((action) => {
46
+ const step = table[action];
47
+ return step?.method === id
48
+ ? [`\`${table.name}\` (${action}): chosen by ${chosenText(step.chosenBy)}`]
49
+ : [];
50
+ }));
51
+ }
52
+ /** How a method was chosen, in words. */
53
+ export function chosenText({ by, when, pack, file, line }) {
54
+ const facts = Object.entries(when ?? {})
55
+ .map(([key, value]) => `\`${key}: ${String(value)}\``)
56
+ .join(" and ");
57
+ const where = file ? ` (${file}:${line})` : "";
58
+ const words = {
59
+ definition: "its own `uses`",
60
+ "standard-rule": `the standard's rule for ${facts}`,
61
+ "standard-default": "the standard's default",
62
+ "pack-rule": `the ${pack} pack's rule for ${facts}`,
63
+ "pack-default": `the ${pack} pack's default`,
64
+ };
65
+ return `${words[by]}${where}`;
66
+ }
67
+ //# sourceMappingURL=methods.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"methods.js","sourceRoot":"","sources":["../src/methods.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,8EAA8E;AAC9E,yEAAyE;AACzE,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,eAAe,EAAiC,MAAM,wBAAwB,CAAC;AAExF,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAgB,MAAM,cAAc,CAAC;AAgBtD,4CAA4C;AAC5C,MAAM,UAAU,QAAQ,CACtB,OAAgB,EAChB,KAAY,EACZ,IAAU,EACV,WAA+B;IAE/B,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC;IAC/F,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK;QAAE,OAAO,SAAS,CAAC;IAC1C,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IACxE,OAAO,QAAQ,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;AAC9E,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,UAAU,CACxB,OAAgB,EAChB,EAAU,EACV,WAA+B;IAE/B,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9D,MAAM,MAAM,GAAG,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;IACjC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IACvC,MAAM,KAAK,GAAG;QACZ,MAAM,CAAC,UAAU,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QAC5E,MAAM,CAAC,YAAY,IAAI,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QACvF,MAAM,CAAC,OAAO,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QACxE,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE;KAChD,CAAC,MAAM,CAAC,CAAC,IAAI,EAA4C,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAC5E,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,EAAE,EAAE,EAAE,WAAW,CAAC,CAAC;IAChD,OAAO;QACL,EAAE;QACF,IAAI,EAAE,IAAI,CAAC,EAAE;QACb,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,KAAK;QACL,QAAQ,EAAE,eAAe,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC;QAC9E,IAAI,EAAE,yBAAyB,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE;QAC9C,MAAM,EAAE,MAAM,IAAI,CAAC,wDAAwD,CAAC;KAC7E,CAAC;AACJ,CAAC;AAED,SAAS,MAAM,CACb,OAAgB,EAChB,EAAU,EACV,WAA+B;IAE/B,MAAM,EAAE,KAAK,EAAE,GAAG,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IACjD,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAC7B,OAAO,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CACnC,CAAC,QAAQ,EAAE,WAAW,EAAE,OAAO,CAAW,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;QAC7D,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;QAC3B,OAAO,IAAI,EAAE,MAAM,KAAK,EAAE;YACxB,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,IAAI,OAAO,MAAM,gBAAgB,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC3E,CAAC,CAAC,EAAE,CAAC;IACT,CAAC,CAAC,CACH,CAAC;AACJ,CAAC;AAED,yCAAyC;AACzC,MAAM,UAAU,UAAU,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAY;IACjE,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC;SACrC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,GAAG,KAAK,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;SACrD,IAAI,CAAC,OAAO,CAAC,CAAC;IACjB,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/C,MAAM,KAAK,GAAG;QACZ,UAAU,EAAE,gBAAgB;QAC5B,eAAe,EAAE,2BAA2B,KAAK,EAAE;QACnD,kBAAkB,EAAE,wBAAwB;QAC5C,WAAW,EAAE,OAAO,IAAI,oBAAoB,KAAK,EAAE;QACnD,cAAc,EAAE,OAAO,IAAI,iBAAiB;KAC7C,CAAC;IACF,OAAO,GAAG,KAAK,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC;AAChC,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { type QuickFix } from "./fixes.js";
2
+ import { type Project } from "./project.js";
3
+ /** The move for the setting whose key is at `offset`, when it is written outside where it belongs. */
4
+ export declare function moveSetting(project: Project, file: string, text: string, offset: number, environment: string | undefined): QuickFix[];
5
+ //# sourceMappingURL=moves.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"moves.d.ts","sourceRoot":"","sources":["../src/moves.ts"],"names":[],"mappings":"AAOA,OAAO,EAAc,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAC;AACvD,OAAO,EAAyB,KAAK,OAAO,EAAE,MAAM,cAAc,CAAC;AAMnE,sGAAsG;AACtG,wBAAgB,WAAW,CACzB,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,GAAG,SAAS,GAC9B,QAAQ,EAAE,CAkBZ"}