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.
Files changed (176) hide show
  1. package/CHANGELOG.md +53 -0
  2. package/LICENSE +21 -0
  3. package/README.md +134 -0
  4. package/dist/analysis/graph.d.ts +41 -0
  5. package/dist/analysis/graph.d.ts.map +1 -0
  6. package/dist/analysis/graph.js +199 -0
  7. package/dist/analysis/graph.js.map +1 -0
  8. package/dist/analysis/precedence.d.ts +52 -0
  9. package/dist/analysis/precedence.d.ts.map +1 -0
  10. package/dist/analysis/precedence.js +187 -0
  11. package/dist/analysis/precedence.js.map +1 -0
  12. package/dist/analysis/resource.d.ts +96 -0
  13. package/dist/analysis/resource.d.ts.map +1 -0
  14. package/dist/analysis/resource.js +522 -0
  15. package/dist/analysis/resource.js.map +1 -0
  16. package/dist/application/analyze.d.ts +32 -0
  17. package/dist/application/analyze.d.ts.map +1 -0
  18. package/dist/application/analyze.js +144 -0
  19. package/dist/application/analyze.js.map +1 -0
  20. package/dist/application/check.d.ts +24 -0
  21. package/dist/application/check.d.ts.map +1 -0
  22. package/dist/application/check.js +43 -0
  23. package/dist/application/check.js.map +1 -0
  24. package/dist/application/format.d.ts +21 -0
  25. package/dist/application/format.d.ts.map +1 -0
  26. package/dist/application/format.js +52 -0
  27. package/dist/application/format.js.map +1 -0
  28. package/dist/application/mutate.d.ts +4 -0
  29. package/dist/application/mutate.d.ts.map +1 -0
  30. package/dist/application/mutate.js +175 -0
  31. package/dist/application/mutate.js.map +1 -0
  32. package/dist/application/next.d.ts +86 -0
  33. package/dist/application/next.d.ts.map +1 -0
  34. package/dist/application/next.js +310 -0
  35. package/dist/application/next.js.map +1 -0
  36. package/dist/cli.d.ts +3 -0
  37. package/dist/cli.d.ts.map +1 -0
  38. package/dist/cli.js +2103 -0
  39. package/dist/cli.js.map +1 -0
  40. package/dist/conversion/mermaid-import.d.ts +26 -0
  41. package/dist/conversion/mermaid-import.d.ts.map +1 -0
  42. package/dist/conversion/mermaid-import.js +655 -0
  43. package/dist/conversion/mermaid-import.js.map +1 -0
  44. package/dist/conversion/mermaid.d.ts +38 -0
  45. package/dist/conversion/mermaid.d.ts.map +1 -0
  46. package/dist/conversion/mermaid.js +362 -0
  47. package/dist/conversion/mermaid.js.map +1 -0
  48. package/dist/editing/unified-diff.d.ts +7 -0
  49. package/dist/editing/unified-diff.d.ts.map +1 -0
  50. package/dist/editing/unified-diff.js +81 -0
  51. package/dist/editing/unified-diff.js.map +1 -0
  52. package/dist/formatter/source-formatter.d.ts +17 -0
  53. package/dist/formatter/source-formatter.d.ts.map +1 -0
  54. package/dist/formatter/source-formatter.js +210 -0
  55. package/dist/formatter/source-formatter.js.map +1 -0
  56. package/dist/help/registry.d.ts +37 -0
  57. package/dist/help/registry.d.ts.map +1 -0
  58. package/dist/help/registry.js +657 -0
  59. package/dist/help/registry.js.map +1 -0
  60. package/dist/index.d.ts +44 -0
  61. package/dist/index.d.ts.map +1 -0
  62. package/dist/index.js +23 -0
  63. package/dist/index.js.map +1 -0
  64. package/dist/io/document-file.d.ts +9 -0
  65. package/dist/io/document-file.d.ts.map +1 -0
  66. package/dist/io/document-file.js +19 -0
  67. package/dist/io/document-file.js.map +1 -0
  68. package/dist/io/safe-write.d.ts +33 -0
  69. package/dist/io/safe-write.d.ts.map +1 -0
  70. package/dist/io/safe-write.js +280 -0
  71. package/dist/io/safe-write.js.map +1 -0
  72. package/dist/model/diagnostics.d.ts +43 -0
  73. package/dist/model/diagnostics.d.ts.map +1 -0
  74. package/dist/model/diagnostics.js +47 -0
  75. package/dist/model/diagnostics.js.map +1 -0
  76. package/dist/model/rational.d.ts +21 -0
  77. package/dist/model/rational.d.ts.map +1 -0
  78. package/dist/model/rational.js +84 -0
  79. package/dist/model/rational.js.map +1 -0
  80. package/dist/model/syntax.d.ts +67 -0
  81. package/dist/model/syntax.d.ts.map +1 -0
  82. package/dist/model/syntax.js +15 -0
  83. package/dist/model/syntax.js.map +1 -0
  84. package/dist/model/units.d.ts +18 -0
  85. package/dist/model/units.d.ts.map +1 -0
  86. package/dist/model/units.js +29 -0
  87. package/dist/model/units.js.map +1 -0
  88. package/dist/mutation/advance.d.ts +26 -0
  89. package/dist/mutation/advance.d.ts.map +1 -0
  90. package/dist/mutation/advance.js +261 -0
  91. package/dist/mutation/advance.js.map +1 -0
  92. package/dist/mutation/diagnostics.d.ts +10 -0
  93. package/dist/mutation/diagnostics.d.ts.map +1 -0
  94. package/dist/mutation/diagnostics.js +10 -0
  95. package/dist/mutation/diagnostics.js.map +1 -0
  96. package/dist/mutation/entity-editor.d.ts +16 -0
  97. package/dist/mutation/entity-editor.d.ts.map +1 -0
  98. package/dist/mutation/entity-editor.js +103 -0
  99. package/dist/mutation/entity-editor.js.map +1 -0
  100. package/dist/mutation/milestone.d.ts +5 -0
  101. package/dist/mutation/milestone.d.ts.map +1 -0
  102. package/dist/mutation/milestone.js +194 -0
  103. package/dist/mutation/milestone.js.map +1 -0
  104. package/dist/mutation/resource.d.ts +5 -0
  105. package/dist/mutation/resource.d.ts.map +1 -0
  106. package/dist/mutation/resource.js +145 -0
  107. package/dist/mutation/resource.js.map +1 -0
  108. package/dist/mutation/source.d.ts +22 -0
  109. package/dist/mutation/source.d.ts.map +1 -0
  110. package/dist/mutation/source.js +155 -0
  111. package/dist/mutation/source.js.map +1 -0
  112. package/dist/mutation/task.d.ts +10 -0
  113. package/dist/mutation/task.d.ts.map +1 -0
  114. package/dist/mutation/task.js +644 -0
  115. package/dist/mutation/task.js.map +1 -0
  116. package/dist/mutation/text-edits.d.ts +8 -0
  117. package/dist/mutation/text-edits.d.ts.map +1 -0
  118. package/dist/mutation/text-edits.js +33 -0
  119. package/dist/mutation/text-edits.js.map +1 -0
  120. package/dist/mutation/types.d.ts +153 -0
  121. package/dist/mutation/types.d.ts.map +1 -0
  122. package/dist/mutation/types.js +2 -0
  123. package/dist/mutation/types.js.map +1 -0
  124. package/dist/parser/document-parser.d.ts +6 -0
  125. package/dist/parser/document-parser.d.ts.map +1 -0
  126. package/dist/parser/document-parser.js +735 -0
  127. package/dist/parser/document-parser.js.map +1 -0
  128. package/dist/recommendation/explanation-types.d.ts +226 -0
  129. package/dist/recommendation/explanation-types.d.ts.map +1 -0
  130. package/dist/recommendation/explanation-types.js +2 -0
  131. package/dist/recommendation/explanation-types.js.map +1 -0
  132. package/dist/recommendation/explanation-validation.d.ts +4 -0
  133. package/dist/recommendation/explanation-validation.d.ts.map +1 -0
  134. package/dist/recommendation/explanation-validation.js +745 -0
  135. package/dist/recommendation/explanation-validation.js.map +1 -0
  136. package/dist/recommendation/explanation-values.d.ts +7 -0
  137. package/dist/recommendation/explanation-values.d.ts.map +1 -0
  138. package/dist/recommendation/explanation-values.js +283 -0
  139. package/dist/recommendation/explanation-values.js.map +1 -0
  140. package/dist/recommendation/explanation.d.ts +8 -0
  141. package/dist/recommendation/explanation.d.ts.map +1 -0
  142. package/dist/recommendation/explanation.js +1022 -0
  143. package/dist/recommendation/explanation.js.map +1 -0
  144. package/dist/recommendation/failure.d.ts +3 -0
  145. package/dist/recommendation/failure.d.ts.map +1 -0
  146. package/dist/recommendation/failure.js +4 -0
  147. package/dist/recommendation/failure.js.map +1 -0
  148. package/dist/recommendation/json.d.ts +3 -0
  149. package/dist/recommendation/json.d.ts.map +1 -0
  150. package/dist/recommendation/json.js +252 -0
  151. package/dist/recommendation/json.js.map +1 -0
  152. package/dist/recommendation/override-types.d.ts +117 -0
  153. package/dist/recommendation/override-types.d.ts.map +1 -0
  154. package/dist/recommendation/override-types.js +2 -0
  155. package/dist/recommendation/override-types.js.map +1 -0
  156. package/dist/recommendation/override.d.ts +7 -0
  157. package/dist/recommendation/override.d.ts.map +1 -0
  158. package/dist/recommendation/override.js +717 -0
  159. package/dist/recommendation/override.js.map +1 -0
  160. package/dist/recommendation/ranking.d.ts +7 -0
  161. package/dist/recommendation/ranking.d.ts.map +1 -0
  162. package/dist/recommendation/ranking.js +391 -0
  163. package/dist/recommendation/ranking.js.map +1 -0
  164. package/dist/recommendation/types.d.ts +83 -0
  165. package/dist/recommendation/types.d.ts.map +1 -0
  166. package/dist/recommendation/types.js +2 -0
  167. package/dist/recommendation/types.js.map +1 -0
  168. package/dist/semantic/validator.d.ts +4 -0
  169. package/dist/semantic/validator.d.ts.map +1 -0
  170. package/dist/semantic/validator.js +490 -0
  171. package/dist/semantic/validator.js.map +1 -0
  172. package/dist/version.d.ts +2 -0
  173. package/dist/version.d.ts.map +1 -0
  174. package/dist/version.js +2 -0
  175. package/dist/version.js.map +1 -0
  176. 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"}