semantifold 0.1.1 → 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.
- package/README.md +13 -6
- package/build/index.d.ts +32 -3
- package/build/index.d.ts.map +1 -1
- package/build/index.js +99 -4
- package/build/src/acceptance.d.ts +22 -0
- package/build/src/acceptance.d.ts.map +1 -0
- package/build/src/acceptance.js +339 -0
- package/build/src/array.d.ts +7 -0
- package/build/src/array.d.ts.map +1 -0
- package/build/src/array.js +18 -0
- package/build/src/artifact-path.d.ts +13 -0
- package/build/src/artifact-path.d.ts.map +1 -0
- package/build/src/artifact-path.js +30 -0
- package/build/src/artifacts.d.ts +7 -0
- package/build/src/artifacts.d.ts.map +1 -0
- package/build/src/artifacts.js +389 -0
- package/build/src/backends/identifiers.d.ts.map +1 -1
- package/build/src/backends/identifiers.js +10 -2
- package/build/src/backends/index.d.ts.map +1 -1
- package/build/src/backends/index.js +19 -37
- package/build/src/backends/python.d.ts +8 -0
- package/build/src/backends/python.d.ts.map +1 -0
- package/build/src/backends/python.js +162 -0
- package/build/src/backends/scalars.d.ts.map +1 -1
- package/build/src/backends/scalars.js +2 -1
- package/build/src/backends/shared.d.ts.map +1 -1
- package/build/src/backends/shared.js +9 -6
- package/build/src/binary-mapping.d.ts +32 -0
- package/build/src/binary-mapping.d.ts.map +1 -0
- package/build/src/binary-mapping.js +285 -0
- package/build/src/diagnostic.d.ts +36 -4
- package/build/src/diagnostic.d.ts.map +1 -1
- package/build/src/diagnostic.js +42 -3
- package/build/src/frontends/index.d.ts.map +1 -1
- package/build/src/frontends/index.js +5 -23
- package/build/src/frontends/python.d.ts +14 -0
- package/build/src/frontends/python.d.ts.map +1 -0
- package/build/src/frontends/python.js +615 -0
- package/build/src/frontends/scalars.d.ts.map +1 -1
- package/build/src/frontends/scalars.js +6 -1
- package/build/src/language-registry.d.ts +113 -0
- package/build/src/language-registry.d.ts.map +1 -0
- package/build/src/language-registry.js +372 -0
- package/build/src/mapping.js +3 -2
- package/build/src/semantic/location.d.ts +7 -0
- package/build/src/semantic/location.d.ts.map +1 -1
- package/build/src/semantic/location.js +10 -1
- package/build/src/semantic/provenance.js +3 -3
- package/build/src/semantic/types.d.ts +399 -2
- package/build/src/semantic/types.d.ts.map +1 -1
- package/build/src/semantic/types.js +110 -2
- package/build/src/subprocess.d.ts +29 -0
- package/build/src/subprocess.d.ts.map +1 -0
- package/build/src/subprocess.js +207 -0
- package/build/src/timeout.d.ts +8 -0
- package/build/src/timeout.d.ts.map +1 -0
- package/build/src/timeout.js +11 -0
- package/build/src/toolchains.d.ts +83 -0
- package/build/src/toolchains.d.ts.map +1 -0
- package/build/src/toolchains.js +413 -0
- package/docs/architecture.md +7 -3
- package/docs/language-support.md +25 -4
- package/docs/parser-qualification.md +70 -0
- package/docs/source-maps.md +31 -4
- package/docs/testing.md +21 -2
- package/index.js +109 -4
- package/package.json +4 -2
- package/src/acceptance.js +359 -0
- package/src/array.js +19 -0
- package/src/artifact-path.js +34 -0
- package/src/artifacts.js +420 -0
- package/src/backends/identifiers.js +9 -1
- package/src/backends/index.js +16 -32
- package/src/backends/python.js +175 -0
- package/src/backends/scalars.js +1 -0
- package/src/backends/shared.js +8 -5
- package/src/binary-mapping.js +305 -0
- package/src/diagnostic.js +34 -2
- package/src/frontends/index.js +5 -20
- package/src/frontends/python.js +689 -0
- package/src/frontends/scalars.js +5 -0
- package/src/language-registry.js +403 -0
- package/src/mapping.js +2 -1
- package/src/semantic/location.js +10 -0
- package/src/semantic/provenance.js +2 -2
- package/src/semantic/types.js +124 -1
- package/src/subprocess.js +203 -0
- package/src/timeout.js +12 -0
- package/src/toolchains.js +444 -0
- 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmluYXJ5LW1hcHBpbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYmluYXJ5LW1hcHBpbmcuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxZQUFZLENBQUE7QUFDdkMsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sb0JBQW9CLENBQUE7QUFDckQsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0saUJBQWlCLENBQUE7QUFDckQsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sd0JBQXdCLENBQUE7QUFFM0Q7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxLQUFLO0lBQ3JDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDO1FBQUUsa0JBQWtCLENBQUMsK0NBQStDLENBQUMsQ0FBQTtJQUM5RixNQUFNLEVBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUMsR0FBRyxLQUFLLENBQUE7SUFFeEMsT0FBTyxtQkFBbUIsQ0FBQztRQUN6QixnQkFBZ0IsRUFBRSxPQUFPO1FBQ3pCLFNBQVMsRUFBRSxFQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUM7UUFDN0IsTUFBTTtRQUNOLE1BQU0sRUFBRSx3QkFBd0I7UUFDaEMsT0FBTyxFQUFFLENBQUM7S0FDWCxDQUFDLENBQUE7QUFDSixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxVQUFVO0lBQ3pDLElBQUksQ0FBQztRQUNILE9BQU8sbUJBQW1CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFBO0lBQ3BELENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsSUFBSSxLQUFLLFlBQVkscUJBQXFCLElBQUksS0FBSyxDQUFDLElBQUksSUFBSSxzQkFBc0I7WUFBRSxNQUFNLEtBQUssQ0FBQTtRQUUvRixPQUFPLGtCQUFrQixDQUFDLGtDQUFrQyxFQUFFLEtBQUssQ0FBQyxDQUFBO0lBQ3RFLENBQUM7QUFDSCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxvQkFBb0IsQ0FBQyxPQUFPO0lBQzFDLE1BQU0sU0FBUyxHQUFHLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBRTlDLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQTtBQUM1RCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxTQUFTO0lBQzNDLElBQUksQ0FBQztRQUNILElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDO1lBQUUsa0JBQWtCLENBQUMsc0NBQXNDLENBQUMsQ0FBQTtRQUN6RixJQUFJLFNBQVMsQ0FBQyxNQUFNLElBQUksd0JBQXdCLElBQUksU0FBUyxDQUFDLE9BQU8sS0FBSyxDQUFDLElBQUksU0FBUyxDQUFDLGdCQUFnQixJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ3JILGtCQUFrQixDQUFDLCtFQUErRSxDQUFDLENBQUE7UUFDckcsQ0FBQztRQUNELElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDeEMsa0JBQWtCLENBQUMsdURBQXVELENBQUMsQ0FBQTtRQUM3RSxDQUFDO1FBQ0QsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUE7UUFFOUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUM7WUFDdkMsa0JBQWtCLENBQUMsdURBQXVELENBQUMsQ0FBQTtRQUM3RSxDQUFDO1FBQ0QsTUFBTSxVQUFVLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUE7UUFFakQsSUFBSSxPQUFPLFVBQVUsSUFBSSxRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxJQUFJLFVBQVUsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN6RixrQkFBa0IsQ0FBQyx3REFBd0QsQ0FBQyxDQUFBO1FBQzlFLENBQUM7UUFDRCxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUM7WUFBRSxrQkFBa0IsQ0FBQyxxREFBcUQsQ0FBQyxDQUFBO1FBQzlHLElBQUksV0FBVyxHQUFHLENBQUMsQ0FBQTtRQUNuQixpRUFBaUU7UUFDakUsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFBO1FBRWpCLEtBQUssSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDaEUsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQTtZQUVyQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUM7Z0JBQUUsa0JBQWtCLENBQUMsY0FBYyxLQUFLLGdCQUFnQixDQUFDLENBQUE7WUFDckgsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUE7WUFDL0IsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUE7WUFFbkMsSUFBSSxPQUFPLEtBQUssSUFBSSxRQUFRLElBQUksT0FBTyxHQUFHLElBQUksUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDO2dCQUNsSCxLQUFLLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxLQUFLLElBQUksR0FBRyxHQUFHLFVBQVUsRUFBRSxDQUFDO2dCQUNoRCxrQkFBa0IsQ0FBQyxjQUFjLEtBQUsseURBQXlELENBQUMsQ0FBQTtZQUNsRyxDQUFDO1lBQ0QsSUFBSSxLQUFLLEdBQUcsV0FBVztnQkFBRSxrQkFBa0IsQ0FBQyxjQUFjLEtBQUssK0NBQStDLENBQUMsQ0FBQTtZQUMvRyxXQUFXLEdBQUcsR0FBRyxDQUFBO1lBQ2pCLE1BQU0sTUFBTSxHQUFHLGNBQWMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLGNBQWMsS0FBSyxFQUFFLENBQUMsQ0FBQTtZQUNsRSxNQUFNLE1BQU0sR0FBRztnQkFDYixTQUFTLEVBQUUsRUFBQyxHQUFHLEVBQUUsS0FBSyxFQUFDO2dCQUN2QixNQUFNO2dCQUNOLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDcEQsR0FBRyxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUN4RCxHQUFHLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7YUFDakQsQ0FBQTtZQUVELE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDckIsQ0FBQztRQUNELE1BQU0sT0FBTyxHQUFHO1lBQ2QsZ0JBQWdCLEVBQUUsb0JBQW9CLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFDaEQsU0FBUyxFQUFFLEVBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUM7WUFDNUMsTUFBTTtZQUNOLE1BQU0sRUFBRSxvQkFBb0IsQ0FBQyxDQUFDLHdCQUF3QixDQUFDO1lBQ3ZELE9BQU8sRUFBRSxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNsQyxDQUFBO1FBRUQsT0FBTyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDNUIsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixJQUFJLEtBQUssWUFBWSxxQkFBcUIsSUFBSSxLQUFLLENBQUMsSUFBSSxJQUFJLHNCQUFzQjtZQUFFLE1BQU0sS0FBSyxDQUFBO1FBRS9GLE9BQU8sa0JBQWtCLENBQUMsaUNBQWlDLEVBQUUsS0FBSyxDQUFDLENBQUE7SUFDckUsQ0FBQztBQUNILENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQVMsY0FBYyxDQUFDLEtBQUssRUFBRSxLQUFLO0lBQ2xDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDO1FBQUUsa0JBQWtCLENBQUMsR0FBRyxLQUFLLHVCQUF1QixDQUFDLENBQUE7SUFFOUUsSUFBSSxLQUFLLENBQUMsSUFBSSxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQzlCLElBQUksT0FBTyxLQUFLLENBQUMsTUFBTSxJQUFJLFFBQVEsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUM7WUFDdkcsa0JBQWtCLENBQUMsR0FBRyxLQUFLLDZFQUE2RSxDQUFDLENBQUE7UUFDM0csQ0FBQztRQUNELDREQUE0RDtRQUM1RCxNQUFNLGNBQWMsR0FBRyxFQUFFLENBQUE7UUFFekIsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLEtBQUssQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNwRSxjQUFjLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxLQUFLLG1CQUFtQixLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUE7UUFDN0csQ0FBQztRQUVELE9BQU8sRUFBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTSxFQUFFLGNBQWMsRUFBQyxDQUFBO0lBQ2xFLENBQUM7SUFDRCxJQUFJLEtBQUssQ0FBQyxJQUFJLElBQUksUUFBUSxFQUFFLENBQUM7UUFDM0IsSUFBSSxPQUFPLEtBQUssQ0FBQyxRQUFRLElBQUksUUFBUSxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxJQUFJLENBQUM7WUFBRSxrQkFBa0IsQ0FBQyxHQUFHLEtBQUssMENBQTBDLENBQUMsQ0FBQTtRQUUzSSxPQUFPLEVBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVEsRUFBQyxDQUFBO0lBQ3RHLENBQUM7SUFDRCxJQUFJLEtBQUssQ0FBQyxJQUFJLElBQUksU0FBUyxFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQztZQUFFLGtCQUFrQixDQUFDLEdBQUcsS0FBSyx1Q0FBdUMsQ0FBQyxDQUFBO1FBQ2xJLDREQUE0RDtRQUM1RCxNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUE7UUFFbEIsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUM3RCxPQUFPLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxLQUFLLFdBQVcsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFBO1FBQ3ZGLENBQUM7UUFFRCxPQUFPLEVBQUMsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUMsQ0FBQTtJQUNuQyxDQUFDO0lBRUQsT0FBTyxrQkFBa0IsQ0FBQyxHQUFHLEtBQUssa0NBQWtDLENBQUMsQ0FBQTtBQUN2RSxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFTLHFCQUFxQixDQUFDLEtBQUssRUFBRSxLQUFLO0lBQ3pDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksT0FBTyxLQUFLLENBQUMsUUFBUSxJQUFJLFFBQVEsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUM3RixrQkFBa0IsQ0FBQyxHQUFHLEtBQUsscUNBQXFDLENBQUMsQ0FBQTtJQUNuRSxDQUFDO0lBQ0QsTUFBTSxNQUFNLEdBQUc7UUFDYixRQUFRLEVBQUUsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUM7UUFDakQsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRO1FBQ3hCLEdBQUcsZUFBZSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQztRQUNqRCxHQUFHLGVBQWUsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxLQUFLLENBQUM7UUFDckQsR0FBRyxlQUFlLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDO0tBQzlDLENBQUE7SUFFRCxPQUFPLE1BQU0sQ0FBQTtBQUNmLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQVMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLEtBQUs7SUFDcEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxPQUFPLEtBQUssQ0FBQyxRQUFRLElBQUksUUFBUSxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQzdGLGtCQUFrQixDQUFDLEdBQUcsS0FBSyx1Q0FBdUMsQ0FBQyxDQUFBO0lBQ3JFLENBQUM7SUFDRCxNQUFNLEtBQUssR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ3hDLE1BQU0sR0FBRyxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUE7SUFFcEMsSUFBSSxLQUFLLElBQUksU0FBUyxJQUFJLEdBQUcsSUFBSSxTQUFTLElBQUksR0FBRyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDN0csa0JBQWtCLENBQUMsR0FBRyxLQUFLLHVDQUF1QyxDQUFDLENBQUE7SUFDckUsQ0FBQztJQUVELE9BQU87UUFDTCxHQUFHO1FBQ0gsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRO1FBQ3hCLEtBQUs7S0FDTixDQUFBO0FBQ0gsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFTLGFBQWEsQ0FBQyxLQUFLO0lBQzFCLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDO1FBQUUsT0FBTyxTQUFTLENBQUE7SUFDM0MsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQTtJQUN2QixNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFBO0lBQzNCLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUE7SUFFM0IsSUFBSSxPQUFPLElBQUksSUFBSSxRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDO1FBQ3JFLE9BQU8sTUFBTSxJQUFJLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksTUFBTSxJQUFJLENBQUM7UUFDekUsT0FBTyxNQUFNLElBQUksUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxNQUFNLEdBQUcsQ0FBQztRQUFFLE9BQU8sU0FBUyxDQUFBO0lBRTVGLE9BQU8sRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBQyxDQUFBO0FBQy9CLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFTLGdCQUFnQixDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSztJQUM5QyxJQUFJLEtBQUssS0FBSyxTQUFTO1FBQUUsT0FBTyxFQUFFLENBQUE7SUFDbEMsSUFBSSxPQUFPLEtBQUssSUFBSSxRQUFRLElBQUksS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDO1FBQUUsa0JBQWtCLENBQUMsY0FBYyxLQUFLLG1CQUFtQixRQUFRLEdBQUcsQ0FBQyxDQUFBO0lBRXhILE9BQU8sRUFBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssRUFBQyxDQUFBO0FBQzVCLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFTLGVBQWUsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUs7SUFDN0MsSUFBSSxLQUFLLEtBQUssU0FBUztRQUFFLE9BQU8sRUFBRSxDQUFBO0lBQ2xDLElBQUksT0FBTyxLQUFLLElBQUksUUFBUSxJQUFJLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQztRQUFFLGtCQUFrQixDQUFDLEdBQUcsS0FBSyxtQkFBbUIsUUFBUSxHQUFHLENBQUMsQ0FBQTtJQUU3RyxPQUFPLEVBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxLQUFLLEVBQUMsQ0FBQTtBQUM1QixDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFTLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxLQUFLO0lBQ3hDLE1BQU0sSUFBSSxxQkFBcUIsQ0FBQztRQUM5QixLQUFLLEVBQUUsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTO1FBQ2pELElBQUksRUFBRSxzQkFBc0I7UUFDNUIsUUFBUSxFQUFFLFFBQVE7UUFDbEIsT0FBTztLQUNSLENBQUMsQ0FBQTtBQUNKLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxhQUFhLENBQUMsS0FBSztJQUMxQixPQUFPLE9BQU8sS0FBSyxJQUFJLFFBQVEsSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUE7QUFDL0gsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBUyxVQUFVLENBQUMsS0FBSztJQUN2QixJQUFJLENBQUMsS0FBSyxJQUFJLE9BQU8sS0FBSyxJQUFJLFFBQVEsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztRQUFFLE9BQU8sS0FBSyxDQUFBO0lBRTlFLEtBQUssTUFBTSxNQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7UUFBRSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUE7SUFFN0QsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFBO0FBQzdCLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxRQUFRLENBQUMsS0FBSztJQUNyQixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQUUsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQ3BELElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDO1FBQUUsT0FBTyxLQUFLLENBQUE7SUFFdkMsT0FBTyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFDaEcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQge2lzRGVuc2VBcnJheX0gZnJvbSBcIi4vYXJyYXkuanNcIlxuaW1wb3J0IHtpc1NhZmVBcnRpZmFjdFBhdGh9IGZyb20gXCIuL2FydGlmYWN0LXBhdGguanNcIlxuaW1wb3J0IHtTZW1hbnRpZm9sZERpYWdub3N0aWN9IGZyb20gXCIuL2RpYWdub3N0aWMuanNcIlxuaW1wb3J0IHtpc1NvdXJjZVJhbmdlT3JkZXJlZH0gZnJvbSBcIi4vc2VtYW50aWMvbG9jYXRpb24uanNcIlxuXG4vKipcbiAqIENyZWF0ZXMgYW5kIHZhbGlkYXRlcyBhbiBpbW11dGFibGUgYnl0ZS1jb29yZGluYXRlIHByb3ZlbmFuY2UgbWFwLlxuICogQHBhcmFtIHtvYmplY3R9IGlucHV0IC0gTWFwcGluZyBmaWVsZHMuXG4gKiBAcGFyYW0ge251bWJlcn0gaW5wdXQuYnl0ZUxlbmd0aCAtIEdlbmVyYXRlZCBhcnRpZmFjdCBieXRlIGxlbmd0aC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dC5wYXRoIC0gR2VuZXJhdGVkIGFydGlmYWN0IHBhdGguXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuR2VuZXJhdGVkQnl0ZVJhbmdlW119IGlucHV0LnJhbmdlcyAtIE9yZGVyZWQgYnl0ZSByYW5nZXMuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpZm9sZEJ5dGVNYXBwaW5nfSBWYWxpZGF0ZWQgbWFwcGluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUJ5dGVNYXBwaW5nKGlucHV0KSB7XG4gIGlmICghaXNQbGFpbk9iamVjdChpbnB1dCkpIGludmFsaWRCeXRlTWFwcGluZyhcIkJ5dGUgbWFwcGluZyBjb25zdHJ1Y3Rpb24gcmVxdWlyZXMgYW4gb2JqZWN0LlwiKVxuICBjb25zdCB7Ynl0ZUxlbmd0aCwgcGF0aCwgcmFuZ2VzfSA9IGlucHV0XG5cbiAgcmV0dXJuIGZpbmFsaXplQnl0ZU1hcHBpbmcoe1xuICAgIGNvb3JkaW5hdGVTeXN0ZW06IFwiYnl0ZXNcIixcbiAgICBnZW5lcmF0ZWQ6IHtieXRlTGVuZ3RoLCBwYXRofSxcbiAgICByYW5nZXMsXG4gICAgc2NoZW1hOiBcIlNlbWFudGlmb2xkQnl0ZU1hcHBpbmdcIixcbiAgICB2ZXJzaW9uOiAxXG4gIH0pXG59XG5cbi8qKlxuICogUGFyc2VzIHNlcmlhbGl6ZWQgYnl0ZS1jb29yZGluYXRlIHByb3ZlbmFuY2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gc2VyaWFsaXplZCAtIEpTT04gbWFwcGluZy5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGlmb2xkQnl0ZU1hcHBpbmd9IFZhbGlkYXRlZCBtYXBwaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VCeXRlTWFwcGluZyhzZXJpYWxpemVkKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGZpbmFsaXplQnl0ZU1hcHBpbmcoSlNPTi5wYXJzZShzZXJpYWxpemVkKSlcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBTZW1hbnRpZm9sZERpYWdub3N0aWMgJiYgZXJyb3IuY29kZSA9PSBcIklOVkFMSURfQllURV9NQVBQSU5HXCIpIHRocm93IGVycm9yXG5cbiAgICByZXR1cm4gaW52YWxpZEJ5dGVNYXBwaW5nKFwiQnl0ZSBtYXBwaW5nIG11c3QgYmUgdmFsaWQgSlNPTi5cIiwgZXJyb3IpXG4gIH1cbn1cblxuLyoqXG4gKiBTZXJpYWxpemVzIGEgdmFsaWRhdGVkIG1hcHBpbmcgd2l0aCBzdGFibGUgb2JqZWN0LWtleSBvcmRlcmluZy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpZm9sZEJ5dGVNYXBwaW5nfSBtYXBwaW5nIC0gQnl0ZSBtYXBwaW5nLlxuICogQHJldHVybnMge3N0cmluZ30gQ2Fub25pY2FsIEpTT04gd2l0aCB0cmFpbGluZyBMRi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ2lmeUJ5dGVNYXBwaW5nKG1hcHBpbmcpIHtcbiAgY29uc3QgdmFsaWRhdGVkID0gZmluYWxpemVCeXRlTWFwcGluZyhtYXBwaW5nKVxuXG4gIHJldHVybiBgJHtKU09OLnN0cmluZ2lmeShzb3J0SnNvbih2YWxpZGF0ZWQpLCBudWxsLCAyKX1cXG5gXG59XG5cbi8qKlxuICogVmFsaWRhdGVzIGFuIGV4aXN0aW5nIG1hcHBpbmcgYW5kIHJldHVybnMgYSBkZXRhY2hlZCBpbW11dGFibGUgdmFsdWUuXG4gKiBAcGFyYW0ge3Vua25vd259IGNhbmRpZGF0ZSAtIE1hcHBpbmcgY2FuZGlkYXRlLlxuICogQHJldHVybnMge2ltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWZvbGRCeXRlTWFwcGluZ30gVmFsaWRhdGVkIG1hcHBpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5hbGl6ZUJ5dGVNYXBwaW5nKGNhbmRpZGF0ZSkge1xuICB0cnkge1xuICAgIGlmICghaXNQbGFpbk9iamVjdChjYW5kaWRhdGUpKSBpbnZhbGlkQnl0ZU1hcHBpbmcoXCJCeXRlIG1hcHBpbmcgbXVzdCBiZSBhIHBsYWluIG9iamVjdC5cIilcbiAgICBpZiAoY2FuZGlkYXRlLnNjaGVtYSAhPSBcIlNlbWFudGlmb2xkQnl0ZU1hcHBpbmdcIiB8fCBjYW5kaWRhdGUudmVyc2lvbiAhPT0gMSB8fCBjYW5kaWRhdGUuY29vcmRpbmF0ZVN5c3RlbSAhPSBcImJ5dGVzXCIpIHtcbiAgICAgIGludmFsaWRCeXRlTWFwcGluZyhcIkJ5dGUgbWFwcGluZyByZXF1aXJlcyBTZW1hbnRpZm9sZEJ5dGVNYXBwaW5nIHZlcnNpb24gMSB3aXRoIGJ5dGUgY29vcmRpbmF0ZXMuXCIpXG4gICAgfVxuICAgIGlmICghaXNQbGFpbk9iamVjdChjYW5kaWRhdGUuZ2VuZXJhdGVkKSkge1xuICAgICAgaW52YWxpZEJ5dGVNYXBwaW5nKFwiQnl0ZSBtYXBwaW5nIHJlcXVpcmVzIGEgc2FmZSBnZW5lcmF0ZWQgYXJ0aWZhY3QgcGF0aC5cIilcbiAgICB9XG4gICAgY29uc3QgZ2VuZXJhdGVkUGF0aCA9IGNhbmRpZGF0ZS5nZW5lcmF0ZWQucGF0aFxuXG4gICAgaWYgKCFpc1NhZmVBcnRpZmFjdFBhdGgoZ2VuZXJhdGVkUGF0aCkpIHtcbiAgICAgIGludmFsaWRCeXRlTWFwcGluZyhcIkJ5dGUgbWFwcGluZyByZXF1aXJlcyBhIHNhZmUgZ2VuZXJhdGVkIGFydGlmYWN0IHBhdGguXCIpXG4gICAgfVxuICAgIGNvbnN0IGJ5dGVMZW5ndGggPSBjYW5kaWRhdGUuZ2VuZXJhdGVkLmJ5dGVMZW5ndGhcblxuICAgIGlmICh0eXBlb2YgYnl0ZUxlbmd0aCAhPSBcIm51bWJlclwiIHx8ICFOdW1iZXIuaXNTYWZlSW50ZWdlcihieXRlTGVuZ3RoKSB8fCBieXRlTGVuZ3RoIDwgMCkge1xuICAgICAgaW52YWxpZEJ5dGVNYXBwaW5nKFwiQnl0ZSBtYXBwaW5nIHJlcXVpcmVzIGEgbm9uLW5lZ2F0aXZlIHNhZmUgYnl0ZSBsZW5ndGguXCIpXG4gICAgfVxuICAgIGlmICghaXNEZW5zZUFycmF5KGNhbmRpZGF0ZS5yYW5nZXMpKSBpbnZhbGlkQnl0ZU1hcHBpbmcoXCJCeXRlIG1hcHBpbmcgcmFuZ2VzIG11c3QgYmUgYW4gb3JkZXJlZCBkZW5zZSBhcnJheS5cIilcbiAgICBsZXQgcHJldmlvdXNFbmQgPSAwXG4gICAgLyoqIEB0eXBlIHtpbXBvcnQoXCIuL3NlbWFudGljL3R5cGVzLmpzXCIpLkdlbmVyYXRlZEJ5dGVSYW5nZVtdfSAqL1xuICAgIGNvbnN0IHJhbmdlcyA9IFtdXG5cbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgY2FuZGlkYXRlLnJhbmdlcy5sZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICAgIGNvbnN0IHJhbmdlID0gY2FuZGlkYXRlLnJhbmdlc1tpbmRleF1cblxuICAgICAgaWYgKCFpc1BsYWluT2JqZWN0KHJhbmdlKSB8fCAhaXNQbGFpbk9iamVjdChyYW5nZS5nZW5lcmF0ZWQpKSBpbnZhbGlkQnl0ZU1hcHBpbmcoYEJ5dGUgcmFuZ2UgJHtpbmRleH0gaXMgbWFsZm9ybWVkLmApXG4gICAgICBjb25zdCBlbmQgPSByYW5nZS5nZW5lcmF0ZWQuZW5kXG4gICAgICBjb25zdCBzdGFydCA9IHJhbmdlLmdlbmVyYXRlZC5zdGFydFxuXG4gICAgICBpZiAodHlwZW9mIHN0YXJ0ICE9IFwibnVtYmVyXCIgfHwgdHlwZW9mIGVuZCAhPSBcIm51bWJlclwiIHx8ICFOdW1iZXIuaXNTYWZlSW50ZWdlcihzdGFydCkgfHwgIU51bWJlci5pc1NhZmVJbnRlZ2VyKGVuZCkgfHxcbiAgICAgICAgc3RhcnQgPCAwIHx8IGVuZCA8PSBzdGFydCB8fCBlbmQgPiBieXRlTGVuZ3RoKSB7XG4gICAgICAgIGludmFsaWRCeXRlTWFwcGluZyhgQnl0ZSByYW5nZSAke2luZGV4fSBtdXN0IGJlIGEgbm9uLWVtcHR5IGluLWJvdW5kcyBoYWxmLW9wZW4gaW50ZWdlciByYW5nZS5gKVxuICAgICAgfVxuICAgICAgaWYgKHN0YXJ0IDwgcHJldmlvdXNFbmQpIGludmFsaWRCeXRlTWFwcGluZyhgQnl0ZSByYW5nZSAke2luZGV4fSBpcyBvdXQgb2Ygb3JkZXIgb3Igb3ZlcmxhcHMgaXRzIHByZWRlY2Vzc29yLmApXG4gICAgICBwcmV2aW91c0VuZCA9IGVuZFxuICAgICAgY29uc3Qgb3JpZ2luID0gdmFsaWRhdGVPcmlnaW4ocmFuZ2Uub3JpZ2luLCBgQnl0ZSByYW5nZSAke2luZGV4fWApXG4gICAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICAgIGdlbmVyYXRlZDoge2VuZCwgc3RhcnR9LFxuICAgICAgICBvcmlnaW4sXG4gICAgICAgIC4uLihvcHRpb25hbElkZW50aXR5KHJhbmdlLm5vZGVJZCwgXCJub2RlSWRcIiwgaW5kZXgpKSxcbiAgICAgICAgLi4uKG9wdGlvbmFsSWRlbnRpdHkocmFuZ2Uuc3ltYm9sSWQsIFwic3ltYm9sSWRcIiwgaW5kZXgpKSxcbiAgICAgICAgLi4uKG9wdGlvbmFsSWRlbnRpdHkocmFuZ2Uucm9sZSwgXCJyb2xlXCIsIGluZGV4KSlcbiAgICAgIH1cblxuICAgICAgcmFuZ2VzLnB1c2gocmVzdWx0KVxuICAgIH1cbiAgICBjb25zdCBtYXBwaW5nID0ge1xuICAgICAgY29vcmRpbmF0ZVN5c3RlbTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiYnl0ZXNcIiksXG4gICAgICBnZW5lcmF0ZWQ6IHtieXRlTGVuZ3RoLCBwYXRoOiBnZW5lcmF0ZWRQYXRofSxcbiAgICAgIHJhbmdlcyxcbiAgICAgIHNjaGVtYTogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiU2VtYW50aWZvbGRCeXRlTWFwcGluZ1wiKSxcbiAgICAgIHZlcnNpb246IC8qKiBAdHlwZSB7Y29uc3R9ICovICgxKVxuICAgIH1cblxuICAgIHJldHVybiBkZWVwRnJlZXplKG1hcHBpbmcpXG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgU2VtYW50aWZvbGREaWFnbm9zdGljICYmIGVycm9yLmNvZGUgPT0gXCJJTlZBTElEX0JZVEVfTUFQUElOR1wiKSB0aHJvdyBlcnJvclxuXG4gICAgcmV0dXJuIGludmFsaWRCeXRlTWFwcGluZyhcIkJ5dGUgbWFwcGluZyB2YWxpZGF0aW9uIGZhaWxlZC5cIiwgZXJyb3IpXG4gIH1cbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgb25lIGNsb3NlZCBwcm92ZW5hbmNlIG9yaWdpbi5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBPcmlnaW4gY2FuZGlkYXRlLlxuICogQHBhcmFtIHtzdHJpbmd9IGxhYmVsIC0gRGlhZ25vc3RpYyByYW5nZSBsYWJlbC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljT3JpZ2lufSBEZXRhY2hlZCBvcmlnaW4uXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlT3JpZ2luKHZhbHVlLCBsYWJlbCkge1xuICBpZiAoIWlzUGxhaW5PYmplY3QodmFsdWUpKSBpbnZhbGlkQnl0ZU1hcHBpbmcoYCR7bGFiZWx9IHJlcXVpcmVzIHByb3ZlbmFuY2UuYClcblxuICBpZiAodmFsdWUua2luZCA9PSBcInN5bnRoZXRpY1wiKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZS5yZWFzb24gIT0gXCJzdHJpbmdcIiB8fCB2YWx1ZS5yZWFzb24ubGVuZ3RoID09IDAgfHwgIWlzRGVuc2VBcnJheSh2YWx1ZS5yZWxhdGVkT3JpZ2lucykpIHtcbiAgICAgIGludmFsaWRCeXRlTWFwcGluZyhgJHtsYWJlbH0gc3ludGhldGljIHByb3ZlbmFuY2UgcmVxdWlyZXMgYW4gZXhwbGljaXQgcmVhc29uIGFuZCByZWxhdGVkLW9yaWdpbiBhcnJheS5gKVxuICAgIH1cbiAgICAvKiogQHR5cGUge2ltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVsYXRlZE9yaWdpbltdfSAqL1xuICAgIGNvbnN0IHJlbGF0ZWRPcmlnaW5zID0gW11cblxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB2YWx1ZS5yZWxhdGVkT3JpZ2lucy5sZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICAgIHJlbGF0ZWRPcmlnaW5zLnB1c2godmFsaWRhdGVSZWxhdGVkT3JpZ2luKHZhbHVlLnJlbGF0ZWRPcmlnaW5zW2luZGV4XSwgYCR7bGFiZWx9IHJlbGF0ZWQgb3JpZ2luICR7aW5kZXh9YCkpXG4gICAgfVxuXG4gICAgcmV0dXJuIHtraW5kOiBcInN5bnRoZXRpY1wiLCByZWFzb246IHZhbHVlLnJlYXNvbiwgcmVsYXRlZE9yaWdpbnN9XG4gIH1cbiAgaWYgKHZhbHVlLmtpbmQgPT0gXCJzb3VyY2VcIikge1xuICAgIGlmICh0eXBlb2YgdmFsdWUuc291cmNlSWQgIT0gXCJzdHJpbmdcIiB8fCB2YWx1ZS5zb3VyY2VJZC5sZW5ndGggPT0gMCkgaW52YWxpZEJ5dGVNYXBwaW5nKGAke2xhYmVsfSBzb3VyY2UgcHJvdmVuYW5jZSByZXF1aXJlcyBhIHNvdXJjZSBJRC5gKVxuXG4gICAgcmV0dXJuIHtraW5kOiBcInNvdXJjZVwiLCBsb2NhdGlvbjogdmFsaWRhdGVMb2NhdGlvbih2YWx1ZS5sb2NhdGlvbiwgbGFiZWwpLCBzb3VyY2VJZDogdmFsdWUuc291cmNlSWR9XG4gIH1cbiAgaWYgKHZhbHVlLmtpbmQgPT0gXCJkZXJpdmVkXCIpIHtcbiAgICBpZiAoIWlzRGVuc2VBcnJheSh2YWx1ZS5vcmlnaW5zKSB8fCB2YWx1ZS5vcmlnaW5zLmxlbmd0aCA9PSAwKSBpbnZhbGlkQnl0ZU1hcHBpbmcoYCR7bGFiZWx9IGRlcml2ZWQgcHJvdmVuYW5jZSByZXF1aXJlcyBvcmlnaW5zLmApXG4gICAgLyoqIEB0eXBlIHtpbXBvcnQoXCIuL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlbGF0ZWRPcmlnaW5bXX0gKi9cbiAgICBjb25zdCBvcmlnaW5zID0gW11cblxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB2YWx1ZS5vcmlnaW5zLmxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgICAgb3JpZ2lucy5wdXNoKHZhbGlkYXRlUmVsYXRlZE9yaWdpbih2YWx1ZS5vcmlnaW5zW2luZGV4XSwgYCR7bGFiZWx9IG9yaWdpbiAke2luZGV4fWApKVxuICAgIH1cblxuICAgIHJldHVybiB7a2luZDogXCJkZXJpdmVkXCIsIG9yaWdpbnN9XG4gIH1cblxuICByZXR1cm4gaW52YWxpZEJ5dGVNYXBwaW5nKGAke2xhYmVsfSBoYXMgYW4gdW5rbm93biBwcm92ZW5hbmNlIGtpbmQuYClcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgb25lIHJlbGF0ZWQgc291cmNlIG9yaWdpbi5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBSZWxhdGVkLW9yaWdpbiBjYW5kaWRhdGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gbGFiZWwgLSBEaWFnbm9zdGljIHJhbmdlIGxhYmVsLlxuICogQHJldHVybnMge2ltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVsYXRlZE9yaWdpbn0gRGV0YWNoZWQgcmVsYXRlZCBvcmlnaW4uXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlUmVsYXRlZE9yaWdpbih2YWx1ZSwgbGFiZWwpIHtcbiAgaWYgKCFpc1BsYWluT2JqZWN0KHZhbHVlKSB8fCB0eXBlb2YgdmFsdWUuc291cmNlSWQgIT0gXCJzdHJpbmdcIiB8fCB2YWx1ZS5zb3VyY2VJZC5sZW5ndGggPT0gMCkge1xuICAgIGludmFsaWRCeXRlTWFwcGluZyhgJHtsYWJlbH0gcmVxdWlyZXMgYSBzb3VyY2UgSUQgYW5kIGxvY2F0aW9uLmApXG4gIH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIGxvY2F0aW9uOiB2YWxpZGF0ZUxvY2F0aW9uKHZhbHVlLmxvY2F0aW9uLCBsYWJlbCksXG4gICAgc291cmNlSWQ6IHZhbHVlLnNvdXJjZUlkLFxuICAgIC4uLm9wdGlvbmFsUmVsYXRlZCh2YWx1ZS5ub2RlSWQsIFwibm9kZUlkXCIsIGxhYmVsKSxcbiAgICAuLi5vcHRpb25hbFJlbGF0ZWQodmFsdWUuc3ltYm9sSWQsIFwic3ltYm9sSWRcIiwgbGFiZWwpLFxuICAgIC4uLm9wdGlvbmFsUmVsYXRlZCh2YWx1ZS5yb2xlLCBcInJvbGVcIiwgbGFiZWwpXG4gIH1cblxuICByZXR1cm4gcmVzdWx0XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIGEgVVRGLTE2IG9yaWdpbmFsIHNvdXJjZSBsb2NhdGlvbiBjYXJyaWVkIGJ5IGJ5dGUgcHJvdmVuYW5jZS5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBMb2NhdGlvbiBjYW5kaWRhdGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gbGFiZWwgLSBEaWFnbm9zdGljIHJhbmdlIGxhYmVsLlxuICogQHJldHVybnMge2ltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IERldGFjaGVkIHNvdXJjZSBsb2NhdGlvbi5cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVMb2NhdGlvbih2YWx1ZSwgbGFiZWwpIHtcbiAgaWYgKCFpc1BsYWluT2JqZWN0KHZhbHVlKSB8fCB0eXBlb2YgdmFsdWUuZmlsZW5hbWUgIT0gXCJzdHJpbmdcIiB8fCB2YWx1ZS5maWxlbmFtZS5sZW5ndGggPT0gMCkge1xuICAgIGludmFsaWRCeXRlTWFwcGluZyhgJHtsYWJlbH0gY29udGFpbnMgYW4gaW52YWxpZCBzb3VyY2UgbG9jYXRpb24uYClcbiAgfVxuICBjb25zdCBzdGFydCA9IHNuYXBzaG90UG9pbnQodmFsdWUuc3RhcnQpXG4gIGNvbnN0IGVuZCA9IHNuYXBzaG90UG9pbnQodmFsdWUuZW5kKVxuXG4gIGlmIChzdGFydCA9PSB1bmRlZmluZWQgfHwgZW5kID09IHVuZGVmaW5lZCB8fCBlbmQub2Zmc2V0IDwgc3RhcnQub2Zmc2V0IHx8ICFpc1NvdXJjZVJhbmdlT3JkZXJlZChzdGFydCwgZW5kKSkge1xuICAgIGludmFsaWRCeXRlTWFwcGluZyhgJHtsYWJlbH0gY29udGFpbnMgYW4gaW52YWxpZCBzb3VyY2UgbG9jYXRpb24uYClcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZW5kLFxuICAgIGZpbGVuYW1lOiB2YWx1ZS5maWxlbmFtZSxcbiAgICBzdGFydFxuICB9XG59XG5cbi8qKlxuICogU25hcHNob3RzIG9uZSB2YWxpZCBVVEYtMTYgc291cmNlIHBvaW50IHdpdGhvdXQgcmV0YWluaW5nIHVuZGVjbGFyZWQgZmllbGRzLlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIENhbmRpZGF0ZSBwb2ludC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZVBvaW50IHwgdW5kZWZpbmVkfSBDYW5vbmljYWwgcG9pbnQgd2hlbiB2YWxpZC5cbiAqL1xuZnVuY3Rpb24gc25hcHNob3RQb2ludCh2YWx1ZSkge1xuICBpZiAoIWlzUGxhaW5PYmplY3QodmFsdWUpKSByZXR1cm4gdW5kZWZpbmVkXG4gIGNvbnN0IGxpbmUgPSB2YWx1ZS5saW5lXG4gIGNvbnN0IGNvbHVtbiA9IHZhbHVlLmNvbHVtblxuICBjb25zdCBvZmZzZXQgPSB2YWx1ZS5vZmZzZXRcblxuICBpZiAodHlwZW9mIGxpbmUgIT0gXCJudW1iZXJcIiB8fCAhTnVtYmVyLmlzU2FmZUludGVnZXIobGluZSkgfHwgbGluZSA8PSAwIHx8XG4gICAgdHlwZW9mIGNvbHVtbiAhPSBcIm51bWJlclwiIHx8ICFOdW1iZXIuaXNTYWZlSW50ZWdlcihjb2x1bW4pIHx8IGNvbHVtbiA8PSAwIHx8XG4gICAgdHlwZW9mIG9mZnNldCAhPSBcIm51bWJlclwiIHx8ICFOdW1iZXIuaXNTYWZlSW50ZWdlcihvZmZzZXQpIHx8IG9mZnNldCA8IDApIHJldHVybiB1bmRlZmluZWRcblxuICByZXR1cm4ge2NvbHVtbiwgbGluZSwgb2Zmc2V0fVxufVxuXG4vKipcbiAqIFZhbGlkYXRlcyBhbiBvcHRpb25hbCBieXRlLXJhbmdlIGlkZW50aXR5LlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIENhbmRpZGF0ZSBpZGVudGl0eS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSAtIFByb3BlcnR5IG5hbWUuXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXggLSBCeXRlLXJhbmdlIGluZGV4LlxuICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIHN0cmluZz59IFByZXNlbnQgaWRlbnRpdHkgb3IgYW4gZW1wdHkgcmVjb3JkLlxuICovXG5mdW5jdGlvbiBvcHRpb25hbElkZW50aXR5KHZhbHVlLCBwcm9wZXJ0eSwgaW5kZXgpIHtcbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybiB7fVxuICBpZiAodHlwZW9mIHZhbHVlICE9IFwic3RyaW5nXCIgfHwgdmFsdWUubGVuZ3RoID09IDApIGludmFsaWRCeXRlTWFwcGluZyhgQnl0ZSByYW5nZSAke2luZGV4fSBoYXMgYW4gaW52YWxpZCAke3Byb3BlcnR5fS5gKVxuXG4gIHJldHVybiB7W3Byb3BlcnR5XTogdmFsdWV9XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIGFuIG9wdGlvbmFsIHJlbGF0ZWQtb3JpZ2luIGlkZW50aXR5LlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIENhbmRpZGF0ZSBpZGVudGl0eS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eSAtIFByb3BlcnR5IG5hbWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gbGFiZWwgLSBEaWFnbm9zdGljIHJhbmdlIGxhYmVsLlxuICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIHN0cmluZz59IFByZXNlbnQgaWRlbnRpdHkgb3IgYW4gZW1wdHkgcmVjb3JkLlxuICovXG5mdW5jdGlvbiBvcHRpb25hbFJlbGF0ZWQodmFsdWUsIHByb3BlcnR5LCBsYWJlbCkge1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHt9XG4gIGlmICh0eXBlb2YgdmFsdWUgIT0gXCJzdHJpbmdcIiB8fCB2YWx1ZS5sZW5ndGggPT0gMCkgaW52YWxpZEJ5dGVNYXBwaW5nKGAke2xhYmVsfSBoYXMgYW4gaW52YWxpZCAke3Byb3BlcnR5fS5gKVxuXG4gIHJldHVybiB7W3Byb3BlcnR5XTogdmFsdWV9XG59XG5cbi8qKlxuICogVGhyb3dzIGEgbm9ybWFsaXplZCBieXRlLW1hcHBpbmcgZGlhZ25vc3RpYy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIC0gRmFpbHVyZSBkZXRhaWwuXG4gKiBAcGFyYW0ge3Vua25vd259IFtlcnJvcl0gLSBQcmVzZXJ2ZWQgdmFsaWRhdGlvbiBjYXVzZS5cbiAqIEByZXR1cm5zIHtuZXZlcn0gQWx3YXlzIHRocm93cy5cbiAqL1xuZnVuY3Rpb24gaW52YWxpZEJ5dGVNYXBwaW5nKG1lc3NhZ2UsIGVycm9yKSB7XG4gIHRocm93IG5ldyBTZW1hbnRpZm9sZERpYWdub3N0aWMoe1xuICAgIGNhdXNlOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IgOiB1bmRlZmluZWQsXG4gICAgY29kZTogXCJJTlZBTElEX0JZVEVfTUFQUElOR1wiLFxuICAgIGxhbmd1YWdlOiBcImJpbmFyeVwiLFxuICAgIG1lc3NhZ2VcbiAgfSlcbn1cblxuLyoqXG4gKiBDaGVja3MgZm9yIGFuIG9yZGluYXJ5IHN0cmluZy1rZXllZCBvYmplY3QuXG4gKiBAcGFyYW0ge3Vua25vd259IHZhbHVlIC0gQ2FuZGlkYXRlIHZhbHVlLlxuICogQHJldHVybnMge3ZhbHVlIGlzIFJlY29yZDxzdHJpbmcsIHVua25vd24+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:
|
|
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 {
|
|
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:
|
|
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;
|
|
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"}
|
package/build/src/diagnostic.js
CHANGED
|
@@ -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 {
|
|
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
|
-
|
|
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":"
|
|
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 {
|
|
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
|
-
|
|
19
|
-
|
|
20
|
-
|
|
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,
|
|
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"}
|