semantifold 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 (111) hide show
  1. package/LICENSE +15 -0
  2. package/README.md +71 -0
  3. package/build/index.d.ts +54 -0
  4. package/build/index.d.ts.map +1 -0
  5. package/build/index.js +45 -0
  6. package/build/src/backends/identifiers.d.ts +19 -0
  7. package/build/src/backends/identifiers.d.ts.map +1 -0
  8. package/build/src/backends/identifiers.js +93 -0
  9. package/build/src/backends/index.d.ts +35 -0
  10. package/build/src/backends/index.d.ts.map +1 -0
  11. package/build/src/backends/index.js +149 -0
  12. package/build/src/backends/java.d.ts +8 -0
  13. package/build/src/backends/java.d.ts.map +1 -0
  14. package/build/src/backends/java.js +172 -0
  15. package/build/src/backends/javascript.d.ts +8 -0
  16. package/build/src/backends/javascript.d.ts.map +1 -0
  17. package/build/src/backends/javascript.js +173 -0
  18. package/build/src/backends/php.d.ts +8 -0
  19. package/build/src/backends/php.d.ts.map +1 -0
  20. package/build/src/backends/php.js +175 -0
  21. package/build/src/backends/ruby.d.ts +8 -0
  22. package/build/src/backends/ruby.d.ts.map +1 -0
  23. package/build/src/backends/ruby.js +155 -0
  24. package/build/src/backends/scalars.d.ts +15 -0
  25. package/build/src/backends/scalars.d.ts.map +1 -0
  26. package/build/src/backends/scalars.js +138 -0
  27. package/build/src/backends/shared.d.ts +26 -0
  28. package/build/src/backends/shared.d.ts.map +1 -0
  29. package/build/src/backends/shared.js +424 -0
  30. package/build/src/backends/typescript.d.ts +8 -0
  31. package/build/src/backends/typescript.d.ts.map +1 -0
  32. package/build/src/backends/typescript.js +160 -0
  33. package/build/src/backends/writer.d.ts +87 -0
  34. package/build/src/backends/writer.d.ts.map +1 -0
  35. package/build/src/backends/writer.js +207 -0
  36. package/build/src/diagnostic.d.ts +67 -0
  37. package/build/src/diagnostic.d.ts.map +1 -0
  38. package/build/src/diagnostic.js +96 -0
  39. package/build/src/frontends/index.d.ts +14 -0
  40. package/build/src/frontends/index.d.ts.map +1 -0
  41. package/build/src/frontends/index.js +36 -0
  42. package/build/src/frontends/java.d.ts +12 -0
  43. package/build/src/frontends/java.d.ts.map +1 -0
  44. package/build/src/frontends/java.js +630 -0
  45. package/build/src/frontends/javascript-typescript.d.ts +19 -0
  46. package/build/src/frontends/javascript-typescript.d.ts.map +1 -0
  47. package/build/src/frontends/javascript-typescript.js +633 -0
  48. package/build/src/frontends/php.d.ts +12 -0
  49. package/build/src/frontends/php.d.ts.map +1 -0
  50. package/build/src/frontends/php.js +523 -0
  51. package/build/src/frontends/ruby.d.ts +12 -0
  52. package/build/src/frontends/ruby.d.ts.map +1 -0
  53. package/build/src/frontends/ruby.js +515 -0
  54. package/build/src/frontends/scalars.d.ts +19 -0
  55. package/build/src/frontends/scalars.d.ts.map +1 -0
  56. package/build/src/frontends/scalars.js +71 -0
  57. package/build/src/mapping.d.ts +160 -0
  58. package/build/src/mapping.d.ts.map +1 -0
  59. package/build/src/mapping.js +1120 -0
  60. package/build/src/semantic/location.d.ts +61 -0
  61. package/build/src/semantic/location.d.ts.map +1 -0
  62. package/build/src/semantic/location.js +142 -0
  63. package/build/src/semantic/operators.d.ts +16 -0
  64. package/build/src/semantic/operators.d.ts.map +1 -0
  65. package/build/src/semantic/operators.js +24 -0
  66. package/build/src/semantic/provenance.d.ts +74 -0
  67. package/build/src/semantic/provenance.d.ts.map +1 -0
  68. package/build/src/semantic/provenance.js +577 -0
  69. package/build/src/semantic/scalars.d.ts +19 -0
  70. package/build/src/semantic/scalars.d.ts.map +1 -0
  71. package/build/src/semantic/scalars.js +40 -0
  72. package/build/src/semantic/types.d.ts +1003 -0
  73. package/build/src/semantic/types.d.ts.map +1 -0
  74. package/build/src/semantic/types.js +279 -0
  75. package/build/src/semantic/validate.d.ts +60 -0
  76. package/build/src/semantic/validate.d.ts.map +1 -0
  77. package/build/src/semantic/validate.js +472 -0
  78. package/docs/architecture.md +39 -0
  79. package/docs/coding-standards.md +7 -0
  80. package/docs/goals.md +7 -0
  81. package/docs/language-support.md +69 -0
  82. package/docs/plans/2026-09-02-initial-toolchain.md +54 -0
  83. package/docs/source-maps.md +134 -0
  84. package/docs/testing.md +25 -0
  85. package/index.js +63 -0
  86. package/package.json +69 -0
  87. package/src/backends/identifiers.js +101 -0
  88. package/src/backends/index.js +159 -0
  89. package/src/backends/java.js +182 -0
  90. package/src/backends/javascript.js +184 -0
  91. package/src/backends/php.js +184 -0
  92. package/src/backends/ruby.js +163 -0
  93. package/src/backends/scalars.js +120 -0
  94. package/src/backends/shared.js +456 -0
  95. package/src/backends/typescript.js +168 -0
  96. package/src/backends/writer.js +224 -0
  97. package/src/diagnostic.js +103 -0
  98. package/src/frontends/index.js +36 -0
  99. package/src/frontends/java.js +735 -0
  100. package/src/frontends/javascript-typescript.js +718 -0
  101. package/src/frontends/php.js +593 -0
  102. package/src/frontends/ruby.js +622 -0
  103. package/src/frontends/scalars.js +77 -0
  104. package/src/mapping.js +1260 -0
  105. package/src/semantic/location.js +154 -0
  106. package/src/semantic/operators.js +28 -0
  107. package/src/semantic/provenance.js +629 -0
  108. package/src/semantic/scalars.js +44 -0
  109. package/src/semantic/types.js +319 -0
  110. package/src/semantic/validate.js +529 -0
  111. package/tsconfig.json +16 -0
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Converts a source offset to a one-based point.
3
+ * @param {string} source - Complete source.
4
+ * @param {number} offset - Zero-based UTF-16 offset.
5
+ * @returns {import("./types.js").SourcePoint} Source point.
6
+ */
7
+ export declare function pointAt(source: string, offset: number): import("./types.js").SourcePoint;
8
+ /**
9
+ * Builds a reusable UTF-16 line index in one pass.
10
+ * @param {string} source - Complete source.
11
+ * @returns {{source: string, lineStarts: number[]}} Coordinate index.
12
+ */
13
+ export declare function createCoordinateIndex(source: string): {
14
+ source: string;
15
+ lineStarts: number[];
16
+ };
17
+ /**
18
+ * Converts an offset with a reusable coordinate index.
19
+ * @param {{source: string, lineStarts: number[]}} index - Coordinate index.
20
+ * @param {number} offset - Zero-based UTF-16 offset.
21
+ * @returns {import("./types.js").SourcePoint} Source point.
22
+ */
23
+ export declare function indexedPointAt(index: {
24
+ source: string;
25
+ lineStarts: number[];
26
+ }, offset: number): import("./types.js").SourcePoint;
27
+ /**
28
+ * Converts a canonical one-based UTF-16 line/column pair to its unique offset.
29
+ * @param {{source: string, lineStarts: number[]}} index - Coordinate index.
30
+ * @param {number} line - One-based line.
31
+ * @param {number} column - One-based UTF-16 column.
32
+ * @returns {number} Source offset.
33
+ */
34
+ export declare function indexedOffsetAt(index: {
35
+ source: string;
36
+ lineStarts: number[];
37
+ }, line: number, column: number): number;
38
+ /**
39
+ * Converts a parser UTF-8 byte offset to Semantifold's UTF-16 source offset.
40
+ * @param {string} source - Complete source.
41
+ * @param {number} byteOffset - Zero-based UTF-8 byte offset.
42
+ * @returns {number} Zero-based UTF-16 offset.
43
+ */
44
+ export declare function utf8ByteOffsetToUtf16Offset(source: string, byteOffset: number): number;
45
+ /**
46
+ * Builds a normalized source location from offsets.
47
+ * @param {string} filename - Originating filename.
48
+ * @param {string} source - Complete source.
49
+ * @param {number} startOffset - Inclusive start offset.
50
+ * @param {number} endOffset - Exclusive end offset.
51
+ * @returns {import("./types.js").SourceLocation} Source location.
52
+ */
53
+ export declare function locationFromOffsets(filename: string, source: string, startOffset: number, endOffset: number): import("./types.js").SourceLocation;
54
+ /**
55
+ * Builds a location spanning a complete source file.
56
+ * @param {string} filename - Originating filename.
57
+ * @param {string} source - Complete source.
58
+ * @returns {import("./types.js").SourceLocation} Source location.
59
+ */
60
+ export declare function moduleLocation(filename: string, source: string): import("./types.js").SourceLocation;
61
+ //# sourceMappingURL=location.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"location.d.ts","sourceRoot":"","sources":["../../../src/semantic/location.js"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,MAAM,EAJnB,MAImB,EAAE,MAAM,EAH3B,MAG2B,GAFzB,OAAO,YAAY,EAAE,WAAW,CA6B5C;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAHjC,MAGiC,GAF/B;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAA;CAAC,CAalD;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAJzB;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAA;CAIZ,EAAE,MAAM,EAHjC,MAGiC,GAF/B,OAAO,YAAY,EAAE,WAAW,CAqB5C;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAL1B;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAA;CAKX,EAAE,IAAI,EAJhC,MAIgC,EAAE,MAAM,EAHxC,MAGwC,GAFtC,MAAM,CAYlB;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAJvC,MAIuC,EAAE,UAAU,EAHnD,MAGmD,GAFjD,MAAM,CAsBlB;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EANjC,MAMiC,EAAE,MAAM,EALzC,MAKyC,EAAE,WAAW,EAJtD,MAIsD,EAAE,SAAS,EAHjE,MAGiE,GAF/D,OAAO,YAAY,EAAE,cAAc,CAQ/C;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAJ5B,MAI4B,EAAE,MAAM,EAHpC,MAGoC,GAFlC,OAAO,YAAY,EAAE,cAAc,CAI/C"}
@@ -0,0 +1,142 @@
1
+ // @ts-check
2
+ /**
3
+ * Converts a source offset to a one-based point.
4
+ * @param {string} source - Complete source.
5
+ * @param {number} offset - Zero-based UTF-16 offset.
6
+ * @returns {import("./types.js").SourcePoint} Source point.
7
+ */
8
+ export function pointAt(source, offset) {
9
+ if (!Number.isInteger(offset) || offset < 0 || offset > source.length) {
10
+ throw new RangeError(`Invalid source offset: ${offset}`);
11
+ }
12
+ let line = 1;
13
+ let lineStart = 0;
14
+ for (let index = 0; index < offset; index++) {
15
+ if (source[index] == "\r") {
16
+ if (source[index + 1] == "\n") {
17
+ if (index + 1 < offset) {
18
+ line++;
19
+ index++;
20
+ lineStart = index + 1;
21
+ }
22
+ }
23
+ else {
24
+ line++;
25
+ lineStart = index + 1;
26
+ }
27
+ }
28
+ else if (source[index] == "\n") {
29
+ line++;
30
+ lineStart = index + 1;
31
+ }
32
+ }
33
+ return { column: offset - lineStart + 1, line, offset };
34
+ }
35
+ /**
36
+ * Builds a reusable UTF-16 line index in one pass.
37
+ * @param {string} source - Complete source.
38
+ * @returns {{source: string, lineStarts: number[]}} Coordinate index.
39
+ */
40
+ export function createCoordinateIndex(source) {
41
+ const lineStarts = [0];
42
+ for (let index = 0; index < source.length; index++) {
43
+ if (source[index] == "\r") {
44
+ if (source[index + 1] == "\n")
45
+ index++;
46
+ lineStarts.push(index + 1);
47
+ }
48
+ else if (source[index] == "\n")
49
+ lineStarts.push(index + 1);
50
+ }
51
+ return { lineStarts, source };
52
+ }
53
+ /**
54
+ * Converts an offset with a reusable coordinate index.
55
+ * @param {{source: string, lineStarts: number[]}} index - Coordinate index.
56
+ * @param {number} offset - Zero-based UTF-16 offset.
57
+ * @returns {import("./types.js").SourcePoint} Source point.
58
+ */
59
+ export function indexedPointAt(index, offset) {
60
+ const { lineStarts, source } = index;
61
+ if (!Number.isInteger(offset) || offset < 0 || offset > source.length) {
62
+ throw new RangeError(`Invalid source offset: ${offset}`);
63
+ }
64
+ let low = 0;
65
+ let high = lineStarts.length;
66
+ while (low < high) {
67
+ const middle = Math.floor((low + high) / 2);
68
+ if (lineStarts[middle] <= offset)
69
+ low = middle + 1;
70
+ else
71
+ high = middle;
72
+ }
73
+ const lineIndex = low - 1;
74
+ return { column: offset - lineStarts[lineIndex] + 1, line: lineIndex + 1, offset };
75
+ }
76
+ /**
77
+ * Converts a canonical one-based UTF-16 line/column pair to its unique offset.
78
+ * @param {{source: string, lineStarts: number[]}} index - Coordinate index.
79
+ * @param {number} line - One-based line.
80
+ * @param {number} column - One-based UTF-16 column.
81
+ * @returns {number} Source offset.
82
+ */
83
+ export function indexedOffsetAt(index, line, column) {
84
+ if (!Number.isInteger(line) || line < 1 || line > index.lineStarts.length || !Number.isInteger(column) || column < 1) {
85
+ throw new RangeError(`Invalid source position ${line}:${column}.`);
86
+ }
87
+ const offset = index.lineStarts[line - 1] + column - 1;
88
+ const point = indexedPointAt(index, offset);
89
+ if (point.line != line || point.column != column)
90
+ throw new RangeError(`Invalid source position ${line}:${column}.`);
91
+ return offset;
92
+ }
93
+ /**
94
+ * Converts a parser UTF-8 byte offset to Semantifold's UTF-16 source offset.
95
+ * @param {string} source - Complete source.
96
+ * @param {number} byteOffset - Zero-based UTF-8 byte offset.
97
+ * @returns {number} Zero-based UTF-16 offset.
98
+ */
99
+ export function utf8ByteOffsetToUtf16Offset(source, byteOffset) {
100
+ if (!Number.isInteger(byteOffset) || byteOffset < 0)
101
+ throw new RangeError(`Invalid UTF-8 source offset: ${byteOffset}`);
102
+ let bytes = 0;
103
+ for (let index = 0; index < source.length;) {
104
+ if (bytes == byteOffset)
105
+ return index;
106
+ const codePoint = source.codePointAt(index);
107
+ if (codePoint === undefined)
108
+ throw new RangeError(`Invalid UTF-8 source offset: ${byteOffset}`);
109
+ bytes += codePoint <= 0x7F ? 1 : codePoint <= 0x7FF ? 2 : codePoint <= 0xFFFF ? 3 : 4;
110
+ if (bytes > byteOffset)
111
+ throw new RangeError(`Invalid UTF-8 source offset: ${byteOffset}`);
112
+ index += codePoint > 0xFFFF ? 2 : 1;
113
+ }
114
+ if (bytes == byteOffset)
115
+ return source.length;
116
+ throw new RangeError(`Invalid UTF-8 source offset: ${byteOffset}`);
117
+ }
118
+ /**
119
+ * Builds a normalized source location from offsets.
120
+ * @param {string} filename - Originating filename.
121
+ * @param {string} source - Complete source.
122
+ * @param {number} startOffset - Inclusive start offset.
123
+ * @param {number} endOffset - Exclusive end offset.
124
+ * @returns {import("./types.js").SourceLocation} Source location.
125
+ */
126
+ export function locationFromOffsets(filename, source, startOffset, endOffset) {
127
+ return {
128
+ filename,
129
+ start: pointAt(source, startOffset),
130
+ end: pointAt(source, endOffset)
131
+ };
132
+ }
133
+ /**
134
+ * Builds a location spanning a complete source file.
135
+ * @param {string} filename - Originating filename.
136
+ * @param {string} source - Complete source.
137
+ * @returns {import("./types.js").SourceLocation} Source location.
138
+ */
139
+ export function moduleLocation(filename, source) {
140
+ return locationFromOffsets(filename, source, 0, source.length);
141
+ }
142
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VtYW50aWMvbG9jYXRpb24uanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLE9BQU8sQ0FBQyxNQUFNLEVBQUUsTUFBTTtJQUNwQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxNQUFNLEdBQUcsQ0FBQyxJQUFJLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDdEUsTUFBTSxJQUFJLFVBQVUsQ0FBQywwQkFBMEIsTUFBTSxFQUFFLENBQUMsQ0FBQTtJQUMxRCxDQUFDO0lBRUQsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFBO0lBQ1osSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFBO0lBRWpCLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQztRQUM1QyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUMxQixJQUFJLE1BQU0sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQzlCLElBQUksS0FBSyxHQUFHLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQztvQkFDdkIsSUFBSSxFQUFFLENBQUE7b0JBQ04sS0FBSyxFQUFFLENBQUE7b0JBQ1AsU0FBUyxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUE7Z0JBQ3ZCLENBQUM7WUFDSCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxFQUFFLENBQUE7Z0JBQ04sU0FBUyxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUE7WUFDdkIsQ0FBQztRQUNILENBQUM7YUFBTSxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNqQyxJQUFJLEVBQUUsQ0FBQTtZQUNOLFNBQVMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFBO1FBQ3ZCLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxFQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsU0FBUyxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFDLENBQUE7QUFDdkQsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUscUJBQXFCLENBQUMsTUFBTTtJQUMxQyxNQUFNLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBRXRCLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUM7UUFDbkQsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7WUFDMUIsSUFBSSxNQUFNLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUk7Z0JBQUUsS0FBSyxFQUFFLENBQUE7WUFDdEMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUE7UUFDNUIsQ0FBQzthQUFNLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUk7WUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQTtJQUM5RCxDQUFDO0lBRUQsT0FBTyxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUMsQ0FBQTtBQUM3QixDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUFDLEtBQUssRUFBRSxNQUFNO0lBQzFDLE1BQU0sRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFDLEdBQUcsS0FBSyxDQUFBO0lBRWxDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLE1BQU0sR0FBRyxDQUFDLElBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN0RSxNQUFNLElBQUksVUFBVSxD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SSxVQUFVLENBQUMsZ0NBQWdDLFVBQVUsRUFBRSxDQUFDLENBQUE7UUFDMUYsS0FBSyxJQUFJLFNBQVMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ3JDLENBQUM7SUFFRCxJQUFJLEtBQUssSUFBSSxVQUFVO1FBQUUsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFBO0lBRTdDLE1BQU0sSUFBSSxVQUFVLENBQUMsZ0NBQWdDLFVBQVUsRUFBRSxDQUFDLENBQUE7QUFDcEUsQ0FBQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsU0FBUztJQUMxRSxPQUFPO1FBQ0wsUUFBUTtRQUNSLEtBQUssRUFBRSxPQUFPLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQztRQUNuQyxHQUFHLEVBQUUsT0FBTyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUM7S0FDaEMsQ0FBQTtBQUNILENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxjQUFjLENBQUMsUUFBUSxFQUFFLE1BQU07SUFDN0MsT0FBTyxtQkFBbUIsQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUE7QUFDaEUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG4vKipcbiAqIENvbnZlcnRzIGEgc291cmNlIG9mZnNldCB0byBhIG9uZS1iYXNlZCBwb2ludC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcGFyYW0ge251bWJlcn0gb2Zmc2V0IC0gWmVyby1iYXNlZCBVVEYtMTYgb2Zmc2V0LlxuICogQHJldHVybnMge2ltcG9ydChcIi4vdHlwZXMuanNcIikuU291cmNlUG9pbnR9IFNvdXJjZSBwb2ludC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBvaW50QXQoc291cmNlLCBvZmZzZXQpIHtcbiAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKG9mZnNldCkgfHwgb2Zmc2V0IDwgMCB8fCBvZmZzZXQgPiBzb3VyY2UubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYEludmFsaWQgc291cmNlIG9mZnNldDogJHtvZmZzZXR9YClcbiAgfVxuXG4gIGxldCBsaW5lID0gMVxuICBsZXQgbGluZVN0YXJ0ID0gMFxuXG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBvZmZzZXQ7IGluZGV4KyspIHtcbiAgICBpZiAoc291cmNlW2luZGV4XSA9PSBcIlxcclwiKSB7XG4gICAgICBpZiAoc291cmNlW2luZGV4ICsgMV0gPT0gXCJcXG5cIikge1xuICAgICAgICBpZiAoaW5kZXggKyAxIDwgb2Zmc2V0KSB7XG4gICAgICAgICAgbGluZSsrXG4gICAgICAgICAgaW5kZXgrK1xuICAgICAgICAgIGxpbmVTdGFydCA9IGluZGV4ICsgMVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsaW5lKytcbiAgICAgICAgbGluZVN0YXJ0ID0gaW5kZXggKyAxXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChzb3VyY2VbaW5kZXhdID09IFwiXFxuXCIpIHtcbiAgICAgIGxpbmUrK1xuICAgICAgbGluZVN0YXJ0ID0gaW5kZXggKyAxXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtjb2x1bW46IG9mZnNldCAtIGxpbmVTdGFydCArIDEsIGxpbmUsIG9mZnNldH1cbn1cblxuLyoqXG4gKiBCdWlsZHMgYSByZXVzYWJsZSBVVEYtMTYgbGluZSBpbmRleCBpbiBvbmUgcGFzcy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBDb21wbGV0ZSBzb3VyY2UuXG4gKiBAcmV0dXJucyB7e3NvdXJjZTogc3RyaW5nLCBsaW5lU3RhcnRzOiBudW1iZXJbXX19IENvb3JkaW5hdGUgaW5kZXguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDb29yZGluYXRlSW5kZXgoc291cmNlKSB7XG4gIGNvbnN0IGxpbmVTdGFydHMgPSBbMF1cblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgc291cmNlLmxlbmd0aDsgaW5kZXgrKykge1xuICAgIGlmIChzb3VyY2VbaW5kZXhdID09IFwiXFxyXCIpIHtcbiAgICAgIGlmIChzb3VyY2VbaW5kZXggKyAxXSA9PSBcIlxcblwiKSBpbmRleCsrXG4gICAgICBsaW5lU3RhcnRzLnB1c2goaW5kZXggKyAxKVxuICAgIH0gZWxzZSBpZiAoc291cmNlW2luZGV4XSA9PSBcIlxcblwiKSBsaW5lU3RhcnRzLnB1c2goaW5kZXggKyAxKVxuICB9XG5cbiAgcmV0dXJuIHtsaW5lU3RhcnRzLCBzb3VyY2V9XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2Zmc2V0IHdpdGggYSByZXVzYWJsZSBjb29yZGluYXRlIGluZGV4LlxuICogQHBhcmFtIHt7c291cmNlOiBzdHJpbmcsIGxpbmVTdGFydHM6IG51bWJlcltdfX0gaW5kZXggLSBDb29yZGluYXRlIGluZGV4LlxuICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldCAtIFplcm8tYmFzZWQgVVRGLTE2IG9mZnNldC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlNvdXJjZVBvaW50fSBTb3VyY2UgcG9pbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbmRleGVkUG9pbnRBdChpbmRleCwgb2Zmc2V0KSB7XG4gIGNvbnN0IHtsaW5lU3RhcnRzLCBzb3VyY2V9ID0gaW5kZXhcblxuICBpZiAoIU51bWJlci5pc0ludGVnZXIob2Zmc2V0KSB8fCBvZmZzZXQgPCAwIHx8IG9mZnNldCA+IHNvdXJjZS5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgSW52YWxpZCBzb3VyY2Ugb2Zmc2V0OiAke29mZnNldH1gKVxuICB9XG5cbiAgbGV0IGxvdyA9IDBcbiAgbGV0IGhpZ2ggPSBsaW5lU3RhcnRzLmxlbmd0aFxuXG4gIHdoaWxlIChsb3cgPCBoaWdoKSB7XG4gICAgY29uc3QgbWlkZGxlID0gTWF0aC5mbG9vcigobG93ICsgaGlnaCkgLyAyKVxuXG4gICAgaWYgKGxpbmVTdGFydHNbbWlkZGxlXSA8PSBvZmZzZXQpIGxvdyA9IG1pZGRsZSArIDFcbiAgICBlbHNlIGhpZ2ggPSBtaWRkbGVcbiAgfVxuICBjb25zdCBsaW5lSW5kZXggPSBsb3cgLSAxXG5cbiAgcmV0dXJuIHtjb2x1bW46IG9mZnNldCAtIGxpbmVTdGFydHNbbGluZUluZGV4XSArIDEsIGxpbmU6IGxpbmVJbmRleCArIDEsIG9mZnNldH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIGNhbm9uaWNhbCBvbmUtYmFzZWQgVVRGLTE2IGxpbmUvY29sdW1uIHBhaXIgdG8gaXRzIHVuaXF1ZSBvZmZzZXQuXG4gKiBAcGFyYW0ge3tzb3VyY2U6IHN0cmluZywgbGluZVN0YXJ0czogbnVtYmVyW119fSBpbmRleCAtIENvb3JkaW5hdGUgaW5kZXguXG4gKiBAcGFyYW0ge251bWJlcn0gbGluZSAtIE9uZS1iYXNlZCBsaW5lLlxuICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbiAtIE9uZS1iYXNlZCBVVEYtMTYgY29sdW1uLlxuICogQHJldHVybnMge251bWJlcn0gU291cmNlIG9mZnNldC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluZGV4ZWRPZmZzZXRBdChpbmRleCwgbGluZSwgY29sdW1uKSB7XG4gIGlmICghTnVtYmVyLmlzSW50ZWdlcihsaW5lKSB8fCBsaW5lIDwgMSB8fCBsaW5lID4gaW5kZXgubGluZVN0YXJ0cy5sZW5ndGggfHwgIU51bWJlci5pc0ludGVnZXIoY29sdW1uKSB8fCBjb2x1bW4gPCAxKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYEludmFsaWQgc291cmNlIHBvc2l0aW9uICR7bGluZX06JHtjb2x1bW59LmApXG4gIH1cbiAgY29uc3Qgb2Zmc2V0ID0gaW5kZXgubGluZVN0YXJ0c1tsaW5lIC0gMV0gKyBjb2x1bW4gLSAxXG4gIGNvbnN0IHBvaW50ID0gaW5kZXhlZFBvaW50QXQoaW5kZXgsIG9mZnNldClcblxuICBpZiAocG9pbnQubGluZSAhPSBsaW5lIHx8IHBvaW50LmNvbHVtbiAhPSBjb2x1bW4pIHRocm93IG5ldyBSYW5nZUVycm9yKGBJbnZhbGlkIHNvdXJjZSBwb3NpdGlvbiAke2xpbmV9OiR7Y29sdW1ufS5gKVxuXG4gIHJldHVybiBvZmZzZXRcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIHBhcnNlciBVVEYtOCBieXRlIG9mZnNldCB0byBTZW1hbnRpZm9sZCdzIFVURi0xNiBzb3VyY2Ugb2Zmc2V0LlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIENvbXBsZXRlIHNvdXJjZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBieXRlT2Zmc2V0IC0gWmVyby1iYXNlZCBVVEYtOCBieXRlIG9mZnNldC5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFplcm8tYmFzZWQgVVRGLTE2IG9mZnNldC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHV0ZjhCeXRlT2Zmc2V0VG9VdGYxNk9mZnNldChzb3VyY2UsIGJ5dGVPZmZzZXQpIHtcbiAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKGJ5dGVPZmZzZXQpIHx8IGJ5dGVPZmZzZXQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgSW52YWxpZCBVVEYtOCBzb3VyY2Ugb2Zmc2V0OiAke2J5dGVPZmZzZXR9YClcblxuICBsZXQgYnl0ZXMgPSAwXG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHNvdXJjZS5sZW5ndGg7KSB7XG4gICAgaWYgKGJ5dGVzID09IGJ5dGVPZmZzZXQpIHJldHVybiBpbmRleFxuXG4gICAgY29uc3QgY29kZVBvaW50ID0gc291cmNlLmNvZGVQb2ludEF0KGluZGV4KVxuXG4gICAgaWYgKGNvZGVQb2ludCA9PT0gdW5kZWZpbmVkKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgSW52YWxpZCBVVEYtOCBzb3VyY2Ugb2Zmc2V0OiAke2J5dGVPZmZzZXR9YClcblxuICAgIGJ5dGVzICs9IGNvZGVQb2ludCA8PSAweDdGID8gMSA6IGNvZGVQb2ludCA8PSAweDdGRiA/IDIgOiBjb2RlUG9pbnQgPD0gMHhGRkZGID8gMyA6IDRcbiAgICBpZiAoYnl0ZXMgPiBieXRlT2Zmc2V0KSB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgSW52YWxpZCBVVEYtOCBzb3VyY2Ugb2Zmc2V0OiAke2J5dGVPZmZzZXR9YClcbiAgICBpbmRleCArPSBjb2RlUG9pbnQgPiAweEZGRkYgPyAyIDogMVxuICB9XG5cbiAgaWYgKGJ5dGVzID09IGJ5dGVPZmZzZXQpIHJldHVybiBzb3VyY2UubGVuZ3RoXG5cbiAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYEludmFsaWQgVVRGLTggc291cmNlIG9mZnNldDogJHtieXRlT2Zmc2V0fWApXG59XG5cbi8qKlxuICogQnVpbGRzIGEgbm9ybWFsaXplZCBzb3VyY2UgbG9jYXRpb24gZnJvbSBvZmZzZXRzLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gT3JpZ2luYXRpbmcgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0T2Zmc2V0IC0gSW5jbHVzaXZlIHN0YXJ0IG9mZnNldC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBlbmRPZmZzZXQgLSBFeGNsdXNpdmUgZW5kIG9mZnNldC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9ufSBTb3VyY2UgbG9jYXRpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2NhdGlvbkZyb21PZmZzZXRzKGZpbGVuYW1lLCBzb3VyY2UsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpIHtcbiAgcmV0dXJuIHtcbiAgICBmaWxlbmFtZSxcbiAgICBzdGFydDogcG9pbnRBdChzb3VyY2UsIHN0YXJ0T2Zmc2V0KSxcbiAgICBlbmQ6IHBvaW50QXQoc291cmNlLCBlbmRPZmZzZXQpXG4gIH1cbn1cblxuLyoqXG4gKiBCdWlsZHMgYSBsb2NhdGlvbiBzcGFubmluZyBhIGNvbXBsZXRlIHNvdXJjZSBmaWxlLlxuICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lIC0gT3JpZ2luYXRpbmcgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gQ29tcGxldGUgc291cmNlLlxuICogQHJldHVybnMge2ltcG9ydChcIi4vdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IFNvdXJjZSBsb2NhdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1vZHVsZUxvY2F0aW9uKGZpbGVuYW1lLCBzb3VyY2UpIHtcbiAgcmV0dXJuIGxvY2F0aW9uRnJvbU9mZnNldHMoZmlsZW5hbWUsIHNvdXJjZSwgMCwgc291cmNlLmxlbmd0aClcbn1cbiJdfQ==
@@ -0,0 +1,16 @@
1
+ export type AdaptedOperation = "Add" | "PhpAdd" | "Subtract" | "Multiply" | "Negate" | "Not" | "And" | "Or" | "Equal" | "NotEqual" | "JavaEqual" | "JavaNotEqual" | "StringEqual" | "StringNotEqual" | "StringConcat" | "LessThan" | "LessThanOrEqual" | "GreaterThan" | "GreaterThanOrEqual";
2
+ /**
3
+ * Associates parser-normalized intent without adding it to a semantic value.
4
+ * @template {object} Expression
5
+ * @param {Expression} expression - Adapted expression awaiting type resolution.
6
+ * @param {AdaptedOperation} operation - Parser-normalized operation intent.
7
+ * @returns {Expression} The same expression.
8
+ */
9
+ export declare function withAdaptedOperation<Expression extends object>(expression: Expression, operation: AdaptedOperation): Expression;
10
+ /**
11
+ * Reads private frontend intent during parsed-module validation.
12
+ * @param {object} expression - Adapted expression.
13
+ * @returns {AdaptedOperation | undefined} Associated operation.
14
+ */
15
+ export declare function adaptedOperationFor(expression: object): AdaptedOperation | undefined;
16
+ //# sourceMappingURL=operators.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operators.d.ts","sourceRoot":"","sources":["../../../src/semantic/operators.js"],"names":[],"mappings":"AAEI,YAA0Q,gBAAgB,GAAhR,KAAK,GAAG,QAAQ,GAAG,UAAU,GAAG,UAAU,GAAG,QAAQ,GAAG,KAAK,GAAG,KAAK,GAAG,IAAI,GAAG,OAAO,GAAG,UAAU,GAAG,WAAW,GAAG,cAAc,GAAG,aAAa,GAAG,gBAAgB,GAAG,cAAc,GAAG,UAAU,GAAG,iBAAiB,GAAG,aAAa,GAAG,oBAAoB,CAAkB;AAK9R;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CALd,UAAU,SAAlB,MAAkB,EAKK,UAAU,EAJpC,UAIoC,EAAE,SAAS,EAH/C,gBAG+C,GAF7C,UAAU,CAMtB;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAHnC,MAGmC,GAFjC,gBAAgB,GAAG,SAAS,CAIxC"}
@@ -0,0 +1,24 @@
1
+ // @ts-check
2
+ /** @typedef {"Add" | "PhpAdd" | "Subtract" | "Multiply" | "Negate" | "Not" | "And" | "Or" | "Equal" | "NotEqual" | "JavaEqual" | "JavaNotEqual" | "StringEqual" | "StringNotEqual" | "StringConcat" | "LessThan" | "LessThanOrEqual" | "GreaterThan" | "GreaterThanOrEqual"} AdaptedOperation */
3
+ /** @type {WeakMap<object, AdaptedOperation>} */
4
+ const adaptedOperations = new WeakMap();
5
+ /**
6
+ * Associates parser-normalized intent without adding it to a semantic value.
7
+ * @template {object} Expression
8
+ * @param {Expression} expression - Adapted expression awaiting type resolution.
9
+ * @param {AdaptedOperation} operation - Parser-normalized operation intent.
10
+ * @returns {Expression} The same expression.
11
+ */
12
+ export function withAdaptedOperation(expression, operation) {
13
+ adaptedOperations.set(expression, operation);
14
+ return expression;
15
+ }
16
+ /**
17
+ * Reads private frontend intent during parsed-module validation.
18
+ * @param {object} expression - Adapted expression.
19
+ * @returns {AdaptedOperation | undefined} Associated operation.
20
+ */
21
+ export function adaptedOperationFor(expression) {
22
+ return adaptedOperations.get(expression);
23
+ }
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlcmF0b3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlbWFudGljL29wZXJhdG9ycy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosaVNBQWlTO0FBRWpTLGdEQUFnRDtBQUNoRCxNQUFNLGlCQUFpQixHQUFHLElBQUksT0FBTyxFQUFFLENBQUE7QUFFdkM7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUFDLFVBQVUsRUFBRSxTQUFTO0lBQ3hELGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUE7SUFFNUMsT0FBTyxVQUFVLENBQUE7QUFDbkIsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsVUFBVTtJQUM1QyxPQUFPLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQTtBQUMxQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbi8qKiBAdHlwZWRlZiB7XCJBZGRcIiB8IFwiUGhwQWRkXCIgfCBcIlN1YnRyYWN0XCIgfCBcIk11bHRpcGx5XCIgfCBcIk5lZ2F0ZVwiIHwgXCJOb3RcIiB8IFwiQW5kXCIgfCBcIk9yXCIgfCBcIkVxdWFsXCIgfCBcIk5vdEVxdWFsXCIgfCBcIkphdmFFcXVhbFwiIHwgXCJKYXZhTm90RXF1YWxcIiB8IFwiU3RyaW5nRXF1YWxcIiB8IFwiU3RyaW5nTm90RXF1YWxcIiB8IFwiU3RyaW5nQ29uY2F0XCIgfCBcIkxlc3NUaGFuXCIgfCBcIkxlc3NUaGFuT3JFcXVhbFwiIHwgXCJHcmVhdGVyVGhhblwiIHwgXCJHcmVhdGVyVGhhbk9yRXF1YWxcIn0gQWRhcHRlZE9wZXJhdGlvbiAqL1xuXG4vKiogQHR5cGUge1dlYWtNYXA8b2JqZWN0LCBBZGFwdGVkT3BlcmF0aW9uPn0gKi9cbmNvbnN0IGFkYXB0ZWRPcGVyYXRpb25zID0gbmV3IFdlYWtNYXAoKVxuXG4vKipcbiAqIEFzc29jaWF0ZXMgcGFyc2VyLW5vcm1hbGl6ZWQgaW50ZW50IHdpdGhvdXQgYWRkaW5nIGl0IHRvIGEgc2VtYW50aWMgdmFsdWUuXG4gKiBAdGVtcGxhdGUge29iamVjdH0gRXhwcmVzc2lvblxuICogQHBhcmFtIHtFeHByZXNzaW9ufSBleHByZXNzaW9uIC0gQWRhcHRlZCBleHByZXNzaW9uIGF3YWl0aW5nIHR5cGUgcmVzb2x1dGlvbi5cbiAqIEBwYXJhbSB7QWRhcHRlZE9wZXJhdGlvbn0gb3BlcmF0aW9uIC0gUGFyc2VyLW5vcm1hbGl6ZWQgb3BlcmF0aW9uIGludGVudC5cbiAqIEByZXR1cm5zIHtFeHByZXNzaW9ufSBUaGUgc2FtZSBleHByZXNzaW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gd2l0aEFkYXB0ZWRPcGVyYXRpb24oZXhwcmVzc2lvbiwgb3BlcmF0aW9uKSB7XG4gIGFkYXB0ZWRPcGVyYXRpb25zLnNldChleHByZXNzaW9uLCBvcGVyYXRpb24pXG5cbiAgcmV0dXJuIGV4cHJlc3Npb25cbn1cblxuLyoqXG4gKiBSZWFkcyBwcml2YXRlIGZyb250ZW5kIGludGVudCBkdXJpbmcgcGFyc2VkLW1vZHVsZSB2YWxpZGF0aW9uLlxuICogQHBhcmFtIHtvYmplY3R9IGV4cHJlc3Npb24gLSBBZGFwdGVkIGV4cHJlc3Npb24uXG4gKiBAcmV0dXJucyB7QWRhcHRlZE9wZXJhdGlvbiB8IHVuZGVmaW5lZH0gQXNzb2NpYXRlZCBvcGVyYXRpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGFwdGVkT3BlcmF0aW9uRm9yKGV4cHJlc3Npb24pIHtcbiAgcmV0dXJuIGFkYXB0ZWRPcGVyYXRpb25zLmdldChleHByZXNzaW9uKVxufVxuIl19
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Records parser-provided semantic-token ranges without exposing parser trees.
3
+ * @param {object} node - Semantic node.
4
+ * @param {Readonly<Record<string, import("./types.js").SourceLocation>>} ranges - Exact role ranges.
5
+ * @returns {void}
6
+ */
7
+ export declare function setParserRanges(node: object, ranges: Readonly<Record<string, import("./types.js").SourceLocation>>): void;
8
+ /**
9
+ * Records parser ranges and returns the same semantic node.
10
+ * @template {object} Node
11
+ * @param {Node} node - Semantic node.
12
+ * @param {Readonly<Record<string, import("./types.js").SourceLocation>>} ranges - Exact role ranges.
13
+ * @returns {Node} The same node.
14
+ */
15
+ export declare function withParserRanges<Node extends object>(node: Node, ranges: Readonly<Record<string, import("./types.js").SourceLocation>>): Node;
16
+ /**
17
+ * Adds deterministic provenance to a validated frontend module.
18
+ * @param {import("./types.js").SemanticModule} module - Validated semantic module.
19
+ * @param {object} source - Parsed source.
20
+ * @param {string} source.filename - Source filename.
21
+ * @param {import("./types.js").SemanticLanguage} source.language - Source language.
22
+ * @param {string} source.source - Exact source content.
23
+ * @returns {import("./types.js").SemanticModule} The same semantic module.
24
+ */
25
+ export declare function annotateParsedModule(module: import("./types.js").SemanticModule, { filename, language, source }: {
26
+ filename: string;
27
+ language: import("./types.js").SemanticLanguage;
28
+ source: string;
29
+ }): import("./types.js").SemanticModule;
30
+ /**
31
+ * Rebuilds canonical generation metadata without trusting caller-provided identities.
32
+ * @param {import("./types.js").SemanticModule} module - Semantic module.
33
+ * @param {{filename: string, content: string, language?: import("./types.js").SemanticLanguage}[]} [providedSources] - Additional source content.
34
+ * @returns {{provenance: import("./types.js").SemanticProvenance, recordFor: (node: import("./types.js").SemanticNode, path?: string) => import("./types.js").SemanticNodeProvenance}} Canonical index.
35
+ */
36
+ export declare function createGenerationIndex(module: import("./types.js").SemanticModule, providedSources?: {
37
+ filename: string;
38
+ content: string;
39
+ language?: import("./types.js").SemanticLanguage;
40
+ }[]): {
41
+ provenance: import("./types.js").SemanticProvenance;
42
+ recordFor: (node: import("./types.js").SemanticNode, path?: string) => import("./types.js").SemanticNodeProvenance;
43
+ };
44
+ /**
45
+ * Selects the safe primary original location for closed provenance.
46
+ * @param {import("./types.js").SemanticOrigin} origin - Closed provenance.
47
+ * @returns {import("./types.js").SourceLocation | undefined} Primary location.
48
+ */
49
+ export declare function primaryLocation(origin: import("./types.js").SemanticOrigin): import("./types.js").SourceLocation | undefined;
50
+ /**
51
+ * Finds one node provenance record by semantic object or node identity.
52
+ * @param {import("./types.js").SemanticModule} module - Semantic module.
53
+ * @param {import("./types.js").SemanticNode | string} node - Semantic object or node identity.
54
+ * @returns {import("./types.js").SemanticNodeProvenance} Provenance record.
55
+ */
56
+ export declare function getNodeProvenance(module: import("./types.js").SemanticModule, node: import("./types.js").SemanticNode | string): import("./types.js").SemanticNodeProvenance;
57
+ /**
58
+ * Finds one semantic symbol record.
59
+ * @param {import("./types.js").SemanticModule} module - Semantic module.
60
+ * @param {string} symbolId - Symbol identity.
61
+ * @returns {import("./types.js").SemanticSymbolProvenance} Symbol record.
62
+ */
63
+ export declare function getSymbolProvenance(module: import("./types.js").SemanticModule, symbolId: string): import("./types.js").SemanticSymbolProvenance;
64
+ /**
65
+ * Traverses public semantic nodes in one stable order.
66
+ * @param {import("./types.js").SemanticModule} module - Semantic module.
67
+ * @returns {{node: import("./types.js").SemanticNode, ownerLocation: import("./types.js").SourceLocation, path: string}[]} Entries.
68
+ */
69
+ export declare function semanticEntries(module: import("./types.js").SemanticModule): {
70
+ node: import("./types.js").SemanticNode;
71
+ ownerLocation: import("./types.js").SourceLocation;
72
+ path: string;
73
+ }[];
74
+ //# sourceMappingURL=provenance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provenance.d.ts","sourceRoot":"","sources":["../../../src/semantic/provenance.js"],"names":[],"mappings":"AASA;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAJzB,MAIyB,EAAE,MAAM,EAHjC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,YAAY,EAAE,cAAc,CAAC,CAG3B,GAF/B,IAAI,CAIhB;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CALV,IAAI,SAAZ,MAAY,EAKO,IAAI,EAJ1B,IAI0B,EAAE,MAAM,EAHlC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,YAAY,EAAE,cAAc,CAAC,CAG1B,GAFhC,IAAI,CAMhB;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAPhC,OAAO,YAAY,EAAE,cAOW,EAAE,EAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAC,EALtE;IAAuB,QAAQ,EAAvB,MAAM,CACd;IAAsD,QAAQ,EAAtD,OAAO,YAAY,EAAE,gBAAgB,CAC7C;IAAuB,MAAM,EAArB,MAAM,CACd;CAEsE,GAF5D,OAAO,YAAY,EAAE,cAAc,CA4C/C;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAJjC,OAAO,YAAY,EAAE,cAIY,EAAE,eAAe,AAH1D,CACA,EADQ;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,YAAY,EAAE,gBAAgB,CAAA;CAAC,EAG9B,GAFrD;IAAC,UAAU,EAAE,OAAO,YAAY,EAAE,kBAAkB,CAAC;IAAC,SAAS,EAAE,CAAC,IAAI,EAAE,OAAO,YAAY,EAAE,YAAY,EAAE,IAAI,CAAC,EAAE,MAAM,KAAK,OAAO,YAAY,EAAE,sBAAsB,CAAA;CAAC,CAgHrL;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAH3B,OAAO,YAAY,EAAE,cAGM,GAFzB,OAAO,YAAY,EAAE,cAAc,GAAG,SAAS,CAO3D;AA4LD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAJ7B,OAAO,YAAY,EAAE,cAIQ,EAAE,IAAI,EAHnC,OAAO,YAAY,EAAE,YAAY,GAAG,MAGD,GAFjC,OAAO,YAAY,EAAE,sBAAsB,CAYvD;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAJ/B,OAAO,YAAY,EAAE,cAIU,EAAE,QAAQ,EAHzC,MAGyC,GAFvC,OAAO,YAAY,EAAE,wBAAwB,CASzD;AAaD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAH3B,OAAO,YAAY,EAAE,cAGM,GAFzB;IAAC,IAAI,EAAE,OAAO,YAAY,EAAE,YAAY,CAAC;IAAC,aAAa,EAAE,OAAO,YAAY,EAAE,cAAc,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAC,EAAE,CAwDzH"}