@0disoft/mensor-compiler 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/LICENSE +201 -0
  2. package/dist/src/check-project.d.ts +9 -0
  3. package/dist/src/check-project.d.ts.map +1 -0
  4. package/dist/src/check-project.js +334 -0
  5. package/dist/src/check-project.js.map +1 -0
  6. package/dist/src/compiler-timing.d.ts +25 -0
  7. package/dist/src/compiler-timing.d.ts.map +1 -0
  8. package/dist/src/compiler-timing.js +72 -0
  9. package/dist/src/compiler-timing.js.map +1 -0
  10. package/dist/src/feature-roots.d.ts +6 -0
  11. package/dist/src/feature-roots.d.ts.map +1 -0
  12. package/dist/src/feature-roots.js +8 -0
  13. package/dist/src/feature-roots.js.map +1 -0
  14. package/dist/src/filesystem.d.ts +4 -0
  15. package/dist/src/filesystem.d.ts.map +1 -0
  16. package/dist/src/filesystem.js +127 -0
  17. package/dist/src/filesystem.js.map +1 -0
  18. package/dist/src/form-facts.d.ts +37 -0
  19. package/dist/src/form-facts.d.ts.map +1 -0
  20. package/dist/src/form-facts.js +2 -0
  21. package/dist/src/form-facts.js.map +1 -0
  22. package/dist/src/form-index-semantics.d.ts +4 -0
  23. package/dist/src/form-index-semantics.d.ts.map +1 -0
  24. package/dist/src/form-index-semantics.js +149 -0
  25. package/dist/src/form-index-semantics.js.map +1 -0
  26. package/dist/src/form-index-types.d.ts +69 -0
  27. package/dist/src/form-index-types.d.ts.map +1 -0
  28. package/dist/src/form-index-types.js +11 -0
  29. package/dist/src/form-index-types.js.map +1 -0
  30. package/dist/src/form-index-validation.d.ts +3 -0
  31. package/dist/src/form-index-validation.d.ts.map +1 -0
  32. package/dist/src/form-index-validation.js +360 -0
  33. package/dist/src/form-index-validation.js.map +1 -0
  34. package/dist/src/form-index.d.ts +8 -0
  35. package/dist/src/form-index.d.ts.map +1 -0
  36. package/dist/src/form-index.js +94 -0
  37. package/dist/src/form-index.js.map +1 -0
  38. package/dist/src/form-rule.d.ts +9 -0
  39. package/dist/src/form-rule.d.ts.map +1 -0
  40. package/dist/src/form-rule.js +399 -0
  41. package/dist/src/form-rule.js.map +1 -0
  42. package/dist/src/handler-rule.d.ts +10 -0
  43. package/dist/src/handler-rule.d.ts.map +1 -0
  44. package/dist/src/handler-rule.js +75 -0
  45. package/dist/src/handler-rule.js.map +1 -0
  46. package/dist/src/html-forms.d.ts +12 -0
  47. package/dist/src/html-forms.d.ts.map +1 -0
  48. package/dist/src/html-forms.js +275 -0
  49. package/dist/src/html-forms.js.map +1 -0
  50. package/dist/src/index.d.ts +3 -0
  51. package/dist/src/index.d.ts.map +1 -0
  52. package/dist/src/index.js +2 -0
  53. package/dist/src/index.js.map +1 -0
  54. package/dist/src/locations.d.ts +12 -0
  55. package/dist/src/locations.d.ts.map +1 -0
  56. package/dist/src/locations.js +148 -0
  57. package/dist/src/locations.js.map +1 -0
  58. package/dist/src/module-boundary-rule.d.ts +12 -0
  59. package/dist/src/module-boundary-rule.d.ts.map +1 -0
  60. package/dist/src/module-boundary-rule.js +256 -0
  61. package/dist/src/module-boundary-rule.js.map +1 -0
  62. package/dist/src/ownership-rule.d.ts +13 -0
  63. package/dist/src/ownership-rule.d.ts.map +1 -0
  64. package/dist/src/ownership-rule.js +98 -0
  65. package/dist/src/ownership-rule.js.map +1 -0
  66. package/dist/src/paths.d.ts +11 -0
  67. package/dist/src/paths.d.ts.map +1 -0
  68. package/dist/src/paths.js +35 -0
  69. package/dist/src/paths.js.map +1 -0
  70. package/dist/src/route-index.d.ts +9 -0
  71. package/dist/src/route-index.d.ts.map +1 -0
  72. package/dist/src/route-index.js +31 -0
  73. package/dist/src/route-index.js.map +1 -0
  74. package/dist/src/route-rule.d.ts +11 -0
  75. package/dist/src/route-rule.d.ts.map +1 -0
  76. package/dist/src/route-rule.js +54 -0
  77. package/dist/src/route-rule.js.map +1 -0
  78. package/dist/src/source-fact-index.d.ts +8 -0
  79. package/dist/src/source-fact-index.d.ts.map +1 -0
  80. package/dist/src/source-fact-index.js +38 -0
  81. package/dist/src/source-fact-index.js.map +1 -0
  82. package/dist/src/types.d.ts +29 -0
  83. package/dist/src/types.d.ts.map +1 -0
  84. package/dist/src/types.js +2 -0
  85. package/dist/src/types.js.map +1 -0
  86. package/dist/src/typescript-source.d.ts +22 -0
  87. package/dist/src/typescript-source.d.ts.map +1 -0
  88. package/dist/src/typescript-source.js +352 -0
  89. package/dist/src/typescript-source.js.map +1 -0
  90. package/package.json +48 -0
@@ -0,0 +1,275 @@
1
+ import { parse, } from "parse5";
2
+ import { createContentDigest, parseFormIndex, serializeFormIndex, verifyFormIndexContent, } from "./form-index.js";
3
+ import { compareText } from "./paths.js";
4
+ const staticHtmlSourceKind = "mensor/static-html";
5
+ const formControlTagNames = ["button", "input", "select", "textarea"];
6
+ export function createStaticHtmlFormIndexProvider(options) {
7
+ const documents = new Map();
8
+ const sources = new Map();
9
+ async function getDocument(documentPath) {
10
+ let document = documents.get(documentPath);
11
+ if (document === undefined) {
12
+ const extract = async () => {
13
+ const source = options.timing === undefined
14
+ ? await options.readSource(documentPath)
15
+ : await options.timing.measure("templateRead", () => options.readSource(documentPath));
16
+ sources.set(documentPath, source);
17
+ options.timing?.recordTemplateSource(source);
18
+ return options.timing === undefined
19
+ ? extractStaticHtmlFormDocument(documentPath, source)
20
+ : options.timing.measureSync("templateExtraction", () => extractStaticHtmlFormDocument(documentPath, source));
21
+ };
22
+ document = extract();
23
+ documents.set(documentPath, document);
24
+ }
25
+ return document;
26
+ }
27
+ return {
28
+ async getIndex(documentPaths) {
29
+ const uniquePaths = [...new Set(documentPaths)].sort(compareText);
30
+ const indexedDocuments = [];
31
+ for (const documentPath of uniquePaths) {
32
+ indexedDocuments.push(await getDocument(documentPath));
33
+ }
34
+ const validate = () => {
35
+ const serialized = serializeFormIndex({
36
+ schemaVersion: 1,
37
+ producer: {
38
+ name: staticHtmlSourceKind,
39
+ version: options.producerVersion,
40
+ },
41
+ documents: indexedDocuments,
42
+ });
43
+ const parsed = parseFormIndex(serialized);
44
+ return verifyFormIndexContent(parsed, (documentPath) => sources.get(documentPath));
45
+ };
46
+ return options.timing === undefined
47
+ ? validate()
48
+ : options.timing.measureSync("formIndexValidation", validate);
49
+ },
50
+ };
51
+ }
52
+ export function extractStaticHtmlFormDocument(documentPath, html) {
53
+ const document = parse(html, { sourceCodeLocationInfo: true });
54
+ const elements = [];
55
+ collectElements(document.childNodes, elements);
56
+ const forms = elements.filter((element) => element.tagName === "form");
57
+ const controls = elements.filter(isFormControl);
58
+ return {
59
+ path: documentPath,
60
+ contentDigest: createContentDigest(html),
61
+ sourceKind: staticHtmlSourceKind,
62
+ inspection: { state: "complete" },
63
+ forms: forms.map((form) => indexedFormFact(form, forms, controls)),
64
+ };
65
+ }
66
+ function indexedFormFact(form, forms, controls) {
67
+ const ownedControls = controls.filter((control) => associatedForm(control, forms) === form);
68
+ return {
69
+ identity: stringAttributeEvidence(form, "id"),
70
+ method: methodEvidence(form),
71
+ action: actionEvidence(form),
72
+ range: elementStartTagRange(form),
73
+ controls: ownedControls.map((control) => indexedControlFact(control, ownedControls)),
74
+ };
75
+ }
76
+ function indexedControlFact(control, ownedControls) {
77
+ const range = elementStartTagRange(control);
78
+ const inputType = controlInputType(control);
79
+ return {
80
+ name: stringAttributeEvidence(control, "name"),
81
+ controlKind: known(control.tagName, range),
82
+ inputType: known(inputType, range),
83
+ multiple: known(attribute(control, "multiple") !== null, range),
84
+ multiplicity: known(controlMultiplicity(control, ownedControls), range),
85
+ successful: successfulEvidence(control, inputType, range),
86
+ range,
87
+ };
88
+ }
89
+ function methodEvidence(form) {
90
+ const value = attribute(form, "method");
91
+ const range = elementAttributeRange(form, "method");
92
+ return value === null
93
+ ? { state: "absent", range }
94
+ : known(asciiLowercase(value), range);
95
+ }
96
+ function actionEvidence(form) {
97
+ const value = attribute(form, "action");
98
+ const range = elementAttributeRange(form, "action");
99
+ return value === null || value.length === 0
100
+ ? { state: "current-document", range }
101
+ : known(value, range);
102
+ }
103
+ function stringAttributeEvidence(element, name) {
104
+ const value = attribute(element, name);
105
+ const range = elementAttributeRange(element, name);
106
+ return value === null || value.length === 0
107
+ ? { state: "absent", range }
108
+ : known(value, range);
109
+ }
110
+ function successfulEvidence(control, inputType, range) {
111
+ if (isEffectivelyDisabled(control)) {
112
+ return known(false, range);
113
+ }
114
+ const unsupportedReason = unsupportedControlReason(control, inputType);
115
+ if (unsupportedReason !== undefined) {
116
+ return {
117
+ state: "unsupported",
118
+ reason: unsupportedReason,
119
+ range,
120
+ };
121
+ }
122
+ return known(isSuccessfulFieldCandidate(control), range);
123
+ }
124
+ function unsupportedControlReason(control, inputType) {
125
+ const name = attribute(control, "name") ?? "";
126
+ const isSubmitter = control.tagName === "button" ||
127
+ (control.tagName === "input" && ["image", "submit"].includes(inputType));
128
+ if (isSubmitter &&
129
+ (attribute(control, "formaction") !== null ||
130
+ attribute(control, "formmethod") !== null)) {
131
+ return "submitter-route-override";
132
+ }
133
+ if (isSubmitter && name.length > 0) {
134
+ return "named-submitter";
135
+ }
136
+ if (control.tagName === "input" && inputType === "file" && name.length > 0) {
137
+ return "file-input";
138
+ }
139
+ return undefined;
140
+ }
141
+ function controlMultiplicity(control, ownedControls) {
142
+ const name = attribute(control, "name");
143
+ if (name === null || name.length === 0 || !isSuccessfulFieldCandidate(control)) {
144
+ return "scalar";
145
+ }
146
+ const group = ownedControls.filter((candidate) => attribute(candidate, "name") === name &&
147
+ isSuccessfulFieldCandidate(candidate));
148
+ if (group.length > 0 &&
149
+ group.every((candidate) => candidate.tagName === "input" && controlInputType(candidate) === "radio")) {
150
+ return "mutually-exclusive";
151
+ }
152
+ if ((control.tagName === "select" && attribute(control, "multiple") !== null) ||
153
+ group.length > 1) {
154
+ return "repeated";
155
+ }
156
+ return "scalar";
157
+ }
158
+ function known(value, range) {
159
+ return { state: "known", value, range };
160
+ }
161
+ function controlInputType(element) {
162
+ if (element.tagName === "input") {
163
+ return asciiLowercase(attribute(element, "type") ?? "text");
164
+ }
165
+ if (element.tagName === "button") {
166
+ return asciiLowercase(attribute(element, "type") ?? "submit");
167
+ }
168
+ return "";
169
+ }
170
+ function asciiLowercase(value) {
171
+ return value.replace(/[A-Z]/gu, (character) => String.fromCharCode(character.charCodeAt(0) + 32));
172
+ }
173
+ function collectElements(nodes, result) {
174
+ for (const node of nodes) {
175
+ if (!("tagName" in node)) {
176
+ continue;
177
+ }
178
+ result.push(node);
179
+ collectElements(node.childNodes, result);
180
+ }
181
+ }
182
+ function isFormControl(element) {
183
+ return formControlTagNames.some((tagName) => tagName === element.tagName);
184
+ }
185
+ function isSuccessfulFieldCandidate(element) {
186
+ if (isEffectivelyDisabled(element) || element.tagName === "button") {
187
+ return false;
188
+ }
189
+ if (element.tagName !== "input") {
190
+ return true;
191
+ }
192
+ const type = controlInputType(element);
193
+ return !["button", "file", "image", "reset", "submit"].includes(type);
194
+ }
195
+ function isEffectivelyDisabled(element) {
196
+ if (attribute(element, "disabled") !== null) {
197
+ return true;
198
+ }
199
+ let parent = element.parentNode;
200
+ while (parent !== null) {
201
+ if ("tagName" in parent &&
202
+ parent.tagName === "fieldset" &&
203
+ attribute(parent, "disabled") !== null) {
204
+ const firstLegend = parent.childNodes.find((child) => "tagName" in child && child.tagName === "legend");
205
+ if (firstLegend === undefined || !isDescendantOf(element, firstLegend)) {
206
+ return true;
207
+ }
208
+ }
209
+ parent = "parentNode" in parent ? parent.parentNode : null;
210
+ }
211
+ return false;
212
+ }
213
+ function isDescendantOf(element, ancestor) {
214
+ let parent = element.parentNode;
215
+ while (parent !== null) {
216
+ if (parent === ancestor) {
217
+ return true;
218
+ }
219
+ parent = "parentNode" in parent ? parent.parentNode : null;
220
+ }
221
+ return false;
222
+ }
223
+ function associatedForm(control, forms) {
224
+ const explicitForm = attribute(control, "form");
225
+ if (explicitForm !== null) {
226
+ return forms.find((form) => attribute(form, "id") === explicitForm);
227
+ }
228
+ let parent = control.parentNode;
229
+ while (parent !== null) {
230
+ if ("tagName" in parent && parent.tagName === "form") {
231
+ return parent;
232
+ }
233
+ parent = "parentNode" in parent ? parent.parentNode : null;
234
+ }
235
+ return undefined;
236
+ }
237
+ function attribute(element, name) {
238
+ return element.attrs.find((entry) => entry.name === name)?.value ?? null;
239
+ }
240
+ function elementStartTagRange(element) {
241
+ const location = element.sourceCodeLocation?.startTag ?? element.sourceCodeLocation;
242
+ if (location === undefined || location === null) {
243
+ return {
244
+ start: { line: 0, character: 0 },
245
+ end: { line: 0, character: 0 },
246
+ };
247
+ }
248
+ return {
249
+ start: {
250
+ line: location.startLine - 1,
251
+ character: location.startCol - 1,
252
+ },
253
+ end: {
254
+ line: location.endLine - 1,
255
+ character: location.endCol - 1,
256
+ },
257
+ };
258
+ }
259
+ function elementAttributeRange(element, name) {
260
+ const location = element.sourceCodeLocation?.attrs?.[name];
261
+ if (location === undefined) {
262
+ return elementStartTagRange(element);
263
+ }
264
+ return {
265
+ start: {
266
+ line: location.startLine - 1,
267
+ character: location.startCol - 1,
268
+ },
269
+ end: {
270
+ line: location.endLine - 1,
271
+ character: location.endCol - 1,
272
+ },
273
+ };
274
+ }
275
+ //# sourceMappingURL=html-forms.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"html-forms.js","sourceRoot":"","sources":["../../src/html-forms.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { checkProject } from "./check-project.js";
2
+ export type { CheckProjectFailure, CheckProjectOptions, CheckProjectResult, CheckProjectSuccess, CompilerFailure, } from "./types.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,YAAY,EACV,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,eAAe,GAChB,MAAM,YAAY,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { checkProject } from "./check-project.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { SourceRange } from "@0disoft/mensor-contract";
2
+ export declare function handlerFileRange(contractText: string, actionIndex: number): SourceRange;
3
+ export declare function handlerExportRange(contractText: string, actionIndex: number): SourceRange;
4
+ export declare function actionSchemaPropertyRange(contractText: string, actionIndex: number, propertyName: string): SourceRange;
5
+ export declare function actionFormCodecPropertyRange(contractText: string, actionIndex: number, propertyName: string): SourceRange;
6
+ export declare function actionRoutePropertyRange(contractText: string, actionIndex: number, propertyName: "method" | "path"): SourceRange;
7
+ export declare function actionFormPropertyRange(contractText: string, actionIndex: number, propertyName: "documentPath" | "id" | "template"): SourceRange;
8
+ export declare function actionBindingDecoderKindRange(contractText: string, actionIndex: number, bindingIndex: number): SourceRange;
9
+ export declare function projectBoundaryRange(contractText: string, boundaryIndex: number): SourceRange;
10
+ export declare function projectOwnershipRuleRange(contractText: string, ruleIndex: number): SourceRange;
11
+ export declare function projectRouteIndexRange(contractText: string): SourceRange;
12
+ //# sourceMappingURL=locations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"locations.d.ts","sourceRoot":"","sources":["../../src/locations.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAkB,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAO5E,wBAAgB,gBAAgB,CAC9B,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,GAClB,WAAW,CAOb;AAED,wBAAgB,kBAAkB,CAChC,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,GAClB,WAAW,CAYb;AAED,wBAAgB,yBAAyB,CACvC,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,GACnB,WAAW,CAsBb;AAED,wBAAgB,4BAA4B,CAC1C,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,GACnB,WAAW,CAab;AAED,wBAAgB,wBAAwB,CACtC,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,QAAQ,GAAG,MAAM,GAC9B,WAAW,CAYb;AAED,wBAAgB,uBAAuB,CACrC,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,cAAc,GAAG,IAAI,GAAG,UAAU,GAC/C,WAAW,CAYb;AAED,wBAAgB,6BAA6B,CAC3C,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,GACnB,WAAW,CAgBb;AAED,wBAAgB,oBAAoB,CAClC,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,GACpB,WAAW,CAOb;AAED,wBAAgB,yBAAyB,CACvC,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,GAChB,WAAW,CAOb;AAED,wBAAgB,sBAAsB,CAAC,YAAY,EAAE,MAAM,GAAG,WAAW,CAOxE"}
@@ -0,0 +1,148 @@
1
+ import { findNodeAtLocation, parseTree, } from "jsonc-parser";
2
+ const zeroRange = {
3
+ start: { line: 0, character: 0 },
4
+ end: { line: 0, character: 0 },
5
+ };
6
+ export function handlerFileRange(contractText, actionIndex) {
7
+ const root = parseTree(contractText);
8
+ if (root === undefined) {
9
+ return zeroRange;
10
+ }
11
+ const node = findNodeAtLocation(root, ["actions", actionIndex, "handler", "file"]);
12
+ return node === undefined ? zeroRange : nodeRange(contractText, node);
13
+ }
14
+ export function handlerExportRange(contractText, actionIndex) {
15
+ const root = parseTree(contractText);
16
+ if (root === undefined) {
17
+ return zeroRange;
18
+ }
19
+ const node = findNodeAtLocation(root, [
20
+ "actions",
21
+ actionIndex,
22
+ "handler",
23
+ "export",
24
+ ]);
25
+ return node === undefined ? zeroRange : nodeRange(contractText, node);
26
+ }
27
+ export function actionSchemaPropertyRange(contractText, actionIndex, propertyName) {
28
+ const root = parseTree(contractText);
29
+ if (root === undefined) {
30
+ return zeroRange;
31
+ }
32
+ const properties = findNodeAtLocation(root, [
33
+ "actions",
34
+ actionIndex,
35
+ "input",
36
+ "schema",
37
+ "properties",
38
+ ]);
39
+ if (properties?.type !== "object") {
40
+ return zeroRange;
41
+ }
42
+ for (const property of properties.children ?? []) {
43
+ const key = property.children?.[0];
44
+ if (key?.type === "string" && key.value === propertyName) {
45
+ return nodeRange(contractText, key);
46
+ }
47
+ }
48
+ return zeroRange;
49
+ }
50
+ export function actionFormCodecPropertyRange(contractText, actionIndex, propertyName) {
51
+ const root = parseTree(contractText);
52
+ if (root === undefined) {
53
+ return zeroRange;
54
+ }
55
+ const node = findNodeAtLocation(root, [
56
+ "actions",
57
+ actionIndex,
58
+ "input",
59
+ "formCodec",
60
+ propertyName,
61
+ ]);
62
+ return node === undefined ? zeroRange : nodeRange(contractText, node);
63
+ }
64
+ export function actionRoutePropertyRange(contractText, actionIndex, propertyName) {
65
+ const root = parseTree(contractText);
66
+ if (root === undefined) {
67
+ return zeroRange;
68
+ }
69
+ const node = findNodeAtLocation(root, [
70
+ "actions",
71
+ actionIndex,
72
+ "route",
73
+ propertyName,
74
+ ]);
75
+ return node === undefined ? zeroRange : nodeRange(contractText, node);
76
+ }
77
+ export function actionFormPropertyRange(contractText, actionIndex, propertyName) {
78
+ const root = parseTree(contractText);
79
+ if (root === undefined) {
80
+ return zeroRange;
81
+ }
82
+ const node = findNodeAtLocation(root, [
83
+ "actions",
84
+ actionIndex,
85
+ "form",
86
+ propertyName,
87
+ ]);
88
+ return node === undefined ? zeroRange : nodeRange(contractText, node);
89
+ }
90
+ export function actionBindingDecoderKindRange(contractText, actionIndex, bindingIndex) {
91
+ const root = parseTree(contractText);
92
+ if (root === undefined) {
93
+ return zeroRange;
94
+ }
95
+ const node = findNodeAtLocation(root, [
96
+ "actions",
97
+ actionIndex,
98
+ "input",
99
+ "formCodec",
100
+ "bindings",
101
+ bindingIndex,
102
+ "decode",
103
+ "kind",
104
+ ]);
105
+ return node === undefined ? zeroRange : nodeRange(contractText, node);
106
+ }
107
+ export function projectBoundaryRange(contractText, boundaryIndex) {
108
+ const root = parseTree(contractText);
109
+ if (root === undefined) {
110
+ return zeroRange;
111
+ }
112
+ const node = findNodeAtLocation(root, ["boundaries", boundaryIndex]);
113
+ return node === undefined ? zeroRange : nodeRange(contractText, node);
114
+ }
115
+ export function projectOwnershipRuleRange(contractText, ruleIndex) {
116
+ const root = parseTree(contractText);
117
+ if (root === undefined) {
118
+ return zeroRange;
119
+ }
120
+ const node = findNodeAtLocation(root, ["ownershipRules", ruleIndex]);
121
+ return node === undefined ? zeroRange : nodeRange(contractText, node);
122
+ }
123
+ export function projectRouteIndexRange(contractText) {
124
+ const root = parseTree(contractText);
125
+ if (root === undefined) {
126
+ return zeroRange;
127
+ }
128
+ const node = findNodeAtLocation(root, ["routeIndex"]);
129
+ return node === undefined ? zeroRange : nodeRange(contractText, node);
130
+ }
131
+ function nodeRange(text, node) {
132
+ return {
133
+ start: positionAt(text, node.offset),
134
+ end: positionAt(text, node.offset + node.length),
135
+ };
136
+ }
137
+ function positionAt(text, offset) {
138
+ let line = 0;
139
+ let lineStart = 0;
140
+ for (let index = 0; index < offset; index += 1) {
141
+ if (text.charCodeAt(index) === 10) {
142
+ line += 1;
143
+ lineStart = index + 1;
144
+ }
145
+ }
146
+ return { line, character: offset - lineStart };
147
+ }
148
+ //# sourceMappingURL=locations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"locations.js","sourceRoot":"","sources":["../../src/locations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { BoundaryContract, Diagnostic, FileRoleContract } from "@0disoft/mensor-contract";
2
+ import type { SourceFactIndex } from "./source-fact-index.js";
3
+ export declare function checkImportBoundaries(options: {
4
+ readonly projectContractPath: string;
5
+ readonly projectText: string;
6
+ readonly featureContractPaths: readonly string[];
7
+ readonly fileRoles: readonly FileRoleContract[];
8
+ readonly boundaries: readonly BoundaryContract[];
9
+ readonly discoveredFiles: readonly string[];
10
+ readonly sourceFacts: SourceFactIndex;
11
+ }): Promise<readonly Diagnostic[]>;
12
+ //# sourceMappingURL=module-boundary-rule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module-boundary-rule.d.ts","sourceRoot":"","sources":["../../src/module-boundary-rule.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,gBAAgB,EAChB,UAAU,EACV,gBAAgB,EAIjB,MAAM,0BAA0B,CAAC;AAKlC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAmB9D,wBAAsB,qBAAqB,CAAC,OAAO,EAAE;IACnD,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,oBAAoB,EAAE,SAAS,MAAM,EAAE,CAAC;IACjD,QAAQ,CAAC,SAAS,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAChD,QAAQ,CAAC,UAAU,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACjD,QAAQ,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5C,QAAQ,CAAC,WAAW,EAAE,eAAe,CAAC;CACvC,GAAG,OAAO,CAAC,SAAS,UAAU,EAAE,CAAC,CA4EjC"}