@simahfud/pine-to-kline 0.1.0 → 0.1.1
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/PineInterpreter.d.ts +19 -0
- package/dist/PineInterpreter.d.ts.map +1 -0
- package/dist/PineInterpreter.js +89 -0
- package/dist/PineInterpreter.js.map +1 -0
- package/dist/adapter/FigureMapper.d.ts +8 -0
- package/dist/adapter/FigureMapper.d.ts.map +1 -0
- package/dist/adapter/FigureMapper.js +22 -0
- package/dist/adapter/FigureMapper.js.map +1 -0
- package/dist/adapter/KlineAdapter.d.ts +11 -0
- package/dist/adapter/KlineAdapter.d.ts.map +1 -0
- package/dist/adapter/KlineAdapter.js +88 -0
- package/dist/adapter/KlineAdapter.js.map +1 -0
- package/dist/adapter/StyleMapper.d.ts +10 -0
- package/dist/adapter/StyleMapper.d.ts.map +1 -0
- package/dist/adapter/StyleMapper.js +28 -0
- package/dist/adapter/StyleMapper.js.map +1 -0
- package/dist/builtins/color/constants.d.ts +7 -0
- package/dist/builtins/color/constants.d.ts.map +1 -0
- package/dist/builtins/color/constants.js +25 -0
- package/dist/builtins/color/constants.js.map +1 -0
- package/dist/builtins/color/functions.d.ts +21 -0
- package/dist/builtins/color/functions.d.ts.map +1 -0
- package/dist/builtins/color/functions.js +52 -0
- package/dist/builtins/color/functions.js.map +1 -0
- package/dist/builtins/index.d.ts +15 -0
- package/dist/builtins/index.d.ts.map +1 -0
- package/dist/builtins/index.js +32 -0
- package/dist/builtins/index.js.map +1 -0
- package/dist/builtins/input/functions.d.ts +28 -0
- package/dist/builtins/input/functions.d.ts.map +1 -0
- package/dist/builtins/input/functions.js +114 -0
- package/dist/builtins/input/functions.js.map +1 -0
- package/dist/builtins/math/functions.d.ts +9 -0
- package/dist/builtins/math/functions.d.ts.map +1 -0
- package/dist/builtins/math/functions.js +57 -0
- package/dist/builtins/math/functions.js.map +1 -0
- package/dist/builtins/ta/crossover.d.ts +18 -0
- package/dist/builtins/ta/crossover.d.ts.map +1 -0
- package/dist/builtins/ta/crossover.js +59 -0
- package/dist/builtins/ta/crossover.js.map +1 -0
- package/dist/builtins/ta/index.d.ts +12 -0
- package/dist/builtins/ta/index.d.ts.map +1 -0
- package/dist/builtins/ta/index.js +61 -0
- package/dist/builtins/ta/index.js.map +1 -0
- package/dist/builtins/ta/momentum.d.ts +22 -0
- package/dist/builtins/ta/momentum.d.ts.map +1 -0
- package/dist/builtins/ta/momentum.js +81 -0
- package/dist/builtins/ta/momentum.js.map +1 -0
- package/dist/builtins/ta/moving-averages.d.ts +24 -0
- package/dist/builtins/ta/moving-averages.d.ts.map +1 -0
- package/dist/builtins/ta/moving-averages.js +108 -0
- package/dist/builtins/ta/moving-averages.js.map +1 -0
- package/dist/builtins/ta/utility.d.ts +28 -0
- package/dist/builtins/ta/utility.d.ts.map +1 -0
- package/dist/builtins/ta/utility.js +156 -0
- package/dist/builtins/ta/utility.js.map +1 -0
- package/dist/builtins/ta/volatility.d.ts +21 -0
- package/dist/builtins/ta/volatility.d.ts.map +1 -0
- package/dist/builtins/ta/volatility.js +71 -0
- package/dist/builtins/ta/volatility.js.map +1 -0
- package/dist/index.d.ts +21 -695
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +24 -0
- package/dist/index.js.map +1 -0
- package/dist/lexer/Lexer.d.ts +40 -0
- package/dist/lexer/Lexer.d.ts.map +1 -0
- package/dist/lexer/Lexer.js +383 -0
- package/dist/lexer/Lexer.js.map +1 -0
- package/dist/lexer/Token.d.ts +16 -0
- package/dist/lexer/Token.d.ts.map +1 -0
- package/dist/lexer/Token.js +26 -0
- package/dist/lexer/Token.js.map +1 -0
- package/dist/lexer/TokenType.d.ts +74 -0
- package/dist/lexer/TokenType.d.ts.map +1 -0
- package/dist/lexer/TokenType.js +111 -0
- package/dist/lexer/TokenType.js.map +1 -0
- package/dist/parser/Parser.d.ts +55 -0
- package/dist/parser/Parser.d.ts.map +1 -0
- package/dist/parser/Parser.js +569 -0
- package/dist/parser/Parser.js.map +1 -0
- package/dist/parser/nodes/index.d.ts +215 -0
- package/dist/parser/nodes/index.d.ts.map +1 -0
- package/dist/parser/nodes/index.js +7 -0
- package/dist/parser/nodes/index.js.map +1 -0
- package/dist/plugin/KlineChartProPlugin.d.ts +43 -0
- package/dist/plugin/KlineChartProPlugin.d.ts.map +1 -0
- package/dist/plugin/KlineChartProPlugin.js +44 -0
- package/dist/plugin/KlineChartProPlugin.js.map +1 -0
- package/dist/runtime/BarContext.d.ts +23 -0
- package/dist/runtime/BarContext.d.ts.map +1 -0
- package/dist/runtime/BarContext.js +41 -0
- package/dist/runtime/BarContext.js.map +1 -0
- package/dist/runtime/PineRuntime.d.ts +51 -0
- package/dist/runtime/PineRuntime.d.ts.map +1 -0
- package/dist/runtime/PineRuntime.js +471 -0
- package/dist/runtime/PineRuntime.js.map +1 -0
- package/dist/runtime/SeriesEmulator.d.ts +21 -0
- package/dist/runtime/SeriesEmulator.d.ts.map +1 -0
- package/dist/runtime/SeriesEmulator.js +32 -0
- package/dist/runtime/SeriesEmulator.js.map +1 -0
- package/dist/runtime/VarPersistence.d.ts +20 -0
- package/dist/runtime/VarPersistence.d.ts.map +1 -0
- package/dist/runtime/VarPersistence.js +28 -0
- package/dist/runtime/VarPersistence.js.map +1 -0
- package/dist/types.d.ts +97 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/errors.d.ts +24 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +46 -0
- package/dist/utils/errors.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pine-to-kline — Token Types
|
|
3
|
+
* All PineScript v5/v6 token categories
|
|
4
|
+
* @license Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
export var TokenType;
|
|
7
|
+
(function (TokenType) {
|
|
8
|
+
// ─── Literals ───────────────────────────
|
|
9
|
+
TokenType["NUMBER"] = "NUMBER";
|
|
10
|
+
TokenType["STRING"] = "STRING";
|
|
11
|
+
TokenType["COLOR_LITERAL"] = "COLOR_LITERAL";
|
|
12
|
+
// ─── Identifiers ───────────────────────
|
|
13
|
+
TokenType["IDENTIFIER"] = "IDENTIFIER";
|
|
14
|
+
// ─── Keywords ───────────────────────────
|
|
15
|
+
TokenType["IF"] = "IF";
|
|
16
|
+
TokenType["ELSE"] = "ELSE";
|
|
17
|
+
TokenType["FOR"] = "FOR";
|
|
18
|
+
TokenType["TO"] = "TO";
|
|
19
|
+
TokenType["BY"] = "BY";
|
|
20
|
+
TokenType["IN"] = "IN";
|
|
21
|
+
TokenType["WHILE"] = "WHILE";
|
|
22
|
+
TokenType["SWITCH"] = "SWITCH";
|
|
23
|
+
TokenType["VAR"] = "VAR";
|
|
24
|
+
TokenType["VARIP"] = "VARIP";
|
|
25
|
+
TokenType["TRUE"] = "TRUE";
|
|
26
|
+
TokenType["FALSE"] = "FALSE";
|
|
27
|
+
TokenType["NA"] = "NA";
|
|
28
|
+
TokenType["AND"] = "AND";
|
|
29
|
+
TokenType["OR"] = "OR";
|
|
30
|
+
TokenType["NOT"] = "NOT";
|
|
31
|
+
TokenType["IMPORT"] = "IMPORT";
|
|
32
|
+
TokenType["EXPORT"] = "EXPORT";
|
|
33
|
+
TokenType["TYPE"] = "TYPE";
|
|
34
|
+
TokenType["METHOD"] = "METHOD";
|
|
35
|
+
TokenType["BREAK"] = "BREAK";
|
|
36
|
+
TokenType["CONTINUE"] = "CONTINUE";
|
|
37
|
+
TokenType["RETURN"] = "RETURN";
|
|
38
|
+
// ─── Pine-specific Keywords ─────────────
|
|
39
|
+
TokenType["INDICATOR"] = "INDICATOR";
|
|
40
|
+
TokenType["STRATEGY"] = "STRATEGY";
|
|
41
|
+
TokenType["LIBRARY"] = "LIBRARY";
|
|
42
|
+
// ─── Arithmetic Operators ───────────────
|
|
43
|
+
TokenType["PLUS"] = "PLUS";
|
|
44
|
+
TokenType["MINUS"] = "MINUS";
|
|
45
|
+
TokenType["STAR"] = "STAR";
|
|
46
|
+
TokenType["SLASH"] = "SLASH";
|
|
47
|
+
TokenType["PERCENT"] = "PERCENT";
|
|
48
|
+
TokenType["POWER"] = "POWER";
|
|
49
|
+
// ─── Comparison Operators ───────────────
|
|
50
|
+
TokenType["EQ"] = "EQ";
|
|
51
|
+
TokenType["NEQ"] = "NEQ";
|
|
52
|
+
TokenType["LT"] = "LT";
|
|
53
|
+
TokenType["GT"] = "GT";
|
|
54
|
+
TokenType["LTE"] = "LTE";
|
|
55
|
+
TokenType["GTE"] = "GTE";
|
|
56
|
+
// ─── Assignment Operators ───────────────
|
|
57
|
+
TokenType["ASSIGN"] = "ASSIGN";
|
|
58
|
+
TokenType["REASSIGN"] = "REASSIGN";
|
|
59
|
+
TokenType["PLUS_ASSIGN"] = "PLUS_ASSIGN";
|
|
60
|
+
TokenType["MINUS_ASSIGN"] = "MINUS_ASSIGN";
|
|
61
|
+
TokenType["STAR_ASSIGN"] = "STAR_ASSIGN";
|
|
62
|
+
TokenType["SLASH_ASSIGN"] = "SLASH_ASSIGN";
|
|
63
|
+
TokenType["PERCENT_ASSIGN"] = "PERCENT_ASSIGN";
|
|
64
|
+
// ─── Delimiters ─────────────────────────
|
|
65
|
+
TokenType["LPAREN"] = "LPAREN";
|
|
66
|
+
TokenType["RPAREN"] = "RPAREN";
|
|
67
|
+
TokenType["LBRACKET"] = "LBRACKET";
|
|
68
|
+
TokenType["RBRACKET"] = "RBRACKET";
|
|
69
|
+
TokenType["COMMA"] = "COMMA";
|
|
70
|
+
TokenType["DOT"] = "DOT";
|
|
71
|
+
TokenType["COLON"] = "COLON";
|
|
72
|
+
TokenType["QUESTION"] = "QUESTION";
|
|
73
|
+
TokenType["ARROW"] = "ARROW";
|
|
74
|
+
// ─── Whitespace / Structure ─────────────
|
|
75
|
+
TokenType["NEWLINE"] = "NEWLINE";
|
|
76
|
+
TokenType["INDENT"] = "INDENT";
|
|
77
|
+
TokenType["DEDENT"] = "DEDENT";
|
|
78
|
+
TokenType["EOF"] = "EOF";
|
|
79
|
+
// ─── Comments & Annotations ─────────────
|
|
80
|
+
TokenType["COMMENT"] = "COMMENT";
|
|
81
|
+
TokenType["COMPILER_ANNOTATION"] = "COMPILER_ANNOTATION";
|
|
82
|
+
})(TokenType || (TokenType = {}));
|
|
83
|
+
/** Keywords map for fast lookup */
|
|
84
|
+
export const KEYWORDS = {
|
|
85
|
+
'if': TokenType.IF,
|
|
86
|
+
'else': TokenType.ELSE,
|
|
87
|
+
'for': TokenType.FOR,
|
|
88
|
+
'to': TokenType.TO,
|
|
89
|
+
'by': TokenType.BY,
|
|
90
|
+
'in': TokenType.IN,
|
|
91
|
+
'while': TokenType.WHILE,
|
|
92
|
+
'switch': TokenType.SWITCH,
|
|
93
|
+
'var': TokenType.VAR,
|
|
94
|
+
'varip': TokenType.VARIP,
|
|
95
|
+
'true': TokenType.TRUE,
|
|
96
|
+
'false': TokenType.FALSE,
|
|
97
|
+
'na': TokenType.NA,
|
|
98
|
+
'and': TokenType.AND,
|
|
99
|
+
'or': TokenType.OR,
|
|
100
|
+
'not': TokenType.NOT,
|
|
101
|
+
'import': TokenType.IMPORT,
|
|
102
|
+
'export': TokenType.EXPORT,
|
|
103
|
+
'type': TokenType.TYPE,
|
|
104
|
+
'method': TokenType.METHOD,
|
|
105
|
+
'break': TokenType.BREAK,
|
|
106
|
+
'continue': TokenType.CONTINUE,
|
|
107
|
+
'return': TokenType.RETURN,
|
|
108
|
+
// Pine type keywords are treated as identifiers, not reserved
|
|
109
|
+
// (int, float, bool, string, color, etc.)
|
|
110
|
+
};
|
|
111
|
+
//# sourceMappingURL=TokenType.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TokenType.js","sourceRoot":"","sources":["../../src/lexer/TokenType.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pine-to-kline — Parser
|
|
3
|
+
* Recursive descent parser: Token[] → AST (ProgramNode)
|
|
4
|
+
* @license Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { Token } from '../lexer/Token';
|
|
7
|
+
import type { ProgramNode } from './nodes/index';
|
|
8
|
+
export declare class Parser {
|
|
9
|
+
private tokens;
|
|
10
|
+
private pos;
|
|
11
|
+
constructor(tokens: Token[]);
|
|
12
|
+
parse(): ProgramNode;
|
|
13
|
+
private parseStatement;
|
|
14
|
+
private parseIdentifierStatement;
|
|
15
|
+
private parseIndicator;
|
|
16
|
+
private parseVarDecl;
|
|
17
|
+
private parseTypedDecl;
|
|
18
|
+
private parseAssignment;
|
|
19
|
+
private parseTupleAssign;
|
|
20
|
+
private parseIf;
|
|
21
|
+
private parseFor;
|
|
22
|
+
private parseWhile;
|
|
23
|
+
private parseSwitch;
|
|
24
|
+
private parseReturn;
|
|
25
|
+
private isFunctionDef;
|
|
26
|
+
private parseFunctionDef;
|
|
27
|
+
private parsePlotCall;
|
|
28
|
+
private parseHlineCall;
|
|
29
|
+
private parseExpression;
|
|
30
|
+
private parseTernary;
|
|
31
|
+
private parseOr;
|
|
32
|
+
private parseAnd;
|
|
33
|
+
private parseComparison;
|
|
34
|
+
private parseAddition;
|
|
35
|
+
private parseMultiplication;
|
|
36
|
+
private parsePower;
|
|
37
|
+
private parseUnary;
|
|
38
|
+
private parsePostfix;
|
|
39
|
+
private parsePrimary;
|
|
40
|
+
private parseCallArgs;
|
|
41
|
+
private parseBlock;
|
|
42
|
+
private parseBlockOrExpr;
|
|
43
|
+
private buildCalleeName;
|
|
44
|
+
private peek;
|
|
45
|
+
private peekAt;
|
|
46
|
+
private previous;
|
|
47
|
+
private isAtEnd;
|
|
48
|
+
private advance;
|
|
49
|
+
private check;
|
|
50
|
+
private checkAny;
|
|
51
|
+
private match;
|
|
52
|
+
private expect;
|
|
53
|
+
private skipNewlines;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=Parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Parser.d.ts","sourceRoot":"","sources":["../../src/parser/Parser.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAGtC,OAAO,KAAK,EACV,WAAW,EAOZ,MAAM,eAAe,CAAA;AAKtB,qBAAa,MAAM;IACjB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,GAAG,CAAI;gBAEH,MAAM,EAAE,KAAK,EAAE;IAI3B,KAAK,IAAI,WAAW;IA0BpB,OAAO,CAAC,cAAc;IAsCtB,OAAO,CAAC,wBAAwB;IAwChC,OAAO,CAAC,cAAc;IAgBtB,OAAO,CAAC,YAAY;IAiBpB,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,eAAe;IAOvB,OAAO,CAAC,gBAAgB;IAexB,OAAO,CAAC,OAAO;IA2Bf,OAAO,CAAC,QAAQ;IA0BhB,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,WAAW;IAiCnB,OAAO,CAAC,WAAW;IAWnB,OAAO,CAAC,aAAa;IAYrB,OAAO,CAAC,gBAAgB;IAuBxB,OAAO,CAAC,aAAa;IAQrB,OAAO,CAAC,cAAc;IAUtB,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,YAAY;IAWpB,OAAO,CAAC,OAAO;IASf,OAAO,CAAC,QAAQ;IAShB,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,mBAAmB;IAU3B,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,UAAU;IAYlB,OAAO,CAAC,YAAY;IAsCpB,OAAO,CAAC,YAAY;IAqDpB,OAAO,CAAC,aAAa;IA2BrB,OAAO,CAAC,UAAU;IAqBlB,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,OAAO;IAEf,OAAO,CAAC,OAAO;IAKf,OAAO,CAAC,KAAK;IAIb,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,KAAK;IAKb,OAAO,CAAC,MAAM;IAMd,OAAO,CAAC,YAAY;CAGrB"}
|