@hoox-sh/pynets 0.1.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/CHANGELOG.md +59 -0
  2. package/README.md +20 -9
  3. package/dist/browser.js +95 -34
  4. package/dist/index.d.ts +1 -1
  5. package/dist/index.js +23002 -12427
  6. package/package.json +1 -1
  7. package/src/ast/builder.ts +235 -12
  8. package/src/ast/nodes.ts +114 -4
  9. package/src/ast/unparse.ts +192 -17
  10. package/src/cli/rich.ts +4 -3
  11. package/src/cli.ts +29 -7
  12. package/src/generated/PinescriptLexer.interp +5 -1
  13. package/src/generated/PinescriptLexer.tokens +97 -95
  14. package/src/generated/PinescriptLexer.ts +512 -502
  15. package/src/generated/PinescriptParser.interp +8 -1
  16. package/src/generated/PinescriptParser.tokens +97 -95
  17. package/src/generated/PinescriptParser.ts +1907 -1287
  18. package/src/generated/PinescriptParserVisitor.ts +36 -1
  19. package/src/index.ts +22 -0
  20. package/src/runtime/array.ts +238 -68
  21. package/src/runtime/compile/collections.ts +492 -0
  22. package/src/runtime/compile/draw.ts +181 -0
  23. package/src/runtime/compile/emit.ts +1421 -0
  24. package/src/runtime/compile/emit_call.ts +1796 -0
  25. package/src/runtime/compile/emit_udf.ts +326 -0
  26. package/src/runtime/compile/engine.ts +265 -0
  27. package/src/runtime/compile/helpers.ts +140 -0
  28. package/src/runtime/compile/index.ts +33 -0
  29. package/src/runtime/compile/runtime.ts +357 -0
  30. package/src/runtime/compile/strategy.ts +250 -0
  31. package/src/runtime/compile/types.ts +127 -0
  32. package/src/runtime/compile/udt_runtime.ts +50 -0
  33. package/src/runtime/drawings.ts +405 -8
  34. package/src/runtime/interpret.ts +2387 -281
  35. package/src/runtime/matrix.ts +371 -42
  36. package/src/runtime/strategy.ts +695 -33
  37. package/src/runtime/ta.ts +654 -20
  38. package/src/runtime/timeframe.ts +199 -0
@@ -0,0 +1,492 @@
1
+ /**
2
+ * Copyright (C) 2024-2026 jango_blockchained
3
+ * SPDX-License-Identifier: AGPL-3.0-or-later
4
+ *
5
+ * Compile-path array / map / matrix facades. Wraps PineArray / PineMap / PineMatrix.
6
+ */
7
+ import { PineArray } from "../array.ts";
8
+ import { PineMap } from "../map.ts";
9
+ import { PineMatrix } from "../matrix.ts";
10
+ import { naNum } from "./helpers.ts";
11
+
12
+ function n(v: unknown, fallback = 0): number {
13
+ const x = naNum(v);
14
+ return x == null ? fallback : x;
15
+ }
16
+
17
+ function cell(v: unknown): number | null {
18
+ if (v != null && typeof v === "object") return null;
19
+ return naNum(v);
20
+ }
21
+
22
+ /** Keep UDT/string/bool slots; only coerce non-finite numbers to `na`. */
23
+ function store(v: unknown): unknown {
24
+ if (v == null) return null;
25
+ if (typeof v === "number") return Number.isFinite(v) ? v : null;
26
+ return v;
27
+ }
28
+
29
+ function parseSortArgs(order?: unknown, sortField?: unknown): { order: "asc" | "desc"; field: unknown } {
30
+ if (sortField !== undefined && sortField !== null) {
31
+ return { order: sortOrder(order), field: sortField };
32
+ }
33
+ if (order == null) return { order: "asc", field: null };
34
+ if (typeof order === "string") {
35
+ const low = order.toLowerCase();
36
+ if (low === "ascending" || low === "descending" || low === "asc" || low === "desc" || low.includes("desc") || low.includes("asc")) {
37
+ return { order: sortOrder(order), field: null };
38
+ }
39
+ return { order: "asc", field: order };
40
+ }
41
+ if (typeof order === "number" && Number.isFinite(order)) {
42
+ if (order === 1 || order === -1) return { order: sortOrder(order), field: null };
43
+ return { order: "asc", field: order };
44
+ }
45
+ return { order: sortOrder(order), field: null };
46
+ }
47
+
48
+ function asArray(id: unknown): PineArray | null {
49
+ return id instanceof PineArray ? id : null;
50
+ }
51
+
52
+ function asMap(id: unknown): PineMap | null {
53
+ return id instanceof PineMap ? id : null;
54
+ }
55
+
56
+ function asMatrix(id: unknown): PineMatrix | null {
57
+ return id instanceof PineMatrix ? id : null;
58
+ }
59
+
60
+ function sortOrder(order: unknown): "asc" | "desc" {
61
+ if (typeof order === "number") return order < 0 ? "desc" : "asc";
62
+ return String(order ?? "asc").toLowerCase().includes("desc") ? "desc" : "asc";
63
+ }
64
+
65
+ function wrapCells(cells: ReadonlyArray<unknown> | null | undefined): PineArray | null {
66
+ if (cells == null) return null;
67
+ const out = new PineArray();
68
+ for (const v of cells) out.push(store(v));
69
+ return out;
70
+ }
71
+
72
+ function storedArrayValues(id: unknown): unknown[] | undefined {
73
+ const a = asArray(id);
74
+ if (a == null) return undefined;
75
+ return a.toValues().map(store);
76
+ }
77
+
78
+ export const compileArray = {
79
+ new(size?: unknown, initial?: unknown): PineArray {
80
+ return new PineArray(n(size, 0), store(initial));
81
+ },
82
+ get(id: unknown, index?: unknown): unknown {
83
+ return asArray(id)?.get(n(index, 0)) ?? null;
84
+ },
85
+ set(id: unknown, index?: unknown, value?: unknown): unknown {
86
+ asArray(id)?.set(n(index, 0), store(value));
87
+ return id ?? null;
88
+ },
89
+ push(id: unknown, value?: unknown): unknown {
90
+ asArray(id)?.push(store(value));
91
+ return id ?? null;
92
+ },
93
+ pop(id: unknown): unknown {
94
+ return asArray(id)?.pop() ?? null;
95
+ },
96
+ unshift(id: unknown, value?: unknown): unknown {
97
+ asArray(id)?.unshift(store(value));
98
+ return id ?? null;
99
+ },
100
+ shift(id: unknown): unknown {
101
+ return asArray(id)?.shift() ?? null;
102
+ },
103
+ size(id: unknown): number {
104
+ return asArray(id)?.size() ?? 0;
105
+ },
106
+ includes(id: unknown, value?: unknown): boolean {
107
+ return asArray(id)?.includes(store(value)) ?? false;
108
+ },
109
+ first(id: unknown): unknown {
110
+ return asArray(id)?.first() ?? null;
111
+ },
112
+ last(id: unknown): unknown {
113
+ return asArray(id)?.last() ?? null;
114
+ },
115
+ insert(id: unknown, index?: unknown, value?: unknown): unknown {
116
+ asArray(id)?.insert(n(index, 0), store(value));
117
+ return id ?? null;
118
+ },
119
+ remove(id: unknown, index?: unknown): unknown {
120
+ return asArray(id)?.remove(n(index, 0)) ?? null;
121
+ },
122
+ clear(id: unknown): unknown {
123
+ asArray(id)?.clear();
124
+ return id ?? null;
125
+ },
126
+ fill(id: unknown, value?: unknown): unknown {
127
+ asArray(id)?.fill(store(value));
128
+ return id ?? null;
129
+ },
130
+ copy(id: unknown): PineArray | null {
131
+ return asArray(id)?.copy() ?? null;
132
+ },
133
+ reverse(id: unknown): unknown {
134
+ asArray(id)?.reverse();
135
+ return id ?? null;
136
+ },
137
+ sort(id: unknown, order?: unknown, sortField?: unknown): unknown {
138
+ const parsed = parseSortArgs(order, sortField);
139
+ asArray(id)?.sort(parsed.order, parsed.field);
140
+ return id ?? null;
141
+ },
142
+ concat(id: unknown, other?: unknown): PineArray | null {
143
+ const a = asArray(id);
144
+ const b = asArray(other);
145
+ if (a == null) return b?.copy() ?? null;
146
+ if (b == null) return a;
147
+ return a.concat(b);
148
+ },
149
+ slice(id: unknown, from?: unknown, to?: unknown): PineArray | null {
150
+ return asArray(id)?.slice(n(from, 0), to == null ? undefined : n(to, 0)) ?? null;
151
+ },
152
+ indexof(id: unknown, value?: unknown): number | null {
153
+ return asArray(id)?.indexof(store(value)) ?? null;
154
+ },
155
+ lastindexof(id: unknown, value?: unknown): number | null {
156
+ return asArray(id)?.lastIndexOf(store(value)) ?? null;
157
+ },
158
+ avg(id: unknown): number | null {
159
+ return asArray(id)?.avg() ?? null;
160
+ },
161
+ min(id: unknown): number | null {
162
+ return asArray(id)?.min() ?? null;
163
+ },
164
+ max(id: unknown): number | null {
165
+ return asArray(id)?.max() ?? null;
166
+ },
167
+ sum(id: unknown): number | null {
168
+ return asArray(id)?.sum() ?? null;
169
+ },
170
+ stdev(id: unknown, biased?: unknown): number | null {
171
+ return asArray(id)?.stdev(biased !== false && biased !== 0) ?? null;
172
+ },
173
+ variance(id: unknown, biased?: unknown): number | null {
174
+ return asArray(id)?.variance(biased !== false && biased !== 0) ?? null;
175
+ },
176
+ join(id: unknown, sep?: unknown): string {
177
+ return asArray(id)?.join(sep == null ? "," : String(sep)) ?? "";
178
+ },
179
+ every(id: unknown): boolean {
180
+ return asArray(id)?.every() ?? false;
181
+ },
182
+ some(id: unknown): boolean {
183
+ return asArray(id)?.some() ?? false;
184
+ },
185
+ abs(id: unknown): PineArray | null {
186
+ return asArray(id)?.abs() ?? null;
187
+ },
188
+ range(id: unknown): number | null {
189
+ return asArray(id)?.range() ?? null;
190
+ },
191
+ percentile_nearest(id: unknown, percentage?: unknown): number | null {
192
+ const a = asArray(id);
193
+ const p = naNum(percentage);
194
+ return a != null && p != null ? a.percentileNearestRank(p) : null;
195
+ },
196
+ percentileNearestRank(id: unknown, percentage?: unknown): number | null {
197
+ return compileArray.percentile_nearest(id, percentage);
198
+ },
199
+ percentile_linear(id: unknown, percentage?: unknown): number | null {
200
+ const a = asArray(id);
201
+ const p = naNum(percentage);
202
+ return a != null && p != null ? a.percentileLinearInterpolation(p) : null;
203
+ },
204
+ percentileLinearInterpolation(id: unknown, percentage?: unknown): number | null {
205
+ return compileArray.percentile_linear(id, percentage);
206
+ },
207
+ percentrank(id: unknown, value?: unknown): number | null {
208
+ return asArray(id)?.percentrank(cell(value)) ?? null;
209
+ },
210
+ binary_search(id: unknown, value?: unknown, sortField?: unknown): number | null {
211
+ return asArray(id)?.binarySearch(store(value), sortField) ?? null;
212
+ },
213
+ binary_search_leftmost(id: unknown, value?: unknown, sortField?: unknown): number | null {
214
+ return asArray(id)?.binarySearchLeftmost(store(value), sortField) ?? null;
215
+ },
216
+ binary_search_rightmost(id: unknown, value?: unknown, sortField?: unknown): number | null {
217
+ return asArray(id)?.binarySearchRightmost(store(value), sortField) ?? null;
218
+ },
219
+ sort_indices(id: unknown, order?: unknown, sortField?: unknown): PineArray | null {
220
+ const parsed = parseSortArgs(order, sortField);
221
+ const idx = asArray(id)?.sortIndices(parsed.order, parsed.field);
222
+ return wrapCells(idx);
223
+ },
224
+ };
225
+
226
+ export const compileMap = {
227
+ new(): PineMap {
228
+ return new PineMap();
229
+ },
230
+ put(id: unknown, key?: unknown, value?: unknown): unknown {
231
+ asMap(id)?.put(key, cell(value));
232
+ return id ?? null;
233
+ },
234
+ get(id: unknown, key?: unknown): number | null {
235
+ return asMap(id)?.get(key) ?? null;
236
+ },
237
+ contains(id: unknown, key?: unknown): boolean {
238
+ return asMap(id)?.contains(key) ?? false;
239
+ },
240
+ remove(id: unknown, key?: unknown): number | null {
241
+ return asMap(id)?.remove(key) ?? null;
242
+ },
243
+ clear(id: unknown): unknown {
244
+ asMap(id)?.clear();
245
+ return id ?? null;
246
+ },
247
+ size(id: unknown): number {
248
+ return asMap(id)?.size() ?? 0;
249
+ },
250
+ keys(id: unknown): unknown[] {
251
+ return asMap(id)?.keys() ?? [];
252
+ },
253
+ values(id: unknown): Array<number | null> {
254
+ return asMap(id)?.values() ?? [];
255
+ },
256
+ copy(id: unknown): PineMap | null {
257
+ return asMap(id)?.copy() ?? null;
258
+ },
259
+ put_all(id: unknown, other?: unknown): unknown {
260
+ const m = asMap(id);
261
+ const o = asMap(other);
262
+ if (m != null && o != null) m.putAll(o);
263
+ return id ?? null;
264
+ },
265
+ };
266
+
267
+ export const compileMatrix = {
268
+ new(rows?: unknown, cols?: unknown, initial?: unknown): PineMatrix {
269
+ return new PineMatrix(n(rows, 0), n(cols, 0), store(initial));
270
+ },
271
+ get(id: unknown, row?: unknown, col?: unknown): unknown {
272
+ return asMatrix(id)?.get(n(row, 0), n(col, 0)) ?? null;
273
+ },
274
+ set(id: unknown, row?: unknown, col?: unknown, value?: unknown): unknown {
275
+ asMatrix(id)?.set(n(row, 0), n(col, 0), store(value));
276
+ return id ?? null;
277
+ },
278
+ rows(id: unknown): number {
279
+ return asMatrix(id)?.rows() ?? 0;
280
+ },
281
+ columns(id: unknown): number {
282
+ return asMatrix(id)?.columns() ?? 0;
283
+ },
284
+ fill(id: unknown, value?: unknown): unknown {
285
+ asMatrix(id)?.fill(store(value));
286
+ return id ?? null;
287
+ },
288
+ add_row(id: unknown, index?: unknown, array?: unknown): unknown {
289
+ const idx = naNum(index);
290
+ asMatrix(id)?.addRow(idx ?? undefined, storedArrayValues(array));
291
+ return id ?? null;
292
+ },
293
+ add_col(id: unknown, index?: unknown, array?: unknown): unknown {
294
+ const idx = naNum(index);
295
+ asMatrix(id)?.addCol(idx ?? undefined, storedArrayValues(array));
296
+ return id ?? null;
297
+ },
298
+ transpose(id: unknown): PineMatrix | null {
299
+ return asMatrix(id)?.transpose() ?? null;
300
+ },
301
+ copy(id: unknown): PineMatrix | null {
302
+ return asMatrix(id)?.copy() ?? null;
303
+ },
304
+ row(id: unknown, index?: unknown): PineArray | null {
305
+ const m = asMatrix(id);
306
+ return m == null ? null : wrapCells(m.row(n(index, 0)));
307
+ },
308
+ col(id: unknown, index?: unknown): PineArray | null {
309
+ const m = asMatrix(id);
310
+ return m == null ? null : wrapCells(m.col(n(index, 0)));
311
+ },
312
+ sum(id: unknown): number | null {
313
+ return asMatrix(id)?.sum() ?? null;
314
+ },
315
+ avg(id: unknown): number | null {
316
+ return asMatrix(id)?.avg() ?? null;
317
+ },
318
+ min(id: unknown): number | null {
319
+ return asMatrix(id)?.min() ?? null;
320
+ },
321
+ max(id: unknown): number | null {
322
+ return asMatrix(id)?.max() ?? null;
323
+ },
324
+ det(id: unknown): number | null {
325
+ return asMatrix(id)?.det() ?? null;
326
+ },
327
+ mult(id: unknown, other?: unknown): PineMatrix | null {
328
+ const m = asMatrix(id);
329
+ if (m == null) return null;
330
+ const o = asMatrix(other);
331
+ if (o != null) return m.mult(o);
332
+ const s = naNum(other);
333
+ return s == null ? null : m.mult(s);
334
+ },
335
+ inv(id: unknown): PineMatrix | null {
336
+ return asMatrix(id)?.inv() ?? null;
337
+ },
338
+ pinv(id: unknown): PineMatrix | null {
339
+ return asMatrix(id)?.pinv() ?? null;
340
+ },
341
+ kron(id: unknown, other?: unknown): PineMatrix | null {
342
+ const m = asMatrix(id);
343
+ const o = asMatrix(other);
344
+ return m != null && o != null ? m.kron(o) : null;
345
+ },
346
+ rank(id: unknown): number | null {
347
+ return asMatrix(id)?.rank() ?? null;
348
+ },
349
+ add(id: unknown, other?: unknown): PineMatrix | null {
350
+ const m = asMatrix(id);
351
+ if (m == null) return null;
352
+ const o = asMatrix(other);
353
+ if (o != null) {
354
+ const neg = o.mult(-1);
355
+ return neg == null ? null : m.diff(neg);
356
+ }
357
+ const s = naNum(other);
358
+ if (s == null) return null;
359
+ return m.diff(new PineMatrix(m.rows(), m.columns(), -s));
360
+ },
361
+ diff(id: unknown, other?: unknown): PineMatrix | null {
362
+ const m = asMatrix(id);
363
+ const o = asMatrix(other);
364
+ return m != null && o != null ? m.diff(o) : null;
365
+ },
366
+ reshape(id: unknown, rows?: unknown, cols?: unknown): PineMatrix | null {
367
+ return asMatrix(id)?.reshape(n(rows, 0), n(cols, 0)) ?? null;
368
+ },
369
+ reverse(id: unknown): unknown {
370
+ asMatrix(id)?.reverse();
371
+ return id ?? null;
372
+ },
373
+ sort(id: unknown, column?: unknown, order?: unknown, sortField?: unknown): unknown {
374
+ asMatrix(id)?.sort(n(column, 0), sortOrder(order), sortField);
375
+ return id ?? null;
376
+ },
377
+ sort_indices(id: unknown, column?: unknown, order?: unknown, sortField?: unknown): PineArray | null {
378
+ const m = asMatrix(id);
379
+ if (m == null) return null;
380
+ return wrapCells(m.sortIndices(n(column, 0), sortOrder(order), sortField));
381
+ },
382
+ eigenvalues(id: unknown): PineArray | null {
383
+ return wrapCells(asMatrix(id)?.eigenvalues());
384
+ },
385
+ eigenvectors(id: unknown): PineMatrix | null {
386
+ return asMatrix(id)?.eigenvectors() ?? null;
387
+ },
388
+ sum_row(id: unknown, index?: unknown): number | null {
389
+ const m = asMatrix(id);
390
+ const i = naNum(index);
391
+ if (m == null || i == null) return null;
392
+ return m.sumRow(i);
393
+ },
394
+ avg_row(id: unknown, index?: unknown): number | null {
395
+ const m = asMatrix(id);
396
+ const i = naNum(index);
397
+ if (m == null || i == null) return null;
398
+ return m.avgRow(i);
399
+ },
400
+ min_row(id: unknown, index?: unknown): number | null {
401
+ const m = asMatrix(id);
402
+ const i = naNum(index);
403
+ if (m == null || i == null) return null;
404
+ return m.minRow(i);
405
+ },
406
+ max_row(id: unknown, index?: unknown): number | null {
407
+ const m = asMatrix(id);
408
+ const i = naNum(index);
409
+ if (m == null || i == null) return null;
410
+ return m.maxRow(i);
411
+ },
412
+ mode_row(id: unknown, index?: unknown): unknown {
413
+ const m = asMatrix(id);
414
+ const i = naNum(index);
415
+ if (m == null || i == null) return null;
416
+ return m.modeRow(i);
417
+ },
418
+ sum_col(id: unknown, index?: unknown): number | null {
419
+ const m = asMatrix(id);
420
+ const i = naNum(index);
421
+ if (m == null || i == null) return null;
422
+ return m.sumCol(i);
423
+ },
424
+ avg_col(id: unknown, index?: unknown): number | null {
425
+ const m = asMatrix(id);
426
+ const i = naNum(index);
427
+ if (m == null || i == null) return null;
428
+ return m.avgCol(i);
429
+ },
430
+ min_col(id: unknown, index?: unknown): number | null {
431
+ const m = asMatrix(id);
432
+ const i = naNum(index);
433
+ if (m == null || i == null) return null;
434
+ return m.minCol(i);
435
+ },
436
+ max_col(id: unknown, index?: unknown): number | null {
437
+ const m = asMatrix(id);
438
+ const i = naNum(index);
439
+ if (m == null || i == null) return null;
440
+ return m.maxCol(i);
441
+ },
442
+ mode_col(id: unknown, index?: unknown): unknown {
443
+ const m = asMatrix(id);
444
+ const i = naNum(index);
445
+ if (m == null || i == null) return null;
446
+ return m.modeCol(i);
447
+ },
448
+ copy_row(id: unknown, index?: unknown): PineArray | null {
449
+ const m = asMatrix(id);
450
+ const i = naNum(index);
451
+ if (m == null || i == null) return null;
452
+ return wrapCells(m.copyRow(i));
453
+ },
454
+ copy_col(id: unknown, index?: unknown): PineArray | null {
455
+ const m = asMatrix(id);
456
+ const i = naNum(index);
457
+ if (m == null || i == null) return null;
458
+ return wrapCells(m.copyCol(i));
459
+ },
460
+ fill_row(id: unknown, index?: unknown, value?: unknown): unknown {
461
+ const i = naNum(index);
462
+ if (i != null) asMatrix(id)?.fillRow(i, store(value));
463
+ return id ?? null;
464
+ },
465
+ fill_col(id: unknown, index?: unknown, value?: unknown): unknown {
466
+ const i = naNum(index);
467
+ if (i != null) asMatrix(id)?.fillCol(i, store(value));
468
+ return id ?? null;
469
+ },
470
+ fill_diagonal(id: unknown, value?: unknown): unknown {
471
+ asMatrix(id)?.fillDiagonal(store(value));
472
+ return id ?? null;
473
+ },
474
+ reverse_rows(id: unknown): unknown {
475
+ asMatrix(id)?.reverseRows();
476
+ return id ?? null;
477
+ },
478
+ reverse_cols(id: unknown): unknown {
479
+ asMatrix(id)?.reverseCols();
480
+ return id ?? null;
481
+ },
482
+ stdev(id: unknown): number | null {
483
+ return asMatrix(id)?.stdev() ?? null;
484
+ },
485
+ variance(id: unknown): number | null {
486
+ return asMatrix(id)?.variance() ?? null;
487
+ },
488
+ mode_all(id: unknown): unknown {
489
+ const m = asMatrix(id);
490
+ return m == null ? null : m.modeAll();
491
+ },
492
+ };
@@ -0,0 +1,181 @@
1
+ /**
2
+ * Copyright (C) 2024-2026 jango_blockchained
3
+ * SPDX-License-Identifier: AGPL-3.0-or-later
4
+ *
5
+ * Compile-path drawings. Wraps DrawingBook; extras go on `__drawings`.
6
+ */
7
+ import { DrawingBook, type DrawingEvent } from "../drawings.ts";
8
+ import { naNum } from "./helpers.ts";
9
+
10
+ function n(v: unknown, fallback = 0): number {
11
+ const x = naNum(v);
12
+ return x == null ? fallback : x;
13
+ }
14
+
15
+ function idOf(v: unknown): number {
16
+ return n(v, -1);
17
+ }
18
+
19
+ export class CompileDraw {
20
+ readonly book = new DrawingBook();
21
+
22
+ label_new(bar: unknown, text?: unknown): number {
23
+ return this.book.labelNew(n(bar, 0), text == null ? undefined : String(text));
24
+ }
25
+
26
+ line_new(bar: unknown): number {
27
+ return this.book.lineNew(n(bar, 0));
28
+ }
29
+
30
+ box_new(bar: unknown): number {
31
+ return this.book.boxNew(n(bar, 0));
32
+ }
33
+
34
+ table_new(bar: unknown): number {
35
+ return this.book.tableNew(n(bar, 0));
36
+ }
37
+
38
+ polyline_new(bar: unknown): number {
39
+ return this.book.polylineNew(n(bar, 0));
40
+ }
41
+
42
+ linefill_new(bar: unknown, extra?: unknown): number {
43
+ return this.book.linefillNew(n(bar, 0), extra as Record<string, unknown> | undefined);
44
+ }
45
+
46
+ label_set_text(id: unknown, text?: unknown): void {
47
+ this.book.labelSetText(idOf(id), text == null ? "" : String(text));
48
+ }
49
+
50
+ label_set_xy(id: unknown, x?: unknown, y?: unknown): void {
51
+ this.book.labelSetXy(idOf(id), n(x, 0), n(y, 0));
52
+ }
53
+
54
+ label_delete(id: unknown): void {
55
+ this.book.labelDelete(idOf(id));
56
+ }
57
+
58
+ line_set_xy(id: unknown, x1?: unknown, y1?: unknown, x2?: unknown, y2?: unknown): void {
59
+ this.book.lineSetXy(idOf(id), n(x1, 0), n(y1, 0), n(x2, 0), n(y2, 0));
60
+ }
61
+
62
+ line_delete(id: unknown): void {
63
+ this.book.lineDelete(idOf(id));
64
+ }
65
+
66
+ line_set_xy1(id: unknown, x1?: unknown, y1?: unknown): void {
67
+ this.book.lineSetXy1(idOf(id), n(x1, 0), n(y1, 0));
68
+ }
69
+
70
+ line_set_xy2(id: unknown, x2?: unknown, y2?: unknown): void {
71
+ this.book.lineSetXy2(idOf(id), n(x2, 0), n(y2, 0));
72
+ }
73
+
74
+ line_set_color(id: unknown, color?: unknown): void {
75
+ this.book.lineSetColor(idOf(id), color);
76
+ }
77
+
78
+ line_set_width(id: unknown, width?: unknown): void {
79
+ this.book.lineSetWidth(idOf(id), width);
80
+ }
81
+
82
+ line_set_style(id: unknown, style?: unknown): void {
83
+ this.book.lineSetStyle(idOf(id), style);
84
+ }
85
+
86
+ line_set_extend(id: unknown, extend?: unknown): void {
87
+ this.book.lineSetExtend(idOf(id), extend);
88
+ }
89
+
90
+ line_get_price(id: unknown, x?: unknown): number | null {
91
+ return this.book.lineGetPrice(idOf(id), x);
92
+ }
93
+
94
+ label_set_color(id: unknown, color?: unknown): void {
95
+ this.book.labelSetColor(idOf(id), color);
96
+ }
97
+
98
+ label_set_style(id: unknown, style?: unknown): void {
99
+ this.book.labelSetStyle(idOf(id), style);
100
+ }
101
+
102
+ label_set_size(id: unknown, size?: unknown): void {
103
+ this.book.labelSetSize(idOf(id), size);
104
+ }
105
+
106
+ label_set_textalign(id: unknown, textalign?: unknown): void {
107
+ this.book.labelSetTextalign(idOf(id), textalign);
108
+ }
109
+
110
+ label_set_tooltip(id: unknown, tooltip?: unknown): void {
111
+ this.book.labelSetTooltip(idOf(id), tooltip);
112
+ }
113
+
114
+ label_get_x(id: unknown): number | null {
115
+ return this.book.labelGetX(idOf(id));
116
+ }
117
+
118
+ label_get_y(id: unknown): number | null {
119
+ return this.book.labelGetY(idOf(id));
120
+ }
121
+
122
+ label_get_text(id: unknown): string | null {
123
+ return this.book.labelGetText(idOf(id));
124
+ }
125
+
126
+ box_delete(id: unknown): void {
127
+ this.book.boxDelete(idOf(id));
128
+ }
129
+
130
+ box_set(id: unknown, extra?: unknown): void {
131
+ this.book.boxSet(idOf(id), extra as Record<string, unknown> | undefined);
132
+ }
133
+
134
+ box_set_corners(id: unknown, left?: unknown, top?: unknown, right?: unknown, bottom?: unknown): void {
135
+ this.book.boxSetCorners(idOf(id), n(left, 0), n(top, 0), n(right, 0), n(bottom, 0));
136
+ }
137
+
138
+ box_set_bgcolor(id: unknown, bgcolor?: unknown): void {
139
+ this.book.boxSetBgcolor(idOf(id), bgcolor);
140
+ }
141
+
142
+ box_set_border_color(id: unknown, color?: unknown): void {
143
+ this.book.boxSetBorderColor(idOf(id), color);
144
+ }
145
+
146
+ box_set_text(id: unknown, text?: unknown): void {
147
+ this.book.boxSetText(idOf(id), text);
148
+ }
149
+
150
+ box_set_extend(id: unknown, extend?: unknown): void {
151
+ this.book.boxSetExtend(idOf(id), extend);
152
+ }
153
+
154
+ table_cell(id: unknown, column?: unknown, row?: unknown, text?: unknown): void {
155
+ this.book.tableCell(idOf(id), column, row, text);
156
+ }
157
+
158
+ table_cell_set_text(id: unknown, column?: unknown, row?: unknown, text?: unknown): void {
159
+ this.book.tableCellSetText(idOf(id), column, row, text);
160
+ }
161
+
162
+ table_set_position(id: unknown, position?: unknown): void {
163
+ this.book.tableSetPosition(idOf(id), position);
164
+ }
165
+
166
+ linefill_set_color(id: unknown, color?: unknown): void {
167
+ this.book.linefillSetColor(idOf(id), color);
168
+ }
169
+
170
+ alert(bar: unknown, message?: unknown): void {
171
+ this.book.alert(n(bar, 0), message == null ? "" : String(message));
172
+ }
173
+
174
+ extras(): { __drawings: DrawingEvent[] } {
175
+ return { __drawings: this.book.items.slice() };
176
+ }
177
+ }
178
+
179
+ export function createCompileDraw(): CompileDraw {
180
+ return new CompileDraw();
181
+ }