semantifold 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (111) hide show
  1. package/LICENSE +15 -0
  2. package/README.md +71 -0
  3. package/build/index.d.ts +54 -0
  4. package/build/index.d.ts.map +1 -0
  5. package/build/index.js +45 -0
  6. package/build/src/backends/identifiers.d.ts +19 -0
  7. package/build/src/backends/identifiers.d.ts.map +1 -0
  8. package/build/src/backends/identifiers.js +93 -0
  9. package/build/src/backends/index.d.ts +35 -0
  10. package/build/src/backends/index.d.ts.map +1 -0
  11. package/build/src/backends/index.js +149 -0
  12. package/build/src/backends/java.d.ts +8 -0
  13. package/build/src/backends/java.d.ts.map +1 -0
  14. package/build/src/backends/java.js +172 -0
  15. package/build/src/backends/javascript.d.ts +8 -0
  16. package/build/src/backends/javascript.d.ts.map +1 -0
  17. package/build/src/backends/javascript.js +173 -0
  18. package/build/src/backends/php.d.ts +8 -0
  19. package/build/src/backends/php.d.ts.map +1 -0
  20. package/build/src/backends/php.js +175 -0
  21. package/build/src/backends/ruby.d.ts +8 -0
  22. package/build/src/backends/ruby.d.ts.map +1 -0
  23. package/build/src/backends/ruby.js +155 -0
  24. package/build/src/backends/scalars.d.ts +15 -0
  25. package/build/src/backends/scalars.d.ts.map +1 -0
  26. package/build/src/backends/scalars.js +138 -0
  27. package/build/src/backends/shared.d.ts +26 -0
  28. package/build/src/backends/shared.d.ts.map +1 -0
  29. package/build/src/backends/shared.js +424 -0
  30. package/build/src/backends/typescript.d.ts +8 -0
  31. package/build/src/backends/typescript.d.ts.map +1 -0
  32. package/build/src/backends/typescript.js +160 -0
  33. package/build/src/backends/writer.d.ts +87 -0
  34. package/build/src/backends/writer.d.ts.map +1 -0
  35. package/build/src/backends/writer.js +207 -0
  36. package/build/src/diagnostic.d.ts +67 -0
  37. package/build/src/diagnostic.d.ts.map +1 -0
  38. package/build/src/diagnostic.js +96 -0
  39. package/build/src/frontends/index.d.ts +14 -0
  40. package/build/src/frontends/index.d.ts.map +1 -0
  41. package/build/src/frontends/index.js +36 -0
  42. package/build/src/frontends/java.d.ts +12 -0
  43. package/build/src/frontends/java.d.ts.map +1 -0
  44. package/build/src/frontends/java.js +630 -0
  45. package/build/src/frontends/javascript-typescript.d.ts +19 -0
  46. package/build/src/frontends/javascript-typescript.d.ts.map +1 -0
  47. package/build/src/frontends/javascript-typescript.js +633 -0
  48. package/build/src/frontends/php.d.ts +12 -0
  49. package/build/src/frontends/php.d.ts.map +1 -0
  50. package/build/src/frontends/php.js +523 -0
  51. package/build/src/frontends/ruby.d.ts +12 -0
  52. package/build/src/frontends/ruby.d.ts.map +1 -0
  53. package/build/src/frontends/ruby.js +515 -0
  54. package/build/src/frontends/scalars.d.ts +19 -0
  55. package/build/src/frontends/scalars.d.ts.map +1 -0
  56. package/build/src/frontends/scalars.js +71 -0
  57. package/build/src/mapping.d.ts +160 -0
  58. package/build/src/mapping.d.ts.map +1 -0
  59. package/build/src/mapping.js +1120 -0
  60. package/build/src/semantic/location.d.ts +61 -0
  61. package/build/src/semantic/location.d.ts.map +1 -0
  62. package/build/src/semantic/location.js +142 -0
  63. package/build/src/semantic/operators.d.ts +16 -0
  64. package/build/src/semantic/operators.d.ts.map +1 -0
  65. package/build/src/semantic/operators.js +24 -0
  66. package/build/src/semantic/provenance.d.ts +74 -0
  67. package/build/src/semantic/provenance.d.ts.map +1 -0
  68. package/build/src/semantic/provenance.js +577 -0
  69. package/build/src/semantic/scalars.d.ts +19 -0
  70. package/build/src/semantic/scalars.d.ts.map +1 -0
  71. package/build/src/semantic/scalars.js +40 -0
  72. package/build/src/semantic/types.d.ts +1003 -0
  73. package/build/src/semantic/types.d.ts.map +1 -0
  74. package/build/src/semantic/types.js +279 -0
  75. package/build/src/semantic/validate.d.ts +60 -0
  76. package/build/src/semantic/validate.d.ts.map +1 -0
  77. package/build/src/semantic/validate.js +472 -0
  78. package/docs/architecture.md +39 -0
  79. package/docs/coding-standards.md +7 -0
  80. package/docs/goals.md +7 -0
  81. package/docs/language-support.md +69 -0
  82. package/docs/plans/2026-09-02-initial-toolchain.md +54 -0
  83. package/docs/source-maps.md +134 -0
  84. package/docs/testing.md +25 -0
  85. package/index.js +63 -0
  86. package/package.json +69 -0
  87. package/src/backends/identifiers.js +101 -0
  88. package/src/backends/index.js +159 -0
  89. package/src/backends/java.js +182 -0
  90. package/src/backends/javascript.js +184 -0
  91. package/src/backends/php.js +184 -0
  92. package/src/backends/ruby.js +163 -0
  93. package/src/backends/scalars.js +120 -0
  94. package/src/backends/shared.js +456 -0
  95. package/src/backends/typescript.js +168 -0
  96. package/src/backends/writer.js +224 -0
  97. package/src/diagnostic.js +103 -0
  98. package/src/frontends/index.js +36 -0
  99. package/src/frontends/java.js +735 -0
  100. package/src/frontends/javascript-typescript.js +718 -0
  101. package/src/frontends/php.js +593 -0
  102. package/src/frontends/ruby.js +622 -0
  103. package/src/frontends/scalars.js +77 -0
  104. package/src/mapping.js +1260 -0
  105. package/src/semantic/location.js +154 -0
  106. package/src/semantic/operators.js +28 -0
  107. package/src/semantic/provenance.js +629 -0
  108. package/src/semantic/scalars.js +44 -0
  109. package/src/semantic/types.js +319 -0
  110. package/src/semantic/validate.js +529 -0
  111. package/tsconfig.json +16 -0
@@ -0,0 +1,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"}