openalgo-script 0.5.0 → 0.6.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 (242) hide show
  1. package/CHANGELOG.md +121 -0
  2. package/README.md +53 -22
  3. package/dist/adapters/charts/run.d.ts.map +1 -1
  4. package/dist/adapters/charts/run.js +6 -0
  5. package/dist/adapters/charts/run.js.map +1 -1
  6. package/dist/adapters/charts/tables.d.ts +6 -19
  7. package/dist/adapters/charts/tables.d.ts.map +1 -1
  8. package/dist/adapters/charts/tables.js.map +1 -1
  9. package/dist/adapters/charts/undrawable.d.ts +4 -0
  10. package/dist/adapters/charts/undrawable.d.ts.map +1 -0
  11. package/dist/adapters/charts/undrawable.js +47 -0
  12. package/dist/adapters/charts/undrawable.js.map +1 -0
  13. package/dist/core/backtest/drive.d.ts +36 -1
  14. package/dist/core/backtest/drive.d.ts.map +1 -1
  15. package/dist/core/backtest/drive.js +13 -107
  16. package/dist/core/backtest/drive.js.map +1 -1
  17. package/dist/core/backtest/index.d.ts +2 -0
  18. package/dist/core/backtest/index.d.ts.map +1 -1
  19. package/dist/core/backtest/index.js.map +1 -1
  20. package/dist/core/backtest/walk.d.ts +39 -0
  21. package/dist/core/backtest/walk.d.ts.map +1 -0
  22. package/dist/core/backtest/walk.js +125 -0
  23. package/dist/core/backtest/walk.js.map +1 -0
  24. package/dist/core/catalogue/catalogue.generated.d.ts +178 -1
  25. package/dist/core/catalogue/catalogue.generated.d.ts.map +1 -1
  26. package/dist/core/catalogue/catalogue.generated.js +18 -1
  27. package/dist/core/catalogue/catalogue.generated.js.map +1 -1
  28. package/dist/core/catalogue/types.d.ts +8 -2
  29. package/dist/core/catalogue/types.d.ts.map +1 -1
  30. package/dist/core/catalogue/values.generated.d.ts +51 -0
  31. package/dist/core/catalogue/values.generated.d.ts.map +1 -1
  32. package/dist/core/check/assigned.d.ts +19 -0
  33. package/dist/core/check/assigned.d.ts.map +1 -0
  34. package/dist/core/check/assigned.js +14 -0
  35. package/dist/core/check/assigned.js.map +1 -0
  36. package/dist/core/check/call-sites.d.ts.map +1 -1
  37. package/dist/core/check/call-sites.js +9 -4
  38. package/dist/core/check/call-sites.js.map +1 -1
  39. package/dist/core/check/calls.d.ts.map +1 -1
  40. package/dist/core/check/calls.js +12 -4
  41. package/dist/core/check/calls.js.map +1 -1
  42. package/dist/core/check/check.d.ts.map +1 -1
  43. package/dist/core/check/check.js +15 -2
  44. package/dist/core/check/check.js.map +1 -1
  45. package/dist/core/check/checker.d.ts +26 -0
  46. package/dist/core/check/checker.d.ts.map +1 -1
  47. package/dist/core/check/checker.js +38 -2
  48. package/dist/core/check/checker.js.map +1 -1
  49. package/dist/core/check/constant.d.ts +16 -0
  50. package/dist/core/check/constant.d.ts.map +1 -1
  51. package/dist/core/check/constant.js +52 -0
  52. package/dist/core/check/constant.js.map +1 -1
  53. package/dist/core/check/deleted.d.ts +3 -0
  54. package/dist/core/check/deleted.d.ts.map +1 -0
  55. package/dist/core/check/deleted.js +109 -0
  56. package/dist/core/check/deleted.js.map +1 -0
  57. package/dist/core/check/expressions.js +1 -1
  58. package/dist/core/check/expressions.js.map +1 -1
  59. package/dist/core/check/library-output.d.ts.map +1 -1
  60. package/dist/core/check/library-output.js +1 -0
  61. package/dist/core/check/library-output.js.map +1 -1
  62. package/dist/core/check/library-prose.generated.js +10 -10
  63. package/dist/core/check/library-prose.generated.js.map +1 -1
  64. package/dist/core/check/library.d.ts +7 -0
  65. package/dist/core/check/library.d.ts.map +1 -1
  66. package/dist/core/check/library.js +1 -0
  67. package/dist/core/check/library.js.map +1 -1
  68. package/dist/core/check/surface.d.ts +9 -0
  69. package/dist/core/check/surface.d.ts.map +1 -1
  70. package/dist/core/check/surface.js +13 -0
  71. package/dist/core/check/surface.js.map +1 -1
  72. package/dist/core/engine/bar-source.d.ts +65 -0
  73. package/dist/core/engine/bar-source.d.ts.map +1 -0
  74. package/dist/core/engine/bar-source.js +58 -0
  75. package/dist/core/engine/bar-source.js.map +1 -0
  76. package/dist/core/engine/engine.d.ts +9 -11
  77. package/dist/core/engine/engine.d.ts.map +1 -1
  78. package/dist/core/engine/engine.js +24 -24
  79. package/dist/core/engine/engine.js.map +1 -1
  80. package/dist/core/engine/guard.d.ts.map +1 -1
  81. package/dist/core/engine/guard.js +10 -0
  82. package/dist/core/engine/guard.js.map +1 -1
  83. package/dist/core/engine/host.d.ts +4 -2
  84. package/dist/core/engine/host.d.ts.map +1 -1
  85. package/dist/core/engine/host.js.map +1 -1
  86. package/dist/core/engine/index.d.ts +1 -0
  87. package/dist/core/engine/index.d.ts.map +1 -1
  88. package/dist/core/engine/index.js.map +1 -1
  89. package/dist/core/engine/library/binding.d.ts +2 -0
  90. package/dist/core/engine/library/binding.d.ts.map +1 -1
  91. package/dist/core/engine/library/binding.js.map +1 -1
  92. package/dist/core/engine/library/index.d.ts +8 -0
  93. package/dist/core/engine/library/index.d.ts.map +1 -1
  94. package/dist/core/engine/library/index.js +10 -0
  95. package/dist/core/engine/library/index.js.map +1 -1
  96. package/dist/core/engine/library/objects.d.ts.map +1 -1
  97. package/dist/core/engine/library/objects.js +1 -1
  98. package/dist/core/engine/library/objects.js.map +1 -1
  99. package/dist/core/engine/request-body.d.ts +3 -1
  100. package/dist/core/engine/request-body.d.ts.map +1 -1
  101. package/dist/core/engine/request-body.js +3 -1
  102. package/dist/core/engine/request-body.js.map +1 -1
  103. package/dist/core/engine/request-plan.d.ts +3 -3
  104. package/dist/core/engine/request-plan.js +3 -3
  105. package/dist/core/engine/requests.d.ts +2 -2
  106. package/dist/core/engine/requests.d.ts.map +1 -1
  107. package/dist/core/engine/requests.js +5 -4
  108. package/dist/core/engine/requests.js.map +1 -1
  109. package/dist/core/engine/series.d.ts +18 -6
  110. package/dist/core/engine/series.d.ts.map +1 -1
  111. package/dist/core/engine/series.js +24 -5
  112. package/dist/core/engine/series.js.map +1 -1
  113. package/dist/core/engine/session/record.d.ts +4 -4
  114. package/dist/core/engine/session/record.js +4 -4
  115. package/dist/core/importer/calls.d.ts +29 -0
  116. package/dist/core/importer/calls.d.ts.map +1 -0
  117. package/dist/core/importer/calls.js +267 -0
  118. package/dist/core/importer/calls.js.map +1 -0
  119. package/dist/core/importer/context.d.ts +118 -0
  120. package/dist/core/importer/context.d.ts.map +1 -0
  121. package/dist/core/importer/context.js +120 -0
  122. package/dist/core/importer/context.js.map +1 -0
  123. package/dist/core/importer/expressions.d.ts +44 -0
  124. package/dist/core/importer/expressions.d.ts.map +1 -0
  125. package/dist/core/importer/expressions.js +223 -0
  126. package/dist/core/importer/expressions.js.map +1 -0
  127. package/dist/core/importer/importer.d.ts +13 -0
  128. package/dist/core/importer/importer.d.ts.map +1 -0
  129. package/dist/core/importer/importer.js +220 -0
  130. package/dist/core/importer/importer.js.map +1 -0
  131. package/dist/core/importer/index.d.ts +20 -0
  132. package/dist/core/importer/index.d.ts.map +1 -0
  133. package/dist/core/importer/index.js +18 -0
  134. package/dist/core/importer/index.js.map +1 -0
  135. package/dist/core/importer/lexer.d.ts +68 -0
  136. package/dist/core/importer/lexer.d.ts.map +1 -0
  137. package/dist/core/importer/lexer.js +207 -0
  138. package/dist/core/importer/lexer.js.map +1 -0
  139. package/dist/core/importer/names.d.ts +41 -0
  140. package/dist/core/importer/names.d.ts.map +1 -0
  141. package/dist/core/importer/names.js +78 -0
  142. package/dist/core/importer/names.js.map +1 -0
  143. package/dist/core/importer/orders.d.ts +8 -0
  144. package/dist/core/importer/orders.d.ts.map +1 -0
  145. package/dist/core/importer/orders.js +332 -0
  146. package/dist/core/importer/orders.js.map +1 -0
  147. package/dist/core/importer/outputs.d.ts +19 -0
  148. package/dist/core/importer/outputs.d.ts.map +1 -0
  149. package/dist/core/importer/outputs.js +266 -0
  150. package/dist/core/importer/outputs.js.map +1 -0
  151. package/dist/core/importer/parser.d.ts +5 -0
  152. package/dist/core/importer/parser.d.ts.map +1 -0
  153. package/dist/core/importer/parser.js +439 -0
  154. package/dist/core/importer/parser.js.map +1 -0
  155. package/dist/core/importer/presence.d.ts +32 -0
  156. package/dist/core/importer/presence.d.ts.map +1 -0
  157. package/dist/core/importer/presence.js +146 -0
  158. package/dist/core/importer/presence.js.map +1 -0
  159. package/dist/core/importer/settle.d.ts +23 -0
  160. package/dist/core/importer/settle.d.ts.map +1 -0
  161. package/dist/core/importer/settle.js +135 -0
  162. package/dist/core/importer/settle.js.map +1 -0
  163. package/dist/core/importer/statements.d.ts +4 -0
  164. package/dist/core/importer/statements.d.ts.map +1 -0
  165. package/dist/core/importer/statements.js +339 -0
  166. package/dist/core/importer/statements.js.map +1 -0
  167. package/dist/core/importer/syntax.d.ts +182 -0
  168. package/dist/core/importer/syntax.d.ts.map +1 -0
  169. package/dist/core/importer/syntax.js +14 -0
  170. package/dist/core/importer/syntax.js.map +1 -0
  171. package/dist/core/importer/table.d.ts +52 -0
  172. package/dist/core/importer/table.d.ts.map +1 -0
  173. package/dist/core/importer/table.js +156 -0
  174. package/dist/core/importer/table.js.map +1 -0
  175. package/dist/core/importer/values.d.ts +27 -0
  176. package/dist/core/importer/values.d.ts.map +1 -0
  177. package/dist/core/importer/values.js +236 -0
  178. package/dist/core/importer/values.js.map +1 -0
  179. package/dist/core/index.d.ts +12 -0
  180. package/dist/core/index.d.ts.map +1 -1
  181. package/dist/core/index.js +11 -0
  182. package/dist/core/index.js.map +1 -1
  183. package/dist/core/stdlib/calendar/civil.d.ts.map +1 -1
  184. package/dist/core/stdlib/calendar/civil.js +5 -2
  185. package/dist/core/stdlib/calendar/civil.js.map +1 -1
  186. package/dist/core/version/version.generated.d.ts +1 -1
  187. package/dist/core/version/version.generated.js +1 -1
  188. package/package.json +5 -2
  189. package/spec/errors.json +380 -20
  190. package/src/adapters/charts/run.ts +6 -0
  191. package/src/adapters/charts/tables.ts +6 -19
  192. package/src/adapters/charts/undrawable.ts +51 -0
  193. package/src/core/backtest/drive.ts +66 -154
  194. package/src/core/backtest/index.ts +2 -0
  195. package/src/core/backtest/walk.ts +182 -0
  196. package/src/core/catalogue/catalogue.generated.ts +18 -1
  197. package/src/core/catalogue/types.ts +8 -2
  198. package/src/core/catalogue/values.generated.ts +16 -0
  199. package/src/core/check/assigned.ts +31 -0
  200. package/src/core/check/call-sites.ts +11 -4
  201. package/src/core/check/calls.ts +13 -4
  202. package/src/core/check/check.ts +14 -2
  203. package/src/core/check/checker.ts +39 -2
  204. package/src/core/check/constant.ts +57 -0
  205. package/src/core/check/deleted.ts +135 -0
  206. package/src/core/check/expressions.ts +1 -1
  207. package/src/core/check/library-output.ts +1 -0
  208. package/src/core/check/library-prose.generated.ts +10 -10
  209. package/src/core/check/library.ts +8 -0
  210. package/src/core/check/surface.ts +16 -0
  211. package/src/core/engine/bar-source.ts +113 -0
  212. package/src/core/engine/engine.ts +26 -25
  213. package/src/core/engine/guard.ts +12 -1
  214. package/src/core/engine/host.ts +4 -2
  215. package/src/core/engine/index.ts +1 -0
  216. package/src/core/engine/library/binding.ts +2 -0
  217. package/src/core/engine/library/index.ts +11 -0
  218. package/src/core/engine/library/objects.ts +1 -6
  219. package/src/core/engine/request-body.ts +5 -7
  220. package/src/core/engine/request-plan.ts +3 -3
  221. package/src/core/engine/requests.ts +11 -8
  222. package/src/core/engine/series.ts +30 -6
  223. package/src/core/engine/session/record.ts +4 -4
  224. package/src/core/importer/calls.ts +274 -0
  225. package/src/core/importer/context.ts +197 -0
  226. package/src/core/importer/expressions.ts +247 -0
  227. package/src/core/importer/importer.ts +226 -0
  228. package/src/core/importer/index.ts +19 -0
  229. package/src/core/importer/lexer.ts +285 -0
  230. package/src/core/importer/names.ts +104 -0
  231. package/src/core/importer/orders.ts +307 -0
  232. package/src/core/importer/outputs.ts +245 -0
  233. package/src/core/importer/parser.ts +436 -0
  234. package/src/core/importer/presence.ts +164 -0
  235. package/src/core/importer/settle.ts +141 -0
  236. package/src/core/importer/statements.ts +331 -0
  237. package/src/core/importer/syntax.ts +144 -0
  238. package/src/core/importer/table.ts +191 -0
  239. package/src/core/importer/values.ts +241 -0
  240. package/src/core/index.ts +13 -0
  241. package/src/core/stdlib/calendar/civil.ts +5 -2
  242. package/src/core/version/version.generated.ts +1 -1
@@ -0,0 +1,220 @@
1
+ /**
2
+ * The importer: a script in the source dialect in, OpenScript and findings out.
3
+ *
4
+ * The source dialect is the widely used chart scripting language whose scripts
5
+ * open with a version annotation comment, declare themselves with an
6
+ * `indicator` or `strategy` call and reach their built-ins through namespaces
7
+ * such as `ta` and `math`. Versions 5 and 6 are read.
8
+ *
9
+ * It is text to text and nothing else: no file is read, no global is touched
10
+ * and nothing is evaluated. What it cannot translate faithfully it does not
11
+ * approximate. A statement is translated whole, with the source dialect's
12
+ * meaning, or kept as a comment line per source line and reported; a
13
+ * translation whose meaning differs in a way the importer can state is written
14
+ * and reported with a warning. Every finding points into the imported text.
15
+ */
16
+ import { diagnosticFor } from '../diagnostics/index.js';
17
+ import { sourceFile } from '../source/index.js';
18
+ import { Context } from './context.js';
19
+ import { readItems } from './lexer.js';
20
+ import { binding } from './names.js';
21
+ import { declarationLine } from './orders.js';
22
+ import { readScript } from './parser.js';
23
+ import { findingsOf, settle } from './settle.js';
24
+ import { translateStatement } from './statements.js';
25
+ import { pathOf } from './syntax.js';
26
+ const ANNOTATION = /^\s*@version\s*=\s*(\d+)\s*$/;
27
+ /** The version annotation, if one comes before the first line of code. */
28
+ function annotationOf(items) {
29
+ for (const item of items) {
30
+ if (item.kind === 'code')
31
+ return undefined;
32
+ if (item.kind !== 'remark')
33
+ continue;
34
+ const found = ANNOTATION.exec(item.remark.text);
35
+ if (found !== null)
36
+ return { remark: item.remark, version: found[1] ?? '' };
37
+ }
38
+ return undefined;
39
+ }
40
+ function declaresOf(stmt) {
41
+ switch (stmt.kind) {
42
+ case 'declare':
43
+ case 'function':
44
+ return [stmt.name];
45
+ case 'tuple':
46
+ return stmt.names;
47
+ case 'refused':
48
+ return stmt.declares;
49
+ default:
50
+ return [];
51
+ }
52
+ }
53
+ function nodeOf(stmt, declaration) {
54
+ return {
55
+ stmt,
56
+ lines: stmt.lines,
57
+ declares: declaresOf(stmt),
58
+ reads: [],
59
+ output: [],
60
+ refusal: undefined,
61
+ failed: undefined,
62
+ lost: undefined,
63
+ notes: [],
64
+ declaration,
65
+ };
66
+ }
67
+ function visit(body, each) {
68
+ for (const entry of body) {
69
+ if (entry.kind !== 'stmt')
70
+ continue;
71
+ const stmt = entry.stmt;
72
+ each(stmt);
73
+ if (stmt.kind === 'if') {
74
+ for (const branch of stmt.branches)
75
+ visit(branch.body, each);
76
+ if (stmt.otherwise !== undefined)
77
+ visit(stmt.otherwise, each);
78
+ }
79
+ else if (stmt.kind === 'for' || stmt.kind === 'while')
80
+ visit(stmt.body, each);
81
+ else if (stmt.kind === 'switch')
82
+ for (const arm of stmt.arms)
83
+ visit(arm.body, each);
84
+ else if (stmt.kind === 'function' && Array.isArray(stmt.body))
85
+ visit(stmt.body, each);
86
+ }
87
+ }
88
+ /** The side each literal entry id opens, read from the script's entry calls. */
89
+ function entrySides(body) {
90
+ const sides = new Map();
91
+ visit(body, (stmt) => {
92
+ if (stmt.kind !== 'evaluate' || stmt.expr.kind !== 'call')
93
+ return;
94
+ if (pathOf(stmt.expr.callee) !== 'strategy.entry')
95
+ return;
96
+ const args = stmt.expr.args;
97
+ const id = args.find((arg) => arg.label === 'id') ?? args.find((arg, i) => arg.label === undefined && i === 0);
98
+ const side = args.find((arg) => arg.label === 'direction') ?? args.filter((arg) => arg.label === undefined)[1];
99
+ const direction = side === undefined ? undefined : pathOf(side.value);
100
+ if (id?.value.kind !== 'string')
101
+ return;
102
+ if (direction === 'strategy.long')
103
+ sides.set(id.value.value, 'long');
104
+ if (direction === 'strategy.short')
105
+ sides.set(id.value.value, 'short');
106
+ });
107
+ return sides;
108
+ }
109
+ function reassignments(body) {
110
+ const found = new Map();
111
+ visit(body, (stmt) => {
112
+ if (stmt.kind !== 'assign')
113
+ return;
114
+ const held = found.get(stmt.name.name) ?? [];
115
+ held.push({ op: stmt.op, value: stmt.value });
116
+ found.set(stmt.name.name, held);
117
+ });
118
+ return found;
119
+ }
120
+ function refusal(diagnostic) {
121
+ return { source: '', findings: [diagnostic] };
122
+ }
123
+ /** Zero width, where the first statement starts: where a declaration was expected. */
124
+ function firstStatement(file, body) {
125
+ const first = body.find((entry) => entry.kind === 'stmt');
126
+ return first?.kind === 'stmt' ? file.spanAt(first.stmt.at.offset, 0) : file.spanAt(file.text.length, 0);
127
+ }
128
+ function declarationOf(body) {
129
+ for (const entry of body) {
130
+ if (entry.kind !== 'stmt' || entry.stmt.kind !== 'evaluate' || entry.stmt.expr.kind !== 'call')
131
+ continue;
132
+ const path = pathOf(entry.stmt.expr.callee);
133
+ if (path === 'indicator' || path === 'strategy' || path === 'library') {
134
+ return { stmt: entry.stmt, call: entry.stmt.expr, path };
135
+ }
136
+ }
137
+ return undefined;
138
+ }
139
+ export function importScript(text, options = {}) {
140
+ const file = sourceFile(options.name ?? 'imported', text);
141
+ const items = readItems(file);
142
+ const annotation = annotationOf(items);
143
+ if (annotation === undefined || (annotation.version !== '5' && annotation.version !== '6')) {
144
+ const at = annotation === undefined ? file.spanAt(0, 0) : file.spanAt(annotation.remark.offset, annotation.remark.text.length + 2);
145
+ const found = annotation === undefined ? 'declares no version' : `declares version ${annotation.version}`;
146
+ return refusal(diagnosticFor('OS9001', at, { found }));
147
+ }
148
+ const body = readScript(items);
149
+ const declaration = declarationOf(body);
150
+ if (declaration === undefined)
151
+ return refusal(diagnosticFor('OS9004', firstStatement(file, body), { found: 'has none' }));
152
+ if (declaration.path === 'library') {
153
+ return refusal(diagnosticFor('OS9004', file.spanAt(declaration.call.callee.at.offset, declaration.call.callee.at.length), { found: 'declares a library' }));
154
+ }
155
+ const used = new Set();
156
+ for (const item of items) {
157
+ if (item.kind !== 'code')
158
+ continue;
159
+ for (const token of item.logical.tokens)
160
+ if (token.kind === 'name')
161
+ used.add(token.text);
162
+ }
163
+ const version = annotation.version === '5' ? 5 : 6;
164
+ const globals = new Set();
165
+ for (const entry of body)
166
+ if (entry.kind === 'stmt')
167
+ for (const one of declaresOf(entry.stmt))
168
+ globals.add(one.name);
169
+ const ctx = new Context({ file, version, used, globals, reassigned: reassignments(body), entries: entrySides(body) });
170
+ const declared = nodeOf(declaration.stmt, true);
171
+ ctx.node = declared;
172
+ const trailing = declaration.stmt.remarks.map((one) => ` //${one.text}`).join('');
173
+ declared.output = [{ depth: 0, text: `${declarationLine(ctx, declaration.call, declaration.path)}${trailing}` }];
174
+ ctx.node = undefined;
175
+ const nodes = [declared];
176
+ const pieces = [];
177
+ const later = [];
178
+ let stage = 'before';
179
+ for (const entry of body) {
180
+ if (entry.kind === 'remark' && entry.remark === annotation.remark) {
181
+ pieces.push({ kind: 'text', text: 'version 1' }, { kind: 'blank' });
182
+ stage = 'header';
183
+ continue;
184
+ }
185
+ if (entry.kind === 'stmt' && entry.stmt === declaration.stmt) {
186
+ pieces.push({ kind: 'node', node: declared }, ...later);
187
+ later.length = 0;
188
+ stage = 'body';
189
+ continue;
190
+ }
191
+ const piece = entry.kind === 'remark'
192
+ ? { kind: 'remark', remark: entry.remark, depth: 0 }
193
+ : entry.kind === 'blank'
194
+ ? { kind: 'blank' }
195
+ : undefined;
196
+ if (piece !== undefined) {
197
+ pieces.push(piece);
198
+ continue;
199
+ }
200
+ if (entry.kind !== 'stmt')
201
+ continue;
202
+ const node = nodeOf(entry.stmt, false);
203
+ ctx.node = node;
204
+ node.output = translateStatement(ctx, entry.stmt, 0);
205
+ for (const one of node.declares) {
206
+ if (!ctx.fileScope.names.has(one.name)) {
207
+ ctx.fileScope.names.set(one.name, binding(ctx.namer.declare(one.name, false), 'variable', true));
208
+ }
209
+ }
210
+ ctx.node = undefined;
211
+ nodes.push(node);
212
+ if (stage === 'body')
213
+ pieces.push({ kind: 'node', node });
214
+ else
215
+ later.push({ kind: 'node', node });
216
+ }
217
+ const source = settle(ctx, nodes, pieces);
218
+ return { source, findings: findingsOf(nodes) };
219
+ }
220
+ //# sourceMappingURL=importer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"importer.js","sourceRoot":"","sources":["../../../src/core/importer/importer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * The importer: a script written in another chart language, as OpenScript.
3
+ *
4
+ * `importScript` reads a script in the version-annotated chart dialect, the one
5
+ * whose scripts open with a `//@version=` comment and reach their built-ins
6
+ * through namespaces, and returns the OpenScript text and a finding for every
7
+ * statement it kept as a comment and every translation whose meaning differs in
8
+ * a stated way. It is pure: text in, text and findings out, and nothing read,
9
+ * written or evaluated on the way.
10
+ *
11
+ * `MAPPINGS` and `COLOURS` are the table of what translates to what. They are
12
+ * behind this door for the documentation page's comparison test and for a tool
13
+ * that wants to show a reader the same table; the package surface is
14
+ * `importScript` and its two types.
15
+ */
16
+ export { importScript } from './importer.js';
17
+ export type { ImportOptions, ImportResult } from './importer.js';
18
+ export { COLOURS, MAPPINGS } from './table.js';
19
+ export type { Difference, Mapping } from './table.js';
20
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/importer/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC/C,YAAY,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * The importer: a script written in another chart language, as OpenScript.
3
+ *
4
+ * `importScript` reads a script in the version-annotated chart dialect, the one
5
+ * whose scripts open with a `//@version=` comment and reach their built-ins
6
+ * through namespaces, and returns the OpenScript text and a finding for every
7
+ * statement it kept as a comment and every translation whose meaning differs in
8
+ * a stated way. It is pure: text in, text and findings out, and nothing read,
9
+ * written or evaluated on the way.
10
+ *
11
+ * `MAPPINGS` and `COLOURS` are the table of what translates to what. They are
12
+ * behind this door for the documentation page's comparison test and for a tool
13
+ * that wants to show a reader the same table; the package surface is
14
+ * `importScript` and its two types.
15
+ */
16
+ export { importScript } from './importer.js';
17
+ export { COLOURS, MAPPINGS } from './table.js';
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/importer/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Reading a script in the source dialect into logical lines of tokens.
3
+ *
4
+ * The source dialect is line oriented and indentation delimited, like
5
+ * OpenScript, and it differs in the two places a reader has to know about. A
6
+ * statement continues onto the next line when a bracket is still open, when
7
+ * the line ends on an operator that cannot end one, or when the next line is
8
+ * indented by an amount that is not a whole number of blocks: the dialect's
9
+ * blocks are four columns deep, and a continuation is told apart from a block
10
+ * by being indented off that grid. A tab in leading whitespace counts as one
11
+ * block.
12
+ *
13
+ * This reader is deliberately separate from OpenScript's lexer. The two
14
+ * languages share a shape and differ in almost every token rule that matters to
15
+ * a diagnostic: the source dialect has `:=`, `=>` and single quoted strings as
16
+ * ordinary tokens and no `none`, and running its text through OpenScript's
17
+ * lexer would report every one of those as a mistake in a file nobody wrote in
18
+ * OpenScript.
19
+ *
20
+ * Nothing here refuses anything. A character the dialect does not have becomes
21
+ * a `bad` token, and the parser decides what the statement holding it is.
22
+ */
23
+ import type { SourceFile } from '../source/index.js';
24
+ export type TokenKind = 'name' | 'number' | 'string' | 'color' | 'op' | 'bad';
25
+ export interface Token {
26
+ readonly kind: TokenKind;
27
+ /** The characters as written. */
28
+ readonly text: string;
29
+ /** A string literal's decoded value; for every other kind, the text. */
30
+ readonly value: string;
31
+ readonly offset: number;
32
+ readonly length: number;
33
+ }
34
+ /** A `//` comment, with the text after the two slashes. */
35
+ export interface Remark {
36
+ readonly text: string;
37
+ readonly offset: number;
38
+ readonly line: number;
39
+ }
40
+ /** One statement's worth of tokens, which may have spanned several lines. */
41
+ export interface Logical {
42
+ /** Leading columns of the first line, a tab counted as one block. */
43
+ readonly indent: number;
44
+ readonly tokens: readonly Token[];
45
+ /** Comments written after code on any of the statement's lines. */
46
+ readonly remarks: readonly Remark[];
47
+ readonly firstLine: number;
48
+ readonly lastLine: number;
49
+ }
50
+ export type Item = {
51
+ readonly kind: 'code';
52
+ readonly logical: Logical;
53
+ } | {
54
+ readonly kind: 'remark';
55
+ readonly remark: Remark;
56
+ readonly indent: number;
57
+ } | {
58
+ readonly kind: 'blank';
59
+ readonly line: number;
60
+ };
61
+ /**
62
+ * The whole file as items: statements, comment lines and blank lines, in order.
63
+ *
64
+ * A comment line or a blank line inside an open statement belongs to that
65
+ * statement and ends nothing, the same rule OpenScript gives them.
66
+ */
67
+ export declare function readItems(file: SourceFile): readonly Item[];
68
+ //# sourceMappingURL=lexer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lexer.d.ts","sourceRoot":"","sources":["../../../src/core/importer/lexer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,IAAI,GAAG,KAAK,CAAC;AAE9E,MAAM,WAAW,KAAK;IACpB,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,iCAAiC;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,wEAAwE;IACxE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,2DAA2D;AAC3D,MAAM,WAAW,MAAM;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,6EAA6E;AAC7E,MAAM,WAAW,OAAO;IACtB,qEAAqE;IACrE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,SAAS,KAAK,EAAE,CAAC;IAClC,mEAAmE;IACnE,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,MAAM,IAAI,GACZ;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GACpD;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC7E;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAuKtD;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,SAAS,IAAI,EAAE,CAsD3D"}
@@ -0,0 +1,207 @@
1
+ /** The width of one block in the dialect, which a continuation is indented off. */
2
+ const BLOCK = 4;
3
+ const TWO_CHARACTER = [':=', '==', '!=', '<=', '>=', '=>', '+=', '-=', '*=', '/=', '%='];
4
+ const ONE_CHARACTER = '+-*/%<>=?:,.()[]';
5
+ /** Tokens after which a statement cannot end, so the next indented line continues it. */
6
+ const CONTINUES = new Set([
7
+ ',', '+', '-', '*', '/', '%', '==', '!=', '<', '<=', '>', '>=', '?', ':', ':=', '=',
8
+ '+=', '-=', '*=', '/=', '%=', 'and', 'or', 'not', '(', '[',
9
+ ]);
10
+ const NAME_START = /[A-Za-z_]/;
11
+ const NAME_PART = /[A-Za-z0-9_]/;
12
+ const DIGIT = /[0-9]/;
13
+ const HEX = /[0-9A-Fa-f]/;
14
+ const ESCAPES = { n: '\n', t: '\t', r: '\r', '\\': '\\', "'": "'", '"': '"' };
15
+ /** Columns of leading whitespace, and where the text after it starts. */
16
+ function measure(text) {
17
+ let indent = 0;
18
+ let start = 0;
19
+ while (start < text.length) {
20
+ const c = text[start];
21
+ if (c === ' ')
22
+ indent += 1;
23
+ else if (c === '\t')
24
+ indent += BLOCK - (indent % BLOCK);
25
+ else
26
+ break;
27
+ start += 1;
28
+ }
29
+ return { indent, start };
30
+ }
31
+ function readString(text, at) {
32
+ const quote = text[at];
33
+ let value = '';
34
+ let i = at + 1;
35
+ while (i < text.length) {
36
+ const c = text[i] ?? '';
37
+ if (c === quote)
38
+ return { end: i + 1, value, closed: true };
39
+ if (c === '\\' && i + 1 < text.length) {
40
+ const next = text[i + 1] ?? '';
41
+ value += ESCAPES[next] ?? next;
42
+ i += 2;
43
+ continue;
44
+ }
45
+ value += c;
46
+ i += 1;
47
+ }
48
+ return { end: text.length, value, closed: false };
49
+ }
50
+ function readNumber(text, at) {
51
+ let i = at;
52
+ while (i < text.length && DIGIT.test(text[i] ?? ''))
53
+ i += 1;
54
+ if (text[i] === '.' && !NAME_START.test(text[i + 1] ?? '')) {
55
+ i += 1;
56
+ while (i < text.length && DIGIT.test(text[i] ?? ''))
57
+ i += 1;
58
+ }
59
+ if ((text[i] === 'e' || text[i] === 'E') && /[0-9+-]/.test(text[i + 1] ?? '')) {
60
+ let j = i + 1;
61
+ if (text[j] === '+' || text[j] === '-')
62
+ j += 1;
63
+ if (DIGIT.test(text[j] ?? '')) {
64
+ i = j;
65
+ while (i < text.length && DIGIT.test(text[i] ?? ''))
66
+ i += 1;
67
+ }
68
+ }
69
+ return i;
70
+ }
71
+ /** Every token on one physical line, and the comment that ends it if any. */
72
+ function tokensOf(text, start, lineStart, line) {
73
+ const tokens = [];
74
+ const token = (kind, from, to, value) => {
75
+ const written = text.slice(from, to);
76
+ tokens.push({ kind, text: written, value: value ?? written, offset: lineStart + from, length: to - from });
77
+ };
78
+ let i = start;
79
+ while (i < text.length) {
80
+ const c = text[i] ?? '';
81
+ if (c === ' ' || c === '\t') {
82
+ i += 1;
83
+ continue;
84
+ }
85
+ if (c === '/' && text[i + 1] === '/') {
86
+ return { tokens, remark: { text: text.slice(i + 2).trimEnd(), offset: lineStart + i, line } };
87
+ }
88
+ if (NAME_START.test(c)) {
89
+ let j = i + 1;
90
+ while (j < text.length && NAME_PART.test(text[j] ?? ''))
91
+ j += 1;
92
+ token('name', i, j);
93
+ i = j;
94
+ continue;
95
+ }
96
+ if (DIGIT.test(c) || (c === '.' && DIGIT.test(text[i + 1] ?? ''))) {
97
+ const j = readNumber(text, i);
98
+ token('number', i, j);
99
+ i = j;
100
+ continue;
101
+ }
102
+ if (c === '"' || c === "'") {
103
+ const read = readString(text, i);
104
+ token(read.closed ? 'string' : 'bad', i, read.end, read.value);
105
+ i = read.end;
106
+ continue;
107
+ }
108
+ if (c === '#') {
109
+ let j = i + 1;
110
+ while (j < text.length && HEX.test(text[j] ?? ''))
111
+ j += 1;
112
+ token(j - i === 7 || j - i === 9 ? 'color' : 'bad', i, j);
113
+ i = j;
114
+ continue;
115
+ }
116
+ const pair = text.slice(i, i + 2);
117
+ if (TWO_CHARACTER.includes(pair)) {
118
+ token('op', i, i + 2);
119
+ i += 2;
120
+ continue;
121
+ }
122
+ token(ONE_CHARACTER.includes(c) ? 'op' : 'bad', i, i + 1);
123
+ i += 1;
124
+ }
125
+ return { tokens, remark: undefined };
126
+ }
127
+ /** How far a line's brackets leave the statement open. */
128
+ function depthAfter(depth, tokens) {
129
+ let open = depth;
130
+ for (const one of tokens) {
131
+ if (one.kind !== 'op')
132
+ continue;
133
+ if (one.text === '(' || one.text === '[')
134
+ open += 1;
135
+ else if (one.text === ')' || one.text === ']')
136
+ open = Math.max(0, open - 1);
137
+ }
138
+ return open;
139
+ }
140
+ function continues(current, next) {
141
+ if (current.depth > 0)
142
+ return true;
143
+ if (next.indent <= current.indent)
144
+ return false;
145
+ if (next.indent % BLOCK !== 0)
146
+ return true;
147
+ const last = current.tokens[current.tokens.length - 1];
148
+ return last !== undefined && CONTINUES.has(last.text);
149
+ }
150
+ /**
151
+ * The whole file as items: statements, comment lines and blank lines, in order.
152
+ *
153
+ * A comment line or a blank line inside an open statement belongs to that
154
+ * statement and ends nothing, the same rule OpenScript gives them.
155
+ */
156
+ export function readItems(file) {
157
+ const items = [];
158
+ let current;
159
+ const held = [];
160
+ const close = () => {
161
+ if (current === undefined)
162
+ return;
163
+ const { indent, tokens, remarks, firstLine, lastLine } = current;
164
+ items.push({ kind: 'code', logical: { indent, tokens, remarks, firstLine, lastLine } });
165
+ current = undefined;
166
+ };
167
+ for (let line = 1; line <= file.lineCount; line += 1) {
168
+ const text = file.lineText(line);
169
+ const { indent, start } = measure(text);
170
+ const read = tokensOf(text, start, file.lineStart(line), line);
171
+ const physical = { line, indent, tokens: read.tokens, remark: read.remark };
172
+ if (physical.tokens.length === 0) {
173
+ if (current !== undefined && current.depth > 0) {
174
+ if (physical.remark !== undefined)
175
+ current.remarks.push(physical.remark);
176
+ continue;
177
+ }
178
+ held.push(physical.remark === undefined
179
+ ? { kind: 'blank', line }
180
+ : { kind: 'remark', remark: physical.remark, indent });
181
+ continue;
182
+ }
183
+ if (current !== undefined && continues(current, physical)) {
184
+ current.tokens.push(...physical.tokens);
185
+ if (physical.remark !== undefined)
186
+ current.remarks.push(physical.remark);
187
+ current.lastLine = line;
188
+ current.depth = depthAfter(current.depth, physical.tokens);
189
+ continue;
190
+ }
191
+ close();
192
+ items.push(...held);
193
+ held.length = 0;
194
+ current = {
195
+ indent,
196
+ tokens: [...physical.tokens],
197
+ remarks: physical.remark === undefined ? [] : [physical.remark],
198
+ firstLine: line,
199
+ lastLine: line,
200
+ depth: depthAfter(0, physical.tokens),
201
+ };
202
+ }
203
+ close();
204
+ items.push(...held);
205
+ return items;
206
+ }
207
+ //# sourceMappingURL=lexer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lexer.js","sourceRoot":"","sources":["../../../src/core/importer/lexer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ export type BindingKind = 'variable' | 'function' | 'parameter' | 'loop';
2
+ export interface Binding {
3
+ readonly output: string;
4
+ readonly kind: BindingKind;
5
+ readonly topLevel: boolean;
6
+ /** Bound to a declaration handle, which only `fill` may take. */
7
+ handle: 'plot' | 'level' | undefined;
8
+ /** Never absent on any bar: bound to an input or a literal and never reassigned. */
9
+ present: boolean;
10
+ /** A whole-number constant in the source dialect's sense, which version 5 divides without a fraction. */
11
+ whole: boolean;
12
+ /** A function's parameters, source spelling to output spelling, for its named arguments. */
13
+ labels: ReadonlyMap<string, string> | undefined;
14
+ }
15
+ export declare class Scope {
16
+ readonly names: Map<string, Binding>;
17
+ readonly parent: Scope | undefined;
18
+ constructor(parent: Scope | undefined);
19
+ find(name: string): Binding | undefined;
20
+ get isGlobal(): boolean;
21
+ }
22
+ export declare class Namer {
23
+ #private;
24
+ /** `used` is every identifier the source writes, anywhere. */
25
+ constructor(used: Iterable<string>);
26
+ /** Whether OpenScript already means something by this name. */
27
+ static reserved(name: string): boolean;
28
+ /** A spelling no source name and no OpenScript name has, starting from `base`. */
29
+ fresh(base: string): string;
30
+ /**
31
+ * The spelling of a source name declared in `scope`.
32
+ *
33
+ * `hides` says whether an enclosing scope can already see the name, which is
34
+ * the case the source dialect reads as a new name and OpenScript would read
35
+ * as an update of the old one.
36
+ */
37
+ declare(name: string, hides: boolean): string;
38
+ }
39
+ /** A binding with the defaults a plain declaration has. */
40
+ export declare function binding(output: string, kind: BindingKind, topLevel: boolean): Binding;
41
+ //# sourceMappingURL=names.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"names.d.ts","sourceRoot":"","sources":["../../../src/core/importer/names.ts"],"names":[],"mappings":"AAsBA,MAAM,MAAM,WAAW,GAAG,UAAU,GAAG,UAAU,GAAG,WAAW,GAAG,MAAM,CAAC;AAEzE,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,iEAAiE;IACjE,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;IACrC,oFAAoF;IACpF,OAAO,EAAE,OAAO,CAAC;IACjB,yGAAyG;IACzG,KAAK,EAAE,OAAO,CAAC;IACf,4FAA4F;IAC5F,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;CACjD;AAKD,qBAAa,KAAK;IAChB,QAAQ,CAAC,KAAK,uBAA8B;IAC5C,QAAQ,CAAC,MAAM,EAAE,KAAK,GAAG,SAAS,CAAC;gBAEvB,MAAM,EAAE,KAAK,GAAG,SAAS;IAIrC,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS;IAIvC,IAAI,QAAQ,IAAI,OAAO,CAEtB;CACF;AAED,qBAAa,KAAK;;IAGhB,8DAA8D;gBAClD,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC;IAIlC,+DAA+D;IAC/D,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAStC,kFAAkF;IAClF,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAS3B;;;;;;OAMG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM;CAK9C;AAED,2DAA2D;AAC3D,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,CAErF"}