@lokascript/compilation-service 2.0.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.
@@ -0,0 +1,77 @@
1
+ // ../aot-compiler/dist/chunk-QKE5BEQY.js
2
+ var SemanticParserAdapter = class {
3
+ constructor(analyzer, ASTBuilderClass, parseWithConfidenceFn, converter) {
4
+ this.analyzer = analyzer;
5
+ this.ASTBuilderClass = ASTBuilderClass;
6
+ this.parseWithConfidenceFn = parseWithConfidenceFn;
7
+ this.converter = converter;
8
+ }
9
+ /**
10
+ * Analyze code in the given language.
11
+ * Uses the full semantic parser (parseWithConfidence) which correctly
12
+ * returns event-handler nodes with body commands.
13
+ */
14
+ analyze(code, language) {
15
+ try {
16
+ const result = this.parseWithConfidenceFn(code, language);
17
+ return {
18
+ node: result.node ?? void 0,
19
+ confidence: result.confidence,
20
+ errors: result.error ? [result.error] : void 0
21
+ };
22
+ } catch (error) {
23
+ return {
24
+ confidence: 0,
25
+ errors: [error instanceof Error ? error.message : String(error)]
26
+ };
27
+ }
28
+ }
29
+ /**
30
+ * Build an AOT-compatible AST from the SemanticNode.
31
+ * Converts the semantic package's AST format to AOT types via interchange.
32
+ */
33
+ buildAST(node) {
34
+ const semanticNode = node;
35
+ const builder = new this.ASTBuilderClass();
36
+ const semanticAST = builder.build(semanticNode);
37
+ const aotAST = this.converter(semanticAST);
38
+ return { ast: aotAST, warnings: builder.warnings };
39
+ }
40
+ /**
41
+ * Check if the given language is supported.
42
+ */
43
+ supportsLanguage(language) {
44
+ return this.analyzer.supportsLanguage(language);
45
+ }
46
+ };
47
+ var _converter = null;
48
+ function convertSemanticASTToAOT(node) {
49
+ if (_converter) return _converter(node);
50
+ return node;
51
+ }
52
+ async function createSemanticAdapter() {
53
+ const semantic = await import("@lokascript/semantic");
54
+ const analyzer = semantic.createSemanticAnalyzer();
55
+ const ASTBuilderClass = semantic.ASTBuilder;
56
+ const parseWithConfidence = semantic.parseWithConfidence;
57
+ const converter = semantic.fromSemanticAST;
58
+ if (!converter) {
59
+ throw new Error(
60
+ "@lokascript/semantic does not export fromSemanticAST. Ensure @lokascript/semantic >= 1.3.0 is installed."
61
+ );
62
+ }
63
+ _converter = converter;
64
+ return new SemanticParserAdapter(
65
+ analyzer,
66
+ ASTBuilderClass,
67
+ parseWithConfidence,
68
+ converter
69
+ );
70
+ }
71
+
72
+ export {
73
+ SemanticParserAdapter,
74
+ convertSemanticASTToAOT,
75
+ createSemanticAdapter
76
+ };
77
+ //# sourceMappingURL=chunk-CY26COTT.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../aot-compiler/src/compiler/semantic-adapter.ts"],"sourcesContent":["/**\n * Semantic Parser Adapter\n *\n * Bridges @lokascript/semantic's parse output into AOT ASTNode types.\n * Delegates AST conversion to the shared interchange format (fromSemanticAST)\n * exported by @lokascript/semantic.\n */\n\nimport type { ASTNode } from '../types/aot-types.js';\n\n// =============================================================================\n// SEMANTIC TYPES (imported dynamically)\n// =============================================================================\n\n// These mirror the types from @lokascript/semantic but are declared locally\n// so the adapter can be compiled without the optional peer dependency.\n\ninterface SemanticAnalysisResult {\n confidence: number;\n node?: SemanticNodeLike;\n errors?: string[];\n}\n\ninterface SemanticAnalyzerLike {\n analyze(input: string, language: string): SemanticAnalysisResult;\n supportsLanguage(language: string): boolean;\n}\n\ninterface SemanticNodeLike {\n kind: string;\n action: string;\n roles: ReadonlyMap<string, unknown>;\n metadata?: { confidence?: number };\n body?: SemanticNodeLike[];\n eventModifiers?: Record<string, unknown>;\n parameterNames?: readonly string[];\n thenBranch?: SemanticNodeLike[];\n elseBranch?: SemanticNodeLike[];\n statements?: SemanticNodeLike[];\n loopVariant?: string;\n loopVariable?: string;\n indexVariable?: string;\n}\n\ninterface ASTBuilderLike {\n build(node: SemanticNodeLike): SemanticASTNodeLike;\n warnings: string[];\n}\n\ninterface SemanticASTNodeLike {\n type: string;\n [key: string]: unknown;\n}\n\ntype ParseWithConfidenceFn = (\n code: string,\n language: string\n) => { node: SemanticNodeLike | null; confidence: number; error: string | undefined };\n\n/** Interchange converter function signature */\ntype InterchangeConverter = (node: SemanticASTNodeLike) => ASTNode;\n\n// =============================================================================\n// SEMANTIC PARSER ADAPTER\n// =============================================================================\n\n/**\n * Adapts @lokascript/semantic into the SemanticParser interface expected by\n * AOTCompiler.\n *\n * Uses `parseWithConfidence()` for analysis — this is the full semantic parser\n * (not just the pattern matcher), so it correctly handles event handlers with\n * body commands, compound statements, etc.\n */\nexport class SemanticParserAdapter {\n private analyzer: SemanticAnalyzerLike;\n private ASTBuilderClass: new () => ASTBuilderLike;\n private parseWithConfidenceFn: ParseWithConfidenceFn;\n private converter: InterchangeConverter;\n\n constructor(\n analyzer: SemanticAnalyzerLike,\n ASTBuilderClass: new () => ASTBuilderLike,\n parseWithConfidenceFn: ParseWithConfidenceFn,\n converter: InterchangeConverter\n ) {\n this.analyzer = analyzer;\n this.ASTBuilderClass = ASTBuilderClass;\n this.parseWithConfidenceFn = parseWithConfidenceFn;\n this.converter = converter;\n }\n\n /**\n * Analyze code in the given language.\n * Uses the full semantic parser (parseWithConfidence) which correctly\n * returns event-handler nodes with body commands.\n */\n analyze(\n code: string,\n language: string\n ): { node?: unknown; confidence: number; errors?: string[] } {\n try {\n const result = this.parseWithConfidenceFn(code, language);\n return {\n node: result.node ?? undefined,\n confidence: result.confidence,\n errors: result.error ? [result.error] : undefined,\n };\n } catch (error) {\n return {\n confidence: 0,\n errors: [error instanceof Error ? error.message : String(error)],\n };\n }\n }\n\n /**\n * Build an AOT-compatible AST from the SemanticNode.\n * Converts the semantic package's AST format to AOT types via interchange.\n */\n buildAST(node: unknown): { ast: ASTNode; warnings: string[] } {\n const semanticNode = node as SemanticNodeLike;\n\n const builder = new this.ASTBuilderClass();\n const semanticAST = builder.build(semanticNode);\n const aotAST = this.converter(semanticAST);\n\n return { ast: aotAST, warnings: builder.warnings };\n }\n\n /**\n * Check if the given language is supported.\n */\n supportsLanguage(language: string): boolean {\n return this.analyzer.supportsLanguage(language);\n }\n}\n\n// =============================================================================\n// STANDALONE CONVERTER (backward compat)\n// =============================================================================\n\nlet _converter: InterchangeConverter | null = null;\n\n/**\n * Convert a semantic package AST node to an AOT AST node.\n *\n * Delegates to `fromSemanticAST` from `@lokascript/semantic`'s interchange format.\n * This function is available after `createSemanticAdapter()` has been called.\n *\n * @deprecated Import `fromSemanticAST` from `@lokascript/semantic` directly instead.\n */\nexport function convertSemanticASTToAOT(node: SemanticASTNodeLike): ASTNode {\n if (_converter) return _converter(node);\n return node as ASTNode;\n}\n\n// =============================================================================\n// FACTORY FUNCTION\n// =============================================================================\n\n/**\n * Create a SemanticParserAdapter by dynamically importing @lokascript/semantic.\n * Throws if the package is not available.\n */\nexport async function createSemanticAdapter(): Promise<SemanticParserAdapter> {\n const semantic = await import('@lokascript/semantic');\n const analyzer = semantic.createSemanticAnalyzer();\n const ASTBuilderClass = semantic.ASTBuilder;\n const parseWithConfidence = semantic.parseWithConfidence;\n\n // Use the interchange converter from semantic\n const converter = (semantic as Record<string, unknown>).fromSemanticAST as InterchangeConverter;\n if (!converter) {\n throw new Error(\n '@lokascript/semantic does not export fromSemanticAST. ' +\n 'Ensure @lokascript/semantic >= 1.3.0 is installed.'\n );\n }\n\n // Cache for standalone convertSemanticASTToAOT()\n _converter = converter;\n\n return new SemanticParserAdapter(\n analyzer as unknown as SemanticAnalyzerLike,\n ASTBuilderClass as unknown as new () => ASTBuilderLike,\n parseWithConfidence as unknown as ParseWithConfidenceFn,\n converter\n );\n}\n"],"mappings":";AA0EO,IAAM,wBAAN,MAA4B;EAMjC,YACE,UACA,iBACA,uBACA,WACA;AACA,SAAK,WAAW;AAChB,SAAK,kBAAkB;AACvB,SAAK,wBAAwB;AAC7B,SAAK,YAAY;EACnB;;;;;;EAOA,QACE,MACA,UAC2D;AAC3D,QAAI;AACF,YAAM,SAAS,KAAK,sBAAsB,MAAM,QAAQ;AACxD,aAAO;QACL,MAAM,OAAO,QAAQ;QACrB,YAAY,OAAO;QACnB,QAAQ,OAAO,QAAQ,CAAC,OAAO,KAAK,IAAI;MAC1C;IACF,SAAS,OAAO;AACd,aAAO;QACL,YAAY;QACZ,QAAQ,CAAC,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC;MACjE;IACF;EACF;;;;;EAMA,SAAS,MAAqD;AAC5D,UAAM,eAAe;AAErB,UAAM,UAAU,IAAI,KAAK,gBAAgB;AACzC,UAAM,cAAc,QAAQ,MAAM,YAAY;AAC9C,UAAM,SAAS,KAAK,UAAU,WAAW;AAEzC,WAAO,EAAE,KAAK,QAAQ,UAAU,QAAQ,SAAS;EACnD;;;;EAKA,iBAAiB,UAA2B;AAC1C,WAAO,KAAK,SAAS,iBAAiB,QAAQ;EAChD;AACF;AAMA,IAAI,aAA0C;AAUvC,SAAS,wBAAwB,MAAoC;AAC1E,MAAI,WAAY,QAAO,WAAW,IAAI;AACtC,SAAO;AACT;AAUA,eAAsB,wBAAwD;AAC5E,QAAM,WAAW,MAAM,OAAO,sBAAsB;AACpD,QAAM,WAAW,SAAS,uBAAuB;AACjD,QAAM,kBAAkB,SAAS;AACjC,QAAM,sBAAsB,SAAS;AAGrC,QAAM,YAAa,SAAqC;AACxD,MAAI,CAAC,WAAW;AACd,UAAM,IAAI;MACR;IAEF;EACF;AAGA,eAAa;AAEb,SAAO,IAAI;IACT;IACA;IACA;IACA;EACF;AACF;","names":[]}
@@ -0,0 +1,16 @@
1
+ var __typeError = (msg) => {
2
+ throw TypeError(msg);
3
+ };
4
+ var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
5
+ var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
6
+ var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
7
+ var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
8
+ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
9
+
10
+ export {
11
+ __privateGet,
12
+ __privateAdd,
13
+ __privateSet,
14
+ __privateMethod
15
+ };
16
+ //# sourceMappingURL=chunk-HMLY7DHA.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,49 @@
1
+ // ../aot-compiler/dist/chunk-PPZXJJ57.js
2
+ var CoreParserAdapter = class {
3
+ constructor(api, converter) {
4
+ this.api = api;
5
+ this.converter = converter;
6
+ }
7
+ /**
8
+ * Parse hyperscript code to an AOT-compatible AST.
9
+ */
10
+ parse(code, language) {
11
+ const result = this.api.compileSync(code, {
12
+ language: language ?? "en",
13
+ traditional: true
14
+ });
15
+ if (!result.ok || !result.ast) {
16
+ throw new Error(result.errors?.[0]?.message ?? `Core parser failed for: ${code}`);
17
+ }
18
+ return this.converter(result.ast);
19
+ }
20
+ };
21
+ var _converter = null;
22
+ function convertCoreASTToAOT(node) {
23
+ if (_converter) return _converter(node);
24
+ return node;
25
+ }
26
+ async function createCoreParserAdapter() {
27
+ const core = await import("./dist-JOIDNRL3.js");
28
+ const api = core.hyperscript ?? core.default ?? core;
29
+ if (!api?.compileSync) {
30
+ throw new Error(
31
+ "@hyperfixi/core does not export compileSync. Ensure @hyperfixi/core >= 1.0.0 is installed."
32
+ );
33
+ }
34
+ const converter = core.fromCoreAST;
35
+ if (!converter) {
36
+ throw new Error(
37
+ "@hyperfixi/core does not export fromCoreAST. Ensure @hyperfixi/core >= 1.3.0 is installed."
38
+ );
39
+ }
40
+ _converter = converter;
41
+ return new CoreParserAdapter(api, converter);
42
+ }
43
+
44
+ export {
45
+ CoreParserAdapter,
46
+ convertCoreASTToAOT,
47
+ createCoreParserAdapter
48
+ };
49
+ //# sourceMappingURL=chunk-JDOSUTCM.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../aot-compiler/src/compiler/core-parser-adapter.ts"],"sourcesContent":["/**\n * Core Parser Adapter\n *\n * Bridges @hyperfixi/core's parser output into AOT ASTNode types.\n * Delegates AST conversion to the shared interchange format (fromCoreAST)\n * exported by @hyperfixi/core.\n */\n\nimport type { ASTNode } from '../types/aot-types.js';\n\n// =============================================================================\n// CORE TYPES (imported dynamically)\n// =============================================================================\n\n// Locally-declared types to avoid requiring the peer dependency at compile time.\n\ninterface CoreCompileResult {\n ok: boolean;\n ast?: CoreASTNode;\n errors?: Array<{ message: string }>;\n}\n\ninterface CoreASTNode {\n type: string;\n [key: string]: unknown;\n}\n\ninterface CoreHyperscriptAPI {\n compileSync(\n code: string,\n options?: { language?: string; traditional?: boolean }\n ): CoreCompileResult;\n}\n\n/** Interchange converter function signature */\ntype InterchangeConverter = (node: CoreASTNode) => ASTNode;\n\n// =============================================================================\n// CORE PARSER ADAPTER\n// =============================================================================\n\n/**\n * Adapts @hyperfixi/core's compileSync() output into the Parser interface\n * expected by AOTCompiler.\n */\nexport class CoreParserAdapter {\n private api: CoreHyperscriptAPI;\n private converter: InterchangeConverter;\n\n constructor(api: CoreHyperscriptAPI, converter: InterchangeConverter) {\n this.api = api;\n this.converter = converter;\n }\n\n /**\n * Parse hyperscript code to an AOT-compatible AST.\n */\n parse(code: string, language?: string): ASTNode {\n const result = this.api.compileSync(code, {\n language: language ?? 'en',\n traditional: true,\n });\n\n if (!result.ok || !result.ast) {\n throw new Error(result.errors?.[0]?.message ?? `Core parser failed for: ${code}`);\n }\n\n return this.converter(result.ast);\n }\n}\n\n// =============================================================================\n// STANDALONE CONVERTER (backward compat)\n// =============================================================================\n\n/**\n * Module-level converter, set by createCoreParserAdapter().\n * Falls back to a passthrough if not yet initialized (shouldn't happen in practice).\n */\nlet _converter: InterchangeConverter | null = null;\n\n/**\n * Convert a core parser AST node to an AOT AST node.\n *\n * Delegates to `fromCoreAST` from `@hyperfixi/core`'s interchange format.\n * This function is available after `createCoreParserAdapter()` has been called.\n *\n * @deprecated Import `fromCoreAST` from `@hyperfixi/core` directly instead.\n */\nexport function convertCoreASTToAOT(node: CoreASTNode): ASTNode {\n if (_converter) return _converter(node);\n // Should not reach here — factory sets _converter before anything uses it\n return node as ASTNode;\n}\n\n// =============================================================================\n// FACTORY FUNCTION\n// =============================================================================\n\n/**\n * Create a CoreParserAdapter by dynamically importing @hyperfixi/core.\n * Throws if the package is not available.\n */\nexport async function createCoreParserAdapter(): Promise<CoreParserAdapter> {\n const core = await import('@hyperfixi/core');\n // The core package exports `hyperscript` with compileSync\n const api = core.hyperscript ?? core.default ?? core;\n\n if (!api?.compileSync) {\n throw new Error(\n '@hyperfixi/core does not export compileSync. ' +\n 'Ensure @hyperfixi/core >= 1.0.0 is installed.'\n );\n }\n\n // Use the interchange converter from core\n const converter = (core as Record<string, unknown>).fromCoreAST as InterchangeConverter;\n if (!converter) {\n throw new Error(\n '@hyperfixi/core does not export fromCoreAST. ' +\n 'Ensure @hyperfixi/core >= 1.3.0 is installed.'\n );\n }\n\n // Cache for standalone convertCoreASTToAOT()\n _converter = converter;\n\n return new CoreParserAdapter(api as unknown as CoreHyperscriptAPI, converter);\n}\n"],"mappings":";AA6CO,IAAM,oBAAN,MAAwB;EAI7B,YAAY,KAAyB,WAAiC;AACpE,SAAK,MAAM;AACX,SAAK,YAAY;EACnB;;;;EAKA,MAAM,MAAc,UAA4B;AAC9C,UAAM,SAAS,KAAK,IAAI,YAAY,MAAM;MACxC,UAAU,YAAY;MACtB,aAAa;IACf,CAAC;AAED,QAAI,CAAC,OAAO,MAAM,CAAC,OAAO,KAAK;AAC7B,YAAM,IAAI,MAAM,OAAO,SAAS,CAAC,GAAG,WAAW,2BAA2B,IAAI,EAAE;IAClF;AAEA,WAAO,KAAK,UAAU,OAAO,GAAG;EAClC;AACF;AAUA,IAAI,aAA0C;AAUvC,SAAS,oBAAoB,MAA4B;AAC9D,MAAI,WAAY,QAAO,WAAW,IAAI;AAEtC,SAAO;AACT;AAUA,eAAsB,0BAAsD;AAC1E,QAAM,OAAO,MAAM,OAAO,oBAAiB;AAE3C,QAAM,MAAM,KAAK,eAAe,KAAK,WAAW;AAEhD,MAAI,CAAC,KAAK,aAAa;AACrB,UAAM,IAAI;MACR;IAEF;EACF;AAGA,QAAM,YAAa,KAAiC;AACpD,MAAI,CAAC,WAAW;AACd,UAAM,IAAI;MACR;IAEF;EACF;AAGA,eAAa;AAEb,SAAO,IAAI,kBAAkB,KAAsC,SAAS;AAC9E;","names":[]}