@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,72 @@
1
+ import { performance } from "node:perf_hooks";
2
+ export class CompilerTiming {
3
+ #durations = {
4
+ discovery: 0,
5
+ formIndexValidation: 0,
6
+ ruleEvaluation: 0,
7
+ sourceRead: 0,
8
+ templateRead: 0,
9
+ templateExtraction: 0,
10
+ typescriptExtraction: 0,
11
+ };
12
+ #frames = [];
13
+ #templateDocumentCount = 0;
14
+ #templateBytes = 0;
15
+ async measure(phase, operation) {
16
+ const frame = { childDurationMs: 0 };
17
+ const startedAt = performance.now();
18
+ this.#frames.push(frame);
19
+ try {
20
+ return await operation();
21
+ }
22
+ finally {
23
+ this.finishMeasurement(phase, startedAt, frame);
24
+ }
25
+ }
26
+ measureSync(phase, operation) {
27
+ const frame = { childDurationMs: 0 };
28
+ const startedAt = performance.now();
29
+ this.#frames.push(frame);
30
+ try {
31
+ return operation();
32
+ }
33
+ finally {
34
+ this.finishMeasurement(phase, startedAt, frame);
35
+ }
36
+ }
37
+ recordTemplateSource(source) {
38
+ this.#templateDocumentCount += 1;
39
+ this.#templateBytes += Buffer.byteLength(source);
40
+ }
41
+ snapshot(totalDurationMs) {
42
+ const measuredDurationMs = Object.values(this.#durations).reduce((total, duration) => total + duration, 0);
43
+ return {
44
+ totalDurationMs,
45
+ phaseDurationMs: {
46
+ discovery: this.#durations.discovery,
47
+ sourceRead: this.#durations.sourceRead,
48
+ typescriptExtraction: this.#durations.typescriptExtraction,
49
+ templateRead: this.#durations.templateRead,
50
+ templateExtraction: this.#durations.templateExtraction,
51
+ formIndexValidation: this.#durations.formIndexValidation,
52
+ ruleEvaluation: this.#durations.ruleEvaluation,
53
+ other: Math.max(0, totalDurationMs - measuredDurationMs),
54
+ },
55
+ templateDocumentCount: this.#templateDocumentCount,
56
+ templateBytes: this.#templateBytes,
57
+ };
58
+ }
59
+ finishMeasurement(phase, startedAt, frame) {
60
+ const elapsedMs = performance.now() - startedAt;
61
+ const active = this.#frames.pop();
62
+ if (active !== frame) {
63
+ throw new Error("Compiler timing measurements must be nested serially.");
64
+ }
65
+ this.#durations[phase] += Math.max(0, elapsedMs - frame.childDurationMs);
66
+ const parent = this.#frames.at(-1);
67
+ if (parent !== undefined) {
68
+ parent.childDurationMs += elapsedMs;
69
+ }
70
+ }
71
+ }
72
+ //# sourceMappingURL=compiler-timing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compiler-timing.js","sourceRoot":"","sources":["../../src/compiler-timing.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export interface FeatureRootFact {
2
+ readonly root: string;
3
+ }
4
+ export declare function sortFeatureRoots<T extends FeatureRootFact>(features: readonly T[]): readonly T[];
5
+ export declare function findFeatureOwner<T extends FeatureRootFact>(file: string, sortedFeatures: readonly T[]): T | undefined;
6
+ //# sourceMappingURL=feature-roots.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feature-roots.d.ts","sourceRoot":"","sources":["../../src/feature-roots.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,eAAe,EACxD,QAAQ,EAAE,SAAS,CAAC,EAAE,GACrB,SAAS,CAAC,EAAE,CAKd;AAED,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,eAAe,EACxD,IAAI,EAAE,MAAM,EACZ,cAAc,EAAE,SAAS,CAAC,EAAE,GAC3B,CAAC,GAAG,SAAS,CAEf"}
@@ -0,0 +1,8 @@
1
+ import { compareText } from "./paths.js";
2
+ export function sortFeatureRoots(features) {
3
+ return [...features].sort((left, right) => right.root.length - left.root.length || compareText(left.root, right.root));
4
+ }
5
+ export function findFeatureOwner(file, sortedFeatures) {
6
+ return sortedFeatures.find((feature) => file.startsWith(`${feature.root}/`));
7
+ }
8
+ //# sourceMappingURL=feature-roots.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feature-roots.js","sourceRoot":"","sources":["../../src/feature-roots.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAMzC,MAAM,UAAU,gBAAgB,CAC9B,QAAsB;IAEtB,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,CACvB,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CACd,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAC7E,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,IAAY,EACZ,cAA4B;IAE5B,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;AAC/E,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare function assertProjectRoot(root: string): Promise<string>;
2
+ export declare function readProjectFile(root: string, relativePath: string, maxFileBytes: number): Promise<string>;
3
+ export declare function discoverProjectFiles(root: string, sourceRoot: string, maxFiles: number, maxTotalBytes: number, maxDepth: number): Promise<readonly string[]>;
4
+ //# sourceMappingURL=filesystem.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filesystem.d.ts","sourceRoot":"","sources":["../../src/filesystem.ts"],"names":[],"mappings":"AAWA,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAkBrE;AAED,wBAAsB,eAAe,CACnC,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,MAAM,CAAC,CAsCjB;AAED,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,CAyE5B"}
@@ -0,0 +1,127 @@
1
+ import { lstat, readFile, readdir } from "node:fs/promises";
2
+ import * as path from "node:path";
3
+ import { assertRelativePosixPath, compareText, fromProjectPath, InputFailure, joinProjectPath, } from "./paths.js";
4
+ export async function assertProjectRoot(root) {
5
+ const absoluteRoot = path.resolve(root);
6
+ try {
7
+ const stats = await lstat(absoluteRoot);
8
+ if (stats.isSymbolicLink() || !stats.isDirectory()) {
9
+ throw new InputFailure("filesystem", "root.invalid", "The project root must be a real directory, not a symlink.");
10
+ }
11
+ }
12
+ catch (error) {
13
+ if (error instanceof InputFailure) {
14
+ throw error;
15
+ }
16
+ throw filesystemFailure(error, "root.unreadable", "The project root cannot be read.");
17
+ }
18
+ return absoluteRoot;
19
+ }
20
+ export async function readProjectFile(root, relativePath, maxFileBytes) {
21
+ const safePath = assertRelativePosixPath(relativePath, "File path");
22
+ await assertPathHasNoSymlink(root, safePath, false);
23
+ try {
24
+ const stats = await lstat(fromProjectPath(root, safePath));
25
+ if (stats.size > maxFileBytes) {
26
+ throw new InputFailure("filesystem", "file.size_limit_exceeded", `Project file ${JSON.stringify(safePath)} exceeds the configured limit of ${maxFileBytes} bytes.`, safePath);
27
+ }
28
+ const bytes = await readFile(fromProjectPath(root, safePath));
29
+ try {
30
+ return new TextDecoder("utf-8", {
31
+ fatal: true,
32
+ ignoreBOM: true,
33
+ }).decode(bytes);
34
+ }
35
+ catch {
36
+ throw new InputFailure("filesystem", "file.encoding_invalid", `Project file ${JSON.stringify(safePath)} must be valid UTF-8.`, safePath);
37
+ }
38
+ }
39
+ catch (error) {
40
+ if (error instanceof InputFailure) {
41
+ throw error;
42
+ }
43
+ throw filesystemFailure(error, "file.unreadable", `Cannot read project file ${JSON.stringify(safePath)}.`, safePath);
44
+ }
45
+ }
46
+ export async function discoverProjectFiles(root, sourceRoot, maxFiles, maxTotalBytes, maxDepth) {
47
+ const safeSourceRoot = assertRelativePosixPath(sourceRoot, "sourceRoot");
48
+ await assertPathHasNoSymlink(root, safeSourceRoot, true);
49
+ const files = [];
50
+ let totalBytes = 0;
51
+ async function visit(relativeDirectory, depth) {
52
+ if (depth > maxDepth) {
53
+ throw new InputFailure("filesystem", "discovery.depth_limit_exceeded", `Source discovery exceeded the configured directory depth limit of ${maxDepth}.`, relativeDirectory);
54
+ }
55
+ let entries;
56
+ try {
57
+ entries = await readdir(fromProjectPath(root, relativeDirectory), {
58
+ withFileTypes: true,
59
+ });
60
+ }
61
+ catch (error) {
62
+ throw filesystemFailure(error, "directory.unreadable", `Cannot read source directory ${JSON.stringify(relativeDirectory)}.`, relativeDirectory);
63
+ }
64
+ entries.sort((left, right) => compareText(left.name, right.name));
65
+ for (const entry of entries) {
66
+ const relativeEntry = joinProjectPath(relativeDirectory, entry.name);
67
+ if (entry.isSymbolicLink()) {
68
+ continue;
69
+ }
70
+ if (entry.isDirectory()) {
71
+ await visit(relativeEntry, depth + 1);
72
+ }
73
+ else if (entry.isFile()) {
74
+ files.push(relativeEntry);
75
+ if (files.length > maxFiles) {
76
+ throw new InputFailure("filesystem", "discovery.file_limit_exceeded", `Source discovery exceeded the configured limit of ${maxFiles} files.`, safeSourceRoot);
77
+ }
78
+ let stats;
79
+ try {
80
+ stats = await lstat(fromProjectPath(root, relativeEntry));
81
+ }
82
+ catch (error) {
83
+ throw filesystemFailure(error, "file.unreadable", `Cannot inspect project file ${JSON.stringify(relativeEntry)}.`, relativeEntry);
84
+ }
85
+ totalBytes += stats.size;
86
+ if (totalBytes > maxTotalBytes) {
87
+ throw new InputFailure("filesystem", "discovery.total_bytes_limit_exceeded", `Source discovery exceeded the configured total byte limit of ${maxTotalBytes}.`, safeSourceRoot);
88
+ }
89
+ }
90
+ }
91
+ }
92
+ await visit(safeSourceRoot, 0);
93
+ return files;
94
+ }
95
+ async function assertPathHasNoSymlink(root, relativePath, requireDirectory) {
96
+ const segments = relativePath.split("/");
97
+ for (let index = 0; index < segments.length; index += 1) {
98
+ const current = segments.slice(0, index + 1).join("/");
99
+ let stats;
100
+ try {
101
+ stats = await lstat(fromProjectPath(root, current));
102
+ }
103
+ catch (error) {
104
+ throw filesystemFailure(error, "path.unreadable", `Cannot inspect project path ${JSON.stringify(current)}.`, current);
105
+ }
106
+ if (stats.isSymbolicLink()) {
107
+ throw new InputFailure("filesystem", "path.symlink_forbidden", `Project path ${JSON.stringify(current)} is a symlink.`, current);
108
+ }
109
+ if (index < segments.length - 1 && !stats.isDirectory()) {
110
+ throw new InputFailure("filesystem", "path.not_directory", `Project path ${JSON.stringify(current)} must be a directory.`, current);
111
+ }
112
+ if (index === segments.length - 1) {
113
+ const valid = requireDirectory ? stats.isDirectory() : stats.isFile();
114
+ if (!valid) {
115
+ throw new InputFailure("filesystem", requireDirectory ? "path.not_directory" : "path.not_file", `Project path ${JSON.stringify(current)} has the wrong filesystem type.`, current);
116
+ }
117
+ }
118
+ }
119
+ }
120
+ function filesystemFailure(error, fallbackCode, message, file) {
121
+ const code = isNodeError(error) && error.code === "ENOENT" ? "path.missing" : fallbackCode;
122
+ return new InputFailure("filesystem", code, message, file);
123
+ }
124
+ function isNodeError(error) {
125
+ return error instanceof Error && "code" in error;
126
+ }
127
+ //# sourceMappingURL=filesystem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filesystem.js","sourceRoot":"","sources":["../../src/filesystem.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import type { SourceRange } from "@0disoft/mensor-contract";
2
+ export interface FormFact {
3
+ readonly id: string;
4
+ readonly method: string;
5
+ readonly methodRange: SourceRange;
6
+ readonly action: FormActionFact;
7
+ readonly fields: readonly FormFieldFact[];
8
+ readonly unsupportedControls: readonly UnsupportedFormControlFact[];
9
+ readonly range: SourceRange;
10
+ }
11
+ export type FormActionFact = {
12
+ readonly kind: "literal";
13
+ readonly value: string;
14
+ readonly range: SourceRange;
15
+ } | {
16
+ readonly kind: "current-document";
17
+ readonly range: SourceRange;
18
+ };
19
+ export interface FormFieldFact {
20
+ readonly name: string;
21
+ readonly controls: readonly FormControlFact[];
22
+ readonly range: SourceRange;
23
+ }
24
+ export interface FormControlFact {
25
+ readonly kind: "input" | "select" | "textarea";
26
+ readonly inputType: string;
27
+ readonly multiple: boolean;
28
+ readonly range: SourceRange;
29
+ }
30
+ export interface UnsupportedFormControlFact {
31
+ readonly kind: "button" | "input";
32
+ readonly inputType: string;
33
+ readonly name: string;
34
+ readonly reason: "file-input" | "named-submitter" | "submitter-route-override";
35
+ readonly range: SourceRange;
36
+ }
37
+ //# sourceMappingURL=form-facts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form-facts.d.ts","sourceRoot":"","sources":["../../src/form-facts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAE5D,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,SAAS,aAAa,EAAE,CAAC;IAC1C,QAAQ,CAAC,mBAAmB,EAAE,SAAS,0BAA0B,EAAE,CAAC;IACpE,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;CAC7B;AAED,MAAM,MAAM,cAAc,GACtB;IACE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;CAC7B,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAClC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;CAC7B,CAAC;AAEN,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,SAAS,eAAe,EAAE,CAAC;IAC9C,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;CAC7B;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,UAAU,CAAC;IAC/C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;CAC7B;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC;IAClC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,YAAY,GAAG,iBAAiB,GAAG,0BAA0B,CAAC;IAC/E,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;CAC7B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=form-facts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form-facts.js","sourceRoot":"","sources":["../../src/form-facts.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ import type { FormFact } from "./form-facts.js";
2
+ import type { FormIndex } from "./form-index.js";
3
+ export declare function formFactsForLinkedForm(index: FormIndex, documentPath: string, formId: string): readonly FormFact[];
4
+ //# sourceMappingURL=form-index-semantics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form-index-semantics.d.ts","sourceRoot":"","sources":["../../src/form-index-semantics.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEV,QAAQ,EAGT,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAGV,SAAS,EAIV,MAAM,iBAAiB,CAAC;AAGzB,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,SAAS,EAChB,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,GACb,SAAS,QAAQ,EAAE,CA8BrB"}
@@ -0,0 +1,149 @@
1
+ import { compareText, InputFailure } from "./paths.js";
2
+ export function formFactsForLinkedForm(index, documentPath, formId) {
3
+ const document = index.documents.find((entry) => entry.path === documentPath);
4
+ if (document === undefined) {
5
+ throw new InputFailure("configuration", "form_index.document_missing", `FormIndex has no document for ${JSON.stringify(documentPath)}.`, documentPath);
6
+ }
7
+ assertCompleteInspection(document);
8
+ const matches = [];
9
+ for (const form of document.forms) {
10
+ if (form.identity.state === "absent") {
11
+ continue;
12
+ }
13
+ if (form.identity.state !== "known") {
14
+ throw unresolvedEvidence(document.path, "form_index.identity_unresolved", "form identity", form.identity);
15
+ }
16
+ if (form.identity.value === formId) {
17
+ matches.push(formFact(document.path, form));
18
+ }
19
+ }
20
+ return matches;
21
+ }
22
+ function assertCompleteInspection(document) {
23
+ if (document.inspection.state === "complete") {
24
+ return;
25
+ }
26
+ throw new InputFailure("configuration", "form_index.inspection_incomplete", `FormIndex inspection for ${JSON.stringify(document.path)} is incomplete: ${document.inspection.reason}.`, document.path);
27
+ }
28
+ function formFact(documentPath, form) {
29
+ const fields = [];
30
+ const unsupportedControls = [];
31
+ for (const control of form.controls) {
32
+ if (control.successful.state === "known" && !control.successful.value) {
33
+ continue;
34
+ }
35
+ if (control.successful.state === "unsupported") {
36
+ unsupportedControls.push(unsupportedControl(documentPath, control));
37
+ continue;
38
+ }
39
+ if (control.successful.state !== "known") {
40
+ throw unresolvedEvidence(documentPath, "form_index.control_unresolved", "successful-control state", control.successful);
41
+ }
42
+ const name = optionalKnownEvidence(documentPath, "control name", control.name);
43
+ if (name === undefined) {
44
+ continue;
45
+ }
46
+ const controlFactValue = successfulControl(documentPath, control);
47
+ const existing = fields.find((field) => field.name === name);
48
+ if (existing === undefined) {
49
+ fields.push({
50
+ name,
51
+ controls: [controlFactValue],
52
+ range: control.range,
53
+ });
54
+ }
55
+ else {
56
+ const existingIndex = fields.indexOf(existing);
57
+ fields[existingIndex] = {
58
+ ...existing,
59
+ controls: [...existing.controls, controlFactValue],
60
+ };
61
+ }
62
+ }
63
+ return {
64
+ id: knownEvidence(documentPath, "form identity", form.identity),
65
+ method: methodValue(documentPath, form.method),
66
+ methodRange: evidenceRange(form.method, form.range),
67
+ action: actionValue(documentPath, form.action, form.range),
68
+ fields: fields.sort((left, right) => compareText(left.name, right.name)),
69
+ unsupportedControls: unsupportedControls.sort((left, right) => compareText(left.name, right.name) || compareText(left.reason, right.reason)),
70
+ range: form.range,
71
+ };
72
+ }
73
+ function successfulControl(documentPath, control) {
74
+ const kind = knownEvidence(documentPath, "control kind", control.controlKind);
75
+ if (kind === "button") {
76
+ throw new InputFailure("configuration", "form_index.control_invalid", "A successful field control cannot have button controlKind.", documentPath);
77
+ }
78
+ knownEvidence(documentPath, "control multiplicity", control.multiplicity);
79
+ return {
80
+ kind,
81
+ inputType: optionalKnownEvidence(documentPath, "control input type", control.inputType) ?? "",
82
+ multiple: knownEvidence(documentPath, "control multiple state", control.multiple),
83
+ range: control.range,
84
+ };
85
+ }
86
+ function unsupportedControl(documentPath, control) {
87
+ if (control.successful.state !== "unsupported") {
88
+ throw new Error("unsupportedControl requires unsupported evidence.");
89
+ }
90
+ const reason = control.successful.reason;
91
+ if (reason !== "file-input" &&
92
+ reason !== "named-submitter" &&
93
+ reason !== "submitter-route-override") {
94
+ throw new InputFailure("configuration", "form_index.control_unresolved", `Unsupported control evidence ${JSON.stringify(reason)} cannot be mapped to a stable form diagnostic.`, documentPath);
95
+ }
96
+ const kind = knownEvidence(documentPath, "control kind", control.controlKind);
97
+ if (kind !== "button" && kind !== "input") {
98
+ throw new InputFailure("configuration", "form_index.control_invalid", `Unsupported ${JSON.stringify(reason)} evidence requires an input or button control.`, documentPath);
99
+ }
100
+ return {
101
+ kind,
102
+ inputType: optionalKnownEvidence(documentPath, "control input type", control.inputType) ?? "",
103
+ name: optionalKnownEvidence(documentPath, "control name", control.name) ?? "",
104
+ reason,
105
+ range: control.range,
106
+ };
107
+ }
108
+ function methodValue(documentPath, method) {
109
+ if (method.state === "absent") {
110
+ return "GET";
111
+ }
112
+ return asciiUppercase(knownEvidence(documentPath, "form method", method));
113
+ }
114
+ function actionValue(documentPath, action, fallbackRange) {
115
+ if (action.state === "current-document" || action.state === "absent") {
116
+ return {
117
+ kind: "current-document",
118
+ range: action.range ?? fallbackRange,
119
+ };
120
+ }
121
+ return {
122
+ kind: "literal",
123
+ value: knownEvidence(documentPath, "form action", action),
124
+ range: action.range,
125
+ };
126
+ }
127
+ function knownEvidence(documentPath, label, evidence) {
128
+ if (evidence.state === "known") {
129
+ return evidence.value;
130
+ }
131
+ throw unresolvedEvidence(documentPath, "form_index.evidence_unresolved", label, evidence);
132
+ }
133
+ function optionalKnownEvidence(documentPath, label, evidence) {
134
+ if (evidence.state === "absent") {
135
+ return undefined;
136
+ }
137
+ return knownEvidence(documentPath, label, evidence);
138
+ }
139
+ function evidenceRange(evidence, fallback) {
140
+ return evidence.range ?? fallback;
141
+ }
142
+ function unresolvedEvidence(documentPath, code, label, evidence) {
143
+ const reason = evidence.reason === undefined ? evidence.state : evidence.reason;
144
+ return new InputFailure("configuration", code, `FormIndex cannot prove ${label}: ${reason}.`, documentPath);
145
+ }
146
+ function asciiUppercase(value) {
147
+ return value.replace(/[a-z]/gu, (character) => String.fromCharCode(character.charCodeAt(0) - 32));
148
+ }
149
+ //# sourceMappingURL=form-index-semantics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form-index-semantics.js","sourceRoot":"","sources":["../../src/form-index-semantics.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,69 @@
1
+ import type { SourceRange } from "@0disoft/mensor-contract";
2
+ export type ContentDigest = `sha256:${string}`;
3
+ export type DynamicReason = "computed-attribute" | "conditional-presence" | "custom-helper-semantics" | "dynamic-interpolation" | "repeated-generation";
4
+ export type UnsupportedReason = "file-input" | "named-submitter" | "provider-resource-limit" | "submitter-route-override" | "unsupported-control-kind";
5
+ export type IndexedEvidence<T> = {
6
+ readonly state: "known";
7
+ readonly value: T;
8
+ readonly range: SourceRange;
9
+ } | {
10
+ readonly state: "absent";
11
+ readonly range?: SourceRange;
12
+ } | {
13
+ readonly state: "dynamic";
14
+ readonly reason: DynamicReason;
15
+ readonly range: SourceRange;
16
+ } | {
17
+ readonly state: "unsupported";
18
+ readonly reason: UnsupportedReason;
19
+ readonly range: SourceRange;
20
+ };
21
+ export type FormActionEvidence = IndexedEvidence<string> | {
22
+ readonly state: "current-document";
23
+ readonly range: SourceRange;
24
+ };
25
+ export type DocumentInspection = {
26
+ readonly state: "complete";
27
+ } | {
28
+ readonly state: "incomplete";
29
+ readonly reason: DynamicReason | UnsupportedReason;
30
+ readonly range?: SourceRange;
31
+ };
32
+ export interface FormIndex {
33
+ readonly schemaVersion: 1;
34
+ readonly producer: {
35
+ readonly name: string;
36
+ readonly version: string;
37
+ };
38
+ readonly documents: readonly FormDocumentFact[];
39
+ }
40
+ export interface FormDocumentFact {
41
+ readonly path: string;
42
+ readonly contentDigest: ContentDigest;
43
+ readonly sourceKind: string;
44
+ readonly inspection: DocumentInspection;
45
+ readonly forms: readonly IndexedFormFact[];
46
+ }
47
+ export interface IndexedFormFact {
48
+ readonly identity: IndexedEvidence<string>;
49
+ readonly method: IndexedEvidence<string>;
50
+ readonly action: FormActionEvidence;
51
+ readonly range: SourceRange;
52
+ readonly controls: readonly IndexedControlFact[];
53
+ }
54
+ export interface IndexedControlFact {
55
+ readonly name: IndexedEvidence<string>;
56
+ readonly controlKind: IndexedEvidence<"button" | "input" | "select" | "textarea">;
57
+ readonly inputType: IndexedEvidence<string>;
58
+ readonly multiple: IndexedEvidence<boolean>;
59
+ readonly multiplicity: IndexedEvidence<"mutually-exclusive" | "repeated" | "scalar">;
60
+ readonly successful: IndexedEvidence<boolean>;
61
+ readonly range: SourceRange;
62
+ }
63
+ export type FormIndexFailureCode = "form_index.digest_invalid" | "form_index.digest_mismatch" | "form_index.duplicate" | "form_index.json_invalid" | "form_index.noncanonical" | "form_index.path_invalid" | "form_index.range_invalid" | "form_index.shape_invalid" | "form_index.source_encoding_invalid" | "form_index.source_missing";
64
+ export declare class FormIndexFailure extends Error {
65
+ readonly code: FormIndexFailureCode;
66
+ readonly instancePath: string;
67
+ constructor(code: FormIndexFailureCode, instancePath: string, message: string);
68
+ }
69
+ //# sourceMappingURL=form-index-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form-index-types.d.ts","sourceRoot":"","sources":["../../src/form-index-types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export class FormIndexFailure extends Error {
2
+ code;
3
+ instancePath;
4
+ constructor(code, instancePath, message) {
5
+ super(message);
6
+ this.name = "FormIndexFailure";
7
+ this.code = code;
8
+ this.instancePath = instancePath;
9
+ }
10
+ }
11
+ //# sourceMappingURL=form-index-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form-index-types.js","sourceRoot":"","sources":["../../src/form-index-types.ts"],"names":[],"mappings":"AA2GA,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IAChC,IAAI,CAAuB;IAC3B,YAAY,CAAS;IAE9B,YACE,IAA0B,EAC1B,YAAoB,EACpB,OAAe;QAEf,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;QAC/B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;IACnC,CAAC;CACF"}
@@ -0,0 +1,3 @@
1
+ import { type FormIndex } from "./form-index-types.js";
2
+ export declare function canonicalizeFormIndex(value: unknown): FormIndex;
3
+ //# sourceMappingURL=form-index-validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form-index-validation.d.ts","sourceRoot":"","sources":["../../src/form-index-validation.ts"],"names":[],"mappings":"AAKA,OAAO,EAML,KAAK,SAAS,EAKf,MAAM,uBAAuB,CAAC;AAoB/B,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,CA0B/D"}