semantifold 0.1.0 → 0.2.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/README.md +13 -6
  2. package/build/index.d.ts +32 -3
  3. package/build/index.d.ts.map +1 -1
  4. package/build/index.js +99 -4
  5. package/build/src/acceptance.d.ts +22 -0
  6. package/build/src/acceptance.d.ts.map +1 -0
  7. package/build/src/acceptance.js +339 -0
  8. package/build/src/array.d.ts +7 -0
  9. package/build/src/array.d.ts.map +1 -0
  10. package/build/src/array.js +18 -0
  11. package/build/src/artifact-path.d.ts +13 -0
  12. package/build/src/artifact-path.d.ts.map +1 -0
  13. package/build/src/artifact-path.js +30 -0
  14. package/build/src/artifacts.d.ts +7 -0
  15. package/build/src/artifacts.d.ts.map +1 -0
  16. package/build/src/artifacts.js +389 -0
  17. package/build/src/backends/identifiers.d.ts.map +1 -1
  18. package/build/src/backends/identifiers.js +10 -2
  19. package/build/src/backends/index.d.ts.map +1 -1
  20. package/build/src/backends/index.js +19 -37
  21. package/build/src/backends/python.d.ts +8 -0
  22. package/build/src/backends/python.d.ts.map +1 -0
  23. package/build/src/backends/python.js +162 -0
  24. package/build/src/backends/scalars.d.ts.map +1 -1
  25. package/build/src/backends/scalars.js +2 -1
  26. package/build/src/backends/shared.d.ts.map +1 -1
  27. package/build/src/backends/shared.js +9 -6
  28. package/build/src/binary-mapping.d.ts +32 -0
  29. package/build/src/binary-mapping.d.ts.map +1 -0
  30. package/build/src/binary-mapping.js +285 -0
  31. package/build/src/diagnostic.d.ts +36 -4
  32. package/build/src/diagnostic.d.ts.map +1 -1
  33. package/build/src/diagnostic.js +42 -3
  34. package/build/src/frontends/index.d.ts.map +1 -1
  35. package/build/src/frontends/index.js +5 -23
  36. package/build/src/frontends/python.d.ts +14 -0
  37. package/build/src/frontends/python.d.ts.map +1 -0
  38. package/build/src/frontends/python.js +615 -0
  39. package/build/src/frontends/scalars.d.ts.map +1 -1
  40. package/build/src/frontends/scalars.js +6 -1
  41. package/build/src/language-registry.d.ts +113 -0
  42. package/build/src/language-registry.d.ts.map +1 -0
  43. package/build/src/language-registry.js +372 -0
  44. package/build/src/mapping.js +3 -2
  45. package/build/src/semantic/location.d.ts +7 -0
  46. package/build/src/semantic/location.d.ts.map +1 -1
  47. package/build/src/semantic/location.js +10 -1
  48. package/build/src/semantic/provenance.js +3 -3
  49. package/build/src/semantic/types.d.ts +399 -2
  50. package/build/src/semantic/types.d.ts.map +1 -1
  51. package/build/src/semantic/types.js +110 -2
  52. package/build/src/subprocess.d.ts +29 -0
  53. package/build/src/subprocess.d.ts.map +1 -0
  54. package/build/src/subprocess.js +207 -0
  55. package/build/src/timeout.d.ts +8 -0
  56. package/build/src/timeout.d.ts.map +1 -0
  57. package/build/src/timeout.js +11 -0
  58. package/build/src/toolchains.d.ts +83 -0
  59. package/build/src/toolchains.d.ts.map +1 -0
  60. package/build/src/toolchains.js +413 -0
  61. package/docs/architecture.md +7 -3
  62. package/docs/language-support.md +25 -4
  63. package/docs/parser-qualification.md +70 -0
  64. package/docs/source-maps.md +31 -4
  65. package/docs/testing.md +21 -2
  66. package/index.js +109 -4
  67. package/package.json +4 -2
  68. package/src/acceptance.js +359 -0
  69. package/src/array.js +19 -0
  70. package/src/artifact-path.js +34 -0
  71. package/src/artifacts.js +420 -0
  72. package/src/backends/identifiers.js +9 -1
  73. package/src/backends/index.js +16 -32
  74. package/src/backends/python.js +175 -0
  75. package/src/backends/scalars.js +1 -0
  76. package/src/backends/shared.js +8 -5
  77. package/src/binary-mapping.js +305 -0
  78. package/src/diagnostic.js +34 -2
  79. package/src/frontends/index.js +5 -20
  80. package/src/frontends/python.js +689 -0
  81. package/src/frontends/scalars.js +5 -0
  82. package/src/language-registry.js +403 -0
  83. package/src/mapping.js +2 -1
  84. package/src/semantic/location.js +10 -0
  85. package/src/semantic/provenance.js +2 -2
  86. package/src/semantic/types.js +124 -1
  87. package/src/subprocess.js +203 -0
  88. package/src/timeout.js +12 -0
  89. package/src/toolchains.js +444 -0
  90. package/tsconfig.json +1 -0
@@ -0,0 +1,285 @@
1
+ // @ts-check
2
+ import { isDenseArray } from "./array.js";
3
+ import { isSafeArtifactPath } from "./artifact-path.js";
4
+ import { SemantifoldDiagnostic } from "./diagnostic.js";
5
+ import { isSourceRangeOrdered } from "./semantic/location.js";
6
+ /**
7
+ * Creates and validates an immutable byte-coordinate provenance map.
8
+ * @param {object} input - Mapping fields.
9
+ * @param {number} input.byteLength - Generated artifact byte length.
10
+ * @param {string} input.path - Generated artifact path.
11
+ * @param {import("./semantic/types.js").GeneratedByteRange[]} input.ranges - Ordered byte ranges.
12
+ * @returns {import("./semantic/types.js").SemantifoldByteMapping} Validated mapping.
13
+ */
14
+ export function createByteMapping(input) {
15
+ if (!isPlainObject(input))
16
+ invalidByteMapping("Byte mapping construction requires an object.");
17
+ const { byteLength, path, ranges } = input;
18
+ return finalizeByteMapping({
19
+ coordinateSystem: "bytes",
20
+ generated: { byteLength, path },
21
+ ranges,
22
+ schema: "SemantifoldByteMapping",
23
+ version: 1
24
+ });
25
+ }
26
+ /**
27
+ * Parses serialized byte-coordinate provenance.
28
+ * @param {string} serialized - JSON mapping.
29
+ * @returns {import("./semantic/types.js").SemantifoldByteMapping} Validated mapping.
30
+ */
31
+ export function parseByteMapping(serialized) {
32
+ try {
33
+ return finalizeByteMapping(JSON.parse(serialized));
34
+ }
35
+ catch (error) {
36
+ if (error instanceof SemantifoldDiagnostic && error.code == "INVALID_BYTE_MAPPING")
37
+ throw error;
38
+ return invalidByteMapping("Byte mapping must be valid JSON.", error);
39
+ }
40
+ }
41
+ /**
42
+ * Serializes a validated mapping with stable object-key ordering.
43
+ * @param {import("./semantic/types.js").SemantifoldByteMapping} mapping - Byte mapping.
44
+ * @returns {string} Canonical JSON with trailing LF.
45
+ */
46
+ export function stringifyByteMapping(mapping) {
47
+ const validated = finalizeByteMapping(mapping);
48
+ return `${JSON.stringify(sortJson(validated), null, 2)}\n`;
49
+ }
50
+ /**
51
+ * Validates an existing mapping and returns a detached immutable value.
52
+ * @param {unknown} candidate - Mapping candidate.
53
+ * @returns {import("./semantic/types.js").SemantifoldByteMapping} Validated mapping.
54
+ */
55
+ export function finalizeByteMapping(candidate) {
56
+ try {
57
+ if (!isPlainObject(candidate))
58
+ invalidByteMapping("Byte mapping must be a plain object.");
59
+ if (candidate.schema != "SemantifoldByteMapping" || candidate.version !== 1 || candidate.coordinateSystem != "bytes") {
60
+ invalidByteMapping("Byte mapping requires SemantifoldByteMapping version 1 with byte coordinates.");
61
+ }
62
+ if (!isPlainObject(candidate.generated)) {
63
+ invalidByteMapping("Byte mapping requires a safe generated artifact path.");
64
+ }
65
+ const generatedPath = candidate.generated.path;
66
+ if (!isSafeArtifactPath(generatedPath)) {
67
+ invalidByteMapping("Byte mapping requires a safe generated artifact path.");
68
+ }
69
+ const byteLength = candidate.generated.byteLength;
70
+ if (typeof byteLength != "number" || !Number.isSafeInteger(byteLength) || byteLength < 0) {
71
+ invalidByteMapping("Byte mapping requires a non-negative safe byte length.");
72
+ }
73
+ if (!isDenseArray(candidate.ranges))
74
+ invalidByteMapping("Byte mapping ranges must be an ordered dense array.");
75
+ let previousEnd = 0;
76
+ /** @type {import("./semantic/types.js").GeneratedByteRange[]} */
77
+ const ranges = [];
78
+ for (let index = 0; index < candidate.ranges.length; index += 1) {
79
+ const range = candidate.ranges[index];
80
+ if (!isPlainObject(range) || !isPlainObject(range.generated))
81
+ invalidByteMapping(`Byte range ${index} is malformed.`);
82
+ const end = range.generated.end;
83
+ const start = range.generated.start;
84
+ if (typeof start != "number" || typeof end != "number" || !Number.isSafeInteger(start) || !Number.isSafeInteger(end) ||
85
+ start < 0 || end <= start || end > byteLength) {
86
+ invalidByteMapping(`Byte range ${index} must be a non-empty in-bounds half-open integer range.`);
87
+ }
88
+ if (start < previousEnd)
89
+ invalidByteMapping(`Byte range ${index} is out of order or overlaps its predecessor.`);
90
+ previousEnd = end;
91
+ const origin = validateOrigin(range.origin, `Byte range ${index}`);
92
+ const result = {
93
+ generated: { end, start },
94
+ origin,
95
+ ...(optionalIdentity(range.nodeId, "nodeId", index)),
96
+ ...(optionalIdentity(range.symbolId, "symbolId", index)),
97
+ ...(optionalIdentity(range.role, "role", index))
98
+ };
99
+ ranges.push(result);
100
+ }
101
+ const mapping = {
102
+ coordinateSystem: /** @type {const} */ ("bytes"),
103
+ generated: { byteLength, path: generatedPath },
104
+ ranges,
105
+ schema: /** @type {const} */ ("SemantifoldByteMapping"),
106
+ version: /** @type {const} */ (1)
107
+ };
108
+ return deepFreeze(mapping);
109
+ }
110
+ catch (error) {
111
+ if (error instanceof SemantifoldDiagnostic && error.code == "INVALID_BYTE_MAPPING")
112
+ throw error;
113
+ return invalidByteMapping("Byte mapping validation failed.", error);
114
+ }
115
+ }
116
+ /**
117
+ * Validates one closed provenance origin.
118
+ * @param {unknown} value - Origin candidate.
119
+ * @param {string} label - Diagnostic range label.
120
+ * @returns {import("./semantic/types.js").SemanticOrigin} Detached origin.
121
+ */
122
+ function validateOrigin(value, label) {
123
+ if (!isPlainObject(value))
124
+ invalidByteMapping(`${label} requires provenance.`);
125
+ if (value.kind == "synthetic") {
126
+ if (typeof value.reason != "string" || value.reason.length == 0 || !isDenseArray(value.relatedOrigins)) {
127
+ invalidByteMapping(`${label} synthetic provenance requires an explicit reason and related-origin array.`);
128
+ }
129
+ /** @type {import("./semantic/types.js").RelatedOrigin[]} */
130
+ const relatedOrigins = [];
131
+ for (let index = 0; index < value.relatedOrigins.length; index += 1) {
132
+ relatedOrigins.push(validateRelatedOrigin(value.relatedOrigins[index], `${label} related origin ${index}`));
133
+ }
134
+ return { kind: "synthetic", reason: value.reason, relatedOrigins };
135
+ }
136
+ if (value.kind == "source") {
137
+ if (typeof value.sourceId != "string" || value.sourceId.length == 0)
138
+ invalidByteMapping(`${label} source provenance requires a source ID.`);
139
+ return { kind: "source", location: validateLocation(value.location, label), sourceId: value.sourceId };
140
+ }
141
+ if (value.kind == "derived") {
142
+ if (!isDenseArray(value.origins) || value.origins.length == 0)
143
+ invalidByteMapping(`${label} derived provenance requires origins.`);
144
+ /** @type {import("./semantic/types.js").RelatedOrigin[]} */
145
+ const origins = [];
146
+ for (let index = 0; index < value.origins.length; index += 1) {
147
+ origins.push(validateRelatedOrigin(value.origins[index], `${label} origin ${index}`));
148
+ }
149
+ return { kind: "derived", origins };
150
+ }
151
+ return invalidByteMapping(`${label} has an unknown provenance kind.`);
152
+ }
153
+ /**
154
+ * Validates one related source origin.
155
+ * @param {unknown} value - Related-origin candidate.
156
+ * @param {string} label - Diagnostic range label.
157
+ * @returns {import("./semantic/types.js").RelatedOrigin} Detached related origin.
158
+ */
159
+ function validateRelatedOrigin(value, label) {
160
+ if (!isPlainObject(value) || typeof value.sourceId != "string" || value.sourceId.length == 0) {
161
+ invalidByteMapping(`${label} requires a source ID and location.`);
162
+ }
163
+ const result = {
164
+ location: validateLocation(value.location, label),
165
+ sourceId: value.sourceId,
166
+ ...optionalRelated(value.nodeId, "nodeId", label),
167
+ ...optionalRelated(value.symbolId, "symbolId", label),
168
+ ...optionalRelated(value.role, "role", label)
169
+ };
170
+ return result;
171
+ }
172
+ /**
173
+ * Validates a UTF-16 original source location carried by byte provenance.
174
+ * @param {unknown} value - Location candidate.
175
+ * @param {string} label - Diagnostic range label.
176
+ * @returns {import("./semantic/types.js").SourceLocation} Detached source location.
177
+ */
178
+ function validateLocation(value, label) {
179
+ if (!isPlainObject(value) || typeof value.filename != "string" || value.filename.length == 0) {
180
+ invalidByteMapping(`${label} contains an invalid source location.`);
181
+ }
182
+ const start = snapshotPoint(value.start);
183
+ const end = snapshotPoint(value.end);
184
+ if (start == undefined || end == undefined || end.offset < start.offset || !isSourceRangeOrdered(start, end)) {
185
+ invalidByteMapping(`${label} contains an invalid source location.`);
186
+ }
187
+ return {
188
+ end,
189
+ filename: value.filename,
190
+ start
191
+ };
192
+ }
193
+ /**
194
+ * Snapshots one valid UTF-16 source point without retaining undeclared fields.
195
+ * @param {unknown} value - Candidate point.
196
+ * @returns {import("./semantic/types.js").SourcePoint | undefined} Canonical point when valid.
197
+ */
198
+ function snapshotPoint(value) {
199
+ if (!isPlainObject(value))
200
+ return undefined;
201
+ const line = value.line;
202
+ const column = value.column;
203
+ const offset = value.offset;
204
+ if (typeof line != "number" || !Number.isSafeInteger(line) || line <= 0 ||
205
+ typeof column != "number" || !Number.isSafeInteger(column) || column <= 0 ||
206
+ typeof offset != "number" || !Number.isSafeInteger(offset) || offset < 0)
207
+ return undefined;
208
+ return { column, line, offset };
209
+ }
210
+ /**
211
+ * Validates an optional byte-range identity.
212
+ * @param {unknown} value - Candidate identity.
213
+ * @param {string} property - Property name.
214
+ * @param {number} index - Byte-range index.
215
+ * @returns {Record<string, string>} Present identity or an empty record.
216
+ */
217
+ function optionalIdentity(value, property, index) {
218
+ if (value === undefined)
219
+ return {};
220
+ if (typeof value != "string" || value.length == 0)
221
+ invalidByteMapping(`Byte range ${index} has an invalid ${property}.`);
222
+ return { [property]: value };
223
+ }
224
+ /**
225
+ * Validates an optional related-origin identity.
226
+ * @param {unknown} value - Candidate identity.
227
+ * @param {string} property - Property name.
228
+ * @param {string} label - Diagnostic range label.
229
+ * @returns {Record<string, string>} Present identity or an empty record.
230
+ */
231
+ function optionalRelated(value, property, label) {
232
+ if (value === undefined)
233
+ return {};
234
+ if (typeof value != "string" || value.length == 0)
235
+ invalidByteMapping(`${label} has an invalid ${property}.`);
236
+ return { [property]: value };
237
+ }
238
+ /**
239
+ * Throws a normalized byte-mapping diagnostic.
240
+ * @param {string} message - Failure detail.
241
+ * @param {unknown} [error] - Preserved validation cause.
242
+ * @returns {never} Always throws.
243
+ */
244
+ function invalidByteMapping(message, error) {
245
+ throw new SemantifoldDiagnostic({
246
+ cause: error instanceof Error ? error : undefined,
247
+ code: "INVALID_BYTE_MAPPING",
248
+ language: "binary",
249
+ message
250
+ });
251
+ }
252
+ /**
253
+ * Checks for an ordinary string-keyed object.
254
+ * @param {unknown} value - Candidate value.
255
+ * @returns {value is Record<string, unknown>} Whether the value is a plain object.
256
+ */
257
+ function isPlainObject(value) {
258
+ return typeof value == "object" && value != null && !Array.isArray(value) && Object.getPrototypeOf(value) == Object.prototype;
259
+ }
260
+ /**
261
+ * Deeply freezes detached JSON mapping values.
262
+ * @template T
263
+ * @param {T} value - Detached value.
264
+ * @returns {T} Frozen value.
265
+ */
266
+ function deepFreeze(value) {
267
+ if (!value || typeof value != "object" || Object.isFrozen(value))
268
+ return value;
269
+ for (const nested of Object.values(value))
270
+ deepFreeze(nested);
271
+ return Object.freeze(value);
272
+ }
273
+ /**
274
+ * Recursively sorts JSON object keys without reordering arrays.
275
+ * @param {unknown} value - JSON value.
276
+ * @returns {unknown} Key-sorted JSON value.
277
+ */
278
+ function sortJson(value) {
279
+ if (Array.isArray(value))
280
+ return value.map(sortJson);
281
+ if (!isPlainObject(value))
282
+ return value;
283
+ return Object.fromEntries(Object.keys(value).sort().map((key) => [key, sortJson(value[key])]));
284
+ }
285
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmluYXJ5LW1hcHBpbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYmluYXJ5LW1hcHBpbmcuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxZQUFZLENBQUE7QUFDdkMsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sb0JBQW9CLENBQUE7QUFDckQsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0saUJBQWlCLENBQUE7QUFDckQsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sd0JBQXdCLENBQUE7QUFFM0Q7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxLQUFLO0lBQ3JDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDO1FBQUUsa0JBQWtCLENBQUMsK0NBQStDLENBQUMsQ0FBQTtJQUM5RixNQUFNLEVBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUMsR0FBRyxLQUFLLENBQUE7SUFFeEMsT0FBTyxtQkFBbUIsQ0FBQztRQUN6QixnQkFBZ0IsRUFBRSxPQUFPO1FBQ3pCLFNBQVMsRUFBRSxFQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUM7UUFDN0IsTUFBTTtRQUNOLE1BQU0sRUFBRSx3QkFBd0I7UUFDaEMsT0FBTyxFQUFFLENBQUM7S0FDWCxDQUFDLENBQUE7QUFDSixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxVQUFVO0lBQ3pDLElBQUksQ0FBQztRQUNILE9BQU8sbUJBQW1CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFBO0lBQ3BELENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsSUFBSSxLQUFLLFlBQVkscUJBQXFCLElBQUksS0FBSyxDQUFDLElBQUksSUFBSSxzQkFBc0I7WUFBRSxNQUFNLEtBQUssQ0FBQTtRQUUvRixPQUFP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QUssQ0FBQztRQUFFLE9BQU8sS0FBSyxDQUFBO0lBRTlFLEtBQUssTUFBTSxNQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFBRSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUE7SUFFN0QsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFBO0FBQzdCLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxRQUFRLENBQUMsS0FBSztJQUNyQixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQUUsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQ3BELElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDO1FBQUUsT0FBTyxLQUFLLENBQUE7SUFFdkMsT0FBTyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFDaEcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQge2lzRGVuc2VBcnJheX0gZnJvbSBcIi4vYXJyYXkuanNcIlxuaW1wb3J0IHtpc1NhZmVBcnRpZmFjdFBhdGh9IGZyb20gXCIuL2FydGlmYWN0LXBhdGguanNcIlxuaW1wb3J0IHtTZW1hbnRpZm9sZERpYWdub3N0aWN9IGZyb20gXCIuL2RpYWdub3N0aWMuanNcIlxuaW1wb3J0IHtpc1NvdXJjZVJhbmdlT3JkZXJlZH0gZnJvbSBcIi4vc2VtYW50aWMvbG9jYXRpb24uanNcIlxuXG4vKipcbiAqIENyZWF0ZXMgYW5kIHZhbGlkYXRlcyBhbiBpbW11dGFibGUgYnl0ZS1jb29yZGluYXRlIHByb3ZlbmFuY2UgbWFwLlxuICogQHBhcmFtIHtvYmplY3R9IGlucHV0IC0gTWFwcGluZyBmaWVsZHMuXG4gKiBAcGFyYW0ge251bWJlcn0gaW5wdXQuYnl0ZUxlbmd0aCAtIEdlbmVyYXRlZCBhcnRpZmFjdCBieXRlIGxlbmd0aC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dC5wYXRoIC0gR2VuZXJhdGVkIGFydGlmYWN0IHBhdGguXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuR2VuZXJhdGVkQnl0ZVJhbmdlW119IGlucHV0LnJhbmdlcyAtIE9yZGVyZWQgYnl0ZSByYW5nZXMuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpZm9sZEJ5dGVNYXBwaW5nfSBWYWxpZGF0ZWQgbWFwcGluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUJ5dGVNYXBwaW5nKGlucHV0KSB7XG4gIGlmICghaXNQbGFpbk9iamVjdChpbnB1dCkpIGludmFsaWRCeXRlTWFwcGluZyhcIkJ5dGUgbWFwcGluZyBjb25zdHJ1Y3Rpb24gcmVxdWlyZXMgYW4gb2JqZWN0LlwiKVxuICBjb25zdCB7Ynl0ZUxlbmd0aCwgcGF0aCwgcmFuZ2VzfSA9IGlucHV0XG5cbiAgcmV0dXJuIGZpbmFsaXplQnl0ZU1hcHBpbmcoe1xuICAgIGNvb3JkaW5hdGVTeXN0ZW06IFwiYnl0ZXNcIixcbiAgICBnZW5lcmF0ZWQ6IHtieXRlTGVuZ3RoLCBwYXRofSxcbiAgICByYW5nZXMsXG4gICAgc2NoZW1hOiBcIlNlbWFudGlmb2xkQnl0ZU1hcHBpbmdcIixcbiAgICB2ZXJzaW9uOiAxXG4gIH0pXG59XG5cbi8qKlxuICogUGFyc2VzIHNlcmlhbGl6ZWQgYnl0ZS1jb29yZGluYXRlIHByb3ZlbmFuY2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gc2VyaWFsaXplZCAtIEpTT04gbWFwcGluZy5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGlmb2xkQnl0ZU1hcHBpbmd9IFZhbGlkYXRlZCBtYXBwaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VCeXRlTWFwcGluZyhzZXJpYWxpemVkKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGZpbmFsaXplQnl0ZU1hcHBpbmcoSlNPTi5wYXJzZShzZXJpYWxpemVkKSlcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBTZW1hbnRpZm9sZERpYWdub3N0aWMgJiYgZXJyb3IuY29kZSA9PSBcIklOVkFMSURfQllURV9NQVBQSU5HXCIpIHRocm93IGVycm9yXG5cbiAgICByZXR1cm4gaW52YWxpZEJ5dGVNYXBwaW5nKFwiQnl0ZSBtYXBwaW5nIG11c3QgYmUgdmFsaWQgSlNPTi5cIiwgZXJyb3IpXG4gIH1cbn1cblxuLyoqXG4gKiBTZXJpYWxpemVzIGEgdmFsaWRhdGVkIG1hcHBpbmcgd2l0aCBzdGFibGUgb2JqZWN0LWtleSBvcmRlcmluZy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpZm9sZEJ5dGVNYXBwaW5nfSBtYXBwaW5nIC0gQnl0ZSBtYXBwaW5nLlxuICogQHJldHVybnMge3N0cmluZ30gQ2Fub25pY2FsIEpTT04gd2l0aCB0cmFpbGluZyBMRi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ2lmeUJ5dGVNYXBwaW5nKG1hcHBpbmcpIHtcbiAgY29uc3QgdmFsaWRhdGVkID0gZmluYWxpemVCeXRlTWFwcGluZyhtYXBwaW5nKVxuXG4gIHJldHVybiBgJHtKU09OLnN0cmluZ2lmeShzb3J0SnNvbih2YWxpZGF0ZWQpLCBudWxsLCAyKX1cXG5gXG59XG5cbi8qKlxuICogVmFsaWRhdGVzIGFuIGV4aXN0aW5nIG1hcHBpbmcgYW5kIHJldHVybnMgYSBkZXRhY2hlZCBpbW11dGFibGUgdmFsdWUuXG4gKiBAcGFyYW0ge3Vua25vd259IGNhbmRpZGF0ZSAtIE1hcHBpbmcgY2FuZGlkYXRlLlxuICogQHJldHVybnMge2ltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWZvbGRCeXRlTWFwcGluZ30gVmFsaWRhdGVkIG1hcHBpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5hbGl6ZUJ5dGVNYXBwaW5nKGNhbmRpZGF0ZSkge1xuICB0cnkge1xuICAgIGlmICghaXNQbGFpbk9iamVjdChjYW5kaWRhdGUpKSBpbnZhbGlkQnl0ZU1hcHBpbmcoXCJCeXRlIG1hcHBpbmcgbXVzdCBiZSBhIHBsYWluIG9iamVjdC5cIilcbiAgICBpZiAoY2FuZGlkYXRlLnNjaGVtYSAhPSBcIlNlbWFudGlmb2xkQnl0ZU1hcHBpbmdcIiB8fCBjYW5kaWRhdGUudmVyc2lvbiAhPT0gMSB8fCBjYW5kaWRhdGUuY29vcmRpbmF0ZVN5c3RlbSAhPSBcImJ5dGVzXCIpIHtcbiAgICAgIGludmFsaWRCeXRlTWFwcGluZyhcIkJ5dGUgbWFwcGluZyByZXF1aXJlcyBTZW1hbnRpZm9sZEJ5dGVNYXBwaW5nIHZlcnNpb24gMSB3aXRoIGJ5dGUgY29vcmRpbmF0ZXMuXCIpXG4gICAgfVxuICAgIGlmICghaXNQbGFpbk9iamVjdChjYW5kaWRhdGUuZ2VuZXJhdGVkKSkge1xuICAgICAgaW52YWxpZEJ5dGVNYXBwaW5nKFwiQnl0ZSBtYXBwaW5nIHJlcXVpcmVzIGEgc2FmZSBnZW5lcmF0ZWQgYXJ0aWZhY3QgcGF0aC5cIilcbiAgICB9XG4gICAgY29uc3QgZ2VuZXJhdGVkUGF0aCA9IGNhbmRpZGF0ZS5nZW5lcmF0ZWQucGF0aFxuXG4gICAgaWYgKCFpc1NhZmVBcnRpZmFjdFBhdGgoZ2VuZXJhdGVkUGF0aCkpIHtcbiAgICAgIGludmFsaWRCeXRlTWFwcGluZyhcIkJ5dGUgbWFwcGluZyByZXF1aXJlcyBhIHNhZmUgZ2VuZXJhdGVkIGFydGlmYWN0IHBhdGguXCIpXG4gICAgfVxuICAgIGNvbnN0IGJ5dGVMZW5ndGggPSBjYW5kaWRhdGUuZ2VuZXJhdGVkLmJ5dGVMZW5ndGhcblxuICAgIGlmICh0eXBlb2YgYnl0ZUxlbmd0aCAhPSBcIm51bWJlclwiIHx8ICFOdW1iZXIuaXNTYWZlSW50ZWdlcihieXRlTGVuZ3RoKSB8fCBieXRlTGVuZ3RoIDwgMCkge1xuICAgICAgaW52YWxpZEJ5dGVNYXBwaW5nKFwiQnl0ZSBtYXBwaW5nIHJlcXVpcmVzIGEgbm9uLW5lZ2F0aXZlIHNhZmUgYnl0ZSBsZW5ndGguXCIpXG4gICAgfVxuICAgIGlmICghaXNEZW5zZUFycmF5KGNhbmRpZGF0ZS5yYW5nZXMpKSBpbnZhbGlkQnl0ZU1hcHBpbmcoXCJCeXRlIG1hcHBpbmcgcmFuZ2VzIG11c3QgYmUgYW4gb3JkZXJlZCBkZW5zZSBhcnJheS5cIilcbiAgICBsZXQgcHJldmlvdXNFbmQgPSAwXG4gICAgLyoqIEB0eXBlIHtpbXBvcnQoXCIuL3NlbWFudGljL3R5cGVzLmpzXCIpLkdlbmVyYXRlZEJ5dGVSYW5nZVtdfSAqL1xuICAgIGNvbnN0IHJhbmdlcyA9IFtdXG5cbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgY2FuZGlkYXRlLnJhbmdlcy5sZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICAgIGNvbnN0IHJhbmdlID0gY2FuZGlkYXRlLnJhbmdlc1tpbmRleF1cblxuICAgICAgaWYgKCFpc1BsYWluT2JqZWN0KHJhbmdlKSB8fCAhaXNQbGFpbk9iamVjdChyYW5nZS5nZW5lcmF0ZWQpKSBpbnZhbGlkQnl0ZU1hcHBpbmcoYEJ5dGUgcmFuZ2UgJHtpbmRleH0gaXMgbWFsZm9ybWVkLmApXG4gICAgICBjb25zdCBlbmQgPSByYW5nZS5nZW5lcmF0ZWQuZW5kXG4gICAgICBjb25zdCBzdGFydCA9IHJhbmdlLmdlbmVyYXRlZC5zdGFydFxuXG4gICAgICBpZiAodHlwZW9mIHN0YXJ0ICE9IFwibnVtYmVyXCIgfHwgdHlwZW9mIGVuZCAhPSBcIm51bWJlclwiIHx8ICFOdW1iZXIuaXNTYWZlSW50ZWdlcihzdGFydCkgfHwgIU51bWJlci5pc1NhZmVJbnRlZ2VyKGVuZCkgfHxcbiAgICAgICAgc3RhcnQgPCAwIHx8IGVuZCA8PSBzdGFydCB8fCBlbmQgPiBieXRlTGVuZ3RoKSB7XG4gICAgICAgIGludmFsaWRCeXRlTWFwcGluZyhgQnl0ZSByYW5nZSAke2luZGV4fSBtdXN0IGJlIGEgbm9uLWVtcHR5IGluLWJvdW5kcyBoYWxmLW9wZW4gaW50ZWdlciByYW5nZS5gKVxuICAgICAgfVxuICAgICAgaWYgKHN0YXJ0IDwgcHJldmlvdXNFbmQpIGludmFsaWRCeXRlTWFwcGluZyhgQnl0ZSByYW5nZSAke2luZGV4fSBpcyBvdXQgb2Ygb3JkZXIgb3Igb3ZlcmxhcHMgaXRzIHByZWRlY2Vzc29yLmApXG4gICAgICBwcmV2aW91c0VuZCA9IGVuZFxuICAgICAgY29uc3Qgb3JpZ2luID0gdmFsaWRhdGVPcmlnaW4ocmFuZ2Uub3JpZ2luLCBgQnl0ZSByYW5nZSAke2luZGV4fWApXG4gICAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICAgIGdlbmVyYXRlZDoge2VuZCwgc3RhcnR9LFxuICAgICAgICBvcmlnaW4sXG4gICAgICAgIC4uLihvcHRpb25hbElkZW50aXR5KHJhbmdlLm5vZGVJZCwgXCJub2RlSWRcIiwgaW5kZXgpKSxcbiAgICAgICAgLi4uKG9wdGlvbmFsSWRlbnRpdHkocmFuZ2Uuc3ltYm9sSWQsIFwic3ltYm9sSWRcIiwgaW5kZXgpKSxcbiAgICAgICAgLi4uKG9wdGlvbmFsSWRlbnRpdHkocmFuZ2Uucm9sZSwgXCJyb2xlXCIsIGluZGV4KSlcbiAgICAgIH1cblxuICAgICAgcmFuZ2VzLnB1c2gocmVzdWx0KVxuICAgIH1cbiAgICBjb25zdCBtYXBwaW5nID0ge1xuICAgICAgY29vcmRpbmF0ZVN5c3RlbTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiYnl0ZXNcIiksXG4gICAgICBnZW5lcmF0ZWQ6IHtieXRlTGVuZ3RoLCBwYXRoOiBnZW5lcmF0ZWRQYXRofSxcbiAgICAgIHJhbmdlcyxcbiAgICAgIHNjaGVtYTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiU2VtYW50aWZvbGRCeXRlTWFwcGluZ1wiKSxcbiAgICAgIHZlcnNpb246IC8qKiBAdHlwZSB7Y29uc3R9ICovICgxKVxuICAgIH1cblxuICAgIHJldHVybiBkZWVwRnJlZXplKG1hcHBpbmcpXG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgU2VtYW50aWZvbGREaWFnbm9zdGljICYmIGVycm9yLmNvZGUgPT0gXCJJTlZBTElEX0JZVEVfTUFQUElOR1wiKSB0aHJvdyBlcnJvclxuXG4gICAgcmV0dXJuIGludmFsaWRCeXRlTWFwcGluZyhcIkJ5dGUgbWFwcGluZyB2YWxpZGF0aW9uIGZhaWxlZC5cIiwgZXJyb3IpXG4gIH1cbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgb25lIGNsb3NlZCBwcm92ZW5hbmNlIG9yaWdpbi5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBPcmlnaW4gY2FuZGlkYXRlLlxuICogQHBhcmFtIHtzdHJpbmd9IGxhYmVsIC0gRGlhZ25vc3RpYyByYW5nZSBsYWJlbC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljT3JpZ2lufSBEZXRhY2hlZCBvcmlnaW4uXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlT3JpZ2luKHZhbHVlLCBsYWJlbCkge1xuICBpZiAoIWlzUGxhaW5PYmplY3QodmFsdWUpKSBpbnZhbGlkQnl0ZU1hcHBpbmcoYCR7bGFiZWx9IHJlcXVpcmVzIHByb3ZlbmFuY2UuYClcblxuICBpZiAodmFsdWUua2luZCA9PSBcInN5bnRoZXRpY1wiKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZS5yZWFzb24gIT0gXCJzdHJpbmdcIiB8fCB2YWx1ZS5yZWFzb24ubGVuZ3RoID09IDAgfHwgIWlzRGVuc2VBcnJheSh2YWx1ZS5yZWxhdGVkT3JpZ2lucykpIHtcbiAgICAgIGludmFsaWRCeXRlTWFwcGluZyhgJHtsYWJlbH0gc3ludGhldGljIHByb3ZlbmFuY2UgcmVxdWlyZXMgYW4gZXhwbGljaXQgcmVhc29uIGFuZCByZWxhdGVkLW9yaWdpbiBhcnJheS5gKVxuICAgIH1cbiAgICAvKiogQHR5cGUge2ltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVsYXRlZE9yaWdpbltdfSAqL1xuICAgIGNvbnN0IHJlbGF0ZWRPcmlnaW5zID0gW11cblxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB2YWx1ZS5yZWxhdGVkT3JpZ2lucy5sZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICAgIHJlbGF0ZWRPcmlnaW5zLnB1c2godmFsaWRhdGVSZWxhdGVkT3JpZ2luKHZhbHVlLnJlbGF0ZWRPcmlnaW5zW2luZGV4XSwgYCR7bGFiZWx9IHJlbGF0ZWQgb3JpZ2luICR7aW5kZXh9YCkpXG4gICAgfVxuXG4gICAgcmV0dXJuIHtraW5kOiBcInN5bnRoZXRpY1wiLCByZWFzb246IHZhbHVlLnJlYXNvbiwgcmVsYXRlZE9yaWdpbnN9XG4gIH1cbiAgaWYgKHZhbHVlLmtpbmQgPT0gXCJzb3VyY2VcIikge1xuICAgIGlmICh0eXBlb2YgdmFsdWUuc291cmNlSWQgIT0gXCJzdHJpbmdcIiB8fCB2YWx1ZS5zb3VyY2VJZC5sZW5ndGggPT0gMCkgaW52YWxpZEJ5dGVNYXBwaW5nKGAke2xhYmVsfSBzb3VyY2UgcHJvdmVuYW5jZSByZXF1aXJlcyBhIHNvdXJjZSBJRC5gKVxuXG4gICAgcmV0dXJuIHtraW5kOiBcInNvdXJjZVwiLCBsb2NhdGlvbjogdmFsaWRhdGVMb2NhdGlvbih2YWx1ZS5sb2NhdGlvbiwgbGFiZWwpLCBzb3VyY2VJZDogdmFsdWUuc291cmNlSWR9XG4gIH1cbiAgaWYgKHZhbHVlLmtpbmQgPT0gXCJkZXJpdmVkXCIpIHtcbiAgICBpZiAoIWlzRGVuc2VBcnJheSh2YWx1ZS5vcmlnaW5zKSB8fCB2YWx1ZS5vcmlnaW5zLmxlbmd0aCA9PSAwKSBpbnZhbGlkQnl0ZU1hcHBpbmcoYCR7bGFiZWx9IGRlcml2ZWQgcHJvdmVuYW5jZSByZXF1aXJlcyBvcmlnaW5zLmApXG4gICAgLyoqIEB0eXBlIHtpbXBvcnQoXCIuL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlbGF0ZWRPcmlnaW5bXX0gKi9cbiAgICBjb25zdCBvcmlnaW5zID0gW11cblxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB2YWx1ZS5vcmlnaW5zLmxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgICAgb3JpZ2lucy5wdXNoKHZhbGlkYXRlUmVsYXRlZE9yaWdpbih2YWx1ZS5vcmlnaW5zW2luZGV4XSwgYCR7bGFiZWx9IG9yaWdpbiAke2luZGV4fWApKVxuICAgIH1cblxuICAgIHJldHVybiB7a2luZDogXCJkZXJpdmVkXCIsIG9yaWdpbnN9XG4gIH1cblxuICByZXR1cm4gaW52YWxpZEJ5dGVNYXBwaW5nKGAke2xhYmVsfSBoYXMgYW4gdW5rbm93biBwcm92ZW5hbmNlIGtpbmQuYClcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgb25lIHJlbGF0ZWQgc291cmNlIG9yaWdpbi5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBSZWxhdGVkLW9yaWdpbiBjYW5kaWRhdGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gbGFiZWwgLSBEaWFnbm9zdGljIHJhbmdlIGxhYmVsLlxuICogQHJldHVybnMge2ltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVsYXRlZE9yaWdpbn0gRGV0YWNoZWQgcmVsYXRlZCBvcmlnaW4uXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlUmVsYXRlZE9yaWdpbih2YWx1ZSwgbGFiZWwpIHtcbiAgaWYgKCFpc1BsYWluT2JqZWN0KHZhbHVlKSB8fCB0eXBlb2YgdmFsdWUuc291cmNlSWQgIT0gXCJzdHJpbmdcIiB8fCB2YWx1ZS5zb3VyY2VJZC5sZW5ndGggPT0gMCkge1xuICAgIGludmFsaWRCeXRlTWFwcGluZyhgJHtsYWJlbH0gcmVxdWlyZXMgYSBzb3VyY2UgSUQgYW5kIGxvY2F0aW9uLmApXG4gIH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIGxvY2F0aW9uOiB2YWxpZGF0ZUxvY2F0aW9uKHZhbHVlLmxvY2F0aW9uLCBsYWJlbCksXG4gICAgc291cmNlSWQ6IHZhbHVlLnNvdXJjZUlkLFxuICAgIC4uLm9wdGlvbmFsUmVsYXRlZCh2YWx1ZS5ub2RlSWQsIFwibm9kZUlkXCIsIGxhYmVsKSxcbiAgICAuLi5vcHRpb25hbFJlbGF0ZWQodmFsdWUuc3ltYm9sSWQsIFwic3ltYm9sSWRcIiwgbGFiZWwpLFxuICAgIC4uLm9wdGlvbmFsUmVsYXRlZCh2YWx1ZS5yb2xlLCBcInJvbGVcIiwgbGFiZWwpXG4gIH1cblxuICByZXR1cm4gcmVzdWx0XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIGEgVVRGLTE2IG9yaWdpbmFsIHNvdXJjZSBsb2NhdGlvbiBjYXJyaWVkIGJ5IGJ5dGUgcHJvdmVuYW5jZS5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBMb2NhdGlvbiBjYW5kaWRhdGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gbGFiZWwgLSBEaWFnbm9zdGljIHJhbmdlIGxhYmVsLlxuICogQHJldHVybnMge2ltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IERldGFjaGVkIHNvdXJjZSBsb2NhdGlvbi5cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVMb2NhdGlvbih2YWx1ZSwgbGFiZWwpIHtcbiAgaWYgKCFpc1BsYWluT2JqZWN0KHZhbHVlKSB8fCB0eXBlb2YgdmFsdWUuZmlsZW5hbWUgIT0gXCJzdHJpbmdcIiB8fCB2YWx1ZS5maWxlbmFtZS5sZW5ndGggPT0gMCkge1xuICAgIGludmFsaWRCeXRlTWFwcGluZyhgJHtsYWJlbH0gY29udGFpbnMgYW4gaW52YWxpZCBzb3VyY2UgbG9jYXRpb24uYClcbiAgfVxuICBjb25zdCBzdGFydCA9IHNuYXBzaG90UG9pbnQodmFsdWUuc3RhcnQpXG4gIGNvbnN0IGVuZCA9IHNuYXBzaG90UG9pbnQodmFsdWUuZW5kKVxuXG4gIGlmIChzdGFydCA9PSB1bmRlZmluZWQgfHwgZW5kID09IHVuZGVmaW5lZCB8fCBlbmQub2Zmc2V0IDwgc3RhcnQub2Zmc2V0IHx8ICFpc1NvdXJjZVJhbmdlT3JkZXJlZChzdGFydCwgZW5kKSkge1xuICAgIGludmFsaWRCeXRlTWFwcGluZyhgJHtsYWJlbH0gY29udGFpbnMgYW4gaW52YWxpZCBzb3VyY2UgbG9jYXRpb24uYClcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZW5kLFxuICAgIGZpbGVuYW1lOiB2YWx1ZS5maWxlbmFtZSxcbiAgICBzdGFydFxuICB9XG59XG5cbi8qKlxuICogU25hcHNob3RzIG9uZSB2YWxpZCBVVEYtMTYgc291cmNlIHBvaW50IHdpdGhvdXQgcmV0YWluaW5nIHVuZGVjbGFyZWQgZmllbGRzLlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIENhbmRpZGF0ZSBwb2ludC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZVBvaW50IHwgdW5kZWZpbmVkfSBDYW5vbmljYWwgcG9pbnQgd2hlbiB2YWxpZC5cbiAqL1xuZnVuY3Rpb24gc25hcHNob3RQb2ludCh2YWx1ZSkge1xuICBpZiAoIWlzUGxhaW5PYmplY3QodmFsdWUpKSByZXR1cm4gdW5kZWZpbmVkXG4gIGNvbnN0IGxpbmUgPSB2YWx1ZS5saW5lXG4gIGNvbnN0IGNvbHVtbiA9IHZhbHVlLmNvbHVtblxuICBjb25zdCBvZmZzZXQgPSB2YWx1ZS5vZmZzZXRcblxuICBpZiAodHlwZW9mIGxpbmUgIT0gXCJudW1iZXJcIiB8fCAhTnVtYmVyLmlzU2FmZUludGVnZXIobGluZSkgfHwgbGluZSA8PSAwIHx8XG4gICAgdHlwZW9mIGNvbHVtbiAhPSBcIm51bWJlclwiIHx8ICFOdW1iZXIuaXNTYWZlSW50ZWdlcihjb2x1bW4pIHx8IGNvbHVtbiA8PSAwIHx8XG4gICAgdHlwZW9mIG9mZnNldCAhPSBcIm51bWJlclwiIHx8ICFOdW1iZXIuaXNTYWZlSW50ZWdlcihvZmZzZXQpIHx8IG9mZnNldCA8IDApIHJldHVybiB1bmRlZmluZWRcblxuICByZXR1cm4ge2NvbHVtbiwgbGluZSwgb2Zmc2V0fVxufVxuXG4vKipcbiAqIFZhbGlkYXRlcyBhbiBvcHRpb25hbCBieXRlLXJhbmdlIGlkZW50aXR5LlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIENhbmRpZGF0ZSBpZGVudGl0eS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSAtIFByb3BlcnR5IG5hbWUuXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXggLSBCeXRlLXJhbmdlIGluZGV4LlxuICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIHN0cmluZz59IFByZXNlbnQgaWRlbnRpdHkgb3IgYW4gZW1wdHkgcmVjb3JkLlxuICovXG5mdW5jdGlvbiBvcHRpb25hbElkZW50aXR5KHZhbHVlLCBwcm9wZXJ0eSwgaW5kZXgpIHtcbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybiB7fVxuICBpZiAodHlwZW9mIHZhbHVlICE9IFwic3RyaW5nXCIgfHwgdmFsdWUubGVuZ3RoID09IDApIGludmFsaWRCeXRlTWFwcGluZyhgQnl0ZSByYW5nZSAke2luZGV4fSBoYXMgYW4gaW52YWxpZCAke3Byb3BlcnR5fS5gKVxuXG4gIHJldHVybiB7W3Byb3BlcnR5XTogdmFsdWV9XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIGFuIG9wdGlvbmFsIHJlbGF0ZWQtb3JpZ2luIGlkZW50aXR5LlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIENhbmRpZGF0ZSBpZGVudGl0eS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSAtIFByb3BlcnR5IG5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gbGFiZWwgLSBEaWFnbm9zdGljIHJhbmdlIGxhYmVsLlxuICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIHN0cmluZz59IFByZXNlbnQgaWRlbnRpdHkgb3IgYW4gZW1wdHkgcmVjb3JkLlxuICovXG5mdW5jdGlvbiBvcHRpb25hbFJlbGF0ZWQodmFsdWUsIHByb3BlcnR5LCBsYWJlbCkge1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHt9XG4gIGlmICh0eXBlb2YgdmFsdWUgIT0gXCJzdHJpbmdcIiB8fCB2YWx1ZS5sZW5ndGggPT0gMCkgaW52YWxpZEJ5dGVNYXBwaW5nKGAke2xhYmVsfSBoYXMgYW4gaW52YWxpZCAke3Byb3BlcnR5fS5gKVxuXG4gIHJldHVybiB7W3Byb3BlcnR5XTogdmFsdWV9XG59XG5cbi8qKlxuICogVGhyb3dzIGEgbm9ybWFsaXplZCBieXRlLW1hcHBpbmcgZGlhZ25vc3RpYy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIC0gRmFpbHVyZSBkZXRhaWwuXG4gKiBAcGFyYW0ge3Vua25vd259IFtlcnJvcl0gLSBQcmVzZXJ2ZWQgdmFsaWRhdGlvbiBjYXVzZS5cbiAqIEByZXR1cm5zIHtuZXZlcn0gQWx3YXlzIHRocm93cy5cbiAqL1xuZnVuY3Rpb24gaW52YWxpZEJ5dGVNYXBwaW5nKG1lc3NhZ2UsIGVycm9yKSB7XG4gIHRocm93IG5ldyBTZW1hbnRpZm9sZERpYWdub3N0aWMoe1xuICAgIGNhdXNlOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IgOiB1bmRlZmluZWQsXG4gICAgY29kZTogXCJJTlZBTElEX0JZVEVfTUFQUElOR1wiLFxuICAgIGxhbmd1YWdlOiBcImJpbmFyeVwiLFxuICAgIG1lc3NhZ2VcbiAgfSlcbn1cblxuLyoqXG4gKiBDaGVja3MgZm9yIGFuIG9yZGluYXJ5IHN0cmluZy1rZXllZCBvYmplY3QuXG4gKiBAcGFyYW0ge3Vua25vd259IHZhbHVlIC0gQ2FuZGlkYXRlIHZhbHVlLlxuICogQHJldHVybnMge3ZhbHVlIGlzIFJlY29yZDxzdHJpbmcsIHVua25vd24+fSBXaGV0aGVyIHRoZSB2YWx1ZSBpcyBhIHBsYWluIG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09IFwib2JqZWN0XCIgJiYgdmFsdWUgIT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKSA9PSBPYmplY3QucHJvdG90eXBlXG59XG5cbi8qKlxuICogRGVlcGx5IGZyZWV6ZXMgZGV0YWNoZWQgSlNPTiBtYXBwaW5nIHZhbHVlcy5cbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAcGFyYW0ge1R9IHZhbHVlIC0gRGV0YWNoZWQgdmFsdWUuXG4gKiBAcmV0dXJucyB7VH0gRnJvemVuIHZhbHVlLlxuICovXG5mdW5jdGlvbiBkZWVwRnJlZXplKHZhbHVlKSB7XG4gIGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9IFwib2JqZWN0XCIgfHwgT2JqZWN0LmlzRnJvemVuKHZhbHVlKSkgcmV0dXJuIHZhbHVlXG5cbiAgZm9yIChjb25zdCBuZXN0ZWQgb2YgT2JqZWN0LnZhbHVlcyh2YWx1ZSkpIGRlZXBGcmVlemUobmVzdGVkKVxuXG4gIHJldHVybiBPYmplY3QuZnJlZXplKHZhbHVlKVxufVxuXG4vKipcbiAqIFJlY3Vyc2l2ZWx5IHNvcnRzIEpTT04gb2JqZWN0IGtleXMgd2l0aG91dCByZW9yZGVyaW5nIGFycmF5cy5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBKU09OIHZhbHVlLlxuICogQHJldHVybnMge3Vua25vd259IEtleS1zb3J0ZWQgSlNPTiB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gc29ydEpzb24odmFsdWUpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSByZXR1cm4gdmFsdWUubWFwKHNvcnRKc29uKVxuICBpZiAoIWlzUGxhaW5PYmplY3QodmFsdWUpKSByZXR1cm4gdmFsdWVcblxuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5rZXlzKHZhbHVlKS5zb3J0KCkubWFwKChrZXkpID0+IFtrZXksIHNvcnRKc29uKHZhbHVlW2tleV0pXSkpXG59XG4iXX0=
@@ -3,25 +3,49 @@ export declare class SemantifoldDiagnostic extends Error {
3
3
  code: string;
4
4
  detail: string;
5
5
  generatedLocation: import("./semantic/types.js").SourceLocation | undefined;
6
- language: import("./semantic/types.js").SemanticLanguage;
6
+ language: string;
7
7
  location: import("./semantic/types.js").SourceLocation | undefined;
8
+ command: string | undefined;
9
+ executable: string | undefined;
10
+ exitCode: number | undefined;
11
+ signal: string | undefined;
12
+ stage: string | undefined;
13
+ stderr: string | undefined;
14
+ stdout: string | undefined;
15
+ version: string | undefined;
8
16
  /**
9
17
  * Creates a diagnostic.
10
18
  * @param {object} options - Diagnostic fields.
11
19
  * @param {string} options.code - Stable diagnostic code.
12
20
  * @param {string} options.message - Human-readable message.
13
- * @param {import("./semantic/types.js").SemanticLanguage} options.language - Related language.
21
+ * @param {string} options.language - Related language, target, tool, or registry identity.
14
22
  * @param {import("./semantic/types.js").SourceLocation | undefined} [options.location] - Related location.
15
23
  * @param {import("./semantic/types.js").SourceLocation | undefined} [options.generatedLocation] - Pre-remapping generated location.
16
24
  * @param {Error | undefined} [options.cause] - Preserved parser error.
25
+ * @param {string | undefined} [options.command] - Canonical command when tool discovery is involved.
26
+ * @param {string | undefined} [options.executable] - Exact resolved executable when known.
27
+ * @param {number | undefined} [options.exitCode] - Process exit code when available.
28
+ * @param {string | undefined} [options.signal] - Process termination signal when available.
29
+ * @param {string | undefined} [options.stage] - Acceptance stage when execution is involved.
30
+ * @param {string | undefined} [options.stderr] - Captured standard error when available.
31
+ * @param {string | undefined} [options.stdout] - Captured standard output when available.
32
+ * @param {string | undefined} [options.version] - Captured executable version when known.
17
33
  */
18
- constructor({ cause, code, generatedLocation, language, location, message }: {
34
+ constructor({ cause, code, command, executable, exitCode, generatedLocation, language, location, message, signal, stage, stderr, stdout, version }: {
19
35
  code: string;
20
36
  message: string;
21
- language: import("./semantic/types.js").SemanticLanguage;
37
+ language: string;
22
38
  location?: import("./semantic/types.js").SourceLocation | undefined;
23
39
  generatedLocation?: import("./semantic/types.js").SourceLocation | undefined;
24
40
  cause?: Error | undefined;
41
+ command?: string | undefined;
42
+ executable?: string | undefined;
43
+ exitCode?: number | undefined;
44
+ signal?: string | undefined;
45
+ stage?: string | undefined;
46
+ stderr?: string | undefined;
47
+ stdout?: string | undefined;
48
+ version?: string | undefined;
25
49
  });
26
50
  }
27
51
  /**
@@ -64,4 +88,12 @@ export declare function semanticFailure(language: import("./semantic/types.js").
64
88
  * @returns {never} Always throws.
65
89
  */
66
90
  export declare function unsupportedCapability(language: import("./semantic/types.js").SemanticLanguage, capability: string, location: import("./semantic/types.js").SourceLocation | undefined): never;
91
+ /**
92
+ * Throws when a registered identity lacks one requested role.
93
+ * @param {string} language - Registered language or target identity.
94
+ * @param {string} role - Requested registry role.
95
+ * @param {import("./semantic/types.js").SourceLocation | undefined} [location] - Related semantic location.
96
+ * @returns {never} Always throws.
97
+ */
98
+ export declare function unsupportedRole(language: string, role: string, location?: import("./semantic/types.js").SourceLocation | undefined): never;
67
99
  //# sourceMappingURL=diagnostic.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"diagnostic.d.ts","sourceRoot":"","sources":["../../src/diagnostic.js"],"names":[],"mappings":"AAEA,kEAAkE;AAClE,qBAAa,qBAAsB,SAAQ,KAAK;IAgBvC,IAAI;IACJ,MAAM;IACN,iBAAiB;IACjB,QAAQ;IACR,QAAQ;IAnBf;;;;;;;;;OASG;IACH,YAAY,EAAC,KAAK,EAAE,IAAI,EAAE,iBAAiB,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAC,EAPtE;QAAwB,IAAI,EAApB,MAAM,CACd;QAAwB,OAAO,EAAvB,MAAM,CACd;QAAgE,QAAQ,EAAhE,OAAO,qBAAqB,EAAE,gBAAgB,CACtD;QAA2E,QAAQ,AAAnF,CACA,EADQ,OAAO,qBAAqB,EAAE,cAAc,GAAG,SAAS,CAChE;QAA2E,iBAAiB,AAA5F,CACA,EADQ,OAAO,qBAAqB,EAAE,cAAc,GAAG,SAAS,CAChE;QAAoC,KAAK,AAAzC,CACF,EADU,KAAK,GAAG,SAAS,CAC3B;KACwE,EAUxE;CACF;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAJ1B,OAAO,qBAAqB,EAAE,gBAIJ,EAAE,KAAK,EAHjC,OAGiC,GAF/B,KAAK,CAWjB;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAL/B,OAAO,qBAAqB,EAAE,gBAKC,EAAE,MAAM,EAJvC,MAIuC,EAAE,QAAQ,EAHjD,OAAO,qBAAqB,EAAE,cAAc,GAAG,SAGE,GAF/C,KAAK,CASjB;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EALzB,OAAO,qBAAqB,EAAE,gBAKL,EAAE,OAAO,EAJlC,MAIkC,EAAE,QAAQ,EAH5C,OAAO,qBAAqB,EAAE,cAAc,GAAG,SAGH,GAF1C,KAAK,CASjB;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAN7B,OAAO,qBAAqB,EAAE,gBAMD,EAAE,IAAI,EALnC,MAKmC,EAAE,MAAM,EAJ3C,MAI2C,EAAE,QAAQ,EAHrD,OAAO,qBAAqB,EAAE,cAAc,GAAG,SAGM,GAFnD,KAAK,CAIjB;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EALnC,OAAO,qBAAqB,EAAE,gBAKK,EAAE,UAAU,EAJ/C,MAI+C,EAAE,QAAQ,EAHzD,OAAO,qBAAqB,EAAE,cAAc,GAAG,SAGU,GAFvD,KAAK,CASjB"}
1
+ {"version":3,"file":"diagnostic.d.ts","sourceRoot":"","sources":["../../src/diagnostic.js"],"names":[],"mappings":"AAEA,kEAAkE;AAClE,qBAAa,qBAAsB,SAAQ,KAAK;IAwBvC,IAAI;IACJ,MAAM;IACN,iBAAiB;IACjB,QAAQ;IACR,QAAQ;IACkB,OAAO;IACJ,UAAU;IACZ,QAAQ;IACV,MAAM;IACP,KAAK;IACJ,MAAM;IACN,MAAM;IACL,OAAO;IAnCxC;;;;;;;;;;;;;;;;;OAiBG;IACH,YAAY,EAAC,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,iBAAiB,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAC,EAf7I;QAAwB,IAAI,EAApB,MAAM,CACd;QAAwB,OAAO,EAAvB,MAAM,CACd;QAAwB,QAAQ,EAAxB,MAAM,CACd;QAA2E,QAAQ,AAAnF,CACA,EADQ,OAAO,qBAAqB,EAAE,cAAc,GAAG,SAAS,CAChE;QAA2E,iBAAiB,AAA5F,CACA,EADQ,OAAO,qBAAqB,EAAE,cAAc,GAAG,SAAS,CAChE;QAAoC,KAAK,AAAzC,CACA,EADQ,KAAK,GAAG,SAAS,CACzB;QAAqC,OAAO,AAA5C,CACA,EADQ,MAAM,GAAG,SAAS,CAC1B;QAAqC,UAAU,AAA/C,CACA,EADQ,MAAM,GAAG,SAAS,CAC1B;QAAqC,QAAQ,AAA7C,CACA,EADQ,MAAM,GAAG,SAAS,CAC1B;QAAqC,MAAM,AAA3C,CACA,EADQ,MAAM,GAAG,SAAS,CAC1B;QAAqC,KAAK,AAA1C,CACA,EADQ,MAAM,GAAG,SAAS,CAC1B;QAAqC,MAAM,AAA3C,CACA,EADQ,MAAM,GAAG,SAAS,CAC1B;QAAqC,MAAM,AAA3C,CACA,EADQ,MAAM,GAAG,SAAS,CAC1B;QAAqC,OAAO,AAA5C,CACF,EADU,MAAM,GAAG,SAAS,CAC5B;KAC+I,EAkB/I;CACF;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAJ1B,OAAO,qBAAqB,EAAE,gBAIJ,EAAE,KAAK,EAHjC,OAGiC,GAF/B,KAAK,CAWjB;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAL/B,OAAO,qBAAqB,EAAE,gBAKC,EAAE,MAAM,EAJvC,MAIuC,EAAE,QAAQ,EAHjD,OAAO,qBAAqB,EAAE,cAAc,GAAG,SAGE,GAF/C,KAAK,CASjB;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EALzB,OAAO,qBAAqB,EAAE,gBAKL,EAAE,OAAO,EAJlC,MAIkC,EAAE,QAAQ,EAH5C,OAAO,qBAAqB,EAAE,cAAc,GAAG,SAGH,GAF1C,KAAK,CASjB;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAN7B,OAAO,qBAAqB,EAAE,gBAMD,EAAE,IAAI,EALnC,MAKmC,EAAE,MAAM,EAJ3C,MAI2C,EAAE,QAAQ,EAHrD,OAAO,qBAAqB,EAAE,cAAc,GAAG,SAGM,GAFnD,KAAK,CAIjB;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EALnC,OAAO,qBAAqB,EAAE,gBAKK,EAAE,UAAU,EAJ/C,MAI+C,EAAE,QAAQ,EAHzD,OAAO,qBAAqB,EAAE,cAAc,GAAG,SAGU,GAFvD,KAAK,CASjB;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAL7B,MAK6B,EAAE,IAAI,EAJnC,MAImC,EAAE,QAAQ,AAHrD,CACA,EADQ,OAAO,qBAAqB,EAAE,cAAc,GAAG,SAGF,GAF3C,KAAK,CASjB"}
@@ -6,12 +6,20 @@ export class SemantifoldDiagnostic extends Error {
6
6
  * @param {object} options - Diagnostic fields.
7
7
  * @param {string} options.code - Stable diagnostic code.
8
8
  * @param {string} options.message - Human-readable message.
9
- * @param {import("./semantic/types.js").SemanticLanguage} options.language - Related language.
9
+ * @param {string} options.language - Related language, target, tool, or registry identity.
10
10
  * @param {import("./semantic/types.js").SourceLocation | undefined} [options.location] - Related location.
11
11
  * @param {import("./semantic/types.js").SourceLocation | undefined} [options.generatedLocation] - Pre-remapping generated location.
12
12
  * @param {Error | undefined} [options.cause] - Preserved parser error.
13
+ * @param {string | undefined} [options.command] - Canonical command when tool discovery is involved.
14
+ * @param {string | undefined} [options.executable] - Exact resolved executable when known.
15
+ * @param {number | undefined} [options.exitCode] - Process exit code when available.
16
+ * @param {string | undefined} [options.signal] - Process termination signal when available.
17
+ * @param {string | undefined} [options.stage] - Acceptance stage when execution is involved.
18
+ * @param {string | undefined} [options.stderr] - Captured standard error when available.
19
+ * @param {string | undefined} [options.stdout] - Captured standard output when available.
20
+ * @param {string | undefined} [options.version] - Captured executable version when known.
13
21
  */
14
- constructor({ cause, code, generatedLocation, language, location, message }) {
22
+ constructor({ cause, code, command, executable, exitCode, generatedLocation, language, location, message, signal, stage, stderr, stdout, version }) {
15
23
  const locationText = location ? ` at ${location.filename}:${location.start.line}:${location.start.column}` : "";
16
24
  super(`[${code}] ${language}${locationText}: ${message}`, cause ? { cause } : undefined);
17
25
  this.name = "SemantifoldDiagnostic";
@@ -20,6 +28,22 @@ export class SemantifoldDiagnostic extends Error {
20
28
  this.generatedLocation = generatedLocation;
21
29
  this.language = language;
22
30
  this.location = location;
31
+ if (command != undefined)
32
+ this.command = command;
33
+ if (executable != undefined)
34
+ this.executable = executable;
35
+ if (exitCode != undefined)
36
+ this.exitCode = exitCode;
37
+ if (signal != undefined)
38
+ this.signal = signal;
39
+ if (stage != undefined)
40
+ this.stage = stage;
41
+ if (stderr != undefined)
42
+ this.stderr = stderr;
43
+ if (stdout != undefined)
44
+ this.stdout = stdout;
45
+ if (version != undefined)
46
+ this.version = version;
23
47
  }
24
48
  }
25
49
  /**
@@ -93,4 +117,19 @@ export function unsupportedCapability(language, capability, location) {
93
117
  message: `Backend cannot emit semantic capability '${capability}'.`
94
118
  });
95
119
  }
96
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhZ25vc3RpYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kaWFnbm9zdGljLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixrRUFBa0U7QUFDbEUsTUFBTSxPQUFPLHFCQUFzQixTQUFRLEtBQUs7SUFDOUM7Ozs7Ozs7OztPQVNHO0lBQ0gsWUFBWSxFQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUM7UUFDdkUsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLFFBQVEsQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO1FBRS9HLEtBQUssQ0FBQyxJQUFJLElBQUksS0FBSyxRQUFRLEdBQUcsWUFBWSxLQUFLLE9BQU8sRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBQyxLQUFLLEVBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUE7UUFDdEYsSUFBSSxDQUFDLElBQUksR0FBRyx1QkFBdUIsQ0FBQTtRQUNuQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQTtRQUNoQixJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQTtRQUNyQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsaUJBQWlCLENBQUE7UUFDMUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUE7UUFDeEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUE7SUFDMUIsQ0FBQztDQUNGO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsWUFBWSxDQUFDLFFBQVEsRUFBRSxLQUFLO0lBQzFDLE1BQU0sS0FBSyxHQUFHLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7SUFFdkUsTUFBTSxJQUFJLHFCQUFxQixDQUFDO1FBQzlCLEtBQUs7UUFDTCxJQUFJLEVBQUUsYUFBYTtRQUNuQixRQUFRO1FBQ1IsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO0tBQ3ZCLENBQUMsQ0FBQTtBQUNKLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxRQUFRO0lBQzFELE1BQU0sSUFBSSxxQkFBcUIsQ0FBQztRQUM5QixJQUFJLEVBQUUsb0JBQW9CO1FBQzFCLFFBQVE7UUFDUixRQUFRO1FBQ1IsT0FBTyxFQUFFLFdBQVcsTUFBTSwrQ0FBK0M7S0FDMUUsQ0FBQyxDQUFBO0FBQ0osQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxXQUFXLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRO0lBQ3JELE1BQU0sSUFBSSxxQkFBcUIsQ0FBQztRQUM5QixJQUFJLEVBQUUsY0FBYztRQUNwQixRQUFRO1FBQ1IsUUFBUTtRQUNSLE9BQU8sRUFBRSxHQUFHLE9BQU8sMkVBQTJFO0tBQy9GLENBQUMsQ0FBQTtBQUNKLENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLGVBQWUsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxRQUFRO0lBQzlELE1BQU0sSUFBSSxxQkFBcUIsQ0FBQyxFQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUMsQ0FBQyxDQUFBO0FBQzlFLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUscUJBQXFCLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxRQUFRO0lBQ2xFLE1BQU0sSUFBSSxxQkFBcUIsQ0FBQztRQUM5QixJQUFJLEVBQUUsd0JBQXdCO1FBQzlCLFFBQVE7UUFDUixRQUFRO1FBQ1IsT0FBTyxFQUFFLDRDQUE0QyxVQUFVLElBQUk7S0FDcEUsQ0FBQyxDQUFBO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG4vKiogQSBjbGVhciBwYXJzZXIsIHNlbWFudGljLCBvciBiYWNrZW5kIGNhcGFiaWxpdHkgZGlhZ25vc3RpYy4gKi9cbmV4cG9ydCBjbGFzcyBTZW1hbnRpZm9sZERpYWdub3N0aWMgZXh0ZW5kcyBFcnJvciB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgZGlhZ25vc3RpYy5cbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgLSBEaWFnbm9zdGljIGZpZWxkcy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMuY29kZSAtIFN0YWJsZSBkaWFnbm9zdGljIGNvZGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25zLm1lc3NhZ2UgLSBIdW1hbi1yZWFkYWJsZSBtZXNzYWdlLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNMYW5ndWFnZX0gb3B0aW9ucy5sYW5ndWFnZSAtIFJlbGF0ZWQgbGFuZ3VhZ2UuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiB8IHVuZGVmaW5lZH0gW29wdGlvbnMubG9jYXRpb25dIC0gUmVsYXRlZCBsb2NhdGlvbi5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uIHwgdW5kZWZpbmVkfSBbb3B0aW9ucy5nZW5lcmF0ZWRMb2NhdGlvbl0gLSBQcmUtcmVtYXBwaW5nIGdlbmVyYXRlZCBsb2NhdGlvbi5cbiAgICogQHBhcmFtIHtFcnJvciB8IHVuZGVmaW5lZH0gW29wdGlvbnMuY2F1c2VdIC0gUHJlc2VydmVkIHBhcnNlciBlcnJvci5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHtjYXVzZSwgY29kZSwgZ2VuZXJhdGVkTG9jYXRpb24sIGxhbmd1YWdlLCBsb2NhdGlvbiwgbWVzc2FnZX0pIHtcbiAgICBjb25zdCBsb2NhdGlvblRleHQgPSBsb2NhdGlvbiA/IGAgYXQgJHtsb2NhdGlvbi5maWxlbmFtZX06JHtsb2NhdGlvbi5zdGFydC5saW5lfToke2xvY2F0aW9uLnN0YXJ0LmNvbHVtbn1gIDogXCJcIlxuXG4gICAgc3VwZXIoYFske2NvZGV9XSAke2xhbmd1YWdlfSR7bG9jYXRpb25UZXh0fTogJHttZXNzYWdlfWAsIGNhdXNlID8ge2NhdXNlfSA6IHVuZGVmaW5lZClcbiAgICB0aGlzLm5hbWUgPSBcIlNlbWFudGlmb2xkRGlhZ25vc3RpY1wiXG4gICAgdGhpcy5jb2RlID0gY29kZVxuICAgIHRoaXMuZGV0YWlsID0gbWVzc2FnZVxuICAgIHRoaXMuZ2VuZXJhdGVkTG9jYXRpb24gPSBnZW5lcmF0ZWRMb2NhdGlvblxuICAgIHRoaXMubGFuZ3VhZ2UgPSBsYW5ndWFnZVxuICAgIHRoaXMubG9jYXRpb24gPSBsb2NhdGlvblxuICB9XG59XG5cbi8qKlxuICogVGhyb3dzIGEgbm9ybWFsaXplZCBwYXJzZXIgZGlhZ25vc3RpYyB3aGlsZSBwcmVzZXJ2aW5nIHRoZSBwYXJzZXIgZXJyb3IuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNMYW5ndWFnZX0gbGFuZ3VhZ2UgLSBGcm9udGVuZCBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7dW5rbm93bn0gZXJyb3IgLSBPcGFxdWUgcGFyc2VyIGVycm9yLCBuYXJyb3dlZCBpbW1lZGlhdGVseS5cbiAqIEByZXR1cm5zIHtuZXZlcn0gQWx3YXlzIHRocm93cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRmFpbHVyZShsYW5ndWFnZSwgZXJyb3IpIHtcbiAgY29uc3QgY2F1c2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IgOiBuZXcgRXJyb3IoU3RyaW5nKGVycm9yKSlcblxuICB0aHJvdyBuZXcgU2VtYW50aWZvbGREaWFnbm9zdGljKHtcbiAgICBjYXVzZSxcbiAgICBjb2RlOiBcIlBBUlNFX0VSUk9SXCIsXG4gICAgbGFuZ3VhZ2UsXG4gICAgbWVzc2FnZTogY2F1c2UubWVzc2FnZVxuICB9KVxufVxuXG4vKipcbiAqIFRocm93cyBhbiB1bnN1cHBvcnRlZC1zeW50YXggZGlhZ25vc3RpYy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0xhbmd1YWdlfSBsYW5ndWFnZSAtIEZyb250ZW5kIGxhbmd1YWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IHN5bnRheCAtIFBhcnNlciBzeW50YXgga2luZC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiB8IHVuZGVmaW5lZH0gbG9jYXRpb24gLSBTb3VyY2UgbG9jYXRpb24uXG4gKiBAcmV0dXJucyB7bmV2ZXJ9IEFsd2F5cyB0aHJvd3MuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgc3ludGF4LCBsb2NhdGlvbikge1xuICB0aHJvdyBuZXcgU2VtYW50aWZvbGREaWFnbm9zdGljKHtcbiAgICBjb2RlOiBcIlVOU1VQUE9SVEVEX1NZTlRBWFwiLFxuICAgIGxhbmd1YWdlLFxuICAgIGxvY2F0aW9uLFxuICAgIG1lc3NhZ2U6IGBTeW50YXggJyR7c3ludGF4fScgaXMgb3V0c2lkZSB0aGUgaW1wbGVtZW50ZWQgc2VtYW50aWMgc3Vic2V0LmBcbiAgfSlcbn1cblxuLyoqXG4gKiBUaHJvd3MgYSBtaXNzaW5nLXR5cGUgZGlhZ25vc3RpYy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0xhbmd1YWdlfSBsYW5ndWFnZSAtIEZyb250ZW5kIGxhbmd1YWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IHN1YmplY3QgLSBVbnR5cGVkIHN1YmplY3QuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24gfCB1bmRlZmluZWR9IGxvY2F0aW9uIC0gU291cmNlIGxvY2F0aW9uLlxuICogQHJldHVybnMge25ldmVyfSBBbHdheXMgdGhyb3dzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWlzc2luZ1R5cGUobGFuZ3VhZ2UsIHN1YmplY3QsIGxvY2F0aW9uKSB7XG4gIHRocm93IG5ldyBTZW1hbnRpZm9sZERpYWdub3N0aWMoe1xuICAgIGNvZGU6IFwiTUlTU0lOR19UWVBFXCIsXG4gICAgbGFuZ3VhZ2UsXG4gICAgbG9jYXRpb24sXG4gICAgbWVzc2FnZTogYCR7c3ViamVjdH0gcmVxdWlyZXMgYW4gZXhwbGljaXQgc3VwcG9ydGVkIHNjYWxhciB0eXBlOiBpbnRlZ2VyLCBib29sZWFuLCBvciBzdHJpbmcuYFxuICB9KVxufVxuXG4vKipcbiAqIFRocm93cyBhIGxhbmd1YWdlLW5ldXRyYWwgc2VtYW50aWMgZGlhZ25vc3RpYyBkaXNjb3ZlcmVkIGFmdGVyIGFkYXB0YXRpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNMYW5ndWFnZX0gbGFuZ3VhZ2UgLSBTb3VyY2UgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gY29kZSAtIFN0YWJsZSBzZW1hbnRpYyBkaWFnbm9zdGljIGNvZGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZGV0YWlsIC0gSHVtYW4tcmVhZGFibGUgc2VtYW50aWMgZmFpbHVyZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiB8IHVuZGVmaW5lZH0gbG9jYXRpb24gLSBTb3VyY2UgbG9jYXRpb24uXG4gKiBAcmV0dXJucyB7bmV2ZXJ9IEFsd2F5cyB0aHJvd3MuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZW1hbnRpY0ZhaWx1cmUobGFuZ3VhZ2UsIGNvZGUsIGRldGFpbCwgbG9jYXRpb24pIHtcbiAgdGhyb3cgbmV3IFNlbWFudGlmb2xkRGlhZ25vc3RpYyh7Y29kZSwgbGFuZ3VhZ2UsIGxvY2F0aW9uLCBtZXNzYWdlOiBkZXRhaWx9KVxufVxuXG4vKipcbiAqIFRocm93cyBhbiB1bnN1cHBvcnRlZCBiYWNrZW5kLWNhcGFiaWxpdHkgZGlhZ25vc3RpYy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0xhbmd1YWdlfSBsYW5ndWFnZSAtIEJhY2tlbmQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gY2FwYWJpbGl0eSAtIFVuc3VwcG9ydGVkIHNlbWFudGljIGNhcGFiaWxpdHkuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24gfCB1bmRlZmluZWR9IGxvY2F0aW9uIC0gU2VtYW50aWMgc291cmNlIGxvY2F0aW9uLlxuICogQHJldHVybnMge25ldmVyfSBBbHdheXMgdGhyb3dzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBjYXBhYmlsaXR5LCBsb2NhdGlvbikge1xuICB0aHJvdyBuZXcgU2VtYW50aWZvbGREaWFnbm9zdGljKHtcbiAgICBjb2RlOiBcIlVOU1VQUE9SVEVEX0NBUEFCSUxJVFlcIixcbiAgICBsYW5ndWFnZSxcbiAgICBsb2NhdGlvbixcbiAgICBtZXNzYWdlOiBgQmFja2VuZCBjYW5ub3QgZW1pdCBzZW1hbnRpYyBjYXBhYmlsaXR5ICcke2NhcGFiaWxpdHl9Jy5gXG4gIH0pXG59XG4iXX0=
120
+ /**
121
+ * Throws when a registered identity lacks one requested role.
122
+ * @param {string} language - Registered language or target identity.
123
+ * @param {string} role - Requested registry role.
124
+ * @param {import("./semantic/types.js").SourceLocation | undefined} [location] - Related semantic location.
125
+ * @returns {never} Always throws.
126
+ */
127
+ export function unsupportedRole(language, role, location) {
128
+ throw new SemantifoldDiagnostic({
129
+ code: "UNSUPPORTED_ROLE",
130
+ language,
131
+ location,
132
+ message: `Registered language or target does not provide role '${role}'.`
133
+ });
134
+ }
135
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhZ25vc3RpYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kaWFnbm9zdGljLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixrRUFBa0U7QUFDbEUsTUFBTSxPQUFPLHFCQUFzQixTQUFRLEtBQUs7SUFDOUM7Ozs7Ozs7Ozs7Ozs7Ozs7O09BaUJHO0lBQ0gsWUFBWSxFQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBQztRQUM5SSxNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8sUUFBUSxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7UUFFL0csS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLFFBQVEsR0FBRyxZQUFZLEtBQUssT0FBTyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFDLEtBQUssRUFBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQTtRQUN0RixJQUFJLENBQUMsSUFBSSxHQUFHLHVCQUF1QixDQUFBO1FBQ25DLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFBO1FBQ2hCLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFBO1FBQ3JCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQTtRQUMxQyxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQTtRQUN4QixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQTtRQUN4QixJQUFJLE9BQU8sSUFBSSxTQUFTO1lBQUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUE7UUFDaEQsSUFBSSxVQUFVLElBQUksU0FBUztZQUFFLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFBO1FBQ3pELElBQUksUUFBUSxJQUFJLFNBQVM7WUFBRSxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQTtRQUNuRCxJQUFJLE1BQU0sSUFBSSxTQUFTO1lBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUE7UUFDN0MsSUFBSSxLQUFLLElBQUksU0FBUztZQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFBO1FBQzFDLElBQUksTUFBTSxJQUFJLFNBQVM7WUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQTtRQUM3QyxJQUFJLE1BQU0sSUFBSSxTQUFTO1lBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUE7UUFDN0MsSUFBSSxPQUFPLElBQUksU0FBUztZQUFFLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFBO0lBQ2xELENBQUM7Q0FDRjtBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FBQyxRQUFRLEVBQUUsS0FBSztJQUMxQyxNQUFNLEtBQUssR0FBRyxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO0lBRXZFLE1BQU0sSUFBSSxxQkFBcUIsQ0FBQztRQUM5QixLQUFLO1FBQ0wsSUFBSSxFQUFFLGFBQWE7UUFDbkIsUUFBUTtRQUNSLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTztLQUN2QixDQUFDLENBQUE7QUFDSixDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsUUFBUTtJQUMxRCxNQUFNLElBQUkscUJBQXFCLENBQUM7UUFDOUIsSUFBSSxFQUFFLG9CQUFvQjtRQUMxQixRQUFRO1FBQ1IsUUFBUTtRQUNSLE9BQU8sRUFBRSxXQUFXLE1BQU0sK0NBQStDO0tBQzFFLENBQUMsQ0FBQTtBQUNKLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsV0FBVyxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsUUFBUTtJQUNyRCxNQUFNLElBQUkscUJBQXFCLENBQUM7UUFDOUIsSUFBSSxFQUFFLGNBQWM7UUFDcEIsUUFBUTtRQUNSLFFBQVE7UUFDUixPQUFPLEVBQUUsR0FBRyxPQUFPLDJFQUEyRTtLQUMvRixDQUFDLENBQUE7QUFDSixDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSxlQUFlLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsUUFBUTtJQUM5RCxNQUFNLElBQUkscUJBQXFCLENBQUMsRUFBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFDLENBQUMsQ0FBQTtBQUM5RSxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQixDQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUUsUUFBUTtJQUNsRSxNQUFNLElBQUkscUJBQXFCLENBQUM7UUFDOUIsSUFBSSxFQUFFLHdCQUF3QjtRQUM5QixRQUFRO1FBQ1IsUUFBUTtRQUNSLE9BQU8sRUFBRSw0Q0FBNEMsVUFBVSxJQUFJO0tBQ3BFLENBQUMsQ0FBQTtBQUNKLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsZUFBZSxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsUUFBUTtJQUN0RCxNQUFNLElBQUkscUJBQXFCLENBQUM7UUFDOUIsSUFBSSxFQUFFLGtCQUFrQjtRQUN4QixRQUFRO1FBQ1IsUUFBUTtRQUNSLE9BQU8sRUFBRSx3REFBd0QsSUFBSSxJQUFJO0tBQzFFLENBQUMsQ0FBQTtBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuLyoqIEEgY2xlYXIgcGFyc2VyLCBzZW1hbnRpYywgb3IgYmFja2VuZCBjYXBhYmlsaXR5IGRpYWdub3N0aWMuICovXG5leHBvcnQgY2xhc3MgU2VtYW50aWZvbGREaWFnbm9zdGljIGV4dGVuZHMgRXJyb3Ige1xuICAvKipcbiAgICogQ3JlYXRlcyBhIGRpYWdub3N0aWMuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zIC0gRGlhZ25vc3RpYyBmaWVsZHMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25zLmNvZGUgLSBTdGFibGUgZGlhZ25vc3RpYyBjb2RlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy5tZXNzYWdlIC0gSHVtYW4tcmVhZGFibGUgbWVzc2FnZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMubGFuZ3VhZ2UgLSBSZWxhdGVkIGxhbmd1YWdlLCB0YXJnZXQsIHRvb2wsIG9yIHJlZ2lzdHJ5IGlkZW50aXR5LlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24gfCB1bmRlZmluZWR9IFtvcHRpb25zLmxvY2F0aW9uXSAtIFJlbGF0ZWQgbG9jYXRpb24uXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiB8IHVuZGVmaW5lZH0gW29wdGlvbnMuZ2VuZXJhdGVkTG9jYXRpb25dIC0gUHJlLXJlbWFwcGluZyBnZW5lcmF0ZWQgbG9jYXRpb24uXG4gICAqIEBwYXJhbSB7RXJyb3IgfCB1bmRlZmluZWR9IFtvcHRpb25zLmNhdXNlXSAtIFByZXNlcnZlZCBwYXJzZXIgZXJyb3IuXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgdW5kZWZpbmVkfSBbb3B0aW9ucy5jb21tYW5kXSAtIENhbm9uaWNhbCBjb21tYW5kIHdoZW4gdG9vbCBkaXNjb3ZlcnkgaXMgaW52b2x2ZWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgdW5kZWZpbmVkfSBbb3B0aW9ucy5leGVjdXRhYmxlXSAtIEV4YWN0IHJlc29sdmVkIGV4ZWN1dGFibGUgd2hlbiBrbm93bi5cbiAgICogQHBhcmFtIHtudW1iZXIgfCB1bmRlZmluZWR9IFtvcHRpb25zLmV4aXRDb2RlXSAtIFByb2Nlc3MgZXhpdCBjb2RlIHdoZW4gYXZhaWxhYmxlLlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IHVuZGVmaW5lZH0gW29wdGlvbnMuc2lnbmFsXSAtIFByb2Nlc3MgdGVybWluYXRpb24gc2lnbmFsIHdoZW4gYXZhaWxhYmxlLlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IHVuZGVmaW5lZH0gW29wdGlvbnMuc3RhZ2VdIC0gQWNjZXB0YW5jZSBzdGFnZSB3aGVuIGV4ZWN1dGlvbiBpcyBpbnZvbHZlZC5cbiAgICogQHBhcmFtIHtzdHJpbmcgfCB1bmRlZmluZWR9IFtvcHRpb25zLnN0ZGVycl0gLSBDYXB0dXJlZCBzdGFuZGFyZCBlcnJvciB3aGVuIGF2YWlsYWJsZS5cbiAgICogQHBhcmFtIHtzdHJpbmcgfCB1bmRlZmluZWR9IFtvcHRpb25zLnN0ZG91dF0gLSBDYXB0dXJlZCBzdGFuZGFyZCBvdXRwdXQgd2hlbiBhdmFpbGFibGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgdW5kZWZpbmVkfSBbb3B0aW9ucy52ZXJzaW9uXSAtIENhcHR1cmVkIGV4ZWN1dGFibGUgdmVyc2lvbiB3aGVuIGtub3duLlxuICAgKi9cbiAgY29uc3RydWN0b3Ioe2NhdXNlLCBjb2RlLCBjb21tYW5kLCBleGVjdXRhYmxlLCBleGl0Q29kZSwgZ2VuZXJhdGVkTG9jYXRpb24sIGxhbmd1YWdlLCBsb2NhdGlvbiwgbWVzc2FnZSwgc2lnbmFsLCBzdGFnZSwgc3RkZXJyLCBzdGRvdXQsIHZlcnNpb259KSB7XG4gICAgY29uc3QgbG9jYXRpb25UZXh0ID0gbG9jYXRpb24gPyBgIGF0ICR7bG9jYXRpb24uZmlsZW5hbWV9OiR7bG9jYXRpb24uc3RhcnQubGluZX06JHtsb2NhdGlvbi5zdGFydC5jb2x1bW59YCA6IFwiXCJcblxuICAgIHN1cGVyKGBbJHtjb2RlfV0gJHtsYW5ndWFnZX0ke2xvY2F0aW9uVGV4dH06ICR7bWVzc2FnZX1gLCBjYXVzZSA/IHtjYXVzZX0gOiB1bmRlZmluZWQpXG4gICAgdGhpcy5uYW1lID0gXCJTZW1hbnRpZm9sZERpYWdub3N0aWNcIlxuICAgIHRoaXMuY29kZSA9IGNvZGVcbiAgICB0aGlzLmRldGFpbCA9IG1lc3NhZ2VcbiAgICB0aGlzLmdlbmVyYXRlZExvY2F0aW9uID0gZ2VuZXJhdGVkTG9jYXRpb25cbiAgICB0aGlzLmxhbmd1YWdlID0gbGFuZ3VhZ2VcbiAgICB0aGlzLmxvY2F0aW9uID0gbG9jYXRpb25cbiAgICBpZiAoY29tbWFuZCAhPSB1bmRlZmluZWQpIHRoaXMuY29tbWFuZCA9IGNvbW1hbmRcbiAgICBpZiAoZXhlY3V0YWJsZSAhPSB1bmRlZmluZWQpIHRoaXMuZXhlY3V0YWJsZSA9IGV4ZWN1dGFibGVcbiAgICBpZiAoZXhpdENvZGUgIT0gdW5kZWZpbmVkKSB0aGlzLmV4aXRDb2RlID0gZXhpdENvZGVcbiAgICBpZiAoc2lnbmFsICE9IHVuZGVmaW5lZCkgdGhpcy5zaWduYWwgPSBzaWduYWxcbiAgICBpZiAoc3RhZ2UgIT0gdW5kZWZpbmVkKSB0aGlzLnN0YWdlID0gc3RhZ2VcbiAgICBpZiAoc3RkZXJyICE9IHVuZGVmaW5lZCkgdGhpcy5zdGRlcnIgPSBzdGRlcnJcbiAgICBpZiAoc3Rkb3V0ICE9IHVuZGVmaW5lZCkgdGhpcy5zdGRvdXQgPSBzdGRvdXRcbiAgICBpZiAodmVyc2lvbiAhPSB1bmRlZmluZWQpIHRoaXMudmVyc2lvbiA9IHZlcnNpb25cbiAgfVxufVxuXG4vKipcbiAqIFRocm93cyBhIG5vcm1hbGl6ZWQgcGFyc2VyIGRpYWdub3N0aWMgd2hpbGUgcHJlc2VydmluZyB0aGUgcGFyc2VyIGVycm9yLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTGFuZ3VhZ2V9IGxhbmd1YWdlIC0gRnJvbnRlbmQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge3Vua25vd259IGVycm9yIC0gT3BhcXVlIHBhcnNlciBlcnJvciwgbmFycm93ZWQgaW1tZWRpYXRlbHkuXG4gKiBAcmV0dXJucyB7bmV2ZXJ9IEFsd2F5cyB0aHJvd3MuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUZhaWx1cmUobGFuZ3VhZ2UsIGVycm9yKSB7XG4gIGNvbnN0IGNhdXNlID0gZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yIDogbmV3IEVycm9yKFN0cmluZyhlcnJvcikpXG5cbiAgdGhyb3cgbmV3IFNlbWFudGlmb2xkRGlhZ25vc3RpYyh7XG4gICAgY2F1c2UsXG4gICAgY29kZTogXCJQQVJTRV9FUlJPUlwiLFxuICAgIGxhbmd1YWdlLFxuICAgIG1lc3NhZ2U6IGNhdXNlLm1lc3NhZ2VcbiAgfSlcbn1cblxuLyoqXG4gKiBUaHJvd3MgYW4gdW5zdXBwb3J0ZWQtc3ludGF4IGRpYWdub3N0aWMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNMYW5ndWFnZX0gbGFuZ3VhZ2UgLSBGcm9udGVuZCBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzeW50YXggLSBQYXJzZXIgc3ludGF4IGtpbmQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24gfCB1bmRlZmluZWR9IGxvY2F0aW9uIC0gU291cmNlIGxvY2F0aW9uLlxuICogQHJldHVybnMge25ldmVyfSBBbHdheXMgdGhyb3dzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdW5zdXBwb3J0ZWRTeW50YXgobGFuZ3VhZ2UsIHN5bnRheCwgbG9jYXRpb24pIHtcbiAgdGhyb3cgbmV3IFNlbWFudGlmb2xkRGlhZ25vc3RpYyh7XG4gICAgY29kZTogXCJVTlNVUFBPUlRFRF9TWU5UQVhcIixcbiAgICBsYW5ndWFnZSxcbiAgICBsb2NhdGlvbixcbiAgICBtZXNzYWdlOiBgU3ludGF4ICcke3N5bnRheH0nIGlzIG91dHNpZGUgdGhlIGltcGxlbWVudGVkIHNlbWFudGljIHN1YnNldC5gXG4gIH0pXG59XG5cbi8qKlxuICogVGhyb3dzIGEgbWlzc2luZy10eXBlIGRpYWdub3N0aWMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNMYW5ndWFnZX0gbGFuZ3VhZ2UgLSBGcm9udGVuZCBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdWJqZWN0IC0gVW50eXBlZCBzdWJqZWN0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uIHwgdW5kZWZpbmVkfSBsb2NhdGlvbiAtIFNvdXJjZSBsb2NhdGlvbi5cbiAqIEByZXR1cm5zIHtuZXZlcn0gQWx3YXlzIHRocm93cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1pc3NpbmdUeXBlKGxhbmd1YWdlLCBzdWJqZWN0LCBsb2NhdGlvbikge1xuICB0aHJvdyBuZXcgU2VtYW50aWZvbGREaWFnbm9zdGljKHtcbiAgICBjb2RlOiBcIk1JU1NJTkdfVFlQRVwiLFxuICAgIGxhbmd1YWdlLFxuICAgIGxvY2F0aW9uLFxuICAgIG1lc3NhZ2U6IGAke3N1YmplY3R9IHJlcXVpcmVzIGFuIGV4cGxpY2l0IHN1cHBvcnRlZCBzY2FsYXIgdHlwZTogaW50ZWdlciwgYm9vbGVhbiwgb3Igc3RyaW5nLmBcbiAgfSlcbn1cblxuLyoqXG4gKiBUaHJvd3MgYSBsYW5ndWFnZS1uZXV0cmFsIHNlbWFudGljIGRpYWdub3N0aWMgZGlzY292ZXJlZCBhZnRlciBhZGFwdGF0aW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTGFuZ3VhZ2V9IGxhbmd1YWdlIC0gU291cmNlIGxhbmd1YWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IGNvZGUgLSBTdGFibGUgc2VtYW50aWMgZGlhZ25vc3RpYyBjb2RlLlxuICogQHBhcmFtIHtzdHJpbmd9IGRldGFpbCAtIEh1bWFuLXJlYWRhYmxlIHNlbWFudGljIGZhaWx1cmUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24gfCB1bmRlZmluZWR9IGxvY2F0aW9uIC0gU291cmNlIGxvY2F0aW9uLlxuICogQHJldHVybnMge25ldmVyfSBBbHdheXMgdGhyb3dzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VtYW50aWNGYWlsdXJlKGxhbmd1YWdlLCBjb2RlLCBkZXRhaWwsIGxvY2F0aW9uKSB7XG4gIHRocm93IG5ldyBTZW1hbnRpZm9sZERpYWdub3N0aWMoe2NvZGUsIGxhbmd1YWdlLCBsb2NhdGlvbiwgbWVzc2FnZTogZGV0YWlsfSlcbn1cblxuLyoqXG4gKiBUaHJvd3MgYW4gdW5zdXBwb3J0ZWQgYmFja2VuZC1jYXBhYmlsaXR5IGRpYWdub3N0aWMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNMYW5ndWFnZX0gbGFuZ3VhZ2UgLSBCYWNrZW5kIGxhbmd1YWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IGNhcGFiaWxpdHkgLSBVbnN1cHBvcnRlZCBzZW1hbnRpYyBjYXBhYmlsaXR5LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uIHwgdW5kZWZpbmVkfSBsb2NhdGlvbiAtIFNlbWFudGljIHNvdXJjZSBsb2NhdGlvbi5cbiAqIEByZXR1cm5zIHtuZXZlcn0gQWx3YXlzIHRocm93cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgY2FwYWJpbGl0eSwgbG9jYXRpb24pIHtcbiAgdGhyb3cgbmV3IFNlbWFudGlmb2xkRGlhZ25vc3RpYyh7XG4gICAgY29kZTogXCJVTlNVUFBPUlRFRF9DQVBBQklMSVRZXCIsXG4gICAgbGFuZ3VhZ2UsXG4gICAgbG9jYXRpb24sXG4gICAgbWVzc2FnZTogYEJhY2tlbmQgY2Fubm90IGVtaXQgc2VtYW50aWMgY2FwYWJpbGl0eSAnJHtjYXBhYmlsaXR5fScuYFxuICB9KVxufVxuXG4vKipcbiAqIFRocm93cyB3aGVuIGEgcmVnaXN0ZXJlZCBpZGVudGl0eSBsYWNrcyBvbmUgcmVxdWVzdGVkIHJvbGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gbGFuZ3VhZ2UgLSBSZWdpc3RlcmVkIGxhbmd1YWdlIG9yIHRhcmdldCBpZGVudGl0eS5cbiAqIEBwYXJhbSB7c3RyaW5nfSByb2xlIC0gUmVxdWVzdGVkIHJlZ2lzdHJ5IHJvbGUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24gfCB1bmRlZmluZWR9IFtsb2NhdGlvbl0gLSBSZWxhdGVkIHNlbWFudGljIGxvY2F0aW9uLlxuICogQHJldHVybnMge25ldmVyfSBBbHdheXMgdGhyb3dzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdW5zdXBwb3J0ZWRSb2xlKGxhbmd1YWdlLCByb2xlLCBsb2NhdGlvbikge1xuICB0aHJvdyBuZXcgU2VtYW50aWZvbGREaWFnbm9zdGljKHtcbiAgICBjb2RlOiBcIlVOU1VQUE9SVEVEX1JPTEVcIixcbiAgICBsYW5ndWFnZSxcbiAgICBsb2NhdGlvbixcbiAgICBtZXNzYWdlOiBgUmVnaXN0ZXJlZCBsYW5ndWFnZSBvciB0YXJnZXQgZG9lcyBub3QgcHJvdmlkZSByb2xlICcke3JvbGV9Jy5gXG4gIH0pXG59XG4iXX0=
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/frontends/index.js"],"names":[],"mappings":"AAUA;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,EAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAC,EALrD;IAAsB,QAAQ,EAAtB,MAAM,CACd;IAA+D,QAAQ,EAA/D,OAAO,sBAAsB,EAAE,gBAAgB,CACvD;IAAsB,MAAM,EAApB,MAAM,CACd;CAEqD,GAF3C,OAAO,sBAAsB,EAAE,cAAc,CAmBzD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/frontends/index.js"],"names":[],"mappings":"AAMA;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,EAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAC,EALrD;IAAsB,QAAQ,EAAtB,MAAM,CACd;IAA+D,QAAQ,EAA/D,OAAO,sBAAsB,EAAE,gBAAgB,CACvD;IAAsB,MAAM,EAApB,MAAM,CACd;CAEqD,GAF3C,OAAO,sBAAsB,EAAE,cAAc,CAQzD"}
@@ -1,11 +1,7 @@
1
1
  // @ts-check
2
- import { SemantifoldDiagnostic } from "../diagnostic.js";
2
+ import { languageRegistry } from "../language-registry.js";
3
3
  import { annotateParsedModule } from "../semantic/provenance.js";
4
4
  import { validateParsedModule } from "../semantic/validate.js";
5
- import { parseJava } from "./java.js";
6
- import { parseJavaScriptTypeScript } from "./javascript-typescript.js";
7
- import { parsePhp } from "./php.js";
8
- import { parseRuby } from "./ruby.js";
9
5
  /**
10
6
  * Parses supported source into a shared semantic module.
11
7
  * @param {object} input - Parse request.
@@ -15,22 +11,8 @@ import { parseRuby } from "./ruby.js";
15
11
  * @returns {import("../semantic/types.js").SemanticModule} Semantic module.
16
12
  */
17
13
  export function parseSource({ filename, language, source }) {
18
- let module;
19
- if (language == "php")
20
- module = validateParsedModule(parsePhp({ filename, source }), language);
21
- else if (language == "ruby")
22
- module = validateParsedModule(parseRuby({ filename, source }), language);
23
- if (language == "javascript" || language == "typescript") {
24
- module = validateParsedModule(parseJavaScriptTypeScript({ filename, language, source }), language);
25
- }
26
- else if (language == "java")
27
- module = validateParsedModule(parseJava({ filename, source }), language);
28
- if (module)
29
- return annotateParsedModule(module, { filename, language, source });
30
- throw new SemantifoldDiagnostic({
31
- code: "UNSUPPORTED_LANGUAGE",
32
- language,
33
- message: "No frontend adapter is registered for this language."
34
- });
14
+ const frontend = /** @type {(input: {filename: string, source: string}) => import("../semantic/types.js").SemanticModule} */ (languageRegistry.resolve(language, "frontend"));
15
+ const module = validateParsedModule(frontend({ filename, source }), language);
16
+ return annotateParsedModule(module, { filename, language, source });
35
17
  }
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZnJvbnRlbmRzL2luZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQTtBQUN0RCxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQTtBQUM5RCxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQTtBQUM1RCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sV0FBVyxDQUFBO0FBQ25DLE9BQU8sRUFBQyx5QkFBeUIsRUFBQyxNQUFNLDRCQUE0QixDQUFBO0FBQ3BFLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxVQUFVLENBQUE7QUFDakMsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLFdBQVcsQ0FBQTtBQUVuQzs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FBQyxFQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFDO0lBQ3RELElBQUksTUFBTSxDQUFBO0lBRVYsSUFBSSxRQUFRLElBQUksS0FBSztRQUFFLE1BQU0sR0FBRyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsRUFBQyxRQUFRLEVBQUUsTUFBTSxFQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQTtTQUN2RixJQUFJLFFBQVEsSUFBSSxNQUFNO1FBQUUsTUFBTSxHQUFHLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxFQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFBO0lBQ25HLElBQUksUUFBUSxJQUFJLFlBQVksSUFBSSxRQUFRLElBQUksWUFBWSxFQUFFLENBQUM7UUFDekQsTUFBTSxHQUFHLG9CQUFvQixDQUFDLHlCQUF5QixDQUFDLEVBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFBO0lBQ2xHLENBQUM7U0FDSSxJQUFJLFFBQVEsSUFBSSxNQUFNO1FBQUUsTUFBTSxHQUFHLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxFQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFBO0lBRW5HLElBQUksTUFBTTtRQUFFLE9BQU8sb0JBQW9CLENBQUMsTUFBTSxFQUFFLEVBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUMsQ0FBQyxDQUFBO0lBRTdFLE1BQU0sSUFBSSxxQkFBcUIsQ0FBQztRQUM5QixJQUFJLEVBQUUsc0JBQXNCO1FBQzVCLFFBQVE7UUFDUixPQUFPLEVBQUUsc0RBQXNEO0tBQ2hFLENBQUMsQ0FBQTtBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IHtTZW1hbnRpZm9sZERpYWdub3N0aWN9IGZyb20gXCIuLi9kaWFnbm9zdGljLmpzXCJcbmltcG9ydCB7YW5ub3RhdGVQYXJzZWRNb2R1bGV9IGZyb20gXCIuLi9zZW1hbnRpYy9wcm92ZW5hbmNlLmpzXCJcbmltcG9ydCB7dmFsaWRhdGVQYXJzZWRNb2R1bGV9IGZyb20gXCIuLi9zZW1hbnRpYy92YWxpZGF0ZS5qc1wiXG5pbXBvcnQge3BhcnNlSmF2YX0gZnJvbSBcIi4vamF2YS5qc1wiXG5pbXBvcnQge3BhcnNlSmF2YVNjcmlwdFR5cGVTY3JpcHR9IGZyb20gXCIuL2phdmFzY3JpcHQtdHlwZXNjcmlwdC5qc1wiXG5pbXBvcnQge3BhcnNlUGhwfSBmcm9tIFwiLi9waHAuanNcIlxuaW1wb3J0IHtwYXJzZVJ1Ynl9IGZyb20gXCIuL3J1YnkuanNcIlxuXG4vKipcbiAqIFBhcnNlcyBzdXBwb3J0ZWQgc291cmNlIGludG8gYSBzaGFyZWQgc2VtYW50aWMgbW9kdWxlLlxuICogQHBhcmFtIHtvYmplY3R9IGlucHV0IC0gUGFyc2UgcmVxdWVzdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dC5maWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZSB1c2VkIGluIGRpYWdub3N0aWNzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0xhbmd1YWdlfSBpbnB1dC5sYW5ndWFnZSAtIFNvdXJjZSBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dC5zb3VyY2UgLSBTb3VyY2UgdGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gU2VtYW50aWMgbW9kdWxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VTb3VyY2Uoe2ZpbGVuYW1lLCBsYW5ndWFnZSwgc291cmNlfSkge1xuICBsZXQgbW9kdWxlXG5cbiAgaWYgKGxhbmd1YWdlID09IFwicGhwXCIpIG1vZHVsZSA9IHZhbGlkYXRlUGFyc2VkTW9kdWxlKHBhcnNlUGhwKHtmaWxlbmFtZSwgc291cmNlfSksIGxhbmd1YWdlKVxuICBlbHNlIGlmIChsYW5ndWFnZSA9PSBcInJ1YnlcIikgbW9kdWxlID0gdmFsaWRhdGVQYXJzZWRNb2R1bGUocGFyc2VSdWJ5KHtmaWxlbmFtZSwgc291cmNlfSksIGxhbmd1YWdlKVxuICBpZiAobGFuZ3VhZ2UgPT0gXCJqYXZhc2NyaXB0XCIgfHwgbGFuZ3VhZ2UgPT0gXCJ0eXBlc2NyaXB0XCIpIHtcbiAgICBtb2R1bGUgPSB2YWxpZGF0ZVBhcnNlZE1vZHVsZShwYXJzZUphdmFTY3JpcHRUeXBlU2NyaXB0KHtmaWxlbmFtZSwgbGFuZ3VhZ2UsIHNvdXJjZX0pLCBsYW5ndWFnZSlcbiAgfVxuICBlbHNlIGlmIChsYW5ndWFnZSA9PSBcImphdmFcIikgbW9kdWxlID0gdmFsaWRhdGVQYXJzZWRNb2R1bGUocGFyc2VKYXZhKHtmaWxlbmFtZSwgc291cmNlfSksIGxhbmd1YWdlKVxuXG4gIGlmIChtb2R1bGUpIHJldHVybiBhbm5vdGF0ZVBhcnNlZE1vZHVsZShtb2R1bGUsIHtmaWxlbmFtZSwgbGFuZ3VhZ2UsIHNvdXJjZX0pXG5cbiAgdGhyb3cgbmV3IFNlbWFudGlmb2xkRGlhZ25vc3RpYyh7XG4gICAgY29kZTogXCJVTlNVUFBPUlRFRF9MQU5HVUFHRVwiLFxuICAgIGxhbmd1YWdlLFxuICAgIG1lc3NhZ2U6IFwiTm8gZnJvbnRlbmQgYWRhcHRlciBpcyByZWdpc3RlcmVkIGZvciB0aGlzIGxhbmd1YWdlLlwiXG4gIH0pXG59XG4iXX0=
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZnJvbnRlbmRzL2luZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQTtBQUN4RCxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQTtBQUM5RCxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQTtBQUU1RDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FBQyxFQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFDO0lBQ3RELE1BQU0sUUFBUSxHQUFHLDJHQUEyRyxDQUFDLENBQzNILGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQTtJQUNqRCxNQUFNLE1BQU0sR0FBRyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsRUFBQyxRQUFRLEVBQUUsTUFBTSxFQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQTtJQUUzRSxPQUFPLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxFQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFDLENBQUMsQ0FBQTtBQUNuRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCB7bGFuZ3VhZ2VSZWdpc3RyeX0gZnJvbSBcIi4uL2xhbmd1YWdlLXJlZ2lzdHJ5LmpzXCJcbmltcG9ydCB7YW5ub3RhdGVQYXJzZWRNb2R1bGV9IGZyb20gXCIuLi9zZW1hbnRpYy9wcm92ZW5hbmNlLmpzXCJcbmltcG9ydCB7dmFsaWRhdGVQYXJzZWRNb2R1bGV9IGZyb20gXCIuLi9zZW1hbnRpYy92YWxpZGF0ZS5qc1wiXG5cbi8qKlxuICogUGFyc2VzIHN1cHBvcnRlZCBzb3VyY2UgaW50byBhIHNoYXJlZCBzZW1hbnRpYyBtb2R1bGUuXG4gKiBAcGFyYW0ge29iamVjdH0gaW5wdXQgLSBQYXJzZSByZXF1ZXN0LlxuICogQHBhcmFtIHtzdHJpbmd9IGlucHV0LmZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lIHVzZWQgaW4gZGlhZ25vc3RpY3MuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTGFuZ3VhZ2V9IGlucHV0Lmxhbmd1YWdlIC0gU291cmNlIGxhbmd1YWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IGlucHV0LnNvdXJjZSAtIFNvdXJjZSB0ZXh0LlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBTZW1hbnRpYyBtb2R1bGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVNvdXJjZSh7ZmlsZW5hbWUsIGxhbmd1YWdlLCBzb3VyY2V9KSB7XG4gIGNvbnN0IGZyb250ZW5kID0gLyoqIEB0eXBlIHsoaW5wdXQ6IHtmaWxlbmFtZTogc3RyaW5nLCBzb3VyY2U6IHN0cmluZ30pID0+IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSAqLyAoXG4gICAgbGFuZ3VhZ2VSZWdpc3RyeS5yZXNvbHZlKGxhbmd1YWdlLCBcImZyb250ZW5kXCIpKVxuICBjb25zdCBtb2R1bGUgPSB2YWxpZGF0ZVBhcnNlZE1vZHVsZShmcm9udGVuZCh7ZmlsZW5hbWUsIHNvdXJjZX0pLCBsYW5ndWFnZSlcblxuICByZXR1cm4gYW5ub3RhdGVQYXJzZWRNb2R1bGUobW9kdWxlLCB7ZmlsZW5hbWUsIGxhbmd1YWdlLCBzb3VyY2V9KVxufVxuIl19
@@ -0,0 +1,14 @@
1
+ export type PythonContext = {
2
+ comments: import("tree-sitter").SyntaxNode[];
3
+ usedImmutableMarkers: Set<import("tree-sitter").SyntaxNode>;
4
+ };
5
+ /**
6
+ * Parses the strict Task 016 Python profile.
7
+ * @param {{filename: string, source: string}} input - Parser input.
8
+ * @returns {import("../semantic/types.js").SemanticModule} Semantic module.
9
+ */
10
+ export declare function parsePython({ filename, source }: {
11
+ filename: string;
12
+ source: string;
13
+ }): import("../semantic/types.js").SemanticModule;
14
+ //# sourceMappingURL=python.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"python.d.ts","sourceRoot":"","sources":["../../../src/frontends/python.js"],"names":[],"mappings":"AAoCI,YAAuH,aAAa,GAA1H;IAAC,QAAQ,EAAE,OAAO,aAAa,EAAE,UAAU,EAAE,CAAC;IAAC,oBAAoB,EAAE,GAAG,CAAC,OAAO,aAAa,EAAE,UAAU,CAAC,CAAA;CAAC,CAAe;AAqkBxI;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,EAAC,QAAQ,EAAE,MAAM,EAAC,EAHnC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAGE,GAFjC,OAAO,sBAAsB,EAAE,cAAc,CAoEzD"}