@tom2012/cc-web 2026.5.18-b → 2026.5.18-c
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 +1 -1
- package/backend/dist/index.d.ts.map +1 -1
- package/backend/dist/index.js +2 -21
- package/backend/dist/index.js.map +1 -1
- package/backend/dist/routes/global-tracks.d.ts +2 -5
- package/backend/dist/routes/global-tracks.d.ts.map +1 -1
- package/backend/dist/routes/global-tracks.js +2 -28
- package/backend/dist/routes/global-tracks.js.map +1 -1
- package/backend/dist/routes/tracks.d.ts +3 -9
- package/backend/dist/routes/tracks.d.ts.map +1 -1
- package/backend/dist/routes/tracks.js +3 -153
- package/backend/dist/routes/tracks.js.map +1 -1
- package/backend/dist/tracks/ask-user-bridge.d.ts +1 -6
- package/backend/dist/tracks/ask-user-bridge.d.ts.map +1 -1
- package/backend/dist/tracks/ask-user-bridge.js +0 -22
- package/backend/dist/tracks/ask-user-bridge.js.map +1 -1
- package/backend/dist/tracks/index.d.ts +1 -5
- package/backend/dist/tracks/index.d.ts.map +1 -1
- package/backend/dist/tracks/index.js +1 -10
- package/backend/dist/tracks/index.js.map +1 -1
- package/backend/package-lock.json +1 -64
- package/backend/package.json +1 -5
- package/frontend/dist/assets/{ChatOverlay-DPM_F615.js → ChatOverlay-i8gy2y-T.js} +1 -1
- package/frontend/dist/assets/{GraphPreview-CJhh33L8.js → GraphPreview-CoOHeDk0.js} +2 -2
- package/frontend/dist/assets/{MobilePage-Cx9v8Udp.js → MobilePage-ZYuVSqIu.js} +3 -3
- package/frontend/dist/assets/{OfficePreview-h6zYBZFQ.js → OfficePreview-BP_FVyDv.js} +2 -2
- package/frontend/dist/assets/{PdfPreview-DbYFye7c.js → PdfPreview-B_Is_82c.js} +1 -1
- package/frontend/dist/assets/{ProjectPage-DaPmvQ-H.js → ProjectPage-Bi7P0xvD.js} +5 -5
- package/frontend/dist/assets/{SettingsPage-BkApTPbw.js → SettingsPage-DlqnuIy1.js} +2 -2
- package/frontend/dist/assets/{SkillHubPage-BwfU-hel.js → SkillHubPage-FFefLcmN.js} +3 -3
- package/frontend/dist/assets/{chevron-down-D4Vj-5wB.js → chevron-down-DqAoFpmS.js} +1 -1
- package/frontend/dist/assets/{index-DUIOrPha.js → index-B5mDtgD1.js} +2 -2
- package/frontend/dist/assets/{index-CKxFfdqR.js → index-Bj-uhUZY.js} +1 -1
- package/frontend/dist/assets/{index-C-2GBtXy.js → index-DzYZJMgp.js} +1 -1
- package/frontend/dist/assets/index-mxYmpvtf.css +1 -0
- package/frontend/dist/assets/{jszip.min-Bn769Ot7.js → jszip.min-DW73pE0J.js} +1 -1
- package/frontend/dist/assets/{select-CXSNG3yW.js → select-HgZm25ew.js} +1 -1
- package/frontend/dist/assets/{user-Chl3LWFq.js → user-BOTyiGCj.js} +1 -1
- package/frontend/dist/index.html +2 -2
- package/package.json +1 -1
- package/backend/vendor/@tom2012/train-core/dist/ast-cache.d.ts +0 -74
- package/backend/vendor/@tom2012/train-core/dist/ast-cache.d.ts.map +0 -1
- package/backend/vendor/@tom2012/train-core/dist/ast-cache.js +0 -157
- package/backend/vendor/@tom2012/train-core/dist/ast-cache.js.map +0 -1
- package/backend/vendor/@tom2012/train-core/dist/ast.d.ts +0 -350
- package/backend/vendor/@tom2012/train-core/dist/ast.d.ts.map +0 -1
- package/backend/vendor/@tom2012/train-core/dist/ast.js +0 -15
- package/backend/vendor/@tom2012/train-core/dist/ast.js.map +0 -1
- package/backend/vendor/@tom2012/train-core/dist/builder.d.ts +0 -21
- package/backend/vendor/@tom2012/train-core/dist/builder.d.ts.map +0 -1
- package/backend/vendor/@tom2012/train-core/dist/builder.js +0 -1254
- package/backend/vendor/@tom2012/train-core/dist/builder.js.map +0 -1
- package/backend/vendor/@tom2012/train-core/dist/builtins.d.ts +0 -17
- package/backend/vendor/@tom2012/train-core/dist/builtins.d.ts.map +0 -1
- package/backend/vendor/@tom2012/train-core/dist/builtins.js +0 -500
- package/backend/vendor/@tom2012/train-core/dist/builtins.js.map +0 -1
- package/backend/vendor/@tom2012/train-core/dist/index.d.ts +0 -54
- package/backend/vendor/@tom2012/train-core/dist/index.d.ts.map +0 -1
- package/backend/vendor/@tom2012/train-core/dist/index.js +0 -66
- package/backend/vendor/@tom2012/train-core/dist/index.js.map +0 -1
- package/backend/vendor/@tom2012/train-core/dist/interpreter.d.ts +0 -110
- package/backend/vendor/@tom2012/train-core/dist/interpreter.d.ts.map +0 -1
- package/backend/vendor/@tom2012/train-core/dist/interpreter.js +0 -943
- package/backend/vendor/@tom2012/train-core/dist/interpreter.js.map +0 -1
- package/backend/vendor/@tom2012/train-core/dist/lexer.d.ts +0 -88
- package/backend/vendor/@tom2012/train-core/dist/lexer.d.ts.map +0 -1
- package/backend/vendor/@tom2012/train-core/dist/lexer.js +0 -243
- package/backend/vendor/@tom2012/train-core/dist/lexer.js.map +0 -1
- package/backend/vendor/@tom2012/train-core/dist/module-loader.d.ts +0 -74
- package/backend/vendor/@tom2012/train-core/dist/module-loader.d.ts.map +0 -1
- package/backend/vendor/@tom2012/train-core/dist/module-loader.js +0 -149
- package/backend/vendor/@tom2012/train-core/dist/module-loader.js.map +0 -1
- package/backend/vendor/@tom2012/train-core/dist/parser.d.ts +0 -138
- package/backend/vendor/@tom2012/train-core/dist/parser.d.ts.map +0 -1
- package/backend/vendor/@tom2012/train-core/dist/parser.js +0 -861
- package/backend/vendor/@tom2012/train-core/dist/parser.js.map +0 -1
- package/backend/vendor/@tom2012/train-core/dist/prompt-composer.d.ts +0 -49
- package/backend/vendor/@tom2012/train-core/dist/prompt-composer.d.ts.map +0 -1
- package/backend/vendor/@tom2012/train-core/dist/prompt-composer.js +0 -159
- package/backend/vendor/@tom2012/train-core/dist/prompt-composer.js.map +0 -1
- package/backend/vendor/@tom2012/train-core/dist/runtime.d.ts +0 -146
- package/backend/vendor/@tom2012/train-core/dist/runtime.d.ts.map +0 -1
- package/backend/vendor/@tom2012/train-core/dist/runtime.js +0 -156
- package/backend/vendor/@tom2012/train-core/dist/runtime.js.map +0 -1
- package/backend/vendor/@tom2012/train-core/dist/type-descriptor.d.ts +0 -18
- package/backend/vendor/@tom2012/train-core/dist/type-descriptor.d.ts.map +0 -1
- package/backend/vendor/@tom2012/train-core/dist/type-descriptor.js +0 -94
- package/backend/vendor/@tom2012/train-core/dist/type-descriptor.js.map +0 -1
- package/backend/vendor/@tom2012/train-core/dist/validation.d.ts +0 -44
- package/backend/vendor/@tom2012/train-core/dist/validation.d.ts.map +0 -1
- package/backend/vendor/@tom2012/train-core/dist/validation.js +0 -271
- package/backend/vendor/@tom2012/train-core/dist/validation.js.map +0 -1
- package/backend/vendor/@tom2012/train-core/package.json +0 -35
- package/frontend/dist/assets/TrackEditor-BbM0eHTD.js +0 -14
- package/frontend/dist/assets/TrackGraphEditor-DzEqAGFN.js +0 -2
- package/frontend/dist/assets/TrackGraphEditor-Fd0xVSp_.css +0 -1
- package/frontend/dist/assets/abap-LPLW346S.js +0 -7
- package/frontend/dist/assets/apex-Dk-jUCUV.js +0 -7
- package/frontend/dist/assets/azcli-DPUMmPlX.js +0 -7
- package/frontend/dist/assets/bat-C1Qbg1bV.js +0 -7
- package/frontend/dist/assets/bicep-D-e-VSJi.js +0 -7
- package/frontend/dist/assets/cameligo-CjUqTgqL.js +0 -7
- package/frontend/dist/assets/clojure-BWsu6Kju.js +0 -7
- package/frontend/dist/assets/codicon-DCmgc-ay.ttf +0 -0
- package/frontend/dist/assets/coffee-DeC36AK3.js +0 -7
- package/frontend/dist/assets/cpp-DcZnmBWT.js +0 -7
- package/frontend/dist/assets/csharp-DqBXBMf0.js +0 -7
- package/frontend/dist/assets/csp-CkO7y8ul.js +0 -7
- package/frontend/dist/assets/css-OAcfVtED.js +0 -7
- package/frontend/dist/assets/cssMode-5whH06Yl.js +0 -7
- package/frontend/dist/assets/cypher-40UGrUjD.js +0 -7
- package/frontend/dist/assets/dart-DmixyLor.js +0 -7
- package/frontend/dist/assets/dockerfile-CayO4nTA.js +0 -7
- package/frontend/dist/assets/ecl-DRrKCuVc.js +0 -7
- package/frontend/dist/assets/editor-B5EY1bb8.css +0 -1
- package/frontend/dist/assets/editor.main-CnjJg6pv.js +0 -37
- package/frontend/dist/assets/elixir-J3qpp9mX.js +0 -7
- package/frontend/dist/assets/flow9-DzW2c4Im.js +0 -7
- package/frontend/dist/assets/freemarker2-CUgILTtX.js +0 -7
- package/frontend/dist/assets/fsharp-D00tn_6c.js +0 -7
- package/frontend/dist/assets/go-NnNmgWK_.js +0 -7
- package/frontend/dist/assets/graphql-C9_--VLF.js +0 -7
- package/frontend/dist/assets/handlebars-C2avKkbK.js +0 -7
- package/frontend/dist/assets/hcl-BhbOULbp.js +0 -7
- package/frontend/dist/assets/html-ZYUiGgvr.js +0 -7
- package/frontend/dist/assets/htmlMode-CeliqUBd.js +0 -7
- package/frontend/dist/assets/index-COjNnvQB.css +0 -1
- package/frontend/dist/assets/index-DjmvYdMM.js +0 -1
- package/frontend/dist/assets/ini-zR-_X5iG.js +0 -7
- package/frontend/dist/assets/java-CSTjsyoZ.js +0 -7
- package/frontend/dist/assets/javascript-0VRCllAK.js +0 -7
- package/frontend/dist/assets/jsonMode-Dwqu43-Y.js +0 -7
- package/frontend/dist/assets/julia-DioMOKVu.js +0 -7
- package/frontend/dist/assets/kotlin-Dsb0PKmW.js +0 -7
- package/frontend/dist/assets/less-CZYLoAVD.js +0 -7
- package/frontend/dist/assets/lexon-d5JUiwNk.js +0 -7
- package/frontend/dist/assets/liquid-E2ejTVvo.js +0 -7
- package/frontend/dist/assets/lua-1Al72GG8.js +0 -7
- package/frontend/dist/assets/m3-hx1xCPC3.js +0 -7
- package/frontend/dist/assets/markdown-DPGrH1xZ.js +0 -7
- package/frontend/dist/assets/mdx-CqJmnu86.js +0 -7
- package/frontend/dist/assets/mips-CYbZjkIm.js +0 -7
- package/frontend/dist/assets/msdax-DAioKM5A.js +0 -7
- package/frontend/dist/assets/mysql-7e9GUebS.js +0 -7
- package/frontend/dist/assets/objective-c-BGf8QNjz.js +0 -7
- package/frontend/dist/assets/pascal-hEDRz3un.js +0 -7
- package/frontend/dist/assets/pascaligo-gqEhN6pG.js +0 -7
- package/frontend/dist/assets/perl-CN8Ht9Vk.js +0 -7
- package/frontend/dist/assets/pgsql-CRCqHQBx.js +0 -7
- package/frontend/dist/assets/php-DTZrlAwe.js +0 -7
- package/frontend/dist/assets/pla-CRmh4UcC.js +0 -7
- package/frontend/dist/assets/postiats-Car2G7g8.js +0 -7
- package/frontend/dist/assets/powerquery-BJKl8V3o.js +0 -7
- package/frontend/dist/assets/powershell-Du7a_J7r.js +0 -7
- package/frontend/dist/assets/protobuf-ChneWI0H.js +0 -7
- package/frontend/dist/assets/pug-BH6LSJaf.js +0 -7
- package/frontend/dist/assets/python-BYNiBUNZ.js +0 -7
- package/frontend/dist/assets/qsharp-CU-Hxpxi.js +0 -7
- package/frontend/dist/assets/r-Bw-W15zh.js +0 -7
- package/frontend/dist/assets/razor-2YR0XVnP.js +0 -7
- package/frontend/dist/assets/redis-bY-X9-ol.js +0 -7
- package/frontend/dist/assets/redshift-CMu3ubbS.js +0 -7
- package/frontend/dist/assets/restructuredtext-KNkiWGNN.js +0 -7
- package/frontend/dist/assets/ruby-dQWMhU86.js +0 -7
- package/frontend/dist/assets/rust-BAcHhnEU.js +0 -7
- package/frontend/dist/assets/sb-Bidr5w2z.js +0 -7
- package/frontend/dist/assets/scala-imTtxsGY.js +0 -7
- package/frontend/dist/assets/scheme-BY-WHKiB.js +0 -7
- package/frontend/dist/assets/scss-NDoRP52C.js +0 -7
- package/frontend/dist/assets/shell-DrIjotnh.js +0 -7
- package/frontend/dist/assets/solidity-DTahNycF.js +0 -7
- package/frontend/dist/assets/sophia-DtyrjGkZ.js +0 -7
- package/frontend/dist/assets/sparql-CFuS5E3z.js +0 -7
- package/frontend/dist/assets/sql-BRxcnbRv.js +0 -7
- package/frontend/dist/assets/st-Dz4uh7MK.js +0 -7
- package/frontend/dist/assets/swift-Digsrw1G.js +0 -11
- package/frontend/dist/assets/systemverilog-7TDrkMau.js +0 -7
- package/frontend/dist/assets/tcl-BtaFcnDi.js +0 -7
- package/frontend/dist/assets/tsMode-DrjOLXjA.js +0 -7
- package/frontend/dist/assets/twig-Deid_oBs.js +0 -7
- package/frontend/dist/assets/typescript--8YtfOFf.js +0 -7
- package/frontend/dist/assets/typespec-zUaxhbG8.js +0 -7
- package/frontend/dist/assets/vb-DK0rKJzo.js +0 -7
- package/frontend/dist/assets/wgsl-B8fNVlOQ.js +0 -7
- package/frontend/dist/assets/xml-CGj_sBRG.js +0 -7
- package/frontend/dist/assets/yaml-of0AgMN8.js +0 -7
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* AST cache (spec §4.5).
|
|
3
|
-
*
|
|
4
|
-
* Persist parsed AST to `<stateDir>/ast/<relativeFile>.ast.json` keyed by
|
|
5
|
-
* sha256(source) + compilerVersion. On reload, verify both — if either
|
|
6
|
-
* mismatches, return null and the caller re-parses.
|
|
7
|
-
*
|
|
8
|
-
* The cache file is plain JSON (no functions, no circular refs). All
|
|
9
|
-
* train AST nodes are plain objects with primitive leaves + Range info,
|
|
10
|
-
* so JSON.stringify is lossless.
|
|
11
|
-
*
|
|
12
|
-
* `normalizeForCache` strips fields that vary between runs (range,
|
|
13
|
-
* future __id, etc.) so two ASTs of the same source can be compared
|
|
14
|
-
* for equivalence by deep-equal of their normalized forms.
|
|
15
|
-
*/
|
|
16
|
-
import type * as ast from './ast.js';
|
|
17
|
-
/** Bump whenever AST shape changes — invalidates all caches. */
|
|
18
|
-
export declare const AST_CACHE_VERSION = "train-core-0.1.0";
|
|
19
|
-
export interface AstCacheRecord {
|
|
20
|
-
sourceFile: string;
|
|
21
|
-
sourceHash: string;
|
|
22
|
-
compilerVersion: string;
|
|
23
|
-
compiledAt: string;
|
|
24
|
-
ast: ast.Program;
|
|
25
|
-
}
|
|
26
|
-
/** Compute the cache key for a source string. */
|
|
27
|
-
export declare function sourceHash(source: string): string;
|
|
28
|
-
/** Resolve cache file path under stateDir. */
|
|
29
|
-
export declare function cacheFilePath(stateDir: string, relSourceFile: string): string;
|
|
30
|
-
/**
|
|
31
|
-
* Save AST to cache file. Atomic: write to tmp then rename.
|
|
32
|
-
* Creates parent dirs as needed. Throws on filesystem errors.
|
|
33
|
-
*/
|
|
34
|
-
export declare function saveCache(cachePath: string, record: AstCacheRecord): Promise<void>;
|
|
35
|
-
/**
|
|
36
|
-
* Load AST from cache file. Returns null if:
|
|
37
|
-
* - file does not exist
|
|
38
|
-
* - file is corrupt / not valid JSON / missing fields
|
|
39
|
-
* - sourceHash does not match the caller's expected hash
|
|
40
|
-
* - compilerVersion does not match AST_CACHE_VERSION
|
|
41
|
-
*
|
|
42
|
-
* Never throws on cache miss — caller should re-parse on null.
|
|
43
|
-
*/
|
|
44
|
-
export declare function loadCache(cachePath: string, expectedHash: string, expectedCompilerVersion?: string): Promise<AstCacheRecord | null>;
|
|
45
|
-
export declare function normalizeForCache(node: unknown): unknown;
|
|
46
|
-
/**
|
|
47
|
-
* High-level facade: parse with cache.
|
|
48
|
-
*
|
|
49
|
-
* If a valid cached AST exists, return it. Otherwise call `parseFresh`,
|
|
50
|
-
* save the result to cache, and return it.
|
|
51
|
-
*
|
|
52
|
-
* `parseFresh` returns the AST plus any errors. Cache only on no-error.
|
|
53
|
-
*/
|
|
54
|
-
export interface ParseWithCacheResult {
|
|
55
|
-
ast: ast.Program | null;
|
|
56
|
-
source: string;
|
|
57
|
-
fromCache: boolean;
|
|
58
|
-
/** Hash of source used for cache lookup. */
|
|
59
|
-
hash: string;
|
|
60
|
-
/** Any error from parseFresh, if cache was missed. */
|
|
61
|
-
lexErrors: ReadonlyArray<unknown>;
|
|
62
|
-
parseErrors: ReadonlyArray<unknown>;
|
|
63
|
-
}
|
|
64
|
-
export declare function parseWithCache(opts: {
|
|
65
|
-
source: string;
|
|
66
|
-
sourceFile: string;
|
|
67
|
-
stateDir: string;
|
|
68
|
-
parseFresh: (src: string) => {
|
|
69
|
-
ast: ast.Program | null;
|
|
70
|
-
lexErrors: ReadonlyArray<unknown>;
|
|
71
|
-
parseErrors: ReadonlyArray<unknown>;
|
|
72
|
-
};
|
|
73
|
-
}): Promise<ParseWithCacheResult>;
|
|
74
|
-
//# sourceMappingURL=ast-cache.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ast-cache.d.ts","sourceRoot":"","sources":["../src/ast-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAKH,OAAO,KAAK,KAAK,GAAG,MAAM,UAAU,CAAA;AAEpC,gEAAgE;AAChE,eAAO,MAAM,iBAAiB,qBAAqB,CAAA;AAEnD,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,eAAe,EAAE,MAAM,CAAA;IACvB,UAAU,EAAE,MAAM,CAAA;IAClB,GAAG,EAAE,GAAG,CAAC,OAAO,CAAA;CACjB;AAED,iDAAiD;AACjD,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED,8CAA8C;AAC9C,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,CAE7E;AAED;;;GAGG;AACH,wBAAsB,SAAS,CAC7B,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC,IAAI,CAAC,CAMf;AAED;;;;;;;;GAQG;AACH,wBAAsB,SAAS,CAC7B,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,uBAAuB,GAAE,MAA0B,GAClD,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CA4BhC;AAoBD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAiBxD;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,oBAAoB;IACnC,GAAG,EAAE,GAAG,CAAC,OAAO,GAAG,IAAI,CAAA;IACvB,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,OAAO,CAAA;IAClB,4CAA4C;IAC5C,IAAI,EAAE,MAAM,CAAA;IACZ,sDAAsD;IACtD,SAAS,EAAE,aAAa,CAAC,OAAO,CAAC,CAAA;IACjC,WAAW,EAAE,aAAa,CAAC,OAAO,CAAC,CAAA;CACpC;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE;IACzC,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK;QAC3B,GAAG,EAAE,GAAG,CAAC,OAAO,GAAG,IAAI,CAAA;QACvB,SAAS,EAAE,aAAa,CAAC,OAAO,CAAC,CAAA;QACjC,WAAW,EAAE,aAAa,CAAC,OAAO,CAAC,CAAA;KACpC,CAAA;CACF,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAoChC"}
|
|
@@ -1,157 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* AST cache (spec §4.5).
|
|
3
|
-
*
|
|
4
|
-
* Persist parsed AST to `<stateDir>/ast/<relativeFile>.ast.json` keyed by
|
|
5
|
-
* sha256(source) + compilerVersion. On reload, verify both — if either
|
|
6
|
-
* mismatches, return null and the caller re-parses.
|
|
7
|
-
*
|
|
8
|
-
* The cache file is plain JSON (no functions, no circular refs). All
|
|
9
|
-
* train AST nodes are plain objects with primitive leaves + Range info,
|
|
10
|
-
* so JSON.stringify is lossless.
|
|
11
|
-
*
|
|
12
|
-
* `normalizeForCache` strips fields that vary between runs (range,
|
|
13
|
-
* future __id, etc.) so two ASTs of the same source can be compared
|
|
14
|
-
* for equivalence by deep-equal of their normalized forms.
|
|
15
|
-
*/
|
|
16
|
-
import { promises as fs } from 'node:fs';
|
|
17
|
-
import { createHash } from 'node:crypto';
|
|
18
|
-
import * as path from 'node:path';
|
|
19
|
-
/** Bump whenever AST shape changes — invalidates all caches. */
|
|
20
|
-
export const AST_CACHE_VERSION = 'train-core-0.1.0';
|
|
21
|
-
/** Compute the cache key for a source string. */
|
|
22
|
-
export function sourceHash(source) {
|
|
23
|
-
return 'sha256-' + createHash('sha256').update(source, 'utf8').digest('hex');
|
|
24
|
-
}
|
|
25
|
-
/** Resolve cache file path under stateDir. */
|
|
26
|
-
export function cacheFilePath(stateDir, relSourceFile) {
|
|
27
|
-
return path.join(stateDir, 'ast', relSourceFile + '.ast.json');
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* Save AST to cache file. Atomic: write to tmp then rename.
|
|
31
|
-
* Creates parent dirs as needed. Throws on filesystem errors.
|
|
32
|
-
*/
|
|
33
|
-
export async function saveCache(cachePath, record) {
|
|
34
|
-
await fs.mkdir(path.dirname(cachePath), { recursive: true });
|
|
35
|
-
const tmp = cachePath + '.tmp-' + process.pid;
|
|
36
|
-
const json = JSON.stringify(record);
|
|
37
|
-
await fs.writeFile(tmp, json, 'utf8');
|
|
38
|
-
await fs.rename(tmp, cachePath);
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* Load AST from cache file. Returns null if:
|
|
42
|
-
* - file does not exist
|
|
43
|
-
* - file is corrupt / not valid JSON / missing fields
|
|
44
|
-
* - sourceHash does not match the caller's expected hash
|
|
45
|
-
* - compilerVersion does not match AST_CACHE_VERSION
|
|
46
|
-
*
|
|
47
|
-
* Never throws on cache miss — caller should re-parse on null.
|
|
48
|
-
*/
|
|
49
|
-
export async function loadCache(cachePath, expectedHash, expectedCompilerVersion = AST_CACHE_VERSION) {
|
|
50
|
-
let raw;
|
|
51
|
-
try {
|
|
52
|
-
raw = await fs.readFile(cachePath, 'utf8');
|
|
53
|
-
}
|
|
54
|
-
catch {
|
|
55
|
-
return null;
|
|
56
|
-
}
|
|
57
|
-
let parsed;
|
|
58
|
-
try {
|
|
59
|
-
parsed = JSON.parse(raw);
|
|
60
|
-
}
|
|
61
|
-
catch {
|
|
62
|
-
return null;
|
|
63
|
-
}
|
|
64
|
-
if (!parsed || typeof parsed !== 'object')
|
|
65
|
-
return null;
|
|
66
|
-
const record = parsed;
|
|
67
|
-
if (typeof record.sourceHash !== 'string' ||
|
|
68
|
-
typeof record.compilerVersion !== 'string' ||
|
|
69
|
-
typeof record.compiledAt !== 'string' ||
|
|
70
|
-
typeof record.sourceFile !== 'string' ||
|
|
71
|
-
!record.ast ||
|
|
72
|
-
typeof record.ast !== 'object') {
|
|
73
|
-
return null;
|
|
74
|
-
}
|
|
75
|
-
if (record.sourceHash !== expectedHash)
|
|
76
|
-
return null;
|
|
77
|
-
if (record.compilerVersion !== expectedCompilerVersion)
|
|
78
|
-
return null;
|
|
79
|
-
return record;
|
|
80
|
-
}
|
|
81
|
-
/**
|
|
82
|
-
* Normalize an AST for equivalence comparison. Strips fields that vary
|
|
83
|
-
* between parse runs but do not carry semantic meaning. See
|
|
84
|
-
* 工作流DSL测试方案.md §7.1 INV-14 for the formal contract.
|
|
85
|
-
*
|
|
86
|
-
* Currently strips:
|
|
87
|
-
* - `range` (chevrotain source offsets)
|
|
88
|
-
* - future `__id` (DFS node identifiers — not yet present)
|
|
89
|
-
*
|
|
90
|
-
* Preserves:
|
|
91
|
-
* - all semantic fields (type, name, value, params, body, children)
|
|
92
|
-
* - array order
|
|
93
|
-
*
|
|
94
|
-
* Numeric edge cases:
|
|
95
|
-
* - NaN / Infinity → string "NaN" / "Infinity" (JSON unfriendly otherwise)
|
|
96
|
-
*/
|
|
97
|
-
const STRIP_KEYS = new Set(['range', '__id']);
|
|
98
|
-
export function normalizeForCache(node) {
|
|
99
|
-
if (node === null || typeof node !== 'object') {
|
|
100
|
-
if (typeof node === 'number') {
|
|
101
|
-
if (Number.isNaN(node))
|
|
102
|
-
return 'NaN';
|
|
103
|
-
if (!Number.isFinite(node))
|
|
104
|
-
return node > 0 ? 'Infinity' : '-Infinity';
|
|
105
|
-
}
|
|
106
|
-
return node;
|
|
107
|
-
}
|
|
108
|
-
if (Array.isArray(node)) {
|
|
109
|
-
return node.map(normalizeForCache);
|
|
110
|
-
}
|
|
111
|
-
const out = {};
|
|
112
|
-
for (const [k, v] of Object.entries(node)) {
|
|
113
|
-
if (STRIP_KEYS.has(k))
|
|
114
|
-
continue;
|
|
115
|
-
out[k] = normalizeForCache(v);
|
|
116
|
-
}
|
|
117
|
-
return out;
|
|
118
|
-
}
|
|
119
|
-
export async function parseWithCache(opts) {
|
|
120
|
-
const hash = sourceHash(opts.source);
|
|
121
|
-
const cachePath = cacheFilePath(opts.stateDir, opts.sourceFile);
|
|
122
|
-
const cached = await loadCache(cachePath, hash);
|
|
123
|
-
if (cached) {
|
|
124
|
-
return {
|
|
125
|
-
ast: cached.ast,
|
|
126
|
-
source: opts.source,
|
|
127
|
-
fromCache: true,
|
|
128
|
-
hash,
|
|
129
|
-
lexErrors: [],
|
|
130
|
-
parseErrors: [],
|
|
131
|
-
};
|
|
132
|
-
}
|
|
133
|
-
const fresh = opts.parseFresh(opts.source);
|
|
134
|
-
if (fresh.ast && fresh.lexErrors.length === 0 && fresh.parseErrors.length === 0) {
|
|
135
|
-
try {
|
|
136
|
-
await saveCache(cachePath, {
|
|
137
|
-
sourceFile: opts.sourceFile,
|
|
138
|
-
sourceHash: hash,
|
|
139
|
-
compilerVersion: AST_CACHE_VERSION,
|
|
140
|
-
compiledAt: new Date().toISOString(),
|
|
141
|
-
ast: fresh.ast,
|
|
142
|
-
});
|
|
143
|
-
}
|
|
144
|
-
catch {
|
|
145
|
-
// Cache save failure is non-fatal — the AST is still usable in memory.
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
return {
|
|
149
|
-
ast: fresh.ast,
|
|
150
|
-
source: opts.source,
|
|
151
|
-
fromCache: false,
|
|
152
|
-
hash,
|
|
153
|
-
lexErrors: fresh.lexErrors,
|
|
154
|
-
parseErrors: fresh.parseErrors,
|
|
155
|
-
};
|
|
156
|
-
}
|
|
157
|
-
//# sourceMappingURL=ast-cache.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ast-cache.js","sourceRoot":"","sources":["../src/ast-cache.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,350 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Typed Abstract Syntax Tree for train language.
|
|
3
|
-
*
|
|
4
|
-
* The AST is what later stages (type checker, interpreter, formatter)
|
|
5
|
-
* consume. It is produced from the CST by the visitor in `builder.ts`.
|
|
6
|
-
*
|
|
7
|
-
* Design choices:
|
|
8
|
-
* - Every node has a `kind` discriminator (TypeScript narrowing)
|
|
9
|
-
* - Every node has a `range` carrying source location for diagnostics
|
|
10
|
-
* - Numeric / string / bool literals are pre-parsed to their JS values
|
|
11
|
-
* - String escape sequences are unescaped
|
|
12
|
-
* - All node names are PascalCase nominal types
|
|
13
|
-
*/
|
|
14
|
-
export interface Range {
|
|
15
|
-
startLine: number;
|
|
16
|
-
startColumn: number;
|
|
17
|
-
endLine: number;
|
|
18
|
-
endColumn: number;
|
|
19
|
-
startOffset: number;
|
|
20
|
-
endOffset: number;
|
|
21
|
-
}
|
|
22
|
-
interface Located {
|
|
23
|
-
range: Range;
|
|
24
|
-
}
|
|
25
|
-
export interface Program extends Located {
|
|
26
|
-
kind: 'Program';
|
|
27
|
-
items: TopLevel[];
|
|
28
|
-
}
|
|
29
|
-
export type TopLevel = Import | RuntimeAnnotation | ConstDecl | VarDecl | FuncDecl | FaiDecl | ExportDecl;
|
|
30
|
-
export interface Import extends Located {
|
|
31
|
-
kind: 'Import';
|
|
32
|
-
clause: NamedImports | NamespaceImport;
|
|
33
|
-
source: string;
|
|
34
|
-
version: string | null;
|
|
35
|
-
}
|
|
36
|
-
export interface NamedImports extends Located {
|
|
37
|
-
kind: 'NamedImports';
|
|
38
|
-
specs: ImportSpec[];
|
|
39
|
-
}
|
|
40
|
-
export interface ImportSpec extends Located {
|
|
41
|
-
kind: 'ImportSpec';
|
|
42
|
-
name: string;
|
|
43
|
-
alias: string | null;
|
|
44
|
-
}
|
|
45
|
-
export interface NamespaceImport extends Located {
|
|
46
|
-
kind: 'NamespaceImport';
|
|
47
|
-
alias: string;
|
|
48
|
-
}
|
|
49
|
-
export interface ExportDecl extends Located {
|
|
50
|
-
kind: 'ExportDecl';
|
|
51
|
-
target: ExportNames | FuncDecl | FaiDecl;
|
|
52
|
-
}
|
|
53
|
-
export interface ExportNames extends Located {
|
|
54
|
-
kind: 'ExportNames';
|
|
55
|
-
specs: ExportSpec[];
|
|
56
|
-
}
|
|
57
|
-
export interface ExportSpec extends Located {
|
|
58
|
-
kind: 'ExportSpec';
|
|
59
|
-
name: string;
|
|
60
|
-
alias: string | null;
|
|
61
|
-
}
|
|
62
|
-
export interface RuntimeAnnotation extends Located {
|
|
63
|
-
kind: 'RuntimeAnnotation';
|
|
64
|
-
name: string;
|
|
65
|
-
args: AnnotationArg[];
|
|
66
|
-
}
|
|
67
|
-
export interface Annotation extends Located {
|
|
68
|
-
kind: 'Annotation';
|
|
69
|
-
name: string;
|
|
70
|
-
args: AnnotationArg[];
|
|
71
|
-
}
|
|
72
|
-
export interface AnnotationArg extends Located {
|
|
73
|
-
kind: 'AnnotationArg';
|
|
74
|
-
key: string | null;
|
|
75
|
-
value: Literal | TemplateString;
|
|
76
|
-
}
|
|
77
|
-
export interface ConstDecl extends Located {
|
|
78
|
-
kind: 'ConstDecl';
|
|
79
|
-
name: string;
|
|
80
|
-
type: TypeAnnot;
|
|
81
|
-
value: Expr;
|
|
82
|
-
}
|
|
83
|
-
export interface VarDecl extends Located {
|
|
84
|
-
kind: 'VarDecl';
|
|
85
|
-
name: string;
|
|
86
|
-
type: TypeAnnot;
|
|
87
|
-
init: Expr | null;
|
|
88
|
-
}
|
|
89
|
-
export interface FuncDecl extends Located {
|
|
90
|
-
kind: 'FuncDecl';
|
|
91
|
-
annotations: Annotation[];
|
|
92
|
-
name: string;
|
|
93
|
-
params: Param[];
|
|
94
|
-
returnType: TypeAnnot | null;
|
|
95
|
-
body: Block;
|
|
96
|
-
}
|
|
97
|
-
export interface FaiDecl extends Located {
|
|
98
|
-
kind: 'FaiDecl';
|
|
99
|
-
annotations: Annotation[];
|
|
100
|
-
name: string;
|
|
101
|
-
params: FaiParam[];
|
|
102
|
-
outputs: FaiOutput[];
|
|
103
|
-
body: Block;
|
|
104
|
-
}
|
|
105
|
-
export interface Param extends Located {
|
|
106
|
-
kind: 'Param';
|
|
107
|
-
name: string;
|
|
108
|
-
type: TypeAnnot | null;
|
|
109
|
-
}
|
|
110
|
-
export interface FaiParam extends Located {
|
|
111
|
-
kind: 'FaiParam';
|
|
112
|
-
name: string;
|
|
113
|
-
type: TypeAnnot;
|
|
114
|
-
}
|
|
115
|
-
export interface FaiOutput extends Located {
|
|
116
|
-
kind: 'FaiOutput';
|
|
117
|
-
name: string;
|
|
118
|
-
type: TypeAnnot;
|
|
119
|
-
}
|
|
120
|
-
export type TypeAnnot = ScalarType | EnumType | ArrayType | ObjectType;
|
|
121
|
-
export interface ScalarType extends Located {
|
|
122
|
-
kind: 'ScalarType';
|
|
123
|
-
name: string;
|
|
124
|
-
constraint: TypeConstraint | null;
|
|
125
|
-
}
|
|
126
|
-
export type TypeConstraint = RangeConstraint | NamedConstraint;
|
|
127
|
-
export interface RangeConstraint extends Located {
|
|
128
|
-
kind: 'RangeConstraint';
|
|
129
|
-
min: number;
|
|
130
|
-
max: number;
|
|
131
|
-
}
|
|
132
|
-
export interface NamedConstraint extends Located {
|
|
133
|
-
kind: 'NamedConstraint';
|
|
134
|
-
key: string;
|
|
135
|
-
value: number | string;
|
|
136
|
-
}
|
|
137
|
-
export interface EnumType extends Located {
|
|
138
|
-
kind: 'EnumType';
|
|
139
|
-
variants: string[];
|
|
140
|
-
}
|
|
141
|
-
export interface ArrayType extends Located {
|
|
142
|
-
kind: 'ArrayType';
|
|
143
|
-
element: TypeAnnot;
|
|
144
|
-
constraint: NamedConstraint | null;
|
|
145
|
-
}
|
|
146
|
-
export interface ObjectType extends Located {
|
|
147
|
-
kind: 'ObjectType';
|
|
148
|
-
fields: ObjectTypeField[];
|
|
149
|
-
}
|
|
150
|
-
export interface ObjectTypeField extends Located {
|
|
151
|
-
kind: 'ObjectTypeField';
|
|
152
|
-
name: string;
|
|
153
|
-
type: TypeAnnot;
|
|
154
|
-
}
|
|
155
|
-
export interface Block extends Located {
|
|
156
|
-
kind: 'Block';
|
|
157
|
-
stmts: Stmt[];
|
|
158
|
-
}
|
|
159
|
-
export type Stmt = LetDecl | Assignment | IfStmt | ForStmt | WhileStmt | TryStmt | BreakStmt | ContinueStmt | ReturnStmt | ExprStmt;
|
|
160
|
-
export interface LetDecl extends Located {
|
|
161
|
-
kind: 'LetDecl';
|
|
162
|
-
target: LetTarget;
|
|
163
|
-
type: TypeAnnot | null;
|
|
164
|
-
init: Expr | null;
|
|
165
|
-
}
|
|
166
|
-
export type LetTarget = IdentTarget | ObjectDestruct | ArrayDestruct;
|
|
167
|
-
export interface IdentTarget extends Located {
|
|
168
|
-
kind: 'IdentTarget';
|
|
169
|
-
name: string;
|
|
170
|
-
}
|
|
171
|
-
export interface ObjectDestruct extends Located {
|
|
172
|
-
kind: 'ObjectDestruct';
|
|
173
|
-
fields: DestructField[];
|
|
174
|
-
}
|
|
175
|
-
export interface DestructField extends Located {
|
|
176
|
-
kind: 'DestructField';
|
|
177
|
-
source: string;
|
|
178
|
-
local: string;
|
|
179
|
-
}
|
|
180
|
-
export interface ArrayDestruct extends Located {
|
|
181
|
-
kind: 'ArrayDestruct';
|
|
182
|
-
names: string[];
|
|
183
|
-
}
|
|
184
|
-
export interface Assignment extends Located {
|
|
185
|
-
kind: 'Assignment';
|
|
186
|
-
target: LValue;
|
|
187
|
-
op: AssignOp;
|
|
188
|
-
value: Expr;
|
|
189
|
-
}
|
|
190
|
-
export type AssignOp = '=' | '+=' | '-=' | '*=' | '/=' | '%=';
|
|
191
|
-
export interface LValue extends Located {
|
|
192
|
-
kind: 'LValue';
|
|
193
|
-
base: string;
|
|
194
|
-
suffixes: LValueSuffix[];
|
|
195
|
-
}
|
|
196
|
-
export type LValueSuffix = MemberSuffix | IndexSuffix;
|
|
197
|
-
export interface MemberSuffix extends Located {
|
|
198
|
-
kind: 'MemberSuffix';
|
|
199
|
-
name: string;
|
|
200
|
-
}
|
|
201
|
-
export interface IndexSuffix extends Located {
|
|
202
|
-
kind: 'IndexSuffix';
|
|
203
|
-
index: Expr;
|
|
204
|
-
}
|
|
205
|
-
export interface IfStmt extends Located {
|
|
206
|
-
kind: 'IfStmt';
|
|
207
|
-
cond: Expr;
|
|
208
|
-
then: Block;
|
|
209
|
-
elifs: ElseIf[];
|
|
210
|
-
otherwise: Block | null;
|
|
211
|
-
}
|
|
212
|
-
export interface ElseIf extends Located {
|
|
213
|
-
kind: 'ElseIf';
|
|
214
|
-
cond: Expr;
|
|
215
|
-
body: Block;
|
|
216
|
-
}
|
|
217
|
-
export interface ForStmt extends Located {
|
|
218
|
-
kind: 'ForStmt';
|
|
219
|
-
binding: string;
|
|
220
|
-
iterable: Expr;
|
|
221
|
-
body: Block;
|
|
222
|
-
}
|
|
223
|
-
export interface WhileStmt extends Located {
|
|
224
|
-
kind: 'WhileStmt';
|
|
225
|
-
cond: Expr;
|
|
226
|
-
body: Block;
|
|
227
|
-
}
|
|
228
|
-
export interface TryStmt extends Located {
|
|
229
|
-
kind: 'TryStmt';
|
|
230
|
-
body: Block;
|
|
231
|
-
catches: CatchClause[];
|
|
232
|
-
}
|
|
233
|
-
export interface CatchClause extends Located {
|
|
234
|
-
kind: 'CatchClause';
|
|
235
|
-
errorType: string;
|
|
236
|
-
binding: string | null;
|
|
237
|
-
body: Block;
|
|
238
|
-
}
|
|
239
|
-
export interface BreakStmt extends Located {
|
|
240
|
-
kind: 'BreakStmt';
|
|
241
|
-
}
|
|
242
|
-
export interface ContinueStmt extends Located {
|
|
243
|
-
kind: 'ContinueStmt';
|
|
244
|
-
}
|
|
245
|
-
export interface ReturnStmt extends Located {
|
|
246
|
-
kind: 'ReturnStmt';
|
|
247
|
-
value: Expr | null;
|
|
248
|
-
}
|
|
249
|
-
export interface ExprStmt extends Located {
|
|
250
|
-
kind: 'ExprStmt';
|
|
251
|
-
expr: Expr;
|
|
252
|
-
}
|
|
253
|
-
export type Expr = Literal | TemplateString | IdentExpr | ArrayLit | ObjectLit | UnaryExpr | BinaryExpr | TernaryExpr | MemberExpr | IndexExpr | CallExpr;
|
|
254
|
-
export type Literal = IntLit | FloatLit | StringLit | BoolLit | NullLit;
|
|
255
|
-
export interface IntLit extends Located {
|
|
256
|
-
kind: 'IntLit';
|
|
257
|
-
value: number;
|
|
258
|
-
}
|
|
259
|
-
export interface FloatLit extends Located {
|
|
260
|
-
kind: 'FloatLit';
|
|
261
|
-
value: number;
|
|
262
|
-
}
|
|
263
|
-
export interface StringLit extends Located {
|
|
264
|
-
kind: 'StringLit';
|
|
265
|
-
value: string;
|
|
266
|
-
}
|
|
267
|
-
export interface BoolLit extends Located {
|
|
268
|
-
kind: 'BoolLit';
|
|
269
|
-
value: boolean;
|
|
270
|
-
}
|
|
271
|
-
export interface NullLit extends Located {
|
|
272
|
-
kind: 'NullLit';
|
|
273
|
-
}
|
|
274
|
-
/**
|
|
275
|
-
* A double-quoted string that contains one or more `${expr}` interpolations.
|
|
276
|
-
* `parts` is a sequence of literal chunks (already unescaped) and expressions
|
|
277
|
-
* in source order. Always begins and ends with a TemplateChunk (possibly empty).
|
|
278
|
-
*
|
|
279
|
-
* Limit (MVP): expressions inside `${...}` MUST NOT contain string literals.
|
|
280
|
-
* The lexer treats the entire `"..."` as a single token and cannot handle
|
|
281
|
-
* nested quotes. A real implementation would use lexer modes.
|
|
282
|
-
*/
|
|
283
|
-
export interface TemplateString extends Located {
|
|
284
|
-
kind: 'TemplateString';
|
|
285
|
-
parts: TemplatePart[];
|
|
286
|
-
}
|
|
287
|
-
export type TemplatePart = TemplateChunk | TemplateExpr;
|
|
288
|
-
export interface TemplateChunk extends Located {
|
|
289
|
-
kind: 'TemplateChunk';
|
|
290
|
-
value: string;
|
|
291
|
-
}
|
|
292
|
-
export interface TemplateExpr extends Located {
|
|
293
|
-
kind: 'TemplateExpr';
|
|
294
|
-
expr: Expr;
|
|
295
|
-
}
|
|
296
|
-
export interface IdentExpr extends Located {
|
|
297
|
-
kind: 'IdentExpr';
|
|
298
|
-
name: string;
|
|
299
|
-
}
|
|
300
|
-
export interface ArrayLit extends Located {
|
|
301
|
-
kind: 'ArrayLit';
|
|
302
|
-
elements: Expr[];
|
|
303
|
-
}
|
|
304
|
-
export interface ObjectLit extends Located {
|
|
305
|
-
kind: 'ObjectLit';
|
|
306
|
-
fields: ObjectLitField[];
|
|
307
|
-
}
|
|
308
|
-
export interface ObjectLitField extends Located {
|
|
309
|
-
kind: 'ObjectLitField';
|
|
310
|
-
key: string;
|
|
311
|
-
shorthand: boolean;
|
|
312
|
-
value: Expr;
|
|
313
|
-
}
|
|
314
|
-
export type UnaryOp = '-' | '!';
|
|
315
|
-
export interface UnaryExpr extends Located {
|
|
316
|
-
kind: 'UnaryExpr';
|
|
317
|
-
op: UnaryOp;
|
|
318
|
-
operand: Expr;
|
|
319
|
-
}
|
|
320
|
-
export type BinaryOp = '+' | '-' | '*' | '/' | '%' | '==' | '!=' | '<' | '<=' | '>' | '>=' | '&&' | '||';
|
|
321
|
-
export interface BinaryExpr extends Located {
|
|
322
|
-
kind: 'BinaryExpr';
|
|
323
|
-
op: BinaryOp;
|
|
324
|
-
left: Expr;
|
|
325
|
-
right: Expr;
|
|
326
|
-
}
|
|
327
|
-
export interface TernaryExpr extends Located {
|
|
328
|
-
kind: 'TernaryExpr';
|
|
329
|
-
cond: Expr;
|
|
330
|
-
then: Expr;
|
|
331
|
-
otherwise: Expr;
|
|
332
|
-
}
|
|
333
|
-
export interface MemberExpr extends Located {
|
|
334
|
-
kind: 'MemberExpr';
|
|
335
|
-
object: Expr;
|
|
336
|
-
property: string;
|
|
337
|
-
}
|
|
338
|
-
export interface IndexExpr extends Located {
|
|
339
|
-
kind: 'IndexExpr';
|
|
340
|
-
object: Expr;
|
|
341
|
-
index: Expr;
|
|
342
|
-
}
|
|
343
|
-
export interface CallExpr extends Located {
|
|
344
|
-
kind: 'CallExpr';
|
|
345
|
-
callee: Expr;
|
|
346
|
-
args: Expr[];
|
|
347
|
-
}
|
|
348
|
-
export type AstNode = Program | TopLevel | NamedImports | NamespaceImport | ImportSpec | ExportNames | ExportSpec | Annotation | AnnotationArg | Param | FaiParam | FaiOutput | TypeAnnot | TypeConstraint | ObjectTypeField | Block | Stmt | LetTarget | DestructField | LValue | LValueSuffix | ElseIf | CatchClause | Expr | ObjectLitField | TemplatePart;
|
|
349
|
-
export {};
|
|
350
|
-
//# sourceMappingURL=ast.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ast.d.ts","sourceRoot":"","sources":["../src/ast.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Typed Abstract Syntax Tree for train language.
|
|
3
|
-
*
|
|
4
|
-
* The AST is what later stages (type checker, interpreter, formatter)
|
|
5
|
-
* consume. It is produced from the CST by the visitor in `builder.ts`.
|
|
6
|
-
*
|
|
7
|
-
* Design choices:
|
|
8
|
-
* - Every node has a `kind` discriminator (TypeScript narrowing)
|
|
9
|
-
* - Every node has a `range` carrying source location for diagnostics
|
|
10
|
-
* - Numeric / string / bool literals are pre-parsed to their JS values
|
|
11
|
-
* - String escape sequences are unescaped
|
|
12
|
-
* - All node names are PascalCase nominal types
|
|
13
|
-
*/
|
|
14
|
-
export {};
|
|
15
|
-
//# sourceMappingURL=ast.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ast.js","sourceRoot":"","sources":["../src/ast.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG"}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* CST → typed AST visitor.
|
|
3
|
-
*
|
|
4
|
-
* Uses chevrotain's CST visitor pattern. Each `visit*` method
|
|
5
|
-
* corresponds to one grammar rule in `parser.ts` and produces the
|
|
6
|
-
* matching AST node from `ast.ts`.
|
|
7
|
-
*
|
|
8
|
-
* Conventions:
|
|
9
|
-
* - Method name MUST equal the parser rule name (chevrotain dispatch).
|
|
10
|
-
* - `ctx` carries children grouped by rule name (CstNode[]) or token
|
|
11
|
-
* name (IToken[]). Optional rules / tokens may be missing entirely;
|
|
12
|
-
* we read with safe defaults.
|
|
13
|
-
* - All AST nodes carry a `range` derived from the spanning CST/Token.
|
|
14
|
-
*/
|
|
15
|
-
import type { CstNode } from 'chevrotain';
|
|
16
|
-
import * as ast from './ast.js';
|
|
17
|
-
/**
|
|
18
|
-
* Build a typed AST from a parser CST. Returns null if no CST (parse failed).
|
|
19
|
-
*/
|
|
20
|
-
export declare function buildAst(cst: CstNode | undefined): ast.Program | null;
|
|
21
|
-
//# sourceMappingURL=builder.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../src/builder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAU,MAAM,YAAY,CAAA;AAEjD,OAAO,KAAK,GAAG,MAAM,UAAU,CAAA;AAu2C/B;;GAEG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,OAAO,GAAG,SAAS,GAAG,GAAG,CAAC,OAAO,GAAG,IAAI,CAGrE"}
|