@ingestron/authoring 0.0.0-stage → 1.0.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.
- package/LICENSE +202 -0
- package/NOTICE +4 -0
- package/README.md +17 -2
- package/dist/annotations.d.ts +24 -0
- package/dist/annotations.d.ts.map +1 -0
- package/dist/annotations.js +131 -0
- package/dist/annotations.js.map +1 -0
- package/dist/completion.d.ts +8 -0
- package/dist/completion.d.ts.map +1 -0
- package/dist/completion.js +193 -0
- package/dist/completion.js.map +1 -0
- package/dist/context.d.ts +36 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +98 -0
- package/dist/context.js.map +1 -0
- package/dist/contract-uses.d.ts +8 -0
- package/dist/contract-uses.d.ts.map +1 -0
- package/dist/contract-uses.js +40 -0
- package/dist/contract-uses.js.map +1 -0
- package/dist/diagnostics.d.ts +20 -0
- package/dist/diagnostics.d.ts.map +1 -0
- package/dist/diagnostics.js +143 -0
- package/dist/diagnostics.js.map +1 -0
- package/dist/docs-entries.d.ts +5 -0
- package/dist/docs-entries.d.ts.map +1 -0
- package/dist/docs-entries.js +109 -0
- package/dist/docs-entries.js.map +1 -0
- package/dist/docs.d.ts +7 -0
- package/dist/docs.d.ts.map +1 -0
- package/dist/docs.js +23 -0
- package/dist/docs.js.map +1 -0
- package/dist/explain.d.ts +14 -0
- package/dist/explain.d.ts.map +1 -0
- package/dist/explain.js +55 -0
- package/dist/explain.js.map +1 -0
- package/dist/fields.d.ts +19 -0
- package/dist/fields.d.ts.map +1 -0
- package/dist/fields.js +151 -0
- package/dist/fields.js.map +1 -0
- package/dist/fix-all.d.ts +5 -0
- package/dist/fix-all.d.ts.map +1 -0
- package/dist/fix-all.js +23 -0
- package/dist/fix-all.js.map +1 -0
- package/dist/fixed.d.ts +6 -0
- package/dist/fixed.d.ts.map +1 -0
- package/dist/fixed.js +43 -0
- package/dist/fixed.js.map +1 -0
- package/dist/fixes.d.ts +33 -0
- package/dist/fixes.d.ts.map +1 -0
- package/dist/fixes.js +99 -0
- package/dist/fixes.js.map +1 -0
- package/dist/flow.d.ts +16 -0
- package/dist/flow.d.ts.map +1 -0
- package/dist/flow.js +62 -0
- package/dist/flow.js.map +1 -0
- package/dist/hover.d.ts +7 -0
- package/dist/hover.d.ts.map +1 -0
- package/dist/hover.js +168 -0
- package/dist/hover.js.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -0
- package/dist/inline.d.ts +7 -0
- package/dist/inline.d.ts.map +1 -0
- package/dist/inline.js +57 -0
- package/dist/inline.js.map +1 -0
- package/dist/inputs.d.ts +5 -0
- package/dist/inputs.d.ts.map +1 -0
- package/dist/inputs.js +72 -0
- package/dist/inputs.js.map +1 -0
- package/dist/methods.d.ts +26 -0
- package/dist/methods.d.ts.map +1 -0
- package/dist/methods.js +67 -0
- package/dist/methods.js.map +1 -0
- package/dist/moves.d.ts +5 -0
- package/dist/moves.d.ts.map +1 -0
- package/dist/moves.js +82 -0
- package/dist/moves.js.map +1 -0
- package/dist/navigation.d.ts +24 -0
- package/dist/navigation.d.ts.map +1 -0
- package/dist/navigation.js +176 -0
- package/dist/navigation.js.map +1 -0
- package/dist/platform-request.d.ts +6 -0
- package/dist/platform-request.d.ts.map +1 -0
- package/dist/platform-request.js +13 -0
- package/dist/platform-request.js.map +1 -0
- package/dist/preview.d.ts +20 -0
- package/dist/preview.d.ts.map +1 -0
- package/dist/preview.js +51 -0
- package/dist/preview.js.map +1 -0
- package/dist/problems-at.d.ts +17 -0
- package/dist/problems-at.d.ts.map +1 -0
- package/dist/problems-at.js +32 -0
- package/dist/problems-at.js.map +1 -0
- package/dist/project.d.ts +27 -0
- package/dist/project.d.ts.map +1 -0
- package/dist/project.js +96 -0
- package/dist/project.js.map +1 -0
- package/dist/reference.d.ts +50 -0
- package/dist/reference.d.ts.map +1 -0
- package/dist/reference.js +152 -0
- package/dist/reference.js.map +1 -0
- package/dist/references.d.ts +8 -0
- package/dist/references.d.ts.map +1 -0
- package/dist/references.js +68 -0
- package/dist/references.js.map +1 -0
- package/dist/rename.d.ts +22 -0
- package/dist/rename.d.ts.map +1 -0
- package/dist/rename.js +64 -0
- package/dist/rename.js.map +1 -0
- package/dist/schema.d.ts +23 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +46 -0
- package/dist/schema.js.map +1 -0
- package/dist/skeletons.d.ts +7 -0
- package/dist/skeletons.d.ts.map +1 -0
- package/dist/skeletons.js +107 -0
- package/dist/skeletons.js.map +1 -0
- package/dist/smart.d.ts +24 -0
- package/dist/smart.d.ts.map +1 -0
- package/dist/smart.js +113 -0
- package/dist/smart.js.map +1 -0
- package/dist/suggestion.d.ts +23 -0
- package/dist/suggestion.d.ts.map +1 -0
- package/dist/suggestion.js +2 -0
- package/dist/suggestion.js.map +1 -0
- package/dist/symbols.d.ts +12 -0
- package/dist/symbols.d.ts.map +1 -0
- package/dist/symbols.js +21 -0
- package/dist/symbols.js.map +1 -0
- package/dist/value-help.d.ts +7 -0
- package/dist/value-help.d.ts.map +1 -0
- package/dist/value-help.js +206 -0
- package/dist/value-help.js.map +1 -0
- package/dist/yaml.d.ts +33 -0
- package/dist/yaml.d.ts.map +1 -0
- package/dist/yaml.js +179 -0
- package/dist/yaml.js.map +1 -0
- package/package.json +58 -3
package/dist/explain.js
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { contractUses } from "./contract-uses.js";
|
|
2
|
+
import { fieldAt } from "./fields.js";
|
|
3
|
+
import { shown } from "./hover.js";
|
|
4
|
+
/** The described field at the spot, explained; undefined when nothing describes it. */
|
|
5
|
+
export function explainField(project, place, spot, environment, options) {
|
|
6
|
+
const field = fieldAt(project, place, spot.segments, environment);
|
|
7
|
+
if (!field)
|
|
8
|
+
return undefined;
|
|
9
|
+
const packs = place.kind === "DataContract" ? contractUses(project, field.path.join("."), environment) : [];
|
|
10
|
+
const inProject = packs.map(({ pack, status, text }) => `- **${pack}**: ${status}. ${text}`);
|
|
11
|
+
return [fieldText(field, spot, options), inProject.join("\n")].filter(Boolean).join("\n\n");
|
|
12
|
+
}
|
|
13
|
+
/** A method: what it does, which tables use it and what chose it, and its page. */
|
|
14
|
+
export function methodText(info, { docs = (link) => link }) {
|
|
15
|
+
const used = info.usedBy.length > 0
|
|
16
|
+
? `Used by:\n${info.usedBy.map((use) => `- ${use}`).join("\n")}`
|
|
17
|
+
: "No table uses it in this environment.";
|
|
18
|
+
return [`**${info.id}**: ${info.description}`, used, `[Reference](${docs(info.docs)})`]
|
|
19
|
+
.filter(Boolean)
|
|
20
|
+
.join("\n\n");
|
|
21
|
+
}
|
|
22
|
+
const homes = {
|
|
23
|
+
platform: "Usually set in the platform.",
|
|
24
|
+
standard: "Usually set in the standard.",
|
|
25
|
+
definition: "Usually set in a flow or transform.",
|
|
26
|
+
};
|
|
27
|
+
/** A described field: on its key everything, on its value that value's meaning. */
|
|
28
|
+
function fieldText(field, spot, { docs = (link) => link }) {
|
|
29
|
+
const chosen = spot.part === "value"
|
|
30
|
+
? field.values?.find((item) => String(item.value) === spot.text)
|
|
31
|
+
: undefined;
|
|
32
|
+
const body = chosen
|
|
33
|
+
? [`\`${spot.text}\`: ${chosen.description ?? ""}`.trim()]
|
|
34
|
+
: aboutField(field);
|
|
35
|
+
return [
|
|
36
|
+
`**${field.name}**: ${field.description ?? ""}`.trim(),
|
|
37
|
+
...body,
|
|
38
|
+
`[Reference](${docs(field.docs)})`,
|
|
39
|
+
]
|
|
40
|
+
.filter(Boolean)
|
|
41
|
+
.join("\n\n");
|
|
42
|
+
}
|
|
43
|
+
/** Every allowed value with its meaning, the default, an example and where it is usually set. */
|
|
44
|
+
function aboutField(field) {
|
|
45
|
+
const values = (field.values ?? [])
|
|
46
|
+
.filter((item) => item.description)
|
|
47
|
+
.map((item) => `- \`${String(item.value)}\`: ${item.description}`);
|
|
48
|
+
return [
|
|
49
|
+
values.join("\n"),
|
|
50
|
+
field.default !== undefined ? `Default: \`${shown(field.default)}\`.` : undefined,
|
|
51
|
+
field.example !== undefined ? `For example: \`${shown(field.example)}\`.` : undefined,
|
|
52
|
+
field.placement && homes[field.placement],
|
|
53
|
+
];
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=explain.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"explain.js","sourceRoot":"","sources":["../src/explain.ts"],"names":[],"mappings":"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"}
|
package/dist/fields.d.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type Connector, type FieldInfo } from "@ingestron/definitions";
|
|
2
|
+
import type { Place } from "./context.js";
|
|
3
|
+
import { type Project } from "./project.js";
|
|
4
|
+
/** A method's settings at a place: the method and the keys below its settings. */
|
|
5
|
+
export interface SettingsAt {
|
|
6
|
+
method: string;
|
|
7
|
+
rest: string[];
|
|
8
|
+
}
|
|
9
|
+
/** The method whose settings `path` is in, if any. */
|
|
10
|
+
export declare function settingsAt(project: Project, place: Place, path: string[], environment: string | undefined): SettingsAt | undefined;
|
|
11
|
+
/** Every setting of a method, from the pack that has it. */
|
|
12
|
+
export declare function methodFields(method: string): FieldInfo[];
|
|
13
|
+
/** The description of the field at `path`, or undefined when nothing describes it. */
|
|
14
|
+
export declare function fieldAt(project: Project, place: Place, path: string[], environment: string | undefined): FieldInfo | undefined;
|
|
15
|
+
/** The connector a Connection document names, from the pack that reads it. */
|
|
16
|
+
export declare function connectorOf(place: Place, project?: Project, environment?: string): Connector | undefined;
|
|
17
|
+
/** The fields directly inside the mapping at `path`. */
|
|
18
|
+
export declare function fieldsIn(project: Project, place: Place, path: string[], environment: string | undefined): FieldInfo[] | undefined;
|
|
19
|
+
//# sourceMappingURL=fields.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fields.d.ts","sourceRoot":"","sources":["../src/fields.ts"],"names":[],"mappings":"AAKA,OAAO,EAIL,KAAK,SAAS,EACd,KAAK,SAAS,EACf,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAyB,KAAK,OAAO,EAAE,MAAM,cAAc,CAAC;AAEnE,kFAAkF;AAClF,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,sDAAsD;AACtD,wBAAgB,UAAU,CACxB,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,MAAM,EAAE,EACd,WAAW,EAAE,MAAM,GAAG,SAAS,GAC9B,UAAU,GAAG,SAAS,CAMxB;AAuCD,4DAA4D;AAC5D,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,CAGxD;AAED,sFAAsF;AACtF,wBAAgB,OAAO,CACrB,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,MAAM,EAAE,EACd,WAAW,EAAE,MAAM,GAAG,SAAS,GAC9B,SAAS,GAAG,SAAS,CAQvB;AAED,8EAA8E;AAC9E,wBAAgB,WAAW,CACzB,KAAK,EAAE,KAAK,EACZ,OAAO,CAAC,EAAE,OAAO,EACjB,WAAW,CAAC,EAAE,MAAM,GACnB,SAAS,GAAG,SAAS,CAqBvB;AAoBD,wDAAwD;AACxD,wBAAgB,QAAQ,CACtB,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,MAAM,EAAE,EACd,WAAW,EAAE,MAAM,GAAG,SAAS,GAC9B,SAAS,EAAE,GAAG,SAAS,CASzB"}
|
package/dist/fields.js
ADDED
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
// The description of the field at a place: a document's own field, or a
|
|
2
|
+
// method setting wherever settings are written (the standard's settings and
|
|
3
|
+
// fixed, the platform's settings, a rule's `with`, a flow's or table's `with`).
|
|
4
|
+
import { standardPacks } from "./smart.js";
|
|
5
|
+
import { packs } from "@ingestron/cli";
|
|
6
|
+
import { documentReference, methodReference, referenceKinds, } from "@ingestron/definitions";
|
|
7
|
+
import { parse, stringify } from "yaml";
|
|
8
|
+
import { openProject, resolved } from "./project.js";
|
|
9
|
+
/** The method whose settings `path` is in, if any. */
|
|
10
|
+
export function settingsAt(project, place, path, environment) {
|
|
11
|
+
return (platformSettings(place, path) ??
|
|
12
|
+
standardSettings(place, path) ??
|
|
13
|
+
withSettings(project, place, path, environment));
|
|
14
|
+
}
|
|
15
|
+
/** `settings/<method>/…` in a platform. */
|
|
16
|
+
function platformSettings(place, [first, method, ...rest]) {
|
|
17
|
+
return place.kind === "Platform" && first === "settings" && method ? { method, rest } : undefined;
|
|
18
|
+
}
|
|
19
|
+
/** `<action>/settings/<method>/…` or `<action>/fixed/<method>/…` in a standard. */
|
|
20
|
+
function standardSettings(place, [action = "", group = "", method, ...rest]) {
|
|
21
|
+
const standard = place.kind === "Standard" && /^(ingest|transform|store)$/.test(action);
|
|
22
|
+
return standard && /^(settings|fixed)$/.test(group) && method ? { method, rest } : undefined;
|
|
23
|
+
}
|
|
24
|
+
/** A rule's `with` in a standard, or a flow's, transform's or table's `with`. */
|
|
25
|
+
function withSettings(project, place, path, environment) {
|
|
26
|
+
const at = path.indexOf("with");
|
|
27
|
+
if (at < 0)
|
|
28
|
+
return undefined;
|
|
29
|
+
const rest = path.slice(at + 1);
|
|
30
|
+
const [action = "", group, index] = path;
|
|
31
|
+
const method = place.kind === "Standard" && group === "when"
|
|
32
|
+
? place.data[action]?.when?.[Number(index)]?.use
|
|
33
|
+
: methodOfTable(project, place.file, path.slice(0, at), environment);
|
|
34
|
+
return method ? { method, rest } : undefined;
|
|
35
|
+
}
|
|
36
|
+
/** Every setting of a method, from the pack that has it. */
|
|
37
|
+
export function methodFields(method) {
|
|
38
|
+
const pack = packs.find((candidate) => candidate.methods[method]);
|
|
39
|
+
return pack ? methodReference(pack, method) : [];
|
|
40
|
+
}
|
|
41
|
+
/** The description of the field at `path`, or undefined when nothing describes it. */
|
|
42
|
+
export function fieldAt(project, place, path, environment) {
|
|
43
|
+
const settings = settingsAt(project, place, path, environment);
|
|
44
|
+
if (settings)
|
|
45
|
+
return methodFields(settings.method).find((field) => matches(field.path, settings.rest));
|
|
46
|
+
return (connectorFields(place, project, environment).find((field) => matches(field.path, path)) ??
|
|
47
|
+
documentFields(place).find((field) => matches(field.path, path)));
|
|
48
|
+
}
|
|
49
|
+
/** The connector a Connection document names, from the pack that reads it. */
|
|
50
|
+
export function connectorOf(place, project, environment) {
|
|
51
|
+
if (place.kind !== "Connection")
|
|
52
|
+
return undefined;
|
|
53
|
+
const own = project ? standardPacks(project) : packs;
|
|
54
|
+
const candidates = own.flatMap((pack) => (pack.connectors ?? []).filter((item) => item.id === place.data.connector &&
|
|
55
|
+
(pack.methods[item.method]?.connectivity ?? [place.data.connectivity]).includes(String(place.data.connectivity))));
|
|
56
|
+
const method = project
|
|
57
|
+
? resolved(project, environment).model?.tables.find((table) => table.ingest?.connection.id === place.data.id)?.ingest?.method
|
|
58
|
+
: undefined;
|
|
59
|
+
return (candidates.find((item) => item.method === method) ??
|
|
60
|
+
(candidates.length === 1 ? candidates[0] : undefined));
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* A connection's `settings`, described by its connector: what each means,
|
|
64
|
+
* and how a flow table's `object` is written for it.
|
|
65
|
+
*/
|
|
66
|
+
function connectorFields(place, project, environment) {
|
|
67
|
+
const connector = connectorOf(place, project, environment);
|
|
68
|
+
if (!connector)
|
|
69
|
+
return [];
|
|
70
|
+
return connector.settings.map((setting) => ({
|
|
71
|
+
path: ["settings", setting.name],
|
|
72
|
+
name: setting.name,
|
|
73
|
+
description: `${setting.description} For ${connector.title}, a flow table's \`object\` is ${connector.object}.${setting.secret ? " Write it as ${secret:<name>}." : ""}`,
|
|
74
|
+
type: setting.type ?? "text",
|
|
75
|
+
required: !setting.optional,
|
|
76
|
+
...(setting.values && { values: setting.values.map((value) => ({ value })) }),
|
|
77
|
+
docs: `/docs/connectors/${connector.id}`,
|
|
78
|
+
}));
|
|
79
|
+
}
|
|
80
|
+
/** The fields directly inside the mapping at `path`. */
|
|
81
|
+
export function fieldsIn(project, place, path, environment) {
|
|
82
|
+
const settings = settingsAt(project, place, path, environment);
|
|
83
|
+
const [all, base] = settings
|
|
84
|
+
? [methodFields(settings.method), settings.rest]
|
|
85
|
+
: [[...connectorFields(place, project, environment), ...documentFields(place)], path];
|
|
86
|
+
if (!settings && !(place.kind && place.kind in referenceKinds))
|
|
87
|
+
return undefined;
|
|
88
|
+
return all.filter((field) => field.path.length === base.length + 1 && matches(field.path.slice(0, -1), base));
|
|
89
|
+
}
|
|
90
|
+
function documentFields(place) {
|
|
91
|
+
const kind = place.kind;
|
|
92
|
+
return kind && kind in referenceKinds ? documentReference(kind) : [];
|
|
93
|
+
}
|
|
94
|
+
/** A described path matches when each key is the same or the description says `*`. */
|
|
95
|
+
function matches(described, path) {
|
|
96
|
+
return (described.length === path.length &&
|
|
97
|
+
described.every((key, index) => key === "*" || key === path[index]));
|
|
98
|
+
}
|
|
99
|
+
/** The method of the table's step that `path` (up to its `with`) belongs to. */
|
|
100
|
+
function methodOfTable(project, file, path, environment) {
|
|
101
|
+
const name = path[0] === "tables" ? path[1] : undefined;
|
|
102
|
+
const action = (name ? path[2] : path[0]);
|
|
103
|
+
const methodIn = (candidate) => resolved(candidate, environment).model?.tables.find((item) => item.origin.file === file && (!name || item.name === name))?.[action]?.method;
|
|
104
|
+
// An unfinished setting stops the project resolving. The text as written,
|
|
105
|
+
// without its `with` settings, still chooses the method; the saved files
|
|
106
|
+
// are the last resort, as they may say something else.
|
|
107
|
+
return (methodIn(project) ??
|
|
108
|
+
methodIn(withoutSettings(project, file)) ??
|
|
109
|
+
methodIn(openProject(project.folder, new Map())));
|
|
110
|
+
}
|
|
111
|
+
const stripped = new WeakMap();
|
|
112
|
+
/** The project with every `with` in `file` removed, once per project snapshot and file. */
|
|
113
|
+
function withoutSettings(project, file) {
|
|
114
|
+
let byFile = stripped.get(project);
|
|
115
|
+
if (!byFile)
|
|
116
|
+
stripped.set(project, (byFile = new Map()));
|
|
117
|
+
let found = byFile.get(file);
|
|
118
|
+
if (!found) {
|
|
119
|
+
const text = stripWith(project.files.read(file) ?? "");
|
|
120
|
+
const files = {
|
|
121
|
+
...project.files,
|
|
122
|
+
read: (path) => (path === file ? text : project.files.read(path)),
|
|
123
|
+
};
|
|
124
|
+
byFile.set(file, (found = { ...project, files }));
|
|
125
|
+
}
|
|
126
|
+
return found;
|
|
127
|
+
}
|
|
128
|
+
/** The document without the `with` of each action, at the top and in each table. */
|
|
129
|
+
function stripWith(text) {
|
|
130
|
+
let data;
|
|
131
|
+
try {
|
|
132
|
+
data = parse(text);
|
|
133
|
+
}
|
|
134
|
+
catch {
|
|
135
|
+
return text;
|
|
136
|
+
}
|
|
137
|
+
if (!isObject(data))
|
|
138
|
+
return text;
|
|
139
|
+
const tables = isObject(data.tables) ? Object.values(data.tables) : [];
|
|
140
|
+
for (const owner of [data, ...tables].filter(isObject))
|
|
141
|
+
for (const action of ["ingest", "transform", "store"]) {
|
|
142
|
+
const step = owner[action];
|
|
143
|
+
if (isObject(step))
|
|
144
|
+
delete step.with;
|
|
145
|
+
}
|
|
146
|
+
return stringify(data);
|
|
147
|
+
}
|
|
148
|
+
function isObject(value) {
|
|
149
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
150
|
+
}
|
|
151
|
+
//# sourceMappingURL=fields.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fields.js","sourceRoot":"","sources":["../src/fields.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { type QuickFix } from "./fixes.js";
|
|
2
|
+
import type { Project } from "./project.js";
|
|
3
|
+
/** One fix for every problem with `code` that has a fix, when there are two or more. */
|
|
4
|
+
export declare function fixAll(project: Project, environment: string | undefined, code: string): QuickFix[];
|
|
5
|
+
//# sourceMappingURL=fix-all.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fix-all.d.ts","sourceRoot":"","sources":["../src/fix-all.ts"],"names":[],"mappings":"AAGA,OAAO,EAAc,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAC;AACvD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,wFAAwF;AACxF,wBAAgB,MAAM,CACpB,OAAO,EAAE,OAAO,EAChB,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,IAAI,EAAE,MAAM,GACX,QAAQ,EAAE,CAgBZ"}
|
package/dist/fix-all.js
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
// Fix all: every problem of one code fixed by one action, each with its first
|
|
2
|
+
// fix, and an edit that several problems share made once.
|
|
3
|
+
import { problems } from "./diagnostics.js";
|
|
4
|
+
import { positioned } from "./fixes.js";
|
|
5
|
+
/** One fix for every problem with `code` that has a fix, when there are two or more. */
|
|
6
|
+
export function fixAll(project, environment, code) {
|
|
7
|
+
const fixable = problems(project, environment).filter((problem) => problem.code === code && (problem.fixes?.length ?? 0) > 0);
|
|
8
|
+
if (fixable.length < 2)
|
|
9
|
+
return [];
|
|
10
|
+
const seen = new Set();
|
|
11
|
+
const edits = fixable
|
|
12
|
+
.flatMap((problem) => positioned(project, problem.fixes[0]))
|
|
13
|
+
.filter((edit) => {
|
|
14
|
+
const key = JSON.stringify(edit);
|
|
15
|
+
return !seen.has(key) && Boolean(seen.add(key));
|
|
16
|
+
});
|
|
17
|
+
// Two different edits of one place would conflict: give none rather than a wrong one.
|
|
18
|
+
const places = new Set(edits.map((edit) => `${edit.file}:${JSON.stringify(edit.range)}`));
|
|
19
|
+
if (edits.length === 0 || places.size !== edits.length)
|
|
20
|
+
return [];
|
|
21
|
+
return [{ title: `Fix all ${fixable.length} ${code} problems`, edits }];
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=fix-all.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fix-all.js","sourceRoot":"","sources":["../src/fix-all.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,0DAA0D;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAiB,MAAM,YAAY,CAAC;AAGvD,wFAAwF;AACxF,MAAM,UAAU,MAAM,CACpB,OAAgB,EAChB,WAA+B,EAC/B,IAAY;IAEZ,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,MAAM,CACnD,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CACvE,CAAC;IACF,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IAClC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,KAAK,GAAG,OAAO;SAClB,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,KAAM,CAAC,CAAC,CAAE,CAAC,CAAC;SAC7D,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;QACf,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACjC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IACL,sFAAsF;IACtF,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1F,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IAClE,OAAO,CAAC,EAAE,KAAK,EAAE,WAAW,OAAO,CAAC,MAAM,IAAI,IAAI,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;AAC1E,CAAC"}
|
package/dist/fixed.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Suggestion } from "./completion.js";
|
|
2
|
+
import type { Place } from "./context.js";
|
|
3
|
+
import { type Project } from "./project.js";
|
|
4
|
+
/** `items` with the fixed value first and the others marked, or unchanged when nothing is fixed here. */
|
|
5
|
+
export declare function markFixed(project: Project, place: Place, environment: string | undefined, items: Suggestion[]): Suggestion[];
|
|
6
|
+
//# sourceMappingURL=fixed.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fixed.d.ts","sourceRoot":"","sources":["../src/fixed.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAmB,KAAK,OAAO,EAAE,MAAM,cAAc,CAAC;AAE7D,yGAAyG;AACzG,wBAAgB,SAAS,CACvB,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,KAAK,EACZ,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,KAAK,EAAE,UAAU,EAAE,GAClB,UAAU,EAAE,CAad"}
|
package/dist/fixed.js
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { settingsAt } from "./fields.js";
|
|
2
|
+
import { loadedDocuments } from "./project.js";
|
|
3
|
+
/** `items` with the fixed value first and the others marked, or unchanged when nothing is fixed here. */
|
|
4
|
+
export function markFixed(project, place, environment, items) {
|
|
5
|
+
const fixed = fixedValue(project, place, environment);
|
|
6
|
+
if (fixed === undefined)
|
|
7
|
+
return items;
|
|
8
|
+
const text = String(fixed);
|
|
9
|
+
const marked = items.map((item) => item.label === text
|
|
10
|
+
? { ...item, detail: "fixed by the standard", preselect: true }
|
|
11
|
+
: { ...item, detail: `not allowed: the standard fixes this to ${text}` });
|
|
12
|
+
return [
|
|
13
|
+
...marked.filter((item) => item.label === text),
|
|
14
|
+
...marked.filter((item) => item.label !== text),
|
|
15
|
+
];
|
|
16
|
+
}
|
|
17
|
+
/** The value the standard's `fixed` gives the setting at `place` in a definition's `with`. */
|
|
18
|
+
function fixedValue(project, place, environment) {
|
|
19
|
+
if (place.kind === "Standard" || place.kind === "Platform")
|
|
20
|
+
return undefined;
|
|
21
|
+
const settings = settingsAt(project, place, place.path, environment);
|
|
22
|
+
const action = place.path[place.path.indexOf("with") - 1];
|
|
23
|
+
if (!settings || !action)
|
|
24
|
+
return undefined;
|
|
25
|
+
const value = keyPath(standardFixed(project, environment, action)?.[settings.method], settings.rest);
|
|
26
|
+
return typeof value === "object" ? undefined : value;
|
|
27
|
+
}
|
|
28
|
+
/** The standard's `<action>.fixed`, as resolved for the environment, so `${values.…}` is the value that applies. */
|
|
29
|
+
function standardFixed(project, environment, action) {
|
|
30
|
+
const standard = loadedDocuments(project, environment)?.find((document) => document.kind === "Standard")?.value;
|
|
31
|
+
return standard?.[action]?.fixed;
|
|
32
|
+
}
|
|
33
|
+
/** The value at `keys` inside `value`, or undefined when a step is missing. */
|
|
34
|
+
function keyPath(value, keys) {
|
|
35
|
+
let found = value;
|
|
36
|
+
for (const key of keys) {
|
|
37
|
+
if (typeof found !== "object" || found === null)
|
|
38
|
+
return undefined;
|
|
39
|
+
found = found[key];
|
|
40
|
+
}
|
|
41
|
+
return found;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=fixed.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fixed.js","sourceRoot":"","sources":["../src/fixed.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,eAAe,EAAgB,MAAM,cAAc,CAAC;AAE7D,yGAAyG;AACzG,MAAM,UAAU,SAAS,CACvB,OAAgB,EAChB,KAAY,EACZ,WAA+B,EAC/B,KAAmB;IAEnB,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;IACtD,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACtC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC3B,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAChC,IAAI,CAAC,KAAK,KAAK,IAAI;QACjB,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,uBAAuB,EAAE,SAAS,EAAE,IAAI,EAAE;QAC/D,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,2CAA2C,IAAI,EAAE,EAAE,CAC3E,CAAC;IACF,OAAO;QACL,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC;QAC/C,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC;KAChD,CAAC;AACJ,CAAC;AAED,8FAA8F;AAC9F,SAAS,UAAU,CAAC,OAAgB,EAAE,KAAY,EAAE,WAA+B;IACjF,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU;QAAE,OAAO,SAAS,CAAC;IAC7E,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IACrE,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1D,IAAI,CAAC,QAAQ,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAC3C,MAAM,KAAK,GAAG,OAAO,CACnB,aAAa,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,EAC9D,QAAQ,CAAC,IAAI,CACd,CAAC;IACF,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC;AACvD,CAAC;AAED,oHAAoH;AACpH,SAAS,aAAa,CACpB,OAAgB,EAChB,WAA+B,EAC/B,MAAc;IAEd,MAAM,QAAQ,GAAG,eAAe,CAAC,OAAO,EAAE,WAAW,CAAC,EAAE,IAAI,CAC1D,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,KAAK,UAAU,CAC3C,EAAE,KAAoF,CAAC;IACxF,OAAO,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC;AACnC,CAAC;AAED,+EAA+E;AAC/E,SAAS,OAAO,CAAC,KAAc,EAAE,IAAc;IAC7C,IAAI,KAAK,GAAG,KAAK,CAAC;IAClB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;YAAE,OAAO,SAAS,CAAC;QAClE,KAAK,GAAI,KAAiC,CAAC,GAAG,CAAC,CAAC;IAClD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
package/dist/fixes.d.ts
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { type Fix } from "@ingestron/config";
|
|
2
|
+
import type { Project } from "./project.js";
|
|
3
|
+
import { type Position } from "./yaml.js";
|
|
4
|
+
/** One quick fix: its title, the problem it solves, and edits that may span files. */
|
|
5
|
+
export interface QuickFix {
|
|
6
|
+
title: string;
|
|
7
|
+
/** The problem it solves; absent for a refactoring, such as moving a setting. */
|
|
8
|
+
problem?: {
|
|
9
|
+
code: string;
|
|
10
|
+
line: number;
|
|
11
|
+
};
|
|
12
|
+
edits: {
|
|
13
|
+
file: string;
|
|
14
|
+
range: {
|
|
15
|
+
start: Position;
|
|
16
|
+
end: Position;
|
|
17
|
+
};
|
|
18
|
+
text: string;
|
|
19
|
+
}[];
|
|
20
|
+
/** A new file to write, for a link to a document that does not exist yet. */
|
|
21
|
+
create?: {
|
|
22
|
+
file: string;
|
|
23
|
+
text: string;
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
/** The fixes for the problems in `file` whose lines meet `at`. */
|
|
27
|
+
export declare function quickFixes(project: Project, environment: string | undefined, file: string, at: {
|
|
28
|
+
start: Position;
|
|
29
|
+
end: Position;
|
|
30
|
+
}): QuickFix[];
|
|
31
|
+
/** A fix's text edits, at line and character positions. */
|
|
32
|
+
export declare function positioned(project: Project, fix: Fix): QuickFix["edits"];
|
|
33
|
+
//# sourceMappingURL=fixes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fixes.d.ts","sourceRoot":"","sources":["../src/fixes.ts"],"names":[],"mappings":"AAEA,OAAO,EAAY,KAAK,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAGvD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAG5C,OAAO,EAAwB,KAAK,QAAQ,EAAE,MAAM,WAAW,CAAC;AAEhE,sFAAsF;AACtF,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,iFAAiF;IACjF,OAAO,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACzC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE;YAAE,KAAK,EAAE,QAAQ,CAAC;YAAC,GAAG,EAAE,QAAQ,CAAA;SAAE,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACnF,6EAA6E;IAC7E,MAAM,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CACzC;AAED,kEAAkE;AAClE,wBAAgB,UAAU,CACxB,OAAO,EAAE,OAAO,EAChB,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE;IAAE,KAAK,EAAE,QAAQ,CAAC;IAAC,GAAG,EAAE,QAAQ,CAAA;CAAE,GACrC,QAAQ,EAAE,CAcZ;AAED,2DAA2D;AAC3D,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,CAUxE"}
|
package/dist/fixes.js
ADDED
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
// Quick fixes: the fixes the definitions give for the problems at a place,
|
|
2
|
+
// as text edits with line and character positions.
|
|
3
|
+
import { fixEdits } from "@ingestron/config";
|
|
4
|
+
import { parse } from "yaml";
|
|
5
|
+
import { problems } from "./diagnostics.js";
|
|
6
|
+
import { plainText, skeletons } from "./skeletons.js";
|
|
7
|
+
import { occurrences } from "./navigation.js";
|
|
8
|
+
import { offsetAt, positionAt } from "./yaml.js";
|
|
9
|
+
/** The fixes for the problems in `file` whose lines meet `at`. */
|
|
10
|
+
export function quickFixes(project, environment, file, at) {
|
|
11
|
+
const here = problems(project, environment)
|
|
12
|
+
.filter((problem) => problem.file === file)
|
|
13
|
+
.filter(({ range }) => range.start.line <= at.end.line && range.end.line >= at.start.line);
|
|
14
|
+
const edited = here
|
|
15
|
+
.flatMap((problem) => (problem.fixes ?? []).map((fix) => ({
|
|
16
|
+
title: fix.title,
|
|
17
|
+
problem: { code: problem.code, line: problem.range.start.line },
|
|
18
|
+
edits: positioned(project, fix),
|
|
19
|
+
})))
|
|
20
|
+
.filter((fix) => fix.edits.length > 0);
|
|
21
|
+
return [...edited, ...here.flatMap((problem) => createFixes(project, problem))];
|
|
22
|
+
}
|
|
23
|
+
/** A fix's text edits, at line and character positions. */
|
|
24
|
+
export function positioned(project, fix) {
|
|
25
|
+
const read = (path) => project.files.read(path);
|
|
26
|
+
return fixEdits(fix, read).map(({ file, start, end, text }) => {
|
|
27
|
+
const source = read(file) ?? "";
|
|
28
|
+
return {
|
|
29
|
+
file,
|
|
30
|
+
range: { start: positionAt(source, start), end: positionAt(source, end) },
|
|
31
|
+
text,
|
|
32
|
+
};
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
/** Folders for the kinds a link can name, where a new document is written. */
|
|
36
|
+
const folders = { DataContract: "contracts", Connection: "connections" };
|
|
37
|
+
/** For a link to a contract or connection that does not exist: create it from its skeleton. */
|
|
38
|
+
function createFixes(project, problem) {
|
|
39
|
+
if (problem.code === "NO_STANDARD")
|
|
40
|
+
return createStandard(project, problem);
|
|
41
|
+
const { kind, id } = (problem.code === "BROKEN_LINK" && linkAt(project, problem)) || {};
|
|
42
|
+
const folder = kind && folders[kind];
|
|
43
|
+
if (!id || !folder)
|
|
44
|
+
return [];
|
|
45
|
+
const file = newFileFor(project, folder, id);
|
|
46
|
+
const [skeleton] = skeletons(project, file, id);
|
|
47
|
+
if (!skeleton?.snippet)
|
|
48
|
+
return [];
|
|
49
|
+
return [
|
|
50
|
+
{
|
|
51
|
+
title: `Create ${kind} "${id}"`,
|
|
52
|
+
problem: { code: problem.code, line: problem.range.start.line },
|
|
53
|
+
edits: [],
|
|
54
|
+
create: { file, text: plainText(skeleton.snippet) },
|
|
55
|
+
},
|
|
56
|
+
];
|
|
57
|
+
}
|
|
58
|
+
/** `<folder>/<last part of the id>.yaml`, or the whole id when that file exists. */
|
|
59
|
+
function newFileFor(project, folder, id) {
|
|
60
|
+
const short = `${folder}/${id.split(".").at(-1)}.yaml`;
|
|
61
|
+
return project.files.read(short) === undefined ? short : `${folder}/${id}.yaml`;
|
|
62
|
+
}
|
|
63
|
+
/** The kind and id of the link written where the problem is. */
|
|
64
|
+
function linkAt(project, problem) {
|
|
65
|
+
const offset = offsetAt(project.files.read(problem.file) ?? "", problem.range.start);
|
|
66
|
+
const link = occurrences(project).find(({ file, range, definition, symbol }) => file === problem.file &&
|
|
67
|
+
!definition &&
|
|
68
|
+
symbol.startsWith("doc:") &&
|
|
69
|
+
range[0] <= offset &&
|
|
70
|
+
offset <= range[1]);
|
|
71
|
+
const [, kind, id] = /^doc:(\w+):(.+)$/.exec(link?.symbol ?? "") ?? [];
|
|
72
|
+
return kind && id ? { kind, id } : undefined;
|
|
73
|
+
}
|
|
74
|
+
/** standard.yaml from its skeleton, and added to the imports when they do not load it. */
|
|
75
|
+
function createStandard(project, problem) {
|
|
76
|
+
const file = "standard.yaml";
|
|
77
|
+
const [skeleton] = skeletons(project, file);
|
|
78
|
+
if (!skeleton?.snippet || project.files.read(file) !== undefined)
|
|
79
|
+
return [];
|
|
80
|
+
let imports;
|
|
81
|
+
try {
|
|
82
|
+
imports = parse(project.files.read("project.yaml") ?? "")?.imports;
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
return [];
|
|
86
|
+
}
|
|
87
|
+
const loaded = Array.isArray(imports) &&
|
|
88
|
+
imports.some((item) => /^(standard|\*+(\/\*)?)\.yaml$/.test(String(item)));
|
|
89
|
+
const add = { title: "", edits: [{ file: "project.yaml", pointer: "/imports/-", set: file }] };
|
|
90
|
+
return [
|
|
91
|
+
{
|
|
92
|
+
title: `Create "${file}"`,
|
|
93
|
+
problem: { code: problem.code, line: problem.range.start.line },
|
|
94
|
+
edits: loaded ? [] : positioned(project, add),
|
|
95
|
+
create: { file, text: plainText(skeleton.snippet) },
|
|
96
|
+
},
|
|
97
|
+
];
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=fixes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fixes.js","sourceRoot":"","sources":["../src/fixes.ts"],"names":[],"mappings":"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"}
|
package/dist/flow.d.ts
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/** Keys inside the line's flow collections, and what is typed at the end. */
|
|
2
|
+
export interface FlowPlace {
|
|
3
|
+
keys: string[];
|
|
4
|
+
part: "key" | "value" | "item";
|
|
5
|
+
/** A value typed straight after `key:`, with no space yet. */
|
|
6
|
+
tight: boolean;
|
|
7
|
+
}
|
|
8
|
+
/** What starts a line before its flow collection: a list dash, a key, both or neither. */
|
|
9
|
+
export declare function lineStart(line: string): {
|
|
10
|
+
item: boolean;
|
|
11
|
+
key?: string;
|
|
12
|
+
rest: string;
|
|
13
|
+
} | undefined;
|
|
14
|
+
/** The place at the end of `rest`, which starts with `{` or `[`; undefined once they close. */
|
|
15
|
+
export declare function flowPlace(rest: string): FlowPlace | undefined;
|
|
16
|
+
//# sourceMappingURL=flow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flow.d.ts","sourceRoot":"","sources":["../src/flow.ts"],"names":[],"mappings":"AAIA,6EAA6E;AAC7E,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,IAAI,EAAE,KAAK,GAAG,OAAO,GAAG,MAAM,CAAC;IAC/B,8DAA8D;IAC9D,KAAK,EAAE,OAAO,CAAC;CAChB;AAUD,0FAA0F;AAC1F,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAIjG;AAED,+FAA+F;AAC/F,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAI7D"}
|
package/dist/flow.js
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
// The place inside `{ }` and `[ ]` written on one line, such as
|
|
2
|
+
// `- { metric: nullValues, mustBe: 0, | }`: which keys lead there, and
|
|
3
|
+
// whether a key, a value or a list item is being typed.
|
|
4
|
+
/** What starts a line before its flow collection: a list dash, a key, both or neither. */
|
|
5
|
+
export function lineStart(line) {
|
|
6
|
+
const start = /^(\s*)(-\s+)?(?:([\w.-]+):\s*)?(?=[{[])/.exec(line);
|
|
7
|
+
if (!start)
|
|
8
|
+
return undefined;
|
|
9
|
+
return { item: start[2] !== undefined, key: start[3], rest: line.slice(start[0].length) };
|
|
10
|
+
}
|
|
11
|
+
/** The place at the end of `rest`, which starts with `{` or `[`; undefined once they close. */
|
|
12
|
+
export function flowPlace(rest) {
|
|
13
|
+
const scan = { frames: [], token: "", quote: "" };
|
|
14
|
+
for (const ch of rest)
|
|
15
|
+
step(scan, ch);
|
|
16
|
+
return scan.frames.length > 0 ? placeIn(scan.frames, scan.pending, rest) : undefined;
|
|
17
|
+
}
|
|
18
|
+
/** Reads one character: quotes, opening and closing brackets, keys and commas. */
|
|
19
|
+
function step(scan, ch) {
|
|
20
|
+
if (inQuote(scan, ch))
|
|
21
|
+
return;
|
|
22
|
+
if (ch === ":" && scan.frames.at(-1)?.open === "{")
|
|
23
|
+
return startValue(scan);
|
|
24
|
+
if ("{[}],".includes(ch))
|
|
25
|
+
return structure(scan, ch);
|
|
26
|
+
scan.token += ch;
|
|
27
|
+
}
|
|
28
|
+
/** Quoted text is skipped, so a comma or bracket inside quotes counts for nothing. */
|
|
29
|
+
function inQuote(scan, ch) {
|
|
30
|
+
if (!scan.quote && ch !== '"' && ch !== "'")
|
|
31
|
+
return false;
|
|
32
|
+
scan.quote = scan.quote === ch ? "" : scan.quote || ch;
|
|
33
|
+
return true;
|
|
34
|
+
}
|
|
35
|
+
function startValue(scan) {
|
|
36
|
+
scan.pending = scan.token.trim();
|
|
37
|
+
scan.token = "";
|
|
38
|
+
}
|
|
39
|
+
function structure(scan, ch) {
|
|
40
|
+
const top = scan.frames.at(-1);
|
|
41
|
+
if (ch === "{" || ch === "[")
|
|
42
|
+
scan.frames.push({ open: ch, key: scan.pending, count: 0 });
|
|
43
|
+
else if (ch !== ",")
|
|
44
|
+
scan.frames.pop();
|
|
45
|
+
else if (top)
|
|
46
|
+
top.count += 1;
|
|
47
|
+
scan.pending = undefined;
|
|
48
|
+
scan.token = "";
|
|
49
|
+
}
|
|
50
|
+
function placeIn(frames, pending, rest) {
|
|
51
|
+
const keys = frames.flatMap((frame, index) => [
|
|
52
|
+
...(frame.key ? [frame.key] : []),
|
|
53
|
+
...(frame.open === "[" && index < frames.length - 1 ? [String(frame.count)] : []),
|
|
54
|
+
]);
|
|
55
|
+
const top = frames.at(-1);
|
|
56
|
+
if (top.open === "[")
|
|
57
|
+
return { keys, part: "item", tight: false };
|
|
58
|
+
if (pending !== undefined)
|
|
59
|
+
return { keys: [...keys, pending], part: "value", tight: /:\S*$/.test(rest) };
|
|
60
|
+
return { keys, part: "key", tight: false };
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=flow.js.map
|
package/dist/flow.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flow.js","sourceRoot":"","sources":["../src/flow.ts"],"names":[],"mappings":"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"}
|
package/dist/hover.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type HoverOptions } from "./explain.js";
|
|
2
|
+
import { type Project } from "./project.js";
|
|
3
|
+
/** Markdown for the hover at `offset` in `text`, the open text of `file`, or undefined. */
|
|
4
|
+
export declare function hoverAt(project: Project, file: string, text: string, offset: number, environment: string | undefined, options?: HoverOptions): string | undefined;
|
|
5
|
+
/** A value as definitions write it: YAML flow style. */
|
|
6
|
+
export declare function shown(value: unknown): string;
|
|
7
|
+
//# sourceMappingURL=hover.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hover.d.ts","sourceRoot":"","sources":["../src/hover.ts"],"names":[],"mappings":"AAOA,OAAO,EAA4B,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AAE3E,OAAO,EAAY,KAAK,OAAO,EAAE,MAAM,cAAc,CAAC;AAMtD,2FAA2F;AAC3F,wBAAgB,OAAO,CACrB,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,OAAO,GAAE,YAAiB,GACzB,MAAM,GAAG,SAAS,CAKpB;AAyKD,wDAAwD;AACxD,wBAAgB,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAQ5C"}
|