perttool 0.1.0-alpha.2
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/CHANGELOG.md +53 -0
- package/LICENSE +21 -0
- package/README.md +134 -0
- package/dist/analysis/graph.d.ts +41 -0
- package/dist/analysis/graph.d.ts.map +1 -0
- package/dist/analysis/graph.js +199 -0
- package/dist/analysis/graph.js.map +1 -0
- package/dist/analysis/precedence.d.ts +52 -0
- package/dist/analysis/precedence.d.ts.map +1 -0
- package/dist/analysis/precedence.js +187 -0
- package/dist/analysis/precedence.js.map +1 -0
- package/dist/analysis/resource.d.ts +96 -0
- package/dist/analysis/resource.d.ts.map +1 -0
- package/dist/analysis/resource.js +522 -0
- package/dist/analysis/resource.js.map +1 -0
- package/dist/application/analyze.d.ts +32 -0
- package/dist/application/analyze.d.ts.map +1 -0
- package/dist/application/analyze.js +144 -0
- package/dist/application/analyze.js.map +1 -0
- package/dist/application/check.d.ts +24 -0
- package/dist/application/check.d.ts.map +1 -0
- package/dist/application/check.js +43 -0
- package/dist/application/check.js.map +1 -0
- package/dist/application/format.d.ts +21 -0
- package/dist/application/format.d.ts.map +1 -0
- package/dist/application/format.js +52 -0
- package/dist/application/format.js.map +1 -0
- package/dist/application/mutate.d.ts +4 -0
- package/dist/application/mutate.d.ts.map +1 -0
- package/dist/application/mutate.js +175 -0
- package/dist/application/mutate.js.map +1 -0
- package/dist/application/next.d.ts +86 -0
- package/dist/application/next.d.ts.map +1 -0
- package/dist/application/next.js +310 -0
- package/dist/application/next.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +2103 -0
- package/dist/cli.js.map +1 -0
- package/dist/conversion/mermaid-import.d.ts +26 -0
- package/dist/conversion/mermaid-import.d.ts.map +1 -0
- package/dist/conversion/mermaid-import.js +655 -0
- package/dist/conversion/mermaid-import.js.map +1 -0
- package/dist/conversion/mermaid.d.ts +38 -0
- package/dist/conversion/mermaid.d.ts.map +1 -0
- package/dist/conversion/mermaid.js +362 -0
- package/dist/conversion/mermaid.js.map +1 -0
- package/dist/editing/unified-diff.d.ts +7 -0
- package/dist/editing/unified-diff.d.ts.map +1 -0
- package/dist/editing/unified-diff.js +81 -0
- package/dist/editing/unified-diff.js.map +1 -0
- package/dist/formatter/source-formatter.d.ts +17 -0
- package/dist/formatter/source-formatter.d.ts.map +1 -0
- package/dist/formatter/source-formatter.js +210 -0
- package/dist/formatter/source-formatter.js.map +1 -0
- package/dist/help/registry.d.ts +37 -0
- package/dist/help/registry.d.ts.map +1 -0
- package/dist/help/registry.js +657 -0
- package/dist/help/registry.js.map +1 -0
- package/dist/index.d.ts +44 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +23 -0
- package/dist/index.js.map +1 -0
- package/dist/io/document-file.d.ts +9 -0
- package/dist/io/document-file.d.ts.map +1 -0
- package/dist/io/document-file.js +19 -0
- package/dist/io/document-file.js.map +1 -0
- package/dist/io/safe-write.d.ts +33 -0
- package/dist/io/safe-write.d.ts.map +1 -0
- package/dist/io/safe-write.js +280 -0
- package/dist/io/safe-write.js.map +1 -0
- package/dist/model/diagnostics.d.ts +43 -0
- package/dist/model/diagnostics.d.ts.map +1 -0
- package/dist/model/diagnostics.js +47 -0
- package/dist/model/diagnostics.js.map +1 -0
- package/dist/model/rational.d.ts +21 -0
- package/dist/model/rational.d.ts.map +1 -0
- package/dist/model/rational.js +84 -0
- package/dist/model/rational.js.map +1 -0
- package/dist/model/syntax.d.ts +67 -0
- package/dist/model/syntax.d.ts.map +1 -0
- package/dist/model/syntax.js +15 -0
- package/dist/model/syntax.js.map +1 -0
- package/dist/model/units.d.ts +18 -0
- package/dist/model/units.d.ts.map +1 -0
- package/dist/model/units.js +29 -0
- package/dist/model/units.js.map +1 -0
- package/dist/mutation/advance.d.ts +26 -0
- package/dist/mutation/advance.d.ts.map +1 -0
- package/dist/mutation/advance.js +261 -0
- package/dist/mutation/advance.js.map +1 -0
- package/dist/mutation/diagnostics.d.ts +10 -0
- package/dist/mutation/diagnostics.d.ts.map +1 -0
- package/dist/mutation/diagnostics.js +10 -0
- package/dist/mutation/diagnostics.js.map +1 -0
- package/dist/mutation/entity-editor.d.ts +16 -0
- package/dist/mutation/entity-editor.d.ts.map +1 -0
- package/dist/mutation/entity-editor.js +103 -0
- package/dist/mutation/entity-editor.js.map +1 -0
- package/dist/mutation/milestone.d.ts +5 -0
- package/dist/mutation/milestone.d.ts.map +1 -0
- package/dist/mutation/milestone.js +194 -0
- package/dist/mutation/milestone.js.map +1 -0
- package/dist/mutation/resource.d.ts +5 -0
- package/dist/mutation/resource.d.ts.map +1 -0
- package/dist/mutation/resource.js +145 -0
- package/dist/mutation/resource.js.map +1 -0
- package/dist/mutation/source.d.ts +22 -0
- package/dist/mutation/source.d.ts.map +1 -0
- package/dist/mutation/source.js +155 -0
- package/dist/mutation/source.js.map +1 -0
- package/dist/mutation/task.d.ts +10 -0
- package/dist/mutation/task.d.ts.map +1 -0
- package/dist/mutation/task.js +644 -0
- package/dist/mutation/task.js.map +1 -0
- package/dist/mutation/text-edits.d.ts +8 -0
- package/dist/mutation/text-edits.d.ts.map +1 -0
- package/dist/mutation/text-edits.js +33 -0
- package/dist/mutation/text-edits.js.map +1 -0
- package/dist/mutation/types.d.ts +153 -0
- package/dist/mutation/types.d.ts.map +1 -0
- package/dist/mutation/types.js +2 -0
- package/dist/mutation/types.js.map +1 -0
- package/dist/parser/document-parser.d.ts +6 -0
- package/dist/parser/document-parser.d.ts.map +1 -0
- package/dist/parser/document-parser.js +735 -0
- package/dist/parser/document-parser.js.map +1 -0
- package/dist/recommendation/explanation-types.d.ts +226 -0
- package/dist/recommendation/explanation-types.d.ts.map +1 -0
- package/dist/recommendation/explanation-types.js +2 -0
- package/dist/recommendation/explanation-types.js.map +1 -0
- package/dist/recommendation/explanation-validation.d.ts +4 -0
- package/dist/recommendation/explanation-validation.d.ts.map +1 -0
- package/dist/recommendation/explanation-validation.js +745 -0
- package/dist/recommendation/explanation-validation.js.map +1 -0
- package/dist/recommendation/explanation-values.d.ts +7 -0
- package/dist/recommendation/explanation-values.d.ts.map +1 -0
- package/dist/recommendation/explanation-values.js +283 -0
- package/dist/recommendation/explanation-values.js.map +1 -0
- package/dist/recommendation/explanation.d.ts +8 -0
- package/dist/recommendation/explanation.d.ts.map +1 -0
- package/dist/recommendation/explanation.js +1022 -0
- package/dist/recommendation/explanation.js.map +1 -0
- package/dist/recommendation/failure.d.ts +3 -0
- package/dist/recommendation/failure.d.ts.map +1 -0
- package/dist/recommendation/failure.js +4 -0
- package/dist/recommendation/failure.js.map +1 -0
- package/dist/recommendation/json.d.ts +3 -0
- package/dist/recommendation/json.d.ts.map +1 -0
- package/dist/recommendation/json.js +252 -0
- package/dist/recommendation/json.js.map +1 -0
- package/dist/recommendation/override-types.d.ts +117 -0
- package/dist/recommendation/override-types.d.ts.map +1 -0
- package/dist/recommendation/override-types.js +2 -0
- package/dist/recommendation/override-types.js.map +1 -0
- package/dist/recommendation/override.d.ts +7 -0
- package/dist/recommendation/override.d.ts.map +1 -0
- package/dist/recommendation/override.js +717 -0
- package/dist/recommendation/override.js.map +1 -0
- package/dist/recommendation/ranking.d.ts +7 -0
- package/dist/recommendation/ranking.d.ts.map +1 -0
- package/dist/recommendation/ranking.js +391 -0
- package/dist/recommendation/ranking.js.map +1 -0
- package/dist/recommendation/types.d.ts +83 -0
- package/dist/recommendation/types.d.ts.map +1 -0
- package/dist/recommendation/types.js +2 -0
- package/dist/recommendation/types.js.map +1 -0
- package/dist/semantic/validator.d.ts +4 -0
- package/dist/semantic/validator.d.ts.map +1 -0
- package/dist/semantic/validator.js +490 -0
- package/dist/semantic/validator.js.map +1 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +2 -0
- package/dist/version.js.map +1 -0
- package/package.json +61 -0
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { fieldNamed } from "../model/syntax.js";
|
|
2
|
+
import { contentTextEndOffset, deleteFieldEdit, fieldInsertionOffset, insertionText, majorLineEnding, serializeTags, serializeTextField, splitPhysicalLines, } from "./source.js";
|
|
3
|
+
export class EntityEditor {
|
|
4
|
+
lineEnding;
|
|
5
|
+
#text;
|
|
6
|
+
#declaration;
|
|
7
|
+
#lines;
|
|
8
|
+
#fieldRank;
|
|
9
|
+
#deleted;
|
|
10
|
+
#edits = [];
|
|
11
|
+
#additions = new Map();
|
|
12
|
+
constructor(text, declaration, fieldOrder, deleted = []) {
|
|
13
|
+
this.#text = text;
|
|
14
|
+
this.#declaration = declaration;
|
|
15
|
+
this.#lines = splitPhysicalLines(text);
|
|
16
|
+
this.lineEnding = majorLineEnding(text);
|
|
17
|
+
this.#fieldRank = new Map(fieldOrder.map((name, index) => [name, index]));
|
|
18
|
+
this.#deleted = new Set(deleted);
|
|
19
|
+
}
|
|
20
|
+
fieldValue(name) {
|
|
21
|
+
return fieldNamed(this.#declaration, name)?.value;
|
|
22
|
+
}
|
|
23
|
+
clear(name) {
|
|
24
|
+
this.#deleted.add(name);
|
|
25
|
+
}
|
|
26
|
+
queue(name, serialized) {
|
|
27
|
+
const offset = fieldInsertionOffset(this.#declaration, name, this.#deleted, this.#lines, this.#fieldRank);
|
|
28
|
+
const entries = this.#additions.get(offset) ?? [];
|
|
29
|
+
entries.push({ name, serialized });
|
|
30
|
+
this.#additions.set(offset, entries);
|
|
31
|
+
}
|
|
32
|
+
setScalar(name, valueText) {
|
|
33
|
+
const field = fieldNamed(this.#declaration, name);
|
|
34
|
+
if (field === undefined) {
|
|
35
|
+
this.queue(name, ` ${name} ${valueText}`);
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
this.#edits.push({
|
|
39
|
+
startOffset: field.valueSpan.start.offset,
|
|
40
|
+
endOffset: field.valueSpan.end.offset,
|
|
41
|
+
replacement: valueText,
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
setText(name, value) {
|
|
45
|
+
const field = fieldNamed(this.#declaration, name);
|
|
46
|
+
if (field === undefined) {
|
|
47
|
+
this.queue(name, serializeTextField(name, value, this.lineEnding));
|
|
48
|
+
}
|
|
49
|
+
else if (field.contentSpan === undefined && !value.includes("\n")) {
|
|
50
|
+
this.#edits.push({
|
|
51
|
+
startOffset: field.valueSpan.start.offset,
|
|
52
|
+
endOffset: field.valueSpan.end.offset,
|
|
53
|
+
replacement: JSON.stringify(value),
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
this.#edits.push({
|
|
58
|
+
startOffset: field.span.start.offset,
|
|
59
|
+
endOffset: contentTextEndOffset(field, this.#lines),
|
|
60
|
+
replacement: serializeTextField(name, value, this.lineEnding),
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
setTags(tags) {
|
|
65
|
+
const field = fieldNamed(this.#declaration, "tags");
|
|
66
|
+
if (tags.length === 0) {
|
|
67
|
+
if (field !== undefined)
|
|
68
|
+
this.clear("tags");
|
|
69
|
+
}
|
|
70
|
+
else if (field === undefined) {
|
|
71
|
+
this.queue("tags", ` tags ${serializeTags(tags)}`);
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
this.#edits.push({
|
|
75
|
+
startOffset: field.valueSpan.start.offset,
|
|
76
|
+
endOffset: field.valueSpan.end.offset,
|
|
77
|
+
replacement: serializeTags(tags),
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
finish() {
|
|
82
|
+
for (const name of this.#deleted) {
|
|
83
|
+
const field = fieldNamed(this.#declaration, name);
|
|
84
|
+
if (field !== undefined)
|
|
85
|
+
this.#edits.push(deleteFieldEdit(field, this.#lines));
|
|
86
|
+
}
|
|
87
|
+
for (const [offset, entries] of this.#additions) {
|
|
88
|
+
entries.sort((left, right) => (this.#fieldRank.get(left.name) ?? 99) - (this.#fieldRank.get(right.name) ?? 99));
|
|
89
|
+
this.#edits.push({
|
|
90
|
+
startOffset: offset,
|
|
91
|
+
endOffset: offset,
|
|
92
|
+
replacement: insertionText(this.#text, offset, entries.map(({ serialized }) => serialized), this.lineEnding),
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
return this.#edits;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
export function stringList(value) {
|
|
99
|
+
return Array.isArray(value)
|
|
100
|
+
? value.filter((item) => typeof item === "string")
|
|
101
|
+
: [];
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=entity-editor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity-editor.js","sourceRoot":"","sources":["../../src/mutation/entity-editor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { DocumentNode } from "../model/syntax.js";
|
|
2
|
+
import { type MutationEditPlan } from "./diagnostics.js";
|
|
3
|
+
import type { MilestoneMutation } from "./types.js";
|
|
4
|
+
export declare function planMilestoneMutationEdits(text: string, document: DocumentNode, mutation: MilestoneMutation): MutationEditPlan;
|
|
5
|
+
//# sourceMappingURL=milestone.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"milestone.d.ts","sourceRoot":"","sources":["../../src/mutation/milestone.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAmB,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAExE,OAAO,EAAsB,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAE7E,OAAO,KAAK,EAIV,iBAAiB,EAElB,MAAM,YAAY,CAAC;AAkKpB,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,YAAY,EACtB,QAAQ,EAAE,iBAAiB,GAC1B,gBAAgB,CA8ClB"}
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
import { EntityEditor, stringList } from "./entity-editor.js";
|
|
2
|
+
import { mutationDiagnostic } from "./diagnostics.js";
|
|
3
|
+
import { appendDeclarationEdit, deleteDeclarationEdit, majorLineEnding, serializeTags, serializeTextField, splitPhysicalLines } from "./source.js";
|
|
4
|
+
const fieldOrder = ["title", "description", "state", "tags"];
|
|
5
|
+
const states = new Set(["planned", "reached"]);
|
|
6
|
+
const clearableFields = new Set(["description", "state", "tags"]);
|
|
7
|
+
function validStringArray(value) {
|
|
8
|
+
return Array.isArray(value) && value.every((item) => typeof item === "string");
|
|
9
|
+
}
|
|
10
|
+
function requestShapeError(value) {
|
|
11
|
+
if (value === null || typeof value !== "object" || Array.isArray(value)) {
|
|
12
|
+
return "milestone mutation requestがobjectではありません";
|
|
13
|
+
}
|
|
14
|
+
const request = value;
|
|
15
|
+
const kind = request["kind"];
|
|
16
|
+
if (kind !== "milestone.add" && kind !== "milestone.set" && kind !== "milestone.remove") {
|
|
17
|
+
return "milestone mutation kindが未対応です";
|
|
18
|
+
}
|
|
19
|
+
if (typeof request["id"] !== "string")
|
|
20
|
+
return "milestone idがstringではありません";
|
|
21
|
+
const fieldsByKind = {
|
|
22
|
+
"milestone.add": new Set(["kind", "id", "milestone"]),
|
|
23
|
+
"milestone.set": new Set(["kind", "id", "set", "clear", "addTags", "removeTags"]),
|
|
24
|
+
"milestone.remove": new Set(["kind", "id"]),
|
|
25
|
+
};
|
|
26
|
+
if (Object.keys(request).some((name) => !fieldsByKind[kind].has(name))) {
|
|
27
|
+
return `${kind} requestに未対応fieldが含まれています`;
|
|
28
|
+
}
|
|
29
|
+
return undefined;
|
|
30
|
+
}
|
|
31
|
+
function definitionError(value) {
|
|
32
|
+
if (value === null || typeof value !== "object" || Array.isArray(value)) {
|
|
33
|
+
return "milestone definitionがobjectではありません";
|
|
34
|
+
}
|
|
35
|
+
const milestone = value;
|
|
36
|
+
if (Object.keys(milestone).some((name) => !fieldOrder.includes(name))) {
|
|
37
|
+
return "milestone definitionに未対応fieldが含まれています";
|
|
38
|
+
}
|
|
39
|
+
if (typeof milestone["title"] !== "string")
|
|
40
|
+
return "milestone titleがstringではありません";
|
|
41
|
+
if (milestone["description"] !== undefined && typeof milestone["description"] !== "string") {
|
|
42
|
+
return "milestone descriptionがstringではありません";
|
|
43
|
+
}
|
|
44
|
+
if (milestone["state"] !== undefined && !states.has(milestone["state"])) {
|
|
45
|
+
return "milestone stateがplanned/reachedではありません";
|
|
46
|
+
}
|
|
47
|
+
if (milestone["tags"] !== undefined && !validStringArray(milestone["tags"])) {
|
|
48
|
+
return "milestone tagsがstring arrayではありません";
|
|
49
|
+
}
|
|
50
|
+
return undefined;
|
|
51
|
+
}
|
|
52
|
+
function serializeMilestone(mutation, lineEnding) {
|
|
53
|
+
const definition = mutation.milestone;
|
|
54
|
+
return [
|
|
55
|
+
`milestone ${mutation.id}:`,
|
|
56
|
+
` title ${JSON.stringify(definition.title)}`,
|
|
57
|
+
...(definition.description === undefined
|
|
58
|
+
? []
|
|
59
|
+
: [serializeTextField("description", definition.description, lineEnding)]),
|
|
60
|
+
...(definition.state === undefined ? [] : [` state ${definition.state}`]),
|
|
61
|
+
...(definition.tags === undefined ? [] : [` tags ${serializeTags(definition.tags)}`]),
|
|
62
|
+
].join(lineEnding);
|
|
63
|
+
}
|
|
64
|
+
function setRequestError(mutation) {
|
|
65
|
+
const rawSet = mutation.set;
|
|
66
|
+
const rawClear = mutation.clear;
|
|
67
|
+
const rawAddTags = mutation.addTags;
|
|
68
|
+
const rawRemoveTags = mutation.removeTags;
|
|
69
|
+
if (rawSet !== undefined &&
|
|
70
|
+
(rawSet === null || typeof rawSet !== "object" || Array.isArray(rawSet))) {
|
|
71
|
+
return "milestone setがobjectではありません";
|
|
72
|
+
}
|
|
73
|
+
for (const [name, value] of [
|
|
74
|
+
["clear", rawClear],
|
|
75
|
+
["addTags", rawAddTags],
|
|
76
|
+
["removeTags", rawRemoveTags],
|
|
77
|
+
]) {
|
|
78
|
+
if (value !== undefined && !Array.isArray(value))
|
|
79
|
+
return `${name}がarrayではありません`;
|
|
80
|
+
}
|
|
81
|
+
const set = (rawSet ?? {});
|
|
82
|
+
const clear = (rawClear ?? []);
|
|
83
|
+
const addTags = (rawAddTags ?? []);
|
|
84
|
+
const removeTags = (rawRemoveTags ?? []);
|
|
85
|
+
const setEntries = Object.entries(set).filter(([, item]) => item !== undefined);
|
|
86
|
+
if (setEntries.length === 0 &&
|
|
87
|
+
clear.length === 0 &&
|
|
88
|
+
addTags.length === 0 &&
|
|
89
|
+
removeTags.length === 0) {
|
|
90
|
+
return "milestone.setは少なくとも1つの変更指定を必要とします";
|
|
91
|
+
}
|
|
92
|
+
if (Object.keys(set).some((name) => !["title", "description", "state"].includes(name))) {
|
|
93
|
+
return "milestone setに未対応fieldが含まれています";
|
|
94
|
+
}
|
|
95
|
+
if (set.title !== undefined && typeof set.title !== "string")
|
|
96
|
+
return "titleがstringではありません";
|
|
97
|
+
if (set.description !== undefined && typeof set.description !== "string") {
|
|
98
|
+
return "descriptionがstringではありません";
|
|
99
|
+
}
|
|
100
|
+
if (set.state !== undefined && !states.has(set.state)) {
|
|
101
|
+
return "stateがplanned/reachedではありません";
|
|
102
|
+
}
|
|
103
|
+
if (!Array.isArray(clear) || clear.some((name) => !clearableFields.has(name))) {
|
|
104
|
+
return "clearに未対応fieldが含まれています";
|
|
105
|
+
}
|
|
106
|
+
if (new Set(clear).size !== clear.length)
|
|
107
|
+
return "clear fieldが重複しています";
|
|
108
|
+
const clearNames = new Set(clear);
|
|
109
|
+
for (const [setName, clearName] of [
|
|
110
|
+
["description", "description"],
|
|
111
|
+
["state", "state"],
|
|
112
|
+
]) {
|
|
113
|
+
if (set[setName] !== undefined && clearNames.has(clearName)) {
|
|
114
|
+
return `${clearName}をsetとclearへ同時指定できません`;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
if (!validStringArray(addTags) || !validStringArray(removeTags)) {
|
|
118
|
+
return "addTagsとremoveTagsはstring arrayである必要があります";
|
|
119
|
+
}
|
|
120
|
+
if (clearNames.has("tags") && (addTags.length > 0 || removeTags.length > 0)) {
|
|
121
|
+
return "clear tagsとadd/remove tagは併用できません";
|
|
122
|
+
}
|
|
123
|
+
const removed = new Set(removeTags);
|
|
124
|
+
if (addTags.some((tag) => removed.has(tag))) {
|
|
125
|
+
return "同じtagをaddとremoveへ同時指定できません";
|
|
126
|
+
}
|
|
127
|
+
return undefined;
|
|
128
|
+
}
|
|
129
|
+
function planSet(text, declaration, mutation) {
|
|
130
|
+
const error = setRequestError(mutation);
|
|
131
|
+
if (error !== undefined) {
|
|
132
|
+
return { edits: [], diagnostic: mutationDiagnostic("PTMUT-301", error, declaration) };
|
|
133
|
+
}
|
|
134
|
+
const editor = new EntityEditor(text, declaration, fieldOrder, mutation.clear ?? []);
|
|
135
|
+
const set = mutation.set ?? {};
|
|
136
|
+
if (set.title !== undefined)
|
|
137
|
+
editor.setScalar("title", JSON.stringify(set.title));
|
|
138
|
+
if (set.description !== undefined)
|
|
139
|
+
editor.setText("description", set.description);
|
|
140
|
+
if (set.state !== undefined)
|
|
141
|
+
editor.setScalar("state", set.state);
|
|
142
|
+
if (!(mutation.clear ?? []).includes("tags")) {
|
|
143
|
+
const removed = new Set(mutation.removeTags ?? []);
|
|
144
|
+
const tags = stringList(editor.fieldValue("tags")).filter((tag) => !removed.has(tag));
|
|
145
|
+
for (const tag of mutation.addTags ?? []) {
|
|
146
|
+
if (!tags.includes(tag))
|
|
147
|
+
tags.push(tag);
|
|
148
|
+
}
|
|
149
|
+
if ((mutation.addTags?.length ?? 0) > 0 || (mutation.removeTags?.length ?? 0) > 0) {
|
|
150
|
+
editor.setTags(tags);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
return { edits: editor.finish() };
|
|
154
|
+
}
|
|
155
|
+
export function planMilestoneMutationEdits(text, document, mutation) {
|
|
156
|
+
const requestError = requestShapeError(mutation);
|
|
157
|
+
if (requestError !== undefined) {
|
|
158
|
+
return { edits: [], diagnostic: mutationDiagnostic("PTMUT-301", requestError) };
|
|
159
|
+
}
|
|
160
|
+
const entity = document.declarations.find(({ id }) => id === mutation.id);
|
|
161
|
+
if (mutation.kind === "milestone.add") {
|
|
162
|
+
if (entity !== undefined) {
|
|
163
|
+
return {
|
|
164
|
+
edits: [],
|
|
165
|
+
diagnostic: mutationDiagnostic("PTMUT-304", `entity ID ${mutation.id}はすでに使用されています`, entity),
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
const error = definitionError(mutation.milestone);
|
|
169
|
+
if (error !== undefined) {
|
|
170
|
+
return { edits: [], diagnostic: mutationDiagnostic("PTMUT-301", error) };
|
|
171
|
+
}
|
|
172
|
+
const lineEnding = majorLineEnding(text);
|
|
173
|
+
return {
|
|
174
|
+
edits: [appendDeclarationEdit(text, serializeMilestone(mutation, lineEnding), lineEnding)],
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
if (entity === undefined) {
|
|
178
|
+
return {
|
|
179
|
+
edits: [],
|
|
180
|
+
diagnostic: mutationDiagnostic("PTMUT-302", `milestone ${mutation.id}が存在しません`),
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
if (entity.kind !== "milestone") {
|
|
184
|
+
return {
|
|
185
|
+
edits: [],
|
|
186
|
+
diagnostic: mutationDiagnostic("PTMUT-303", `entity ${mutation.id}はmilestoneではありません`, entity),
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
if (mutation.kind === "milestone.remove") {
|
|
190
|
+
return { edits: [deleteDeclarationEdit(entity, splitPhysicalLines(text))] };
|
|
191
|
+
}
|
|
192
|
+
return planSet(text, entity, mutation);
|
|
193
|
+
}
|
|
194
|
+
//# sourceMappingURL=milestone.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"milestone.js","sourceRoot":"","sources":["../../src/mutation/milestone.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { DocumentNode } from "../model/syntax.js";
|
|
2
|
+
import { type MutationEditPlan } from "./diagnostics.js";
|
|
3
|
+
import type { ResourceMutation } from "./types.js";
|
|
4
|
+
export declare function planResourceMutationEdits(text: string, document: DocumentNode, mutation: ResourceMutation): MutationEditPlan;
|
|
5
|
+
//# sourceMappingURL=resource.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resource.d.ts","sourceRoot":"","sources":["../../src/mutation/resource.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAmB,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAExE,OAAO,EAAsB,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAE7E,OAAO,KAAK,EAIV,gBAAgB,EAEjB,MAAM,YAAY,CAAC;AA+GpB,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,YAAY,EACtB,QAAQ,EAAE,gBAAgB,GACzB,gBAAgB,CA8ClB"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import { EntityEditor } from "./entity-editor.js";
|
|
2
|
+
import { mutationDiagnostic } from "./diagnostics.js";
|
|
3
|
+
import { appendDeclarationEdit, deleteDeclarationEdit, majorLineEnding, serializeTextField, splitPhysicalLines } from "./source.js";
|
|
4
|
+
const fieldOrder = ["title", "description", "capacity", "tags"];
|
|
5
|
+
function requestShapeError(value) {
|
|
6
|
+
if (value === null || typeof value !== "object" || Array.isArray(value)) {
|
|
7
|
+
return "resource mutation requestがobjectではありません";
|
|
8
|
+
}
|
|
9
|
+
const request = value;
|
|
10
|
+
const kind = request["kind"];
|
|
11
|
+
if (kind !== "resource.add" && kind !== "resource.set" && kind !== "resource.remove") {
|
|
12
|
+
return "resource mutation kindが未対応です";
|
|
13
|
+
}
|
|
14
|
+
if (typeof request["id"] !== "string")
|
|
15
|
+
return "resource idがstringではありません";
|
|
16
|
+
const fieldsByKind = {
|
|
17
|
+
"resource.add": new Set(["kind", "id", "resource"]),
|
|
18
|
+
"resource.set": new Set(["kind", "id", "set", "clear"]),
|
|
19
|
+
"resource.remove": new Set(["kind", "id"]),
|
|
20
|
+
};
|
|
21
|
+
if (Object.keys(request).some((name) => !fieldsByKind[kind].has(name))) {
|
|
22
|
+
return `${kind} requestに未対応fieldが含まれています`;
|
|
23
|
+
}
|
|
24
|
+
return undefined;
|
|
25
|
+
}
|
|
26
|
+
function definitionError(value) {
|
|
27
|
+
if (value === null || typeof value !== "object" || Array.isArray(value)) {
|
|
28
|
+
return "resource definitionがobjectではありません";
|
|
29
|
+
}
|
|
30
|
+
const resource = value;
|
|
31
|
+
if (Object.keys(resource).some((name) => !["title", "description", "capacity"].includes(name))) {
|
|
32
|
+
return "resource definitionに未対応fieldが含まれています";
|
|
33
|
+
}
|
|
34
|
+
if (typeof resource["title"] !== "string")
|
|
35
|
+
return "resource titleがstringではありません";
|
|
36
|
+
if (!Number.isSafeInteger(resource["capacity"])) {
|
|
37
|
+
return "resource capacityがsafe integerではありません";
|
|
38
|
+
}
|
|
39
|
+
if (resource["description"] !== undefined && typeof resource["description"] !== "string") {
|
|
40
|
+
return "resource descriptionがstringではありません";
|
|
41
|
+
}
|
|
42
|
+
return undefined;
|
|
43
|
+
}
|
|
44
|
+
function serializeResource(mutation, lineEnding) {
|
|
45
|
+
const definition = mutation.resource;
|
|
46
|
+
return [
|
|
47
|
+
`resource ${mutation.id}:`,
|
|
48
|
+
` title ${JSON.stringify(definition.title)}`,
|
|
49
|
+
...(definition.description === undefined
|
|
50
|
+
? []
|
|
51
|
+
: [serializeTextField("description", definition.description, lineEnding)]),
|
|
52
|
+
` capacity ${definition.capacity}`,
|
|
53
|
+
].join(lineEnding);
|
|
54
|
+
}
|
|
55
|
+
function setRequestError(mutation) {
|
|
56
|
+
const rawSet = mutation.set;
|
|
57
|
+
const rawClear = mutation.clear;
|
|
58
|
+
if (rawSet !== undefined &&
|
|
59
|
+
(rawSet === null || typeof rawSet !== "object" || Array.isArray(rawSet))) {
|
|
60
|
+
return "resource setがobjectではありません";
|
|
61
|
+
}
|
|
62
|
+
if (rawClear !== undefined && !Array.isArray(rawClear))
|
|
63
|
+
return "clearがarrayではありません";
|
|
64
|
+
const set = (rawSet ?? {});
|
|
65
|
+
const clear = (rawClear ?? []);
|
|
66
|
+
const setEntries = Object.entries(set).filter(([, item]) => item !== undefined);
|
|
67
|
+
if (setEntries.length === 0 && clear.length === 0) {
|
|
68
|
+
return "resource.setは少なくとも1つの変更指定を必要とします";
|
|
69
|
+
}
|
|
70
|
+
if (Object.keys(set).some((name) => !["title", "description", "capacity"].includes(name))) {
|
|
71
|
+
return "resource setに未対応fieldが含まれています";
|
|
72
|
+
}
|
|
73
|
+
if (set.title !== undefined && typeof set.title !== "string")
|
|
74
|
+
return "titleがstringではありません";
|
|
75
|
+
if (set.description !== undefined && typeof set.description !== "string") {
|
|
76
|
+
return "descriptionがstringではありません";
|
|
77
|
+
}
|
|
78
|
+
if (set.capacity !== undefined && !Number.isSafeInteger(set.capacity)) {
|
|
79
|
+
return "capacityがsafe integerではありません";
|
|
80
|
+
}
|
|
81
|
+
if (!Array.isArray(clear) || clear.some((name) => name !== "description")) {
|
|
82
|
+
return "clearに未対応fieldが含まれています";
|
|
83
|
+
}
|
|
84
|
+
if (new Set(clear).size !== clear.length)
|
|
85
|
+
return "clear fieldが重複しています";
|
|
86
|
+
if (set.description !== undefined && clear.includes("description")) {
|
|
87
|
+
return "descriptionをsetとclearへ同時指定できません";
|
|
88
|
+
}
|
|
89
|
+
return undefined;
|
|
90
|
+
}
|
|
91
|
+
function planSet(text, declaration, mutation) {
|
|
92
|
+
const error = setRequestError(mutation);
|
|
93
|
+
if (error !== undefined) {
|
|
94
|
+
return { edits: [], diagnostic: mutationDiagnostic("PTMUT-301", error, declaration) };
|
|
95
|
+
}
|
|
96
|
+
const editor = new EntityEditor(text, declaration, fieldOrder, mutation.clear ?? []);
|
|
97
|
+
const set = mutation.set ?? {};
|
|
98
|
+
if (set.title !== undefined)
|
|
99
|
+
editor.setScalar("title", JSON.stringify(set.title));
|
|
100
|
+
if (set.description !== undefined)
|
|
101
|
+
editor.setText("description", set.description);
|
|
102
|
+
if (set.capacity !== undefined)
|
|
103
|
+
editor.setScalar("capacity", String(set.capacity));
|
|
104
|
+
return { edits: editor.finish() };
|
|
105
|
+
}
|
|
106
|
+
export function planResourceMutationEdits(text, document, mutation) {
|
|
107
|
+
const requestError = requestShapeError(mutation);
|
|
108
|
+
if (requestError !== undefined) {
|
|
109
|
+
return { edits: [], diagnostic: mutationDiagnostic("PTMUT-301", requestError) };
|
|
110
|
+
}
|
|
111
|
+
const entity = document.declarations.find(({ id }) => id === mutation.id);
|
|
112
|
+
if (mutation.kind === "resource.add") {
|
|
113
|
+
if (entity !== undefined) {
|
|
114
|
+
return {
|
|
115
|
+
edits: [],
|
|
116
|
+
diagnostic: mutationDiagnostic("PTMUT-304", `entity ID ${mutation.id}はすでに使用されています`, entity),
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
const error = definitionError(mutation.resource);
|
|
120
|
+
if (error !== undefined) {
|
|
121
|
+
return { edits: [], diagnostic: mutationDiagnostic("PTMUT-301", error) };
|
|
122
|
+
}
|
|
123
|
+
const lineEnding = majorLineEnding(text);
|
|
124
|
+
return {
|
|
125
|
+
edits: [appendDeclarationEdit(text, serializeResource(mutation, lineEnding), lineEnding)],
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
if (entity === undefined) {
|
|
129
|
+
return {
|
|
130
|
+
edits: [],
|
|
131
|
+
diagnostic: mutationDiagnostic("PTMUT-302", `resource ${mutation.id}が存在しません`),
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
if (entity.kind !== "resource") {
|
|
135
|
+
return {
|
|
136
|
+
edits: [],
|
|
137
|
+
diagnostic: mutationDiagnostic("PTMUT-303", `entity ${mutation.id}はresourceではありません`, entity),
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
if (mutation.kind === "resource.remove") {
|
|
141
|
+
return { edits: [deleteDeclarationEdit(entity, splitPhysicalLines(text))] };
|
|
142
|
+
}
|
|
143
|
+
return planSet(text, entity, mutation);
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=resource.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resource.js","sourceRoot":"","sources":["../../src/mutation/resource.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { DeclarationNode, FieldNode } from "../model/syntax.js";
|
|
2
|
+
import type { TextEdit } from "./text-edits.js";
|
|
3
|
+
export interface PhysicalLine {
|
|
4
|
+
readonly text: string;
|
|
5
|
+
readonly start: number;
|
|
6
|
+
readonly end: number;
|
|
7
|
+
readonly endWithEnding: number;
|
|
8
|
+
}
|
|
9
|
+
export declare function splitPhysicalLines(text: string): readonly PhysicalLine[];
|
|
10
|
+
export declare function majorLineEnding(text: string): "\n" | "\r\n";
|
|
11
|
+
export declare function lineIndexAt(lines: readonly PhysicalLine[], offset: number): number;
|
|
12
|
+
export declare function contentEndOffset(field: FieldNode, lines: readonly PhysicalLine[]): number;
|
|
13
|
+
export declare function contentTextEndOffset(field: FieldNode, lines: readonly PhysicalLine[]): number;
|
|
14
|
+
export declare function leadingCommentStart(lines: readonly PhysicalLine[], elementStart: number, indentation: number): number;
|
|
15
|
+
export declare function deleteFieldEdit(field: FieldNode, lines: readonly PhysicalLine[]): TextEdit;
|
|
16
|
+
export declare function deleteDeclarationEdit(declaration: DeclarationNode, lines: readonly PhysicalLine[]): TextEdit;
|
|
17
|
+
export declare function serializeTags(tags: readonly string[]): string;
|
|
18
|
+
export declare function serializeTextField(name: string, value: string, lineEnding: string): string;
|
|
19
|
+
export declare function fieldInsertionOffset(declaration: DeclarationNode, name: string, deleted: ReadonlySet<string>, lines: readonly PhysicalLine[], fieldRank: ReadonlyMap<string, number>): number;
|
|
20
|
+
export declare function insertionText(text: string, offset: number, serializedFields: readonly string[], lineEnding: string): string;
|
|
21
|
+
export declare function appendDeclarationEdit(text: string, serialized: string, lineEnding?: "\n" | "\r\n"): TextEdit;
|
|
22
|
+
//# sourceMappingURL=source.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source.d.ts","sourceRoot":"","sources":["../../src/mutation/source.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAoB,MAAM,oBAAoB,CAAC;AACvF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAEhD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAID,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,YAAY,EAAE,CAexE;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAa3D;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,SAAS,YAAY,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CASlF;AAED,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,SAAS,EAChB,KAAK,EAAE,SAAS,YAAY,EAAE,GAC7B,MAAM,CAUR;AAED,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,SAAS,EAChB,KAAK,EAAE,SAAS,YAAY,EAAE,GAC7B,MAAM,CAUR;AAaD,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,SAAS,YAAY,EAAE,EAC9B,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,GAClB,MAAM,CAWR;AAED,wBAAgB,eAAe,CAC7B,KAAK,EAAE,SAAS,EAChB,KAAK,EAAE,SAAS,YAAY,EAAE,GAC7B,QAAQ,CAMV;AAED,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,eAAe,EAC5B,KAAK,EAAE,SAAS,YAAY,EAAE,GAC7B,QAAQ,CAMV;AAMD,wBAAgB,aAAa,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAE7D;AAED,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,GACjB,MAAM,CAaR;AAED,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,eAAe,EAC5B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,EAC5B,KAAK,EAAE,SAAS,YAAY,EAAE,EAC9B,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GACrC,MAAM,CAWR;AAED,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,gBAAgB,EAAE,SAAS,MAAM,EAAE,EACnC,UAAU,EAAE,MAAM,GACjB,MAAM,CAIR;AAED,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,UAAU,gBAAwB,GACjC,QAAQ,CAgBV"}
|