semantifold 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +15 -0
- package/README.md +71 -0
- package/build/index.d.ts +54 -0
- package/build/index.d.ts.map +1 -0
- package/build/index.js +45 -0
- package/build/src/backends/identifiers.d.ts +19 -0
- package/build/src/backends/identifiers.d.ts.map +1 -0
- package/build/src/backends/identifiers.js +93 -0
- package/build/src/backends/index.d.ts +35 -0
- package/build/src/backends/index.d.ts.map +1 -0
- package/build/src/backends/index.js +149 -0
- package/build/src/backends/java.d.ts +8 -0
- package/build/src/backends/java.d.ts.map +1 -0
- package/build/src/backends/java.js +172 -0
- package/build/src/backends/javascript.d.ts +8 -0
- package/build/src/backends/javascript.d.ts.map +1 -0
- package/build/src/backends/javascript.js +173 -0
- package/build/src/backends/php.d.ts +8 -0
- package/build/src/backends/php.d.ts.map +1 -0
- package/build/src/backends/php.js +175 -0
- package/build/src/backends/ruby.d.ts +8 -0
- package/build/src/backends/ruby.d.ts.map +1 -0
- package/build/src/backends/ruby.js +155 -0
- package/build/src/backends/scalars.d.ts +15 -0
- package/build/src/backends/scalars.d.ts.map +1 -0
- package/build/src/backends/scalars.js +138 -0
- package/build/src/backends/shared.d.ts +26 -0
- package/build/src/backends/shared.d.ts.map +1 -0
- package/build/src/backends/shared.js +424 -0
- package/build/src/backends/typescript.d.ts +8 -0
- package/build/src/backends/typescript.d.ts.map +1 -0
- package/build/src/backends/typescript.js +160 -0
- package/build/src/backends/writer.d.ts +87 -0
- package/build/src/backends/writer.d.ts.map +1 -0
- package/build/src/backends/writer.js +207 -0
- package/build/src/diagnostic.d.ts +67 -0
- package/build/src/diagnostic.d.ts.map +1 -0
- package/build/src/diagnostic.js +96 -0
- package/build/src/frontends/index.d.ts +14 -0
- package/build/src/frontends/index.d.ts.map +1 -0
- package/build/src/frontends/index.js +36 -0
- package/build/src/frontends/java.d.ts +12 -0
- package/build/src/frontends/java.d.ts.map +1 -0
- package/build/src/frontends/java.js +630 -0
- package/build/src/frontends/javascript-typescript.d.ts +19 -0
- package/build/src/frontends/javascript-typescript.d.ts.map +1 -0
- package/build/src/frontends/javascript-typescript.js +633 -0
- package/build/src/frontends/php.d.ts +12 -0
- package/build/src/frontends/php.d.ts.map +1 -0
- package/build/src/frontends/php.js +523 -0
- package/build/src/frontends/ruby.d.ts +12 -0
- package/build/src/frontends/ruby.d.ts.map +1 -0
- package/build/src/frontends/ruby.js +515 -0
- package/build/src/frontends/scalars.d.ts +19 -0
- package/build/src/frontends/scalars.d.ts.map +1 -0
- package/build/src/frontends/scalars.js +71 -0
- package/build/src/mapping.d.ts +160 -0
- package/build/src/mapping.d.ts.map +1 -0
- package/build/src/mapping.js +1120 -0
- package/build/src/semantic/location.d.ts +61 -0
- package/build/src/semantic/location.d.ts.map +1 -0
- package/build/src/semantic/location.js +142 -0
- package/build/src/semantic/operators.d.ts +16 -0
- package/build/src/semantic/operators.d.ts.map +1 -0
- package/build/src/semantic/operators.js +24 -0
- package/build/src/semantic/provenance.d.ts +74 -0
- package/build/src/semantic/provenance.d.ts.map +1 -0
- package/build/src/semantic/provenance.js +577 -0
- package/build/src/semantic/scalars.d.ts +19 -0
- package/build/src/semantic/scalars.d.ts.map +1 -0
- package/build/src/semantic/scalars.js +40 -0
- package/build/src/semantic/types.d.ts +1003 -0
- package/build/src/semantic/types.d.ts.map +1 -0
- package/build/src/semantic/types.js +279 -0
- package/build/src/semantic/validate.d.ts +60 -0
- package/build/src/semantic/validate.d.ts.map +1 -0
- package/build/src/semantic/validate.js +472 -0
- package/docs/architecture.md +39 -0
- package/docs/coding-standards.md +7 -0
- package/docs/goals.md +7 -0
- package/docs/language-support.md +69 -0
- package/docs/plans/2026-09-02-initial-toolchain.md +54 -0
- package/docs/source-maps.md +134 -0
- package/docs/testing.md +25 -0
- package/index.js +63 -0
- package/package.json +69 -0
- package/src/backends/identifiers.js +101 -0
- package/src/backends/index.js +159 -0
- package/src/backends/java.js +182 -0
- package/src/backends/javascript.js +184 -0
- package/src/backends/php.js +184 -0
- package/src/backends/ruby.js +163 -0
- package/src/backends/scalars.js +120 -0
- package/src/backends/shared.js +456 -0
- package/src/backends/typescript.js +168 -0
- package/src/backends/writer.js +224 -0
- package/src/diagnostic.js +103 -0
- package/src/frontends/index.js +36 -0
- package/src/frontends/java.js +735 -0
- package/src/frontends/javascript-typescript.js +718 -0
- package/src/frontends/php.js +593 -0
- package/src/frontends/ruby.js +622 -0
- package/src/frontends/scalars.js +77 -0
- package/src/mapping.js +1260 -0
- package/src/semantic/location.js +154 -0
- package/src/semantic/operators.js +28 -0
- package/src/semantic/provenance.js +629 -0
- package/src/semantic/scalars.js +44 -0
- package/src/semantic/types.js +319 -0
- package/src/semantic/validate.js +529 -0
- package/tsconfig.json +16 -0
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
// @ts-check
|
|
2
|
+
/** A clear parser, semantic, or backend capability diagnostic. */
|
|
3
|
+
export class SemantifoldDiagnostic extends Error {
|
|
4
|
+
/**
|
|
5
|
+
* Creates a diagnostic.
|
|
6
|
+
* @param {object} options - Diagnostic fields.
|
|
7
|
+
* @param {string} options.code - Stable diagnostic code.
|
|
8
|
+
* @param {string} options.message - Human-readable message.
|
|
9
|
+
* @param {import("./semantic/types.js").SemanticLanguage} options.language - Related language.
|
|
10
|
+
* @param {import("./semantic/types.js").SourceLocation | undefined} [options.location] - Related location.
|
|
11
|
+
* @param {import("./semantic/types.js").SourceLocation | undefined} [options.generatedLocation] - Pre-remapping generated location.
|
|
12
|
+
* @param {Error | undefined} [options.cause] - Preserved parser error.
|
|
13
|
+
*/
|
|
14
|
+
constructor({ cause, code, generatedLocation, language, location, message }) {
|
|
15
|
+
const locationText = location ? ` at ${location.filename}:${location.start.line}:${location.start.column}` : "";
|
|
16
|
+
super(`[${code}] ${language}${locationText}: ${message}`, cause ? { cause } : undefined);
|
|
17
|
+
this.name = "SemantifoldDiagnostic";
|
|
18
|
+
this.code = code;
|
|
19
|
+
this.detail = message;
|
|
20
|
+
this.generatedLocation = generatedLocation;
|
|
21
|
+
this.language = language;
|
|
22
|
+
this.location = location;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Throws a normalized parser diagnostic while preserving the parser error.
|
|
27
|
+
* @param {import("./semantic/types.js").SemanticLanguage} language - Frontend language.
|
|
28
|
+
* @param {unknown} error - Opaque parser error, narrowed immediately.
|
|
29
|
+
* @returns {never} Always throws.
|
|
30
|
+
*/
|
|
31
|
+
export function parseFailure(language, error) {
|
|
32
|
+
const cause = error instanceof Error ? error : new Error(String(error));
|
|
33
|
+
throw new SemantifoldDiagnostic({
|
|
34
|
+
cause,
|
|
35
|
+
code: "PARSE_ERROR",
|
|
36
|
+
language,
|
|
37
|
+
message: cause.message
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Throws an unsupported-syntax diagnostic.
|
|
42
|
+
* @param {import("./semantic/types.js").SemanticLanguage} language - Frontend language.
|
|
43
|
+
* @param {string} syntax - Parser syntax kind.
|
|
44
|
+
* @param {import("./semantic/types.js").SourceLocation | undefined} location - Source location.
|
|
45
|
+
* @returns {never} Always throws.
|
|
46
|
+
*/
|
|
47
|
+
export function unsupportedSyntax(language, syntax, location) {
|
|
48
|
+
throw new SemantifoldDiagnostic({
|
|
49
|
+
code: "UNSUPPORTED_SYNTAX",
|
|
50
|
+
language,
|
|
51
|
+
location,
|
|
52
|
+
message: `Syntax '${syntax}' is outside the implemented semantic subset.`
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Throws a missing-type diagnostic.
|
|
57
|
+
* @param {import("./semantic/types.js").SemanticLanguage} language - Frontend language.
|
|
58
|
+
* @param {string} subject - Untyped subject.
|
|
59
|
+
* @param {import("./semantic/types.js").SourceLocation | undefined} location - Source location.
|
|
60
|
+
* @returns {never} Always throws.
|
|
61
|
+
*/
|
|
62
|
+
export function missingType(language, subject, location) {
|
|
63
|
+
throw new SemantifoldDiagnostic({
|
|
64
|
+
code: "MISSING_TYPE",
|
|
65
|
+
language,
|
|
66
|
+
location,
|
|
67
|
+
message: `${subject} requires an explicit supported scalar type: integer, boolean, or string.`
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Throws a language-neutral semantic diagnostic discovered after adaptation.
|
|
72
|
+
* @param {import("./semantic/types.js").SemanticLanguage} language - Source language.
|
|
73
|
+
* @param {string} code - Stable semantic diagnostic code.
|
|
74
|
+
* @param {string} detail - Human-readable semantic failure.
|
|
75
|
+
* @param {import("./semantic/types.js").SourceLocation | undefined} location - Source location.
|
|
76
|
+
* @returns {never} Always throws.
|
|
77
|
+
*/
|
|
78
|
+
export function semanticFailure(language, code, detail, location) {
|
|
79
|
+
throw new SemantifoldDiagnostic({ code, language, location, message: detail });
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Throws an unsupported backend-capability diagnostic.
|
|
83
|
+
* @param {import("./semantic/types.js").SemanticLanguage} language - Backend language.
|
|
84
|
+
* @param {string} capability - Unsupported semantic capability.
|
|
85
|
+
* @param {import("./semantic/types.js").SourceLocation | undefined} location - Semantic source location.
|
|
86
|
+
* @returns {never} Always throws.
|
|
87
|
+
*/
|
|
88
|
+
export function unsupportedCapability(language, capability, location) {
|
|
89
|
+
throw new SemantifoldDiagnostic({
|
|
90
|
+
code: "UNSUPPORTED_CAPABILITY",
|
|
91
|
+
language,
|
|
92
|
+
location,
|
|
93
|
+
message: `Backend cannot emit semantic capability '${capability}'.`
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhZ25vc3RpYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kaWFnbm9zdGljLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixrRUFBa0U7QUFDbEUsTUFBTSxPQUFPLHFCQUFzQixTQUFRLEtBQUs7SUFDOUM7Ozs7Ozs7OztPQVNHO0lBQ0gsWUFBWSxFQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUM7UUFDdkUsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxPQUFPLFFBQVEsQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO1FBRS9HLEtBQUssQ0FBQyxJQUFJLElBQUksS0FBSyxRQUFRLEdBQUcsWUFBWSxLQUFLLE9BQU8sRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBQyxLQUFLLEVBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUE7UUFDdEYsSUFBSSxDQUFDLElBQUksR0FBRyx1QkFBdUIsQ0FBQTtRQUNuQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQTtRQUNoQixJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQTtRQUNyQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsaUJBQWlCLENBQUE7UUFDMUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUE7UUFDeEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUE7SUFDMUIsQ0FBQztDQUNGO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsWUFBWSxDQUFDLFFBQVEsRUFBRSxLQUFLO0lBQzFDLE1BQU0sS0FBSyxHQUFHLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7SUFFdkUsTUFBTSxJQUFJLHFCQUFxQixDQUFDO1FBQzlCLEtBQUs7UUFDTCxJQUFJLEVBQUUsYUFBYTtRQUNuQixRQUFRO1FBQ1IsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO0tBQ3ZCLENBQUMsQ0FBQTtBQUNKLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxRQUFRO0lBQzFELE1BQU0sSUFBSSxxQkFBcUIsQ0FBQztRQUM5QixJQUFJLEVBQUUsb0JBQW9CO1FBQzFCLFFBQVE7UUFDUixRQUFRO1FBQ1IsT0FBTyxFQUFFLFdBQVcsTUFBTSwrQ0FBK0M7S0FDMUUsQ0FBQyxDQUFBO0FBQ0osQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxXQUFXLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRO0lBQ3JELE1BQU0sSUFBSSxxQkFBcUIsQ0FBQztRQUM5QixJQUFJLEVBQUUsY0FBYztRQUNwQixRQUFRO1FBQ1IsUUFBUTtRQUNSLE9BQU8sRUFBRSxHQUFHLE9BQU8sMkVBQTJFO0tBQy9GLENBQUMsQ0FBQTtBQUNKLENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLGVBQWUsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxRQUFRO0lBQzlELE1BQU0sSUFBSSxxQkFBcUIsQ0FBQyxFQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUMsQ0FBQyxDQUFBO0FBQzlFLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUscUJBQXFCLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxRQUFRO0lBQ2xFLE1BQU0sSUFBSSxxQkFBcUIsQ0FBQztRQUM5QixJQUFJLEVBQUUsd0JBQXdCO1FBQzlCLFFBQVE7UUFDUixRQUFRO1FBQ1IsT0FBTyxFQUFFLDRDQUE0QyxVQUFVLElBQUk7S0FDcEUsQ0FBQyxDQUFBO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG4vKiogQSBjbGVhciBwYXJzZXIsIHNlbWFudGljLCBvciBiYWNrZW5kIGNhcGFiaWxpdHkgZGlhZ25vc3RpYy4gKi9cbmV4cG9ydCBjbGFzcyBTZW1hbnRpZm9sZERpYWdub3N0aWMgZXh0ZW5kcyBFcnJvciB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgZGlhZ25vc3RpYy5cbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnMgLSBEaWFnbm9zdGljIGZpZWxkcy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMuY29kZSAtIFN0YWJsZSBkaWFnbm9zdGljIGNvZGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25zLm1lc3NhZ2UgLSBIdW1hbi1yZWFkYWJsZSBtZXNzYWdlLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNMYW5ndWFnZX0gb3B0aW9ucy5sYW5ndWFnZSAtIFJlbGF0ZWQgbGFuZ3VhZ2UuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiB8IHVuZGVmaW5lZH0gW29wdGlvbnMubG9jYXRpb25dIC0gUmVsYXRlZCBsb2NhdGlvbi5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uIHwgdW5kZWZpbmVkfSBbb3B0aW9ucy5nZW5lcmF0ZWRMb2NhdGlvbl0gLSBQcmUtcmVtYXBwaW5nIGdlbmVyYXRlZCBsb2NhdGlvbi5cbiAgICogQHBhcmFtIHtFcnJvciB8IHVuZGVmaW5lZH0gW29wdGlvbnMuY2F1c2VdIC0gUHJlc2VydmVkIHBhcnNlciBlcnJvci5cbiAgICovXG4gIGNvbnN0cnVjdG9yKHtjYXVzZSwgY29kZSwgZ2VuZXJhdGVkTG9jYXRpb24sIGxhbmd1YWdlLCBsb2NhdGlvbiwgbWVzc2FnZX0pIHtcbiAgICBjb25zdCBsb2NhdGlvblRleHQgPSBsb2NhdGlvbiA/IGAgYXQgJHtsb2NhdGlvbi5maWxlbmFtZX06JHtsb2NhdGlvbi5zdGFydC5saW5lfToke2xvY2F0aW9uLnN0YXJ0LmNvbHVtbn1gIDogXCJcIlxuXG4gICAgc3VwZXIoYFske2NvZGV9XSAke2xhbmd1YWdlfSR7bG9jYXRpb25UZXh0fTogJHttZXNzYWdlfWAsIGNhdXNlID8ge2NhdXNlfSA6IHVuZGVmaW5lZClcbiAgICB0aGlzLm5hbWUgPSBcIlNlbWFudGlmb2xkRGlhZ25vc3RpY1wiXG4gICAgdGhpcy5jb2RlID0gY29kZVxuICAgIHRoaXMuZGV0YWlsID0gbWVzc2FnZVxuICAgIHRoaXMuZ2VuZXJhdGVkTG9jYXRpb24gPSBnZW5lcmF0ZWRMb2NhdGlvblxuICAgIHRoaXMubGFuZ3VhZ2UgPSBsYW5ndWFnZVxuICAgIHRoaXMubG9jYXRpb24gPSBsb2NhdGlvblxuICB9XG59XG5cbi8qKlxuICogVGhyb3dzIGEgbm9ybWFsaXplZCBwYXJzZXIgZGlhZ25vc3RpYyB3aGlsZSBwcmVzZXJ2aW5nIHRoZSBwYXJzZXIgZXJyb3IuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNMYW5ndWFnZX0gbGFuZ3VhZ2UgLSBGcm9udGVuZCBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7dW5rbm93bn0gZXJyb3IgLSBPcGFxdWUgcGFyc2VyIGVycm9yLCBuYXJyb3dlZCBpbW1lZGlhdGVseS5cbiAqIEByZXR1cm5zIHtuZXZlcn0gQWx3YXlzIHRocm93cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRmFpbHVyZShsYW5ndWFnZSwgZXJyb3IpIHtcbiAgY29uc3QgY2F1c2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IgOiBuZXcgRXJyb3IoU3RyaW5nKGVycm9yKSlcblxuICB0aHJvdyBuZXcgU2VtYW50aWZvbGREaWFnbm9zdGljKHtcbiAgICBjYXVzZSxcbiAgICBjb2RlOiBcIlBBUlNFX0VSUk9SXCIsXG4gICAgbGFuZ3VhZ2UsXG4gICAgbWVzc2FnZTogY2F1c2UubWVzc2FnZVxuICB9KVxufVxuXG4vKipcbiAqIFRocm93cyBhbiB1bnN1cHBvcnRlZC1zeW50YXggZGlhZ25vc3RpYy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0xhbmd1YWdlfSBsYW5ndWFnZSAtIEZyb250ZW5kIGxhbmd1YWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IHN5bnRheCAtIFBhcnNlciBzeW50YXgga2luZC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiB8IHVuZGVmaW5lZH0gbG9jYXRpb24gLSBTb3VyY2UgbG9jYXRpb24uXG4gKiBAcmV0dXJucyB7bmV2ZXJ9IEFsd2F5cyB0aHJvd3MuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bnN1cHBvcnRlZFN5bnRheChsYW5ndWFnZSwgc3ludGF4LCBsb2NhdGlvbikge1xuICB0aHJvdyBuZXcgU2VtYW50aWZvbGREaWFnbm9zdGljKHtcbiAgICBjb2RlOiBcIlVOU1VQUE9SVEVEX1NZTlRBWFwiLFxuICAgIGxhbmd1YWdlLFxuICAgIGxvY2F0aW9uLFxuICAgIG1lc3NhZ2U6IGBTeW50YXggJyR7c3ludGF4fScgaXMgb3V0c2lkZSB0aGUgaW1wbGVtZW50ZWQgc2VtYW50aWMgc3Vic2V0LmBcbiAgfSlcbn1cblxuLyoqXG4gKiBUaHJvd3MgYSBtaXNzaW5nLXR5cGUgZGlhZ25vc3RpYy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0xhbmd1YWdlfSBsYW5ndWFnZSAtIEZyb250ZW5kIGxhbmd1YWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IHN1YmplY3QgLSBVbnR5cGVkIHN1YmplY3QuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24gfCB1bmRlZmluZWR9IGxvY2F0aW9uIC0gU291cmNlIGxvY2F0aW9uLlxuICogQHJldHVybnMge25ldmVyfSBBbHdheXMgdGhyb3dzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWlzc2luZ1R5cGUobGFuZ3VhZ2UsIHN1YmplY3QsIGxvY2F0aW9uKSB7XG4gIHRocm93IG5ldyBTZW1hbnRpZm9sZERpYWdub3N0aWMoe1xuICAgIGNvZGU6IFwiTUlTU0lOR19UWVBFXCIsXG4gICAgbGFuZ3VhZ2UsXG4gICAgbG9jYXRpb24sXG4gICAgbWVzc2FnZTogYCR7c3ViamVjdH0gcmVxdWlyZXMgYW4gZXhwbGljaXQgc3VwcG9ydGVkIHNjYWxhciB0eXBlOiBpbnRlZ2VyLCBib29sZWFuLCBvciBzdHJpbmcuYFxuICB9KVxufVxuXG4vKipcbiAqIFRocm93cyBhIGxhbmd1YWdlLW5ldXRyYWwgc2VtYW50aWMgZGlhZ25vc3RpYyBkaXNjb3ZlcmVkIGFmdGVyIGFkYXB0YXRpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNMYW5ndWFnZX0gbGFuZ3VhZ2UgLSBTb3VyY2UgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gY29kZSAtIFN0YWJsZSBzZW1hbnRpYyBkaWFnbm9zdGljIGNvZGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZGV0YWlsIC0gSHVtYW4tcmVhZGFibGUgc2VtYW50aWMgZmFpbHVyZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiB8IHVuZGVmaW5lZH0gbG9jYXRpb24gLSBTb3VyY2UgbG9jYXRpb24uXG4gKiBAcmV0dXJucyB7bmV2ZXJ9IEFsd2F5cyB0aHJvd3MuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZW1hbnRpY0ZhaWx1cmUobGFuZ3VhZ2UsIGNvZGUsIGRldGFpbCwgbG9jYXRpb24pIHtcbiAgdGhyb3cgbmV3IFNlbWFudGlmb2xkRGlhZ25vc3RpYyh7Y29kZSwgbGFuZ3VhZ2UsIGxvY2F0aW9uLCBtZXNzYWdlOiBkZXRhaWx9KVxufVxuXG4vKipcbiAqIFRocm93cyBhbiB1bnN1cHBvcnRlZCBiYWNrZW5kLWNhcGFiaWxpdHkgZGlhZ25vc3RpYy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0xhbmd1YWdlfSBsYW5ndWFnZSAtIEJhY2tlbmQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gY2FwYWJpbGl0eSAtIFVuc3VwcG9ydGVkIHNlbWFudGljIGNhcGFiaWxpdHkuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24gfCB1bmRlZmluZWR9IGxvY2F0aW9uIC0gU2VtYW50aWMgc291cmNlIGxvY2F0aW9uLlxuICogQHJldHVybnMge25ldmVyfSBBbHdheXMgdGhyb3dzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBjYXBhYmlsaXR5LCBsb2NhdGlvbikge1xuICB0aHJvdyBuZXcgU2VtYW50aWZvbGREaWFnbm9zdGljKHtcbiAgICBjb2RlOiBcIlVOU1VQUE9SVEVEX0NBUEFCSUxJVFlcIixcbiAgICBsYW5ndWFnZSxcbiAgICBsb2NhdGlvbixcbiAgICBtZXNzYWdlOiBgQmFja2VuZCBjYW5ub3QgZW1pdCBzZW1hbnRpYyBjYXBhYmlsaXR5ICcke2NhcGFiaWxpdHl9Jy5gXG4gIH0pXG59XG4iXX0=
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parses supported source into a shared semantic module.
|
|
3
|
+
* @param {object} input - Parse request.
|
|
4
|
+
* @param {string} input.filename - Source filename used in diagnostics.
|
|
5
|
+
* @param {import("../semantic/types.js").SemanticLanguage} input.language - Source language.
|
|
6
|
+
* @param {string} input.source - Source text.
|
|
7
|
+
* @returns {import("../semantic/types.js").SemanticModule} Semantic module.
|
|
8
|
+
*/
|
|
9
|
+
export declare function parseSource({ filename, language, source }: {
|
|
10
|
+
filename: string;
|
|
11
|
+
language: import("../semantic/types.js").SemanticLanguage;
|
|
12
|
+
source: string;
|
|
13
|
+
}): import("../semantic/types.js").SemanticModule;
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
// @ts-check
|
|
2
|
+
import { SemantifoldDiagnostic } from "../diagnostic.js";
|
|
3
|
+
import { annotateParsedModule } from "../semantic/provenance.js";
|
|
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
|
+
/**
|
|
10
|
+
* Parses supported source into a shared semantic module.
|
|
11
|
+
* @param {object} input - Parse request.
|
|
12
|
+
* @param {string} input.filename - Source filename used in diagnostics.
|
|
13
|
+
* @param {import("../semantic/types.js").SemanticLanguage} input.language - Source language.
|
|
14
|
+
* @param {string} input.source - Source text.
|
|
15
|
+
* @returns {import("../semantic/types.js").SemanticModule} Semantic module.
|
|
16
|
+
*/
|
|
17
|
+
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
|
+
});
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZnJvbnRlbmRzL2luZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQTtBQUN0RCxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQTtBQUM5RCxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQTtBQUM1RCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sV0FBVyxDQUFBO0FBQ25DLE9BQU8sRUFBQyx5QkFBeUIsRUFBQyxNQUFNLDRCQUE0QixDQUFBO0FBQ3BFLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxVQUFVLENBQUE7QUFDakMsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLFdBQVcsQ0FBQTtBQUVuQzs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FBQyxFQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFDO0lBQ3RELElBQUksTUFBTSxDQUFBO0lBRVYsSUFBSSxRQUFRLElBQUksS0FBSztRQUFFLE1BQU0sR0FBRyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsRUFBQyxRQUFRLEVBQUUsTUFBTSxFQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQTtTQUN2RixJQUFJLFFBQVEsSUFBSSxNQUFNO1FBQUUsTUFBTSxHQUFHLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxFQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFBO0lBQ25HLElBQUksUUFBUSxJQUFJLFlBQVksSUFBSSxRQUFRLElBQUksWUFBWSxFQUFFLENBQUM7UUFDekQsTUFBTSxHQUFHLG9CQUFvQixDQUFDLHlCQUF5QixDQUFDLEVBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFBO0lBQ2xHLENBQUM7U0FDSSxJQUFJLFFBQVEsSUFBSSxNQUFNO1FBQUUsTUFBTSxHQUFHLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxFQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFBO0lBRW5HLElBQUksTUFBTTtRQUFFLE9BQU8sb0JBQW9CLENBQUMsTUFBTSxFQUFFLEVBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUMsQ0FBQyxDQUFBO0lBRTdFLE1BQU0sSUFBSSxxQkFBcUIsQ0FBQztRQUM5QixJQUFJLEVBQUUsc0JBQXNCO1FBQzVCLFFBQVE7UUFDUixPQUFPLEVBQUUsc0RBQXNEO0tBQ2hFLENBQUMsQ0FBQTtBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IHtTZW1hbnRpZm9sZERpYWdub3N0aWN9IGZyb20gXCIuLi9kaWFnbm9zdGljLmpzXCJcbmltcG9ydCB7YW5ub3RhdGVQYXJzZWRNb2R1bGV9IGZyb20gXCIuLi9zZW1hbnRpYy9wcm92ZW5hbmNlLmpzXCJcbmltcG9ydCB7dmFsaWRhdGVQYXJzZWRNb2R1bGV9IGZyb20gXCIuLi9zZW1hbnRpYy92YWxpZGF0ZS5qc1wiXG5pbXBvcnQge3BhcnNlSmF2YX0gZnJvbSBcIi4vamF2YS5qc1wiXG5pbXBvcnQge3BhcnNlSmF2YVNjcmlwdFR5cGVTY3JpcHR9IGZyb20gXCIuL2phdmFzY3JpcHQtdHlwZXNjcmlwdC5qc1wiXG5pbXBvcnQge3BhcnNlUGhwfSBmcm9tIFwiLi9waHAuanNcIlxuaW1wb3J0IHtwYXJzZVJ1Ynl9IGZyb20gXCIuL3J1YnkuanNcIlxuXG4vKipcbiAqIFBhcnNlcyBzdXBwb3J0ZWQgc291cmNlIGludG8gYSBzaGFyZWQgc2VtYW50aWMgbW9kdWxlLlxuICogQHBhcmFtIHtvYmplY3R9IGlucHV0IC0gUGFyc2UgcmVxdWVzdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dC5maWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZSB1c2VkIGluIGRpYWdub3N0aWNzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0xhbmd1YWdlfSBpbnB1dC5sYW5ndWFnZSAtIFNvdXJjZSBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dC5zb3VyY2UgLSBTb3VyY2UgdGV4dC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gU2VtYW50aWMgbW9kdWxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VTb3VyY2Uoe2ZpbGVuYW1lLCBsYW5ndWFnZSwgc291cmNlfSkge1xuICBsZXQgbW9kdWxlXG5cbiAgaWYgKGxhbmd1YWdlID09IFwicGhwXCIpIG1vZHVsZSA9IHZhbGlkYXRlUGFyc2VkTW9kdWxlKHBhcnNlUGhwKHtmaWxlbmFtZSwgc291cmNlfSksIGxhbmd1YWdlKVxuICBlbHNlIGlmIChsYW5ndWFnZSA9PSBcInJ1YnlcIikgbW9kdWxlID0gdmFsaWRhdGVQYXJzZWRNb2R1bGUocGFyc2VSdWJ5KHtmaWxlbmFtZSwgc291cmNlfSksIGxhbmd1YWdlKVxuICBpZiAobGFuZ3VhZ2UgPT0gXCJqYXZhc2NyaXB0XCIgfHwgbGFuZ3VhZ2UgPT0gXCJ0eXBlc2NyaXB0XCIpIHtcbiAgICBtb2R1bGUgPSB2YWxpZGF0ZVBhcnNlZE1vZHVsZShwYXJzZUphdmFTY3JpcHRUeXBlU2NyaXB0KHtmaWxlbmFtZSwgbGFuZ3VhZ2UsIHNvdXJjZX0pLCBsYW5ndWFnZSlcbiAgfVxuICBlbHNlIGlmIChsYW5ndWFnZSA9PSBcImphdmFcIikgbW9kdWxlID0gdmFsaWRhdGVQYXJzZWRNb2R1bGUocGFyc2VKYXZhKHtmaWxlbmFtZSwgc291cmNlfSksIGxhbmd1YWdlKVxuXG4gIGlmIChtb2R1bGUpIHJldHVybiBhbm5vdGF0ZVBhcnNlZE1vZHVsZShtb2R1bGUsIHtmaWxlbmFtZSwgbGFuZ3VhZ2UsIHNvdXJjZX0pXG5cbiAgdGhyb3cgbmV3IFNlbWFudGlmb2xkRGlhZ25vc3RpYyh7XG4gICAgY29kZTogXCJVTlNVUFBPUlRFRF9MQU5HVUFHRVwiLFxuICAgIGxhbmd1YWdlLFxuICAgIG1lc3NhZ2U6IFwiTm8gZnJvbnRlbmQgYWRhcHRlciBpcyByZWdpc3RlcmVkIGZvciB0aGlzIGxhbmd1YWdlLlwiXG4gIH0pXG59XG4iXX0=
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parses Java into the shared semantic module.
|
|
3
|
+
* @param {object} input - Parser input.
|
|
4
|
+
* @param {string} input.filename - Source filename.
|
|
5
|
+
* @param {string} input.source - Source text.
|
|
6
|
+
* @returns {import("../semantic/types.js").SemanticModule} Semantic module.
|
|
7
|
+
*/
|
|
8
|
+
export declare function parseJava({ filename, source }: {
|
|
9
|
+
filename: string;
|
|
10
|
+
source: string;
|
|
11
|
+
}): import("../semantic/types.js").SemanticModule;
|
|
12
|
+
//# sourceMappingURL=java.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"java.d.ts","sourceRoot":"","sources":["../../../src/frontends/java.js"],"names":[],"mappings":"AA8rBA;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,EAAC,QAAQ,EAAE,MAAM,EAAC,EAJzC;IAAsB,QAAQ,EAAtB,MAAM,CACd;IAAsB,MAAM,EAApB,MAAM,CACd;CAEyC,GAF/B,OAAO,sBAAsB,EAAE,cAAc,CA2BzD"}
|