@simahfud/pine-to-kline 0.1.1 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (117) hide show
  1. package/dist/index.d.ts +696 -21
  2. package/dist/pine-to-kline.js +17 -14
  3. package/dist/pine-to-kline.js.map +1 -1
  4. package/dist/pine-to-kline.umd.js +1 -1
  5. package/dist/pine-to-kline.umd.js.map +1 -1
  6. package/package.json +1 -1
  7. package/dist/PineInterpreter.d.ts +0 -19
  8. package/dist/PineInterpreter.d.ts.map +0 -1
  9. package/dist/PineInterpreter.js +0 -89
  10. package/dist/PineInterpreter.js.map +0 -1
  11. package/dist/adapter/FigureMapper.d.ts +0 -8
  12. package/dist/adapter/FigureMapper.d.ts.map +0 -1
  13. package/dist/adapter/FigureMapper.js +0 -22
  14. package/dist/adapter/FigureMapper.js.map +0 -1
  15. package/dist/adapter/KlineAdapter.d.ts +0 -11
  16. package/dist/adapter/KlineAdapter.d.ts.map +0 -1
  17. package/dist/adapter/KlineAdapter.js +0 -88
  18. package/dist/adapter/KlineAdapter.js.map +0 -1
  19. package/dist/adapter/StyleMapper.d.ts +0 -10
  20. package/dist/adapter/StyleMapper.d.ts.map +0 -1
  21. package/dist/adapter/StyleMapper.js +0 -28
  22. package/dist/adapter/StyleMapper.js.map +0 -1
  23. package/dist/builtins/color/constants.d.ts +0 -7
  24. package/dist/builtins/color/constants.d.ts.map +0 -1
  25. package/dist/builtins/color/constants.js +0 -25
  26. package/dist/builtins/color/constants.js.map +0 -1
  27. package/dist/builtins/color/functions.d.ts +0 -21
  28. package/dist/builtins/color/functions.d.ts.map +0 -1
  29. package/dist/builtins/color/functions.js +0 -52
  30. package/dist/builtins/color/functions.js.map +0 -1
  31. package/dist/builtins/index.d.ts +0 -15
  32. package/dist/builtins/index.d.ts.map +0 -1
  33. package/dist/builtins/index.js +0 -32
  34. package/dist/builtins/index.js.map +0 -1
  35. package/dist/builtins/input/functions.d.ts +0 -28
  36. package/dist/builtins/input/functions.d.ts.map +0 -1
  37. package/dist/builtins/input/functions.js +0 -114
  38. package/dist/builtins/input/functions.js.map +0 -1
  39. package/dist/builtins/math/functions.d.ts +0 -9
  40. package/dist/builtins/math/functions.d.ts.map +0 -1
  41. package/dist/builtins/math/functions.js +0 -57
  42. package/dist/builtins/math/functions.js.map +0 -1
  43. package/dist/builtins/ta/crossover.d.ts +0 -18
  44. package/dist/builtins/ta/crossover.d.ts.map +0 -1
  45. package/dist/builtins/ta/crossover.js +0 -59
  46. package/dist/builtins/ta/crossover.js.map +0 -1
  47. package/dist/builtins/ta/index.d.ts +0 -12
  48. package/dist/builtins/ta/index.d.ts.map +0 -1
  49. package/dist/builtins/ta/index.js +0 -61
  50. package/dist/builtins/ta/index.js.map +0 -1
  51. package/dist/builtins/ta/momentum.d.ts +0 -22
  52. package/dist/builtins/ta/momentum.d.ts.map +0 -1
  53. package/dist/builtins/ta/momentum.js +0 -81
  54. package/dist/builtins/ta/momentum.js.map +0 -1
  55. package/dist/builtins/ta/moving-averages.d.ts +0 -24
  56. package/dist/builtins/ta/moving-averages.d.ts.map +0 -1
  57. package/dist/builtins/ta/moving-averages.js +0 -108
  58. package/dist/builtins/ta/moving-averages.js.map +0 -1
  59. package/dist/builtins/ta/utility.d.ts +0 -28
  60. package/dist/builtins/ta/utility.d.ts.map +0 -1
  61. package/dist/builtins/ta/utility.js +0 -156
  62. package/dist/builtins/ta/utility.js.map +0 -1
  63. package/dist/builtins/ta/volatility.d.ts +0 -21
  64. package/dist/builtins/ta/volatility.d.ts.map +0 -1
  65. package/dist/builtins/ta/volatility.js +0 -71
  66. package/dist/builtins/ta/volatility.js.map +0 -1
  67. package/dist/index.d.ts.map +0 -1
  68. package/dist/index.js +0 -24
  69. package/dist/index.js.map +0 -1
  70. package/dist/lexer/Lexer.d.ts +0 -40
  71. package/dist/lexer/Lexer.d.ts.map +0 -1
  72. package/dist/lexer/Lexer.js +0 -383
  73. package/dist/lexer/Lexer.js.map +0 -1
  74. package/dist/lexer/Token.d.ts +0 -16
  75. package/dist/lexer/Token.d.ts.map +0 -1
  76. package/dist/lexer/Token.js +0 -26
  77. package/dist/lexer/Token.js.map +0 -1
  78. package/dist/lexer/TokenType.d.ts +0 -74
  79. package/dist/lexer/TokenType.d.ts.map +0 -1
  80. package/dist/lexer/TokenType.js +0 -111
  81. package/dist/lexer/TokenType.js.map +0 -1
  82. package/dist/parser/Parser.d.ts +0 -55
  83. package/dist/parser/Parser.d.ts.map +0 -1
  84. package/dist/parser/Parser.js +0 -569
  85. package/dist/parser/Parser.js.map +0 -1
  86. package/dist/parser/nodes/index.d.ts +0 -215
  87. package/dist/parser/nodes/index.d.ts.map +0 -1
  88. package/dist/parser/nodes/index.js +0 -7
  89. package/dist/parser/nodes/index.js.map +0 -1
  90. package/dist/plugin/KlineChartProPlugin.d.ts +0 -43
  91. package/dist/plugin/KlineChartProPlugin.d.ts.map +0 -1
  92. package/dist/plugin/KlineChartProPlugin.js +0 -44
  93. package/dist/plugin/KlineChartProPlugin.js.map +0 -1
  94. package/dist/runtime/BarContext.d.ts +0 -23
  95. package/dist/runtime/BarContext.d.ts.map +0 -1
  96. package/dist/runtime/BarContext.js +0 -41
  97. package/dist/runtime/BarContext.js.map +0 -1
  98. package/dist/runtime/PineRuntime.d.ts +0 -51
  99. package/dist/runtime/PineRuntime.d.ts.map +0 -1
  100. package/dist/runtime/PineRuntime.js +0 -471
  101. package/dist/runtime/PineRuntime.js.map +0 -1
  102. package/dist/runtime/SeriesEmulator.d.ts +0 -21
  103. package/dist/runtime/SeriesEmulator.d.ts.map +0 -1
  104. package/dist/runtime/SeriesEmulator.js +0 -32
  105. package/dist/runtime/SeriesEmulator.js.map +0 -1
  106. package/dist/runtime/VarPersistence.d.ts +0 -20
  107. package/dist/runtime/VarPersistence.d.ts.map +0 -1
  108. package/dist/runtime/VarPersistence.js +0 -28
  109. package/dist/runtime/VarPersistence.js.map +0 -1
  110. package/dist/types.d.ts +0 -97
  111. package/dist/types.d.ts.map +0 -1
  112. package/dist/types.js +0 -6
  113. package/dist/types.js.map +0 -1
  114. package/dist/utils/errors.d.ts +0 -24
  115. package/dist/utils/errors.d.ts.map +0 -1
  116. package/dist/utils/errors.js +0 -46
  117. package/dist/utils/errors.js.map +0 -1
@@ -1,383 +0,0 @@
1
- /**
2
- * pine-to-kline — Lexer (Tokenizer)
3
- * Converts PineScript source code into a stream of tokens.
4
- * Handles indentation-significant syntax (INDENT/DEDENT).
5
- * @license Apache-2.0
6
- */
7
- import { Token } from './Token';
8
- import { TokenType, KEYWORDS } from './TokenType';
9
- import { LexerError } from '../utils/errors';
10
- export class Lexer {
11
- source;
12
- tokens = [];
13
- pos = 0;
14
- line = 1;
15
- column = 1;
16
- indentStack = [0];
17
- atLineStart = true;
18
- constructor(source) {
19
- // Normalize line endings
20
- this.source = source.replace(/\r\n/g, '\n').replace(/\r/g, '\n');
21
- }
22
- tokenize() {
23
- this.tokens = [];
24
- this.pos = 0;
25
- this.line = 1;
26
- this.column = 1;
27
- this.indentStack = [0];
28
- this.atLineStart = true;
29
- while (this.pos < this.source.length) {
30
- if (this.atLineStart) {
31
- this.handleIndentation();
32
- this.atLineStart = false;
33
- }
34
- const ch = this.current();
35
- if (ch === undefined)
36
- break;
37
- // Skip spaces/tabs mid-line
38
- if (ch === ' ' || ch === '\t') {
39
- this.advance();
40
- continue;
41
- }
42
- // Newlines
43
- if (ch === '\n') {
44
- this.emitNewline();
45
- continue;
46
- }
47
- // Comments and compiler annotations
48
- if (ch === '/' && this.peek() === '/') {
49
- this.readComment();
50
- continue;
51
- }
52
- // Numbers
53
- if (this.isDigit(ch) || (ch === '.' && this.peek() !== undefined && this.isDigit(this.peek()))) {
54
- this.readNumber();
55
- continue;
56
- }
57
- // Strings
58
- if (ch === '"' || ch === "'") {
59
- this.readString(ch);
60
- continue;
61
- }
62
- // Color literals: #RRGGBB or #RRGGBBAA
63
- if (ch === '#' && this.isHexDigit(this.peek())) {
64
- this.readColor();
65
- continue;
66
- }
67
- // Identifiers and keywords
68
- if (this.isAlpha(ch) || ch === '_') {
69
- this.readIdentifier();
70
- continue;
71
- }
72
- // Operators and delimiters
73
- if (this.readOperator()) {
74
- continue;
75
- }
76
- throw new LexerError(`Unexpected character: '${ch}'`, this.line, this.column);
77
- }
78
- // Emit remaining DEDENTs
79
- while (this.indentStack.length > 1) {
80
- this.indentStack.pop();
81
- this.tokens.push(new Token(TokenType.DEDENT, '', this.line, this.column));
82
- }
83
- this.tokens.push(new Token(TokenType.EOF, '', this.line, this.column));
84
- return this.filterTokens(this.tokens);
85
- }
86
- // ─── Indentation ────────────────────────────────────────────
87
- handleIndentation() {
88
- let indent = 0;
89
- while (this.pos < this.source.length) {
90
- const ch = this.source[this.pos];
91
- if (ch === ' ') {
92
- indent++;
93
- this.pos++;
94
- this.column++;
95
- }
96
- else if (ch === '\t') {
97
- indent += 4; // Tab = 4 spaces
98
- this.pos++;
99
- this.column++;
100
- }
101
- else {
102
- break;
103
- }
104
- }
105
- // Skip blank lines
106
- if (this.pos < this.source.length && this.source[this.pos] === '\n') {
107
- return;
108
- }
109
- // Skip comment-only lines (don't affect indentation)
110
- if (this.pos < this.source.length && this.source[this.pos] === '/' && this.pos + 1 < this.source.length && this.source[this.pos + 1] === '/') {
111
- return;
112
- }
113
- const currentIndent = this.indentStack[this.indentStack.length - 1];
114
- if (indent > currentIndent) {
115
- this.indentStack.push(indent);
116
- this.tokens.push(new Token(TokenType.INDENT, '', this.line, 1));
117
- }
118
- else if (indent < currentIndent) {
119
- while (this.indentStack.length > 1 && this.indentStack[this.indentStack.length - 1] > indent) {
120
- this.indentStack.pop();
121
- this.tokens.push(new Token(TokenType.DEDENT, '', this.line, 1));
122
- }
123
- }
124
- }
125
- // ─── Newlines ───────────────────────────────────────────────
126
- emitNewline() {
127
- // Don't emit consecutive newlines
128
- const lastToken = this.tokens[this.tokens.length - 1];
129
- if (!lastToken || (lastToken.type !== TokenType.NEWLINE && lastToken.type !== TokenType.INDENT)) {
130
- this.tokens.push(new Token(TokenType.NEWLINE, '\n', this.line, this.column));
131
- }
132
- this.advance(); // consume \n
133
- this.line++;
134
- this.column = 1;
135
- this.atLineStart = true;
136
- }
137
- // ─── Comments ───────────────────────────────────────────────
138
- readComment() {
139
- const startCol = this.column;
140
- let value = '';
141
- this.advance(); // first /
142
- this.advance(); // second /
143
- // Check for compiler annotation: //@version=5
144
- if (this.current() === '@') {
145
- value = '//@';
146
- this.advance(); // @
147
- while (this.pos < this.source.length && this.current() !== '\n') {
148
- value += this.current();
149
- this.advance();
150
- }
151
- this.tokens.push(new Token(TokenType.COMPILER_ANNOTATION, value.trim(), this.line, startCol));
152
- return;
153
- }
154
- // Regular comment — skip until end of line
155
- while (this.pos < this.source.length && this.current() !== '\n') {
156
- value += this.current();
157
- this.advance();
158
- }
159
- // Comments are skipped (not emitted as tokens)
160
- }
161
- // ─── Numbers ────────────────────────────────────────────────
162
- readNumber() {
163
- const startCol = this.column;
164
- let value = '';
165
- // Integer or float
166
- while (this.pos < this.source.length && (this.isDigit(this.current()) || this.current() === '.')) {
167
- value += this.current();
168
- this.advance();
169
- }
170
- // Scientific notation: 1e5, 1.5e-3
171
- if (this.current() === 'e' || this.current() === 'E') {
172
- value += this.current();
173
- this.advance();
174
- if (this.current() === '+' || this.current() === '-') {
175
- value += this.current();
176
- this.advance();
177
- }
178
- while (this.pos < this.source.length && this.isDigit(this.current())) {
179
- value += this.current();
180
- this.advance();
181
- }
182
- }
183
- this.tokens.push(new Token(TokenType.NUMBER, value, this.line, startCol));
184
- }
185
- // ─── Strings ────────────────────────────────────────────────
186
- readString(quote) {
187
- const startCol = this.column;
188
- const startLine = this.line;
189
- let value = '';
190
- this.advance(); // opening quote
191
- while (this.pos < this.source.length) {
192
- const ch = this.current();
193
- if (ch === '\\') {
194
- this.advance();
195
- const esc = this.current();
196
- if (esc === 'n')
197
- value += '\n';
198
- else if (esc === 't')
199
- value += '\t';
200
- else if (esc === '\\')
201
- value += '\\';
202
- else if (esc === quote)
203
- value += quote;
204
- else
205
- value += '\\' + (esc ?? '');
206
- this.advance();
207
- continue;
208
- }
209
- if (ch === quote) {
210
- this.advance(); // closing quote
211
- this.tokens.push(new Token(TokenType.STRING, value, startLine, startCol));
212
- return;
213
- }
214
- if (ch === '\n') {
215
- throw new LexerError('Unterminated string literal', startLine, startCol);
216
- }
217
- value += ch;
218
- this.advance();
219
- }
220
- throw new LexerError('Unterminated string literal', startLine, startCol);
221
- }
222
- // ─── Color Literals ─────────────────────────────────────────
223
- readColor() {
224
- const startCol = this.column;
225
- let value = '#';
226
- this.advance(); // #
227
- while (this.pos < this.source.length && this.isHexDigit(this.current())) {
228
- value += this.current();
229
- this.advance();
230
- }
231
- if (value.length !== 7 && value.length !== 9) {
232
- throw new LexerError(`Invalid color literal: ${value}`, this.line, startCol);
233
- }
234
- this.tokens.push(new Token(TokenType.COLOR_LITERAL, value, this.line, startCol));
235
- }
236
- // ─── Identifiers & Keywords ─────────────────────────────────
237
- readIdentifier() {
238
- const startCol = this.column;
239
- let value = '';
240
- while (this.pos < this.source.length && (this.isAlphaNumeric(this.current()) || this.current() === '_')) {
241
- value += this.current();
242
- this.advance();
243
- }
244
- // Check for keyword
245
- const keyword = KEYWORDS[value];
246
- if (keyword) {
247
- this.tokens.push(new Token(keyword, value, this.line, startCol));
248
- }
249
- else {
250
- this.tokens.push(new Token(TokenType.IDENTIFIER, value, this.line, startCol));
251
- }
252
- }
253
- // ─── Operators & Delimiters ─────────────────────────────────
254
- readOperator() {
255
- const ch = this.current();
256
- const next = this.peek();
257
- const startCol = this.column;
258
- // Two-character operators
259
- if (next !== undefined) {
260
- const two = ch + next;
261
- const twoCharOps = {
262
- '==': TokenType.EQ,
263
- '!=': TokenType.NEQ,
264
- '<=': TokenType.LTE,
265
- '>=': TokenType.GTE,
266
- ':=': TokenType.REASSIGN,
267
- '+=': TokenType.PLUS_ASSIGN,
268
- '-=': TokenType.MINUS_ASSIGN,
269
- '*=': TokenType.STAR_ASSIGN,
270
- '/=': TokenType.SLASH_ASSIGN,
271
- '%=': TokenType.PERCENT_ASSIGN,
272
- '=>': TokenType.ARROW,
273
- '**': TokenType.POWER,
274
- };
275
- if (twoCharOps[two]) {
276
- this.advance();
277
- this.advance();
278
- this.tokens.push(new Token(twoCharOps[two], two, this.line, startCol));
279
- return true;
280
- }
281
- }
282
- // Single-character operators
283
- const singleCharOps = {
284
- '+': TokenType.PLUS,
285
- '-': TokenType.MINUS,
286
- '*': TokenType.STAR,
287
- '/': TokenType.SLASH,
288
- '%': TokenType.PERCENT,
289
- '<': TokenType.LT,
290
- '>': TokenType.GT,
291
- '=': TokenType.ASSIGN,
292
- '(': TokenType.LPAREN,
293
- ')': TokenType.RPAREN,
294
- '[': TokenType.LBRACKET,
295
- ']': TokenType.RBRACKET,
296
- ',': TokenType.COMMA,
297
- '.': TokenType.DOT,
298
- ':': TokenType.COLON,
299
- '?': TokenType.QUESTION,
300
- };
301
- if (singleCharOps[ch]) {
302
- this.advance();
303
- this.tokens.push(new Token(singleCharOps[ch], ch, this.line, startCol));
304
- return true;
305
- }
306
- return false;
307
- }
308
- // ─── Post-Processing ───────────────────────────────────────
309
- /**
310
- * Filter out meaningless tokens and handle line continuation.
311
- * Pine uses implicit line continuation after certain tokens:
312
- * binary operators, commas, opening brackets/parens.
313
- */
314
- filterTokens(tokens) {
315
- const result = [];
316
- const continuationTokens = new Set([
317
- TokenType.PLUS, TokenType.MINUS, TokenType.STAR, TokenType.SLASH,
318
- TokenType.PERCENT, TokenType.POWER, TokenType.EQ, TokenType.NEQ,
319
- TokenType.LT, TokenType.GT, TokenType.LTE, TokenType.GTE,
320
- TokenType.AND, TokenType.OR, TokenType.COMMA, TokenType.ASSIGN,
321
- TokenType.REASSIGN, TokenType.PLUS_ASSIGN, TokenType.MINUS_ASSIGN,
322
- TokenType.STAR_ASSIGN, TokenType.SLASH_ASSIGN, TokenType.PERCENT_ASSIGN,
323
- TokenType.QUESTION, TokenType.COLON, TokenType.ARROW,
324
- TokenType.LPAREN, TokenType.LBRACKET,
325
- ]);
326
- let parenDepth = 0;
327
- let bracketDepth = 0;
328
- for (let i = 0; i < tokens.length; i++) {
329
- const tok = tokens[i];
330
- if (tok.type === TokenType.LPAREN)
331
- parenDepth++;
332
- if (tok.type === TokenType.RPAREN)
333
- parenDepth--;
334
- if (tok.type === TokenType.LBRACKET)
335
- bracketDepth++;
336
- if (tok.type === TokenType.RBRACKET)
337
- bracketDepth--;
338
- // Skip newlines inside parentheses/brackets (implicit continuation)
339
- if (tok.type === TokenType.NEWLINE && (parenDepth > 0 || bracketDepth > 0)) {
340
- continue;
341
- }
342
- // Skip newlines after continuation tokens
343
- if (tok.type === TokenType.NEWLINE) {
344
- const prev = result[result.length - 1];
345
- if (prev && continuationTokens.has(prev.type)) {
346
- continue;
347
- }
348
- }
349
- // Skip INDENT/DEDENT inside parens/brackets
350
- if ((tok.type === TokenType.INDENT || tok.type === TokenType.DEDENT) && (parenDepth > 0 || bracketDepth > 0)) {
351
- continue;
352
- }
353
- result.push(tok);
354
- }
355
- return result;
356
- }
357
- // ─── Helpers ────────────────────────────────────────────────
358
- current() {
359
- return this.source[this.pos];
360
- }
361
- peek(offset = 1) {
362
- return this.source[this.pos + offset];
363
- }
364
- advance() {
365
- this.pos++;
366
- this.column++;
367
- }
368
- isDigit(ch) {
369
- return ch >= '0' && ch <= '9';
370
- }
371
- isAlpha(ch) {
372
- return (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') || ch === '_';
373
- }
374
- isAlphaNumeric(ch) {
375
- return this.isAlpha(ch) || this.isDigit(ch);
376
- }
377
- isHexDigit(ch) {
378
- if (!ch)
379
- return false;
380
- return (ch >= '0' && ch <= '9') || (ch >= 'a' && ch <= 'f') || (ch >= 'A' && ch <= 'F');
381
- }
382
- }
383
- //# sourceMappingURL=Lexer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Lexer.js","sourceRoot":"","sources":["../../src/lexer/Lexer.ts"],"names":[],"mappings":"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"}
@@ -1,16 +0,0 @@
1
- /**
2
- * pine-to-kline — Token
3
- * @license Apache-2.0
4
- */
5
- import { TokenType } from './TokenType';
6
- export declare class Token {
7
- readonly type: TokenType;
8
- readonly value: string;
9
- readonly line: number;
10
- readonly column: number;
11
- constructor(type: TokenType, value: string, line: number, column: number);
12
- is(type: TokenType): boolean;
13
- isAny(...types: TokenType[]): boolean;
14
- toString(): string;
15
- }
16
- //# sourceMappingURL=Token.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Token.d.ts","sourceRoot":"","sources":["../../src/lexer/Token.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAEvC,qBAAa,KAAK;aAEE,IAAI,EAAE,SAAS;aACf,KAAK,EAAE,MAAM;aACb,IAAI,EAAE,MAAM;aACZ,MAAM,EAAE,MAAM;gBAHd,IAAI,EAAE,SAAS,EACf,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM;IAGhC,EAAE,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO;IAI5B,KAAK,CAAC,GAAG,KAAK,EAAE,SAAS,EAAE,GAAG,OAAO;IAIrC,QAAQ,IAAI,MAAM;CAGnB"}
@@ -1,26 +0,0 @@
1
- /**
2
- * pine-to-kline — Token
3
- * @license Apache-2.0
4
- */
5
- export class Token {
6
- type;
7
- value;
8
- line;
9
- column;
10
- constructor(type, value, line, column) {
11
- this.type = type;
12
- this.value = value;
13
- this.line = line;
14
- this.column = column;
15
- }
16
- is(type) {
17
- return this.type === type;
18
- }
19
- isAny(...types) {
20
- return types.includes(this.type);
21
- }
22
- toString() {
23
- return `Token(${this.type}, ${JSON.stringify(this.value)}, ${this.line}:${this.column})`;
24
- }
25
- }
26
- //# sourceMappingURL=Token.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Token.js","sourceRoot":"","sources":["../../src/lexer/Token.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,OAAO,KAAK;IAEE;IACA;IACA;IACA;IAJlB,YACkB,IAAe,EACf,KAAa,EACb,IAAY,EACZ,MAAc;QAHd,SAAI,GAAJ,IAAI,CAAW;QACf,UAAK,GAAL,KAAK,CAAQ;QACb,SAAI,GAAJ,IAAI,CAAQ;QACZ,WAAM,GAAN,MAAM,CAAQ;IAC7B,CAAC;IAEJ,EAAE,CAAC,IAAe;QAChB,OAAO,IAAI,CAAC,IAAI,KAAK,IAAI,CAAA;IAC3B,CAAC;IAED,KAAK,CAAC,GAAG,KAAkB;QACzB,OAAO,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAClC,CAAC;IAED,QAAQ;QACN,OAAO,SAAS,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAA;IAC1F,CAAC;CACF"}
@@ -1,74 +0,0 @@
1
- /**
2
- * pine-to-kline — Token Types
3
- * All PineScript v5/v6 token categories
4
- * @license Apache-2.0
5
- */
6
- export declare enum TokenType {
7
- NUMBER = "NUMBER",
8
- STRING = "STRING",
9
- COLOR_LITERAL = "COLOR_LITERAL",// #RRGGBB or #RRGGBBAA
10
- IDENTIFIER = "IDENTIFIER",
11
- IF = "IF",
12
- ELSE = "ELSE",
13
- FOR = "FOR",
14
- TO = "TO",
15
- BY = "BY",
16
- IN = "IN",
17
- WHILE = "WHILE",
18
- SWITCH = "SWITCH",
19
- VAR = "VAR",
20
- VARIP = "VARIP",
21
- TRUE = "TRUE",
22
- FALSE = "FALSE",
23
- NA = "NA",
24
- AND = "AND",
25
- OR = "OR",
26
- NOT = "NOT",
27
- IMPORT = "IMPORT",
28
- EXPORT = "EXPORT",
29
- TYPE = "TYPE",
30
- METHOD = "METHOD",
31
- BREAK = "BREAK",
32
- CONTINUE = "CONTINUE",
33
- RETURN = "RETURN",
34
- INDICATOR = "INDICATOR",
35
- STRATEGY = "STRATEGY",
36
- LIBRARY = "LIBRARY",
37
- PLUS = "PLUS",// +
38
- MINUS = "MINUS",// -
39
- STAR = "STAR",// *
40
- SLASH = "SLASH",// /
41
- PERCENT = "PERCENT",// %
42
- POWER = "POWER",// ** (NEW in Pine — not ^)
43
- EQ = "EQ",// ==
44
- NEQ = "NEQ",// !=
45
- LT = "LT",// <
46
- GT = "GT",// >
47
- LTE = "LTE",// <=
48
- GTE = "GTE",// >=
49
- ASSIGN = "ASSIGN",// =
50
- REASSIGN = "REASSIGN",// :=
51
- PLUS_ASSIGN = "PLUS_ASSIGN",// +=
52
- MINUS_ASSIGN = "MINUS_ASSIGN",// -=
53
- STAR_ASSIGN = "STAR_ASSIGN",// *=
54
- SLASH_ASSIGN = "SLASH_ASSIGN",// /=
55
- PERCENT_ASSIGN = "PERCENT_ASSIGN",// %=
56
- LPAREN = "LPAREN",// (
57
- RPAREN = "RPAREN",// )
58
- LBRACKET = "LBRACKET",// [
59
- RBRACKET = "RBRACKET",// ]
60
- COMMA = "COMMA",// ,
61
- DOT = "DOT",// .
62
- COLON = "COLON",// :
63
- QUESTION = "QUESTION",// ?
64
- ARROW = "ARROW",// =>
65
- NEWLINE = "NEWLINE",
66
- INDENT = "INDENT",
67
- DEDENT = "DEDENT",
68
- EOF = "EOF",
69
- COMMENT = "COMMENT",
70
- COMPILER_ANNOTATION = "COMPILER_ANNOTATION"
71
- }
72
- /** Keywords map for fast lookup */
73
- export declare const KEYWORDS: Record<string, TokenType>;
74
- //# sourceMappingURL=TokenType.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TokenType.d.ts","sourceRoot":"","sources":["../../src/lexer/TokenType.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,oBAAY,SAAS;IAEnB,MAAM,WAAoB;IAC1B,MAAM,WAAoB;IAC1B,aAAa,kBAAoB,CAAK,uBAAuB;IAG7D,UAAU,eAAoB;IAG9B,EAAE,OAAoB;IACtB,IAAI,SAAoB;IACxB,GAAG,QAAoB;IACvB,EAAE,OAAoB;IACtB,EAAE,OAAoB;IACtB,EAAE,OAAoB;IACtB,KAAK,UAAoB;IACzB,MAAM,WAAoB;IAC1B,GAAG,QAAoB;IACvB,KAAK,UAAoB;IACzB,IAAI,SAAoB;IACxB,KAAK,UAAoB;IACzB,EAAE,OAAoB;IACtB,GAAG,QAAoB;IACvB,EAAE,OAAoB;IACtB,GAAG,QAAoB;IACvB,MAAM,WAAoB;IAC1B,MAAM,WAAoB;IAC1B,IAAI,SAAoB;IACxB,MAAM,WAAoB;IAC1B,KAAK,UAAoB;IACzB,QAAQ,aAAoB;IAC5B,MAAM,WAAoB;IAG1B,SAAS,cAAoB;IAC7B,QAAQ,aAAoB;IAC5B,OAAO,YAAoB;IAG3B,IAAI,SAAoB,CAAW,IAAI;IACvC,KAAK,UAAoB,CAAU,IAAI;IACvC,IAAI,SAAoB,CAAW,IAAI;IACvC,KAAK,UAAoB,CAAU,IAAI;IACvC,OAAO,YAAoB,CAAQ,IAAI;IACvC,KAAK,UAAoB,CAAU,4BAA4B;IAG/D,EAAE,OAAoB,CAAa,KAAK;IACxC,GAAG,QAAoB,CAAY,KAAK;IACxC,EAAE,OAAoB,CAAY,IAAI;IACtC,EAAE,OAAoB,CAAY,IAAI;IACtC,GAAG,QAAoB,CAAW,KAAK;IACvC,GAAG,QAAoB,CAAW,KAAK;IAGvC,MAAM,WAAoB,CAAQ,IAAI;IACtC,QAAQ,aAAoB,CAAM,KAAK;IACvC,WAAW,gBAAoB,CAAG,KAAK;IACvC,YAAY,iBAAoB,CAAE,KAAK;IACvC,WAAW,gBAAoB,CAAG,KAAK;IACvC,YAAY,iBAAoB,CAAE,KAAK;IACvC,cAAc,mBAAoB,CAAE,KAAK;IAGzC,MAAM,WAAoB,CAAQ,IAAI;IACtC,MAAM,WAAoB,CAAQ,IAAI;IACtC,QAAQ,aAAoB,CAAM,IAAI;IACtC,QAAQ,aAAoB,CAAM,IAAI;IACtC,KAAK,UAAoB,CAAS,IAAI;IACtC,GAAG,QAAoB,CAAW,IAAI;IACtC,KAAK,UAAoB,CAAS,IAAI;IACtC,QAAQ,aAAoB,CAAM,IAAI;IACtC,KAAK,UAAoB,CAAS,KAAK;IAGvC,OAAO,YAAoB;IAC3B,MAAM,WAAoB;IAC1B,MAAM,WAAoB;IAC1B,GAAG,QAAoB;IAGvB,OAAO,YAAoB;IAC3B,mBAAmB,wBAAwB;CAC5C;AAED,mCAAmC;AACnC,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CA0B9C,CAAA"}
@@ -1,111 +0,0 @@
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"TokenType.js","sourceRoot":"","sources":["../../src/lexer/TokenType.ts"],"names":[],"mappings":"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"}