@forgecharts/sdk 1.1.32 → 1.1.34
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/dist/api/IndicatorDAG.d.ts +2 -0
- package/dist/api/IndicatorDAG.d.ts.map +1 -1
- package/dist/api/TChart.d.ts +13 -0
- package/dist/api/TChart.d.ts.map +1 -1
- package/dist/api/drawingUtils.d.ts +6 -0
- package/dist/api/drawingUtils.d.ts.map +1 -1
- package/dist/core/Chart.d.ts +30 -1
- package/dist/core/Chart.d.ts.map +1 -1
- package/dist/core/Crosshair.d.ts.map +1 -1
- package/dist/core/InteractionManager.d.ts +16 -1
- package/dist/core/InteractionManager.d.ts.map +1 -1
- package/dist/core/TimeScale.d.ts.map +1 -1
- package/dist/datafeed/DatafeedConnector.d.ts.map +1 -1
- package/dist/{tscript/TScriptIndicator.d.ts → forgescript/ForgeScriptIndicator.d.ts} +19 -5
- package/dist/forgescript/ForgeScriptIndicator.d.ts.map +1 -0
- package/dist/forgescript/ForgeScriptTypes.d.ts +89 -0
- package/dist/forgescript/ForgeScriptTypes.d.ts.map +1 -0
- package/dist/forgescript/__tests__/ai-response-parser.test.d.ts +2 -0
- package/dist/forgescript/__tests__/ai-response-parser.test.d.ts.map +1 -0
- package/dist/forgescript/__tests__/language-detector.test.d.ts +2 -0
- package/dist/forgescript/__tests__/language-detector.test.d.ts.map +1 -0
- package/dist/forgescript/__tests__/lexer.test.d.ts +2 -0
- package/dist/forgescript/__tests__/lexer.test.d.ts.map +1 -0
- package/dist/forgescript/__tests__/orchestrator.test.d.ts +2 -0
- package/dist/forgescript/__tests__/orchestrator.test.d.ts.map +1 -0
- package/dist/forgescript/__tests__/parser.test.d.ts +2 -0
- package/dist/forgescript/__tests__/parser.test.d.ts.map +1 -0
- package/dist/forgescript/__tests__/pine-transpiler.test.d.ts +2 -0
- package/dist/forgescript/__tests__/pine-transpiler.test.d.ts.map +1 -0
- package/dist/forgescript/__tests__/runtime.test.d.ts +2 -0
- package/dist/forgescript/__tests__/runtime.test.d.ts.map +1 -0
- package/dist/forgescript/__tests__/sandbox.test.d.ts +2 -0
- package/dist/forgescript/__tests__/sandbox.test.d.ts.map +1 -0
- package/dist/forgescript/__tests__/save-gate.test.d.ts +2 -0
- package/dist/forgescript/__tests__/save-gate.test.d.ts.map +1 -0
- package/dist/forgescript/__tests__/series.test.d.ts +2 -0
- package/dist/forgescript/__tests__/series.test.d.ts.map +1 -0
- package/dist/forgescript/__tests__/telemetry.test.d.ts +2 -0
- package/dist/forgescript/__tests__/telemetry.test.d.ts.map +1 -0
- package/dist/forgescript/__tests__/validation.test.d.ts +2 -0
- package/dist/forgescript/__tests__/validation.test.d.ts.map +1 -0
- package/dist/forgescript/ast.d.ts +153 -0
- package/dist/forgescript/ast.d.ts.map +1 -0
- package/dist/forgescript/builtins/color.d.ts +29 -0
- package/dist/forgescript/builtins/color.d.ts.map +1 -0
- package/dist/forgescript/builtins/math.d.ts +22 -0
- package/dist/forgescript/builtins/math.d.ts.map +1 -0
- package/dist/forgescript/builtins/request.d.ts +22 -0
- package/dist/forgescript/builtins/request.d.ts.map +1 -0
- package/dist/forgescript/builtins/syminfo.d.ts +27 -0
- package/dist/forgescript/builtins/syminfo.d.ts.map +1 -0
- package/dist/forgescript/builtins/ta.d.ts +39 -0
- package/dist/forgescript/builtins/ta.d.ts.map +1 -0
- package/dist/forgescript/conversion/ai-conversion-agent.d.ts +41 -0
- package/dist/forgescript/conversion/ai-conversion-agent.d.ts.map +1 -0
- package/dist/forgescript/conversion/conversion-orchestrator.d.ts +44 -0
- package/dist/forgescript/conversion/conversion-orchestrator.d.ts.map +1 -0
- package/dist/forgescript/conversion/index.d.ts +19 -0
- package/dist/forgescript/conversion/index.d.ts.map +1 -0
- package/dist/forgescript/conversion/language-detector.d.ts +27 -0
- package/dist/forgescript/conversion/language-detector.d.ts.map +1 -0
- package/dist/forgescript/conversion/prompts/index.d.ts +17 -0
- package/dist/forgescript/conversion/prompts/index.d.ts.map +1 -0
- package/dist/forgescript/conversion/sandbox.d.ts +23 -0
- package/dist/forgescript/conversion/sandbox.d.ts.map +1 -0
- package/dist/forgescript/conversion/save-gate.d.ts +29 -0
- package/dist/forgescript/conversion/save-gate.d.ts.map +1 -0
- package/dist/forgescript/conversion/telemetry.d.ts +22 -0
- package/dist/forgescript/conversion/telemetry.d.ts.map +1 -0
- package/dist/forgescript/conversion/types.d.ts +120 -0
- package/dist/forgescript/conversion/types.d.ts.map +1 -0
- package/dist/forgescript/conversion/validation.d.ts +18 -0
- package/dist/forgescript/conversion/validation.d.ts.map +1 -0
- package/dist/{tscript → forgescript}/lexer.d.ts +7 -1
- package/dist/forgescript/lexer.d.ts.map +1 -0
- package/dist/{tscript → forgescript}/parser.d.ts +14 -0
- package/dist/forgescript/parser.d.ts.map +1 -0
- package/dist/{pine → forgescript/pine}/PineCompiler.d.ts +7 -4
- package/dist/forgescript/pine/PineCompiler.d.ts.map +1 -0
- package/dist/forgescript/pine/diagnostics.d.ts.map +1 -0
- package/dist/forgescript/pine/index.d.ts.map +1 -0
- package/dist/{pine → forgescript/pine}/pine-ast.d.ts +50 -2
- package/dist/forgescript/pine/pine-ast.d.ts.map +1 -0
- package/dist/forgescript/pine/pine-lexer.d.ts.map +1 -0
- package/dist/forgescript/pine/pine-parser.d.ts +108 -0
- package/dist/forgescript/pine/pine-parser.d.ts.map +1 -0
- package/dist/{pine → forgescript/pine}/pine-transpiler.d.ts +10 -3
- package/dist/forgescript/pine/pine-transpiler.d.ts.map +1 -0
- package/dist/forgescript/runtime.d.ts +307 -0
- package/dist/forgescript/runtime.d.ts.map +1 -0
- package/dist/forgescript/series.d.ts.map +1 -0
- package/dist/index.d.ts +9 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3365 -265
- package/dist/index.js.map +1 -1
- package/dist/internal.js +3409 -309
- package/dist/internal.js.map +1 -1
- package/dist/licensing/ChartRuntimeResolver.d.ts +4 -0
- package/dist/licensing/ChartRuntimeResolver.d.ts.map +1 -1
- package/dist/licensing/licenseTypes.d.ts +18 -0
- package/dist/licensing/licenseTypes.d.ts.map +1 -1
- package/dist/logo_dark-B2KCSRPJ.png +0 -0
- package/dist/logo_light-NAWNBY4G.png +0 -0
- package/dist/react/canvas/ChartCanvas.d.ts +18 -2
- package/dist/react/canvas/ChartCanvas.d.ts.map +1 -1
- package/dist/react/canvas/PointerOverlay.d.ts +3 -1
- package/dist/react/canvas/PointerOverlay.d.ts.map +1 -1
- package/dist/react/canvas/TableOverlay.d.ts +12 -0
- package/dist/react/canvas/TableOverlay.d.ts.map +1 -0
- package/dist/react/canvas/toolbars/LeftToolbar.d.ts +7 -1
- package/dist/react/canvas/toolbars/LeftToolbar.d.ts.map +1 -1
- package/dist/react/hooks/useBrokerEvents.d.ts +32 -0
- package/dist/react/hooks/useBrokerEvents.d.ts.map +1 -0
- package/dist/react/index.js +2506 -387
- package/dist/react/index.js.map +1 -1
- package/dist/react/internal.d.ts +1 -1
- package/dist/react/internal.d.ts.map +1 -1
- package/dist/react/internal.js +5103 -988
- package/dist/react/internal.js.map +1 -1
- package/dist/react/shell/ManagedAppShell.d.ts +20 -0
- package/dist/react/shell/ManagedAppShell.d.ts.map +1 -1
- package/dist/react/shell/OrderEntryPanel.d.ts +73 -1
- package/dist/react/shell/OrderEntryPanel.d.ts.map +1 -1
- package/dist/react/shell/ScriptDrawer.d.ts +5 -1
- package/dist/react/shell/ScriptDrawer.d.ts.map +1 -1
- package/dist/react/shell/TradeDrawer.d.ts +8 -1
- package/dist/react/shell/TradeDrawer.d.ts.map +1 -1
- package/dist/react/shell/WatchlistDrawer.d.ts.map +1 -1
- package/dist/react/shell/useWatchlistQuotes.d.ts +1 -0
- package/dist/react/shell/useWatchlistQuotes.d.ts.map +1 -1
- package/dist/react/workspace/ChartWorkspace.d.ts +5 -1
- package/dist/react/workspace/ChartWorkspace.d.ts.map +1 -1
- package/dist/react/workspace/SymbolSearchDialog.d.ts.map +1 -1
- package/dist/react/workspace/TabBar.d.ts.map +1 -1
- package/dist/react/workspace/toolbars/BottomToolbar.d.ts.map +1 -1
- package/dist/react/workspace/toolbars/TopToolbar.d.ts +2 -1
- package/dist/react/workspace/toolbars/TopToolbar.d.ts.map +1 -1
- package/dist/renderers/CandlestickRenderer.d.ts.map +1 -1
- package/dist/services/serverClock.d.ts +61 -0
- package/dist/services/serverClock.d.ts.map +1 -0
- package/package.json +1 -1
- package/dist/pine/PineCompiler.d.ts.map +0 -1
- package/dist/pine/diagnostics.d.ts.map +0 -1
- package/dist/pine/index.d.ts.map +0 -1
- package/dist/pine/pine-ast.d.ts.map +0 -1
- package/dist/pine/pine-lexer.d.ts.map +0 -1
- package/dist/pine/pine-parser.d.ts +0 -51
- package/dist/pine/pine-parser.d.ts.map +0 -1
- package/dist/pine/pine-transpiler.d.ts.map +0 -1
- package/dist/tscript/TScriptIndicator.d.ts.map +0 -1
- package/dist/tscript/ast.d.ts +0 -89
- package/dist/tscript/ast.d.ts.map +0 -1
- package/dist/tscript/lexer.d.ts.map +0 -1
- package/dist/tscript/parser.d.ts.map +0 -1
- package/dist/tscript/runtime.d.ts +0 -123
- package/dist/tscript/runtime.d.ts.map +0 -1
- package/dist/tscript/series.d.ts.map +0 -1
- /package/dist/{pine → forgescript/pine}/diagnostics.d.ts +0 -0
- /package/dist/{pine → forgescript/pine}/index.d.ts +0 -0
- /package/dist/{pine → forgescript/pine}/pine-lexer.d.ts +0 -0
- /package/dist/{tscript → forgescript}/series.d.ts +0 -0
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared types for the AI-assisted script conversion system.
|
|
3
|
+
*
|
|
4
|
+
* ForgeScript is the canonical target language. All conversions produce
|
|
5
|
+
* ForgeScript source that must pass validation before saving.
|
|
6
|
+
*/
|
|
7
|
+
/** Languages the conversion system can accept as input. */
|
|
8
|
+
export type SourceLanguage = 'pine' | 'python' | 'javascript' | 'forgescript' | 'unknown';
|
|
9
|
+
/** Confidence level for language detection or AI conversion. */
|
|
10
|
+
export type Confidence = 'HIGH' | 'MEDIUM' | 'LOW';
|
|
11
|
+
/** Result of language detection. */
|
|
12
|
+
export interface LanguageDetectionResult {
|
|
13
|
+
/** Best-guess language. */
|
|
14
|
+
readonly language: SourceLanguage;
|
|
15
|
+
/** Confidence of the detection. */
|
|
16
|
+
readonly confidence: Confidence;
|
|
17
|
+
/** Human-readable reason. */
|
|
18
|
+
readonly reason: string;
|
|
19
|
+
/** Heuristic scores used to pick the language. */
|
|
20
|
+
readonly scores: Readonly<Record<SourceLanguage, number>>;
|
|
21
|
+
}
|
|
22
|
+
/** Which conversion strategy was used. */
|
|
23
|
+
export type ConversionPath = 'deterministic' | 'ai' | 'hybrid' | 'passthrough';
|
|
24
|
+
/** A single warning surfaced during conversion. */
|
|
25
|
+
export interface ConversionWarning {
|
|
26
|
+
readonly severity: 'info' | 'warning' | 'error';
|
|
27
|
+
readonly category: 'approximation' | 'unsupported' | 'semantic_risk' | 'hallucination' | 'general';
|
|
28
|
+
readonly message: string;
|
|
29
|
+
}
|
|
30
|
+
/** An assumption the converter made on behalf of the user. */
|
|
31
|
+
export interface ConversionAssumption {
|
|
32
|
+
readonly description: string;
|
|
33
|
+
}
|
|
34
|
+
/** Item the user should manually verify. */
|
|
35
|
+
export interface ReviewItem {
|
|
36
|
+
readonly description: string;
|
|
37
|
+
}
|
|
38
|
+
/** Parsed structured response from the AI conversion agent. */
|
|
39
|
+
export interface AIConversionResponse {
|
|
40
|
+
readonly forgeScript: string;
|
|
41
|
+
readonly warnings: ConversionWarning[];
|
|
42
|
+
readonly assumptions: ConversionAssumption[];
|
|
43
|
+
readonly reviewChecklist: ReviewItem[];
|
|
44
|
+
readonly unsupportedFeatures: string[];
|
|
45
|
+
readonly confidence: Confidence;
|
|
46
|
+
readonly confidenceExplanation: string;
|
|
47
|
+
}
|
|
48
|
+
/** A single validation issue. */
|
|
49
|
+
export interface ValidationIssue {
|
|
50
|
+
readonly severity: 'error' | 'warning';
|
|
51
|
+
readonly code: string;
|
|
52
|
+
readonly message: string;
|
|
53
|
+
readonly line?: number;
|
|
54
|
+
readonly col?: number;
|
|
55
|
+
}
|
|
56
|
+
/** Full validation report. */
|
|
57
|
+
export interface ValidationResult {
|
|
58
|
+
readonly ok: boolean;
|
|
59
|
+
readonly issues: ValidationIssue[];
|
|
60
|
+
}
|
|
61
|
+
/** Result of a sandbox execution run. */
|
|
62
|
+
export interface SandboxResult {
|
|
63
|
+
readonly ok: boolean;
|
|
64
|
+
readonly plotCount: number;
|
|
65
|
+
readonly barCount: number;
|
|
66
|
+
readonly error?: string;
|
|
67
|
+
/** First few output values per plot (for preview). */
|
|
68
|
+
readonly preview: Array<{
|
|
69
|
+
title: string;
|
|
70
|
+
lastValue: number;
|
|
71
|
+
}>;
|
|
72
|
+
}
|
|
73
|
+
/** Check result for the save gate. */
|
|
74
|
+
export interface SaveGateCheck {
|
|
75
|
+
readonly canSave: boolean;
|
|
76
|
+
readonly blockers: string[];
|
|
77
|
+
readonly warningsToAcknowledge: string[];
|
|
78
|
+
}
|
|
79
|
+
/** Complete result of the conversion pipeline. */
|
|
80
|
+
export interface ConversionResult {
|
|
81
|
+
/** The detected or user-selected source language. */
|
|
82
|
+
readonly sourceLanguage: SourceLanguage;
|
|
83
|
+
/** Which conversion path was taken. */
|
|
84
|
+
readonly conversionPath: ConversionPath;
|
|
85
|
+
/** The converted ForgeScript source (empty string if conversion failed). */
|
|
86
|
+
readonly forgeScript: string;
|
|
87
|
+
/** Validation result against the ForgeScript grammar & runtime. */
|
|
88
|
+
readonly validation: ValidationResult;
|
|
89
|
+
/** Sandbox execution result (null if sandbox was skipped). */
|
|
90
|
+
readonly sandbox: SandboxResult | null;
|
|
91
|
+
/** Save-gate check. */
|
|
92
|
+
readonly saveGate: SaveGateCheck;
|
|
93
|
+
/** Human-readable warnings from the conversion itself. */
|
|
94
|
+
readonly warnings: ConversionWarning[];
|
|
95
|
+
/** Assumptions made during conversion. */
|
|
96
|
+
readonly assumptions: ConversionAssumption[];
|
|
97
|
+
/** Items the user should manually verify. */
|
|
98
|
+
readonly reviewChecklist: ReviewItem[];
|
|
99
|
+
/** Features that could not be converted. */
|
|
100
|
+
readonly unsupportedFeatures: string[];
|
|
101
|
+
/** Overall confidence in the conversion quality. */
|
|
102
|
+
readonly confidence: Confidence;
|
|
103
|
+
readonly confidenceExplanation: string;
|
|
104
|
+
/** Deterministic output (when applicable) for comparison. */
|
|
105
|
+
readonly deterministicOutput?: string;
|
|
106
|
+
}
|
|
107
|
+
/** Event emitted for observability. */
|
|
108
|
+
export interface ConversionTelemetryEvent {
|
|
109
|
+
readonly timestamp: number;
|
|
110
|
+
readonly sourceLanguage: SourceLanguage;
|
|
111
|
+
readonly detectionConfidence: Confidence;
|
|
112
|
+
readonly conversionPath: ConversionPath;
|
|
113
|
+
readonly validationOk: boolean;
|
|
114
|
+
readonly sandboxOk: boolean | null;
|
|
115
|
+
readonly savedByUser: boolean | null;
|
|
116
|
+
readonly errorCount: number;
|
|
117
|
+
readonly warningCount: number;
|
|
118
|
+
readonly unsupportedCount: number;
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/forgescript/conversion/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ForgeScript Validation Layer — post-conversion validation.
|
|
3
|
+
*
|
|
4
|
+
* Validates converted ForgeScript source across four dimensions:
|
|
5
|
+
* 1. Syntax — can the source be parsed without errors?
|
|
6
|
+
* 2. Runtime — are all referenced functions & namespaces supported?
|
|
7
|
+
* 3. Capability — are lookback/permission limits respected?
|
|
8
|
+
* 4. Hallucination — reject unknown identifiers & APIs
|
|
9
|
+
*
|
|
10
|
+
* If any error-severity issue is found, the script MUST NOT be saved.
|
|
11
|
+
*/
|
|
12
|
+
import type { ValidationResult } from './types';
|
|
13
|
+
/**
|
|
14
|
+
* Validate a ForgeScript source string.
|
|
15
|
+
* Returns a full validation report with zero or more issues.
|
|
16
|
+
*/
|
|
17
|
+
export declare function validateForgeScript(source: string): ValidationResult;
|
|
18
|
+
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../../src/forgescript/conversion/validation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAmB,MAAM,SAAS,CAAC;AAgEjE;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,gBAAgB,CAwLpE"}
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* LPAREN, RPAREN, LBRACKET, RBRACKET, COMMA, EQ, NEWLINE
|
|
11
11
|
* EOF
|
|
12
12
|
*/
|
|
13
|
-
export type TokenKind = 'NUMBER' | 'STRING' | 'BOOL' | 'IDENT' | 'PLUS' | 'MINUS' | 'STAR' | 'SLASH' | 'PERCENT' | 'LT' | 'GT' | 'LTE' | 'GTE' | 'EQEQ' | 'NEQ' | 'QMARK' | 'COLON' | 'LPAREN' | 'RPAREN' | 'LBRACKET' | 'RBRACKET' | 'COMMA' | 'EQ' | 'NEWLINE' | 'EOF';
|
|
13
|
+
export type TokenKind = 'NUMBER' | 'STRING' | 'BOOL' | 'IDENT' | 'COLOR' | 'PLUS' | 'MINUS' | 'STAR' | 'SLASH' | 'PERCENT' | 'LT' | 'GT' | 'LTE' | 'GTE' | 'EQEQ' | 'NEQ' | 'QMARK' | 'COLON' | 'COLONEQ' | 'DOT' | 'LPAREN' | 'RPAREN' | 'LBRACKET' | 'RBRACKET' | 'COMMA' | 'EQ' | 'ARROW' | 'INDENT' | 'DEDENT' | 'NEWLINE' | 'EOF';
|
|
14
14
|
export type Token = {
|
|
15
15
|
kind: TokenKind;
|
|
16
16
|
value: string;
|
|
@@ -24,6 +24,10 @@ export declare class Lexer {
|
|
|
24
24
|
private _col;
|
|
25
25
|
constructor(src: string);
|
|
26
26
|
tokenize(): Token[];
|
|
27
|
+
/** After each NEWLINE, inject INDENT/DEDENT tokens based on the indentation
|
|
28
|
+
* of the following non-blank line. Enables indented if/else blocks. */
|
|
29
|
+
private _injectIndents;
|
|
30
|
+
private _rawTokenize;
|
|
27
31
|
private _make;
|
|
28
32
|
private _peek;
|
|
29
33
|
private _isAlpha;
|
|
@@ -32,5 +36,7 @@ export declare class Lexer {
|
|
|
32
36
|
private _readNumber;
|
|
33
37
|
private _readString;
|
|
34
38
|
private _readIdent;
|
|
39
|
+
private _readColor;
|
|
40
|
+
private _isHex;
|
|
35
41
|
}
|
|
36
42
|
//# sourceMappingURL=lexer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lexer.d.ts","sourceRoot":"","sources":["../../src/forgescript/lexer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,MAAM,SAAS,GACjB,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,GAChD,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAC/C,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAC5C,OAAO,GAAG,OAAO,GAAG,SAAS,GAAG,KAAK,GACrC,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,UAAU,GAC7C,OAAO,GAAG,IAAI,GAAG,OAAO,GACxB,QAAQ,GAAG,QAAQ,GACnB,SAAS,GAAG,KAAK,CAAC;AAEtB,MAAM,MAAM,KAAK,GAAG;IAClB,IAAI,EAAI,SAAS,CAAC;IAClB,KAAK,EAAG,MAAM,CAAC;IACf,IAAI,EAAI,MAAM,CAAC;IACf,GAAG,EAAK,MAAM,CAAC;CAChB,CAAC;AAKF,qBAAa,KAAK;IAChB,OAAO,CAAC,IAAI,CAAU;IACtB,OAAO,CAAC,IAAI,CAAc;IAC1B,OAAO,CAAC,KAAK,CAAa;IAC1B,OAAO,CAAC,IAAI,CAAc;gBAEd,GAAG,EAAE,MAAM;IAIvB,QAAQ,IAAI,KAAK,EAAE;IAMnB;4EACwE;IACxE,OAAO,CAAC,cAAc;IAoDtB,OAAO,CAAC,YAAY;IA2EpB,OAAO,CAAC,KAAK;IAIb,OAAO,CAAC,KAAK;IAIb,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,0BAA0B;IAmBlC,OAAO,CAAC,WAAW;IAYnB,OAAO,CAAC,WAAW;IAkBnB,OAAO,CAAC,UAAU;IAgBlB,OAAO,CAAC,UAAU;IAelB,OAAO,CAAC,MAAM;CAGf"}
|
|
@@ -20,8 +20,18 @@ export declare class Parser {
|
|
|
20
20
|
parse(): Program;
|
|
21
21
|
private _stmt;
|
|
22
22
|
private _indicatorDecl;
|
|
23
|
+
private _varDeclStmt;
|
|
24
|
+
private _reassign;
|
|
25
|
+
private _forStmt;
|
|
23
26
|
private _assign;
|
|
24
27
|
private _exprStmt;
|
|
28
|
+
private _ifStmt;
|
|
29
|
+
private _whileStmt;
|
|
30
|
+
/** Lookahead: is this IDENT '(' ... ')' '=>'? Scans without consuming. */
|
|
31
|
+
private _isFnDecl;
|
|
32
|
+
/** Parse: name(p1, p2, ...) => expr OR name(p1, p2, ...) =>\n block */
|
|
33
|
+
private _fnDeclStmt;
|
|
34
|
+
private _indentedBlock;
|
|
25
35
|
private _expr;
|
|
26
36
|
private _ternary;
|
|
27
37
|
private _or;
|
|
@@ -32,7 +42,11 @@ export declare class Parser {
|
|
|
32
42
|
private _multiplication;
|
|
33
43
|
private _unary;
|
|
34
44
|
private _primary;
|
|
45
|
+
/** Parse IDENT.IDENT or IDENT.IDENT(args) */
|
|
46
|
+
private _nsCallOrMember;
|
|
35
47
|
private _callExpr;
|
|
48
|
+
/** Parse a mixed positional + named argument list. */
|
|
49
|
+
private _argList;
|
|
36
50
|
private _binop;
|
|
37
51
|
private _current;
|
|
38
52
|
private _advance;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/forgescript/parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EACV,OAAO,EAMR,MAAM,OAAO,CAAC;AAIf,qBAAa,MAAM;IACjB,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,IAAI,CAAa;gBAEb,GAAG,EAAE,MAAM;IAIvB,KAAK,IAAI,OAAO;IAYhB,OAAO,CAAC,KAAK;IA6Cb,OAAO,CAAC,cAAc;IAoBtB,OAAO,CAAC,YAAY;IAapB,OAAO,CAAC,SAAS;IAQjB,OAAO,CAAC,QAAQ;IAiBhB,OAAO,CAAC,OAAO;IAQf,OAAO,CAAC,SAAS;IAMjB,OAAO,CAAC,OAAO;IAcf,OAAO,CAAC,UAAU;IAQlB,0EAA0E;IAC1E,OAAO,CAAC,SAAS;IAejB,0EAA0E;IAC1E,OAAO,CAAC,WAAW;IAyBnB,OAAO,CAAC,cAAc;IAetB,OAAO,CAAC,KAAK;IAIb,OAAO,CAAC,QAAQ;IAYhB,OAAO,CAAC,GAAG;IAWX,OAAO,CAAC,IAAI;IAWZ,OAAO,CAAC,IAAI;IAUZ,OAAO,CAAC,WAAW;IAcnB,OAAO,CAAC,SAAS;IAUjB,OAAO,CAAC,eAAe;IAWvB,OAAO,CAAC,MAAM;IASd,OAAO,CAAC,QAAQ;IA4EhB,6CAA6C;IAC7C,OAAO,CAAC,eAAe;IA0BvB,OAAO,CAAC,SAAS;IAQjB,sDAAsD;IACtD,OAAO,CAAC,QAAQ;IA0BhB,OAAO,CAAC,MAAM;IAQd,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,MAAM;IAId,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,MAAM;IAKd,OAAO,CAAC,QAAQ;IAMhB,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,oBAAoB;IAQ5B,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,iBAAiB;IAgBzB,OAAO,CAAC,oBAAoB;CAC7B"}
|
|
@@ -3,15 +3,18 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Pipeline:
|
|
5
5
|
* Pine source → PineLexer → PineToken[] → PineParser → PineProgram
|
|
6
|
-
* → PineTranspiler →
|
|
6
|
+
* → PineTranspiler → ForgeScript source → ForgeScriptIndicator runtime
|
|
7
|
+
*
|
|
8
|
+
* Supported versions: Pine v5 and v6.
|
|
9
|
+
* Scripts tagged //@version=N where N > 6 will compile with a warning.
|
|
7
10
|
*/
|
|
8
11
|
import type { Diagnostic } from './diagnostics';
|
|
9
12
|
import type { OHLCV } from '@forgecharts/types';
|
|
10
|
-
import type { IndicatorPoint } from '
|
|
13
|
+
import type { IndicatorPoint } from '../../core/IndicatorEngine';
|
|
11
14
|
export type { Diagnostic };
|
|
12
15
|
export type { DiagnosticSeverity } from './diagnostics';
|
|
13
16
|
export interface PineCompileResult {
|
|
14
|
-
/** The transpiled
|
|
17
|
+
/** The transpiled ForgeScript source string. */
|
|
15
18
|
readonly tscript: string;
|
|
16
19
|
readonly diagnostics: readonly Diagnostic[];
|
|
17
20
|
/** `true` when there are no error-severity diagnostics. */
|
|
@@ -19,7 +22,7 @@ export interface PineCompileResult {
|
|
|
19
22
|
}
|
|
20
23
|
export declare class PineCompiler {
|
|
21
24
|
/**
|
|
22
|
-
* Compile Pine Script source to
|
|
25
|
+
* Compile Pine Script source to ForgeScript.
|
|
23
26
|
* Parse errors throw a `SyntaxError`; semantic problems populate diagnostics.
|
|
24
27
|
*/
|
|
25
28
|
compile(pineSource: string): PineCompileResult;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PineCompiler.d.ts","sourceRoot":"","sources":["../../../src/forgescript/pine/PineCompiler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAY,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAEjE,YAAY,EAAE,UAAU,EAAE,CAAC;AAC3B,YAAY,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAExD,MAAM,WAAW,iBAAiB;IAChC,gDAAgD;IAChD,QAAQ,CAAC,OAAO,EAAM,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,SAAS,UAAU,EAAE,CAAC;IAC5C,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,EAAW,OAAO,CAAC;CAC/B;AAED,qBAAa,YAAY;IACvB;;;OAGG;IACH,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,iBAAiB;IAkC9C;;;OAGG;IACH,MAAM,CAAC,GAAG,CACR,UAAU,EAAE,MAAM,EAClB,IAAI,EAAQ,SAAS,KAAK,EAAE,GAC3B;QAAE,KAAK,EAAE,cAAc,EAAE,EAAE,CAAC;QAAC,WAAW,EAAE,SAAS,UAAU,EAAE,CAAA;KAAE;CAYrE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../../src/forgescript/pine/diagnostics.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,MAAM,MAAM,kBAAkB,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AAE9D,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAG,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAM,MAAM,CAAC;IAC1B,QAAQ,CAAC,GAAG,EAAO,MAAM,CAAC;IAC1B,wDAAwD;IACxD,QAAQ,CAAC,IAAI,EAAM,MAAM,CAAC;CAC3B;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoB;IAE3C,GAAG,CACD,QAAQ,EAAE,kBAAkB,EAC5B,OAAO,EAAG,MAAM,EAChB,GAAG,EAAO;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,EACvC,IAAI,EAAM,MAAM,GACf,IAAI;IAIP,IAAI,WAAW,IAAI,SAAS,UAAU,EAAE,CAAwB;IAEhE,SAAS,IAAI,OAAO;CAGrB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/forgescript/pine/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAU,eAAe,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAO,eAAe,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAQ,gBAAgB,CAAC;AAChD,YAAY,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACpE,YAAY,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxD,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Pine Script AST types — subset understood by the ForgeCharts Pine compat layer.
|
|
3
3
|
*
|
|
4
|
-
* Supported Pine v5 constructs:
|
|
4
|
+
* Supported Pine v5/v6 constructs:
|
|
5
5
|
* indicator(title, overlay?, ...)
|
|
6
6
|
* input(defval, title?, ...) / input.int() / input.float() / input.bool() / input.source()
|
|
7
7
|
* ta.sma() ta.ema() ta.wma() ta.rma() ta.rsi() ta.macd()
|
|
@@ -9,9 +9,14 @@
|
|
|
9
9
|
* ta.crossover() ta.crossunder() ta.barssince()
|
|
10
10
|
* math.abs() math.max() math.min() math.round() math.floor() math.ceil()
|
|
11
11
|
* math.sqrt() math.log() math.pow() math.sign()
|
|
12
|
+
* str.* (partial — unsupported functions emit a diagnostic)
|
|
12
13
|
* plot() plotshape()
|
|
13
14
|
* nz() na()
|
|
14
15
|
* if / else blocks
|
|
16
|
+
* switch expression/statement (v6+)
|
|
17
|
+
* while loop (v6+)
|
|
18
|
+
* for...in loop (v6+ — emits unsupported diagnostic)
|
|
19
|
+
* type / method / import / export / enum (v6+ — silently skipped with diagnostics)
|
|
15
20
|
* var declarations
|
|
16
21
|
* ternary a ? b : c
|
|
17
22
|
*/
|
|
@@ -133,7 +138,50 @@ export type PineIf = {
|
|
|
133
138
|
else_: PineStmt[];
|
|
134
139
|
loc: Loc;
|
|
135
140
|
};
|
|
136
|
-
export type
|
|
141
|
+
export type PineSwitchCase = {
|
|
142
|
+
/** null = default / else case (no condition) */
|
|
143
|
+
condition: PineExpr | null;
|
|
144
|
+
body: PineStmt[];
|
|
145
|
+
};
|
|
146
|
+
/**
|
|
147
|
+
* Pine v6 switch statement/expression.
|
|
148
|
+
*
|
|
149
|
+
* switch subject → equality-compare each case against subject
|
|
150
|
+
* switch (no subject) → each case condition is evaluated as a boolean
|
|
151
|
+
*/
|
|
152
|
+
export type PineSwitch = {
|
|
153
|
+
kind: 'PineSwitch';
|
|
154
|
+
subject: PineExpr | null;
|
|
155
|
+
cases: PineSwitchCase[];
|
|
156
|
+
loc: Loc;
|
|
157
|
+
};
|
|
158
|
+
export type PineWhile = {
|
|
159
|
+
kind: 'PineWhile';
|
|
160
|
+
condition: PineExpr;
|
|
161
|
+
body: PineStmt[];
|
|
162
|
+
loc: Loc;
|
|
163
|
+
};
|
|
164
|
+
export type PineForIn = {
|
|
165
|
+
kind: 'PineForIn';
|
|
166
|
+
varName: string;
|
|
167
|
+
iterable: PineExpr;
|
|
168
|
+
body: PineStmt[];
|
|
169
|
+
loc: Loc;
|
|
170
|
+
};
|
|
171
|
+
/** User-defined type declaration (v6). Transpiled to a no-op with a diagnostic. */
|
|
172
|
+
export type PineTypeDef = {
|
|
173
|
+
kind: 'PineTypeDef';
|
|
174
|
+
name: string;
|
|
175
|
+
loc: Loc;
|
|
176
|
+
};
|
|
177
|
+
/** Library import statement (v6). Transpiled to a no-op with a diagnostic. */
|
|
178
|
+
export type PineImport = {
|
|
179
|
+
kind: 'PineImport';
|
|
180
|
+
path: string;
|
|
181
|
+
alias: string;
|
|
182
|
+
loc: Loc;
|
|
183
|
+
};
|
|
184
|
+
export type PineStmt = PineIndicatorDecl | PineVarDecl | PineAssign | PineExprStmt | PineIf | PineSwitch | PineWhile | PineForIn | PineTypeDef | PineImport;
|
|
137
185
|
export type PineProgram = {
|
|
138
186
|
kind: 'PineProgram';
|
|
139
187
|
version: number;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pine-ast.d.ts","sourceRoot":"","sources":["../../../src/forgescript/pine/pine-ast.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pine-lexer.d.ts","sourceRoot":"","sources":["../../../src/forgescript/pine/pine-lexer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,MAAM,OAAO,GACf,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GACtC,OAAO,GACP,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAC/C,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAC5C,OAAO,GAAG,OAAO,GAAG,OAAO,GAC3B,QAAQ,GAAG,UAAU,GACrB,KAAK,GACL,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,UAAU,GAC7C,OAAO,GACP,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAC/B,KAAK,CAAC;AAEV,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAG,OAAO,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAG,MAAM,CAAC;IACd,GAAG,EAAI,MAAM,CAAC;CACf,CAAC;AAEF,qBAAa,SAAS;IACpB,OAAO,CAAC,IAAI,CAAY;IACxB,OAAO,CAAC,IAAI,CAAgB;IAC5B,OAAO,CAAC,KAAK,CAAe;IAC5B,OAAO,CAAC,IAAI,CAAgB;IAE5B,4CAA4C;IAC5C,OAAO,SAAK;gBAEA,GAAG,EAAE,MAAM;IAIvB,QAAQ,IAAI,SAAS,EAAE;IASvB,OAAO,CAAC,YAAY;IAoFpB,OAAO,CAAC,cAAc;IA2DtB,OAAO,CAAC,KAAK;IAIb,OAAO,CAAC,KAAK;IAIb,OAAO,CAAC,IAAI;IAKZ,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,WAAW;IAWnB,OAAO,CAAC,WAAW;IAkBnB,OAAO,CAAC,UAAU;CAYnB"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pine Script Parser — recursive-descent, produces a PineProgram AST.
|
|
3
|
+
*
|
|
4
|
+
* Handles Pine v5 and v6 constructs:
|
|
5
|
+
* indicator(), input.*(), ta.*(), math.*(), str.*(), plot(), plotshape()
|
|
6
|
+
* var / varip declarations
|
|
7
|
+
* := reassignment
|
|
8
|
+
* if / else (indented blocks)
|
|
9
|
+
* switch statement/expression (v6+)
|
|
10
|
+
* while loop (v6+)
|
|
11
|
+
* for...in loop (v6+, emits unsupported diagnostic)
|
|
12
|
+
* type / method / enum declarations (v6+, silently skipped)
|
|
13
|
+
* import / export statements (v6+, silently skipped)
|
|
14
|
+
* ternary a ? b : c
|
|
15
|
+
* namespace.member and namespace.call(...)
|
|
16
|
+
*/
|
|
17
|
+
import type { PineProgram } from './pine-ast';
|
|
18
|
+
export declare class PineParser {
|
|
19
|
+
private _tokens;
|
|
20
|
+
private _pos;
|
|
21
|
+
readonly version: number;
|
|
22
|
+
constructor(src: string);
|
|
23
|
+
parse(): PineProgram;
|
|
24
|
+
private _stmt;
|
|
25
|
+
private _varDecl;
|
|
26
|
+
private _assignStmt;
|
|
27
|
+
private _indicatorDecl;
|
|
28
|
+
private _ifStmt;
|
|
29
|
+
private _indentedBlock;
|
|
30
|
+
/**
|
|
31
|
+
* switch expr
|
|
32
|
+
* val1 => body ← single-line
|
|
33
|
+
* val2 => ← multi-line
|
|
34
|
+
* stmt1
|
|
35
|
+
* => defaultBody ← default / else (no condition)
|
|
36
|
+
*
|
|
37
|
+
* OR boolean-style (no subject):
|
|
38
|
+
* switch
|
|
39
|
+
* cond1 => body
|
|
40
|
+
* cond2 => body
|
|
41
|
+
* => defaultBody
|
|
42
|
+
*/
|
|
43
|
+
private _switchStmt;
|
|
44
|
+
/** Parse single-line body (after =>) OR consume NL and parse an indented block. */
|
|
45
|
+
private _singleLineOrBlock;
|
|
46
|
+
private _whileStmt;
|
|
47
|
+
private _forInStmt;
|
|
48
|
+
/**
|
|
49
|
+
* type MyType
|
|
50
|
+
* float field1 = 0
|
|
51
|
+
* int field2 = 0
|
|
52
|
+
*
|
|
53
|
+
* We parse the name and skip the indented field block.
|
|
54
|
+
*/
|
|
55
|
+
private _typeDefStmt;
|
|
56
|
+
/**
|
|
57
|
+
* import username/libraryname/version as alias
|
|
58
|
+
*/
|
|
59
|
+
private _importStmt;
|
|
60
|
+
/**
|
|
61
|
+
* Returns true if the current position looks like a user-defined function
|
|
62
|
+
* declaration: `IDENT '(' ... ')' '=>'`.
|
|
63
|
+
* Scans forward to find the matching RPAREN, then checks for ARROW.
|
|
64
|
+
*/
|
|
65
|
+
private _looksLikeFuncDef;
|
|
66
|
+
/**
|
|
67
|
+
* Skip a user-defined function declaration and its body.
|
|
68
|
+
*
|
|
69
|
+
* funcname(param, ...) =>
|
|
70
|
+
* body
|
|
71
|
+
*
|
|
72
|
+
* OR single-line:
|
|
73
|
+
* funcname(params) => expr
|
|
74
|
+
*
|
|
75
|
+
* Emits no output — user-defined functions are unsupported in ForgeScript.
|
|
76
|
+
*/
|
|
77
|
+
private _funcDefStmt;
|
|
78
|
+
/** Skip to end of current line (consumes any tokens before NEWLINE/EOF). */
|
|
79
|
+
private _skipToNL;
|
|
80
|
+
/** Skip a full INDENT…DEDENT block, handling nesting. Does nothing if no INDENT. */
|
|
81
|
+
private _skipBlock;
|
|
82
|
+
private _expr;
|
|
83
|
+
private _ternary;
|
|
84
|
+
private _or;
|
|
85
|
+
private _and;
|
|
86
|
+
private _not;
|
|
87
|
+
private _comparison;
|
|
88
|
+
private _addition;
|
|
89
|
+
private _multiply;
|
|
90
|
+
private _unary;
|
|
91
|
+
private _postfix;
|
|
92
|
+
private _primary;
|
|
93
|
+
private _argList;
|
|
94
|
+
private _parseOneArg;
|
|
95
|
+
private _cur;
|
|
96
|
+
private _advance;
|
|
97
|
+
private _check;
|
|
98
|
+
private _checkIdent;
|
|
99
|
+
private _peekKind;
|
|
100
|
+
private _match;
|
|
101
|
+
private _consume;
|
|
102
|
+
private _skipNL;
|
|
103
|
+
private _consumeNLorEOF;
|
|
104
|
+
private _locOfCur;
|
|
105
|
+
private _locOf;
|
|
106
|
+
private _bin;
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=pine-parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pine-parser.d.ts","sourceRoot":"","sources":["../../../src/forgescript/pine/pine-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAIH,OAAO,KAAK,EACV,WAAW,EAOZ,MAAM,YAAY,CAAC;AAGpB,qBAAa,UAAU;IACrB,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,IAAI,CAAQ;IACpB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;gBAEb,GAAG,EAAE,MAAM;IAMvB,KAAK,IAAI,WAAW;IAapB,OAAO,CAAC,KAAK;IA2Fb,OAAO,CAAC,QAAQ;IAgChB,OAAO,CAAC,WAAW;IAuBnB,OAAO,CAAC,cAAc;IAUtB,OAAO,CAAC,OAAO;IAoBf,OAAO,CAAC,cAAc;IAgBtB;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,WAAW;IAwCnB,mFAAmF;IACnF,OAAO,CAAC,kBAAkB;IAY1B,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,UAAU;IA+BlB;;;;;;OAMG;IACH,OAAO,CAAC,YAAY;IASpB;;OAEG;IACH,OAAO,CAAC,WAAW;IAsBnB;;;;OAIG;IACH,OAAO,CAAC,iBAAiB;IAezB;;;;;;;;;;OAUG;IACH,OAAO,CAAC,YAAY;IAsBpB,4EAA4E;IAC5E,OAAO,CAAC,SAAS;IAOjB,oFAAoF;IACpF,OAAO,CAAC,UAAU;IAalB,OAAO,CAAC,KAAK;IAEb,OAAO,CAAC,QAAQ;IAehB,OAAO,CAAC,GAAG;IAUX,OAAO,CAAC,IAAI;IAUZ,OAAO,CAAC,IAAI;IAWZ,OAAO,CAAC,WAAW;IAcnB,OAAO,CAAC,SAAS;IAUjB,OAAO,CAAC,SAAS;IAWjB,OAAO,CAAC,MAAM;IASd,OAAO,CAAC,QAAQ;IAchB,OAAO,CAAC,QAAQ;IAmHhB,OAAO,CAAC,QAAQ;IAiBhB,OAAO,CAAC,YAAY;IAqBpB,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,SAAS;IAGjB,OAAO,CAAC,MAAM;IAId,OAAO,CAAC,QAAQ;IAKhB,OAAO,CAAC,OAAO;IAGf,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,MAAM;IAEd,OAAO,CAAC,IAAI;CAGb"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Pine Script →
|
|
2
|
+
* Pine Script → ForgeScript transpiler.
|
|
3
3
|
*
|
|
4
|
-
* Walks a `PineProgram` AST and emits a
|
|
5
|
-
* directly executable by the existing `
|
|
4
|
+
* Walks a `PineProgram` AST and emits a ForgeScript source string that is
|
|
5
|
+
* directly executable by the existing `ForgeScriptRuntime`.
|
|
6
|
+
* Supports Pine v5 and v6 constructs.
|
|
6
7
|
*/
|
|
7
8
|
import type { PineProgram } from './pine-ast';
|
|
8
9
|
import { DiagnosticBag } from './diagnostics';
|
|
@@ -18,11 +19,17 @@ export declare class PineTranspiler {
|
|
|
18
19
|
private _assign;
|
|
19
20
|
private _exprStmt;
|
|
20
21
|
private _ifStmt;
|
|
22
|
+
private _switchStmt;
|
|
23
|
+
private _whileStmt;
|
|
24
|
+
private _forInStmt;
|
|
21
25
|
private _expr;
|
|
22
26
|
private _numLit;
|
|
23
27
|
private _nsCall;
|
|
24
28
|
private _inputNsCall;
|
|
29
|
+
private _strNsCall;
|
|
25
30
|
private _call;
|
|
31
|
+
/** Transpile supported output functions, preserving named args */
|
|
32
|
+
private _outputFnCall;
|
|
26
33
|
private _plotCall;
|
|
27
34
|
private _member;
|
|
28
35
|
private _binary;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pine-transpiler.d.ts","sourceRoot":"","sources":["../../../src/forgescript/pine/pine-transpiler.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,WAAW,EAMZ,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAkG9C,qBAAa,cAAc;IACzB,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,IAAI,CAAgB;gBAEhB,IAAI,EAAE,aAAa;IAI/B,SAAS,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM;IAWpC,OAAO,CAAC,KAAK;IAeb,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,QAAQ;IAMhB,OAAO,CAAC,OAAO;IAKf,OAAO,CAAC,SAAS;IAejB,OAAO,CAAC,OAAO;IAcf,OAAO,CAAC,WAAW;IAsBnB,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,UAAU;IAYlB,OAAO,CAAC,KAAK;IAmBb,OAAO,CAAC,OAAO;IAKf,OAAO,CAAC,OAAO;IAmEf,OAAO,CAAC,YAAY;IAepB,OAAO,CAAC,UAAU;IA4BlB,OAAO,CAAC,KAAK;IAiCb,kEAAkE;IAClE,OAAO,CAAC,aAAa;IAQrB,OAAO,CAAC,SAAS;IAWjB,OAAO,CAAC,OAAO;IAmCf,OAAO,CAAC,OAAO;IAMf,OAAO,CAAC,MAAM;IAKd,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,KAAK;CAId"}
|