oakscriptjs 0.11.0 → 0.11.2

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 (238) hide show
  1. package/dist/cjs/array/index.d.ts +8 -2
  2. package/dist/cjs/array/index.d.ts.map +1 -1
  3. package/dist/cjs/array/index.js +2 -1
  4. package/dist/cjs/array/index.js.map +2 -2
  5. package/dist/cjs/box/index.js +6 -6
  6. package/dist/cjs/box/index.js.map +2 -2
  7. package/dist/cjs/callsite/index.d.ts.map +1 -1
  8. package/dist/cjs/callsite/index.js +6 -3
  9. package/dist/cjs/callsite/index.js.map +2 -2
  10. package/dist/cjs/drawing/registry.d.ts +15 -6
  11. package/dist/cjs/drawing/registry.d.ts.map +1 -1
  12. package/dist/cjs/drawing/registry.js +16 -2
  13. package/dist/cjs/drawing/registry.js.map +2 -2
  14. package/dist/cjs/index.d.ts +4 -3
  15. package/dist/cjs/index.d.ts.map +1 -1
  16. package/dist/cjs/index.js +7 -1
  17. package/dist/cjs/index.js.map +2 -2
  18. package/dist/cjs/input.d.ts +9 -1
  19. package/dist/cjs/input.d.ts.map +1 -1
  20. package/dist/cjs/input.js +16 -0
  21. package/dist/cjs/input.js.map +2 -2
  22. package/dist/cjs/label/index.js +3 -3
  23. package/dist/cjs/label/index.js.map +2 -2
  24. package/dist/cjs/line/index.d.ts +10 -27
  25. package/dist/cjs/line/index.d.ts.map +1 -1
  26. package/dist/cjs/line/index.js +10 -27
  27. package/dist/cjs/line/index.js.map +2 -2
  28. package/dist/cjs/linefill/index.d.ts +3 -0
  29. package/dist/cjs/linefill/index.d.ts.map +1 -1
  30. package/dist/cjs/linefill/index.js +15 -1
  31. package/dist/cjs/linefill/index.js.map +3 -3
  32. package/dist/cjs/runtime/adapters/SimpleInputAdapter.js +1 -1
  33. package/dist/cjs/runtime/adapters/SimpleInputAdapter.js.map +2 -2
  34. package/dist/cjs/runtime/index.d.ts +1 -1
  35. package/dist/cjs/runtime/index.d.ts.map +1 -1
  36. package/dist/cjs/runtime/index.js +1 -0
  37. package/dist/cjs/runtime/index.js.map +2 -2
  38. package/dist/cjs/runtime/inputs.d.ts +9 -0
  39. package/dist/cjs/runtime/inputs.d.ts.map +1 -1
  40. package/dist/cjs/runtime/inputs.js +8 -0
  41. package/dist/cjs/runtime/inputs.js.map +2 -2
  42. package/dist/cjs/runtime/types.d.ts +1 -1
  43. package/dist/cjs/runtime/types.d.ts.map +1 -1
  44. package/dist/cjs/runtime/types.js.map +1 -1
  45. package/dist/cjs/script/index.d.ts +66 -13
  46. package/dist/cjs/script/index.d.ts.map +1 -1
  47. package/dist/cjs/script/index.js +139 -35
  48. package/dist/cjs/script/index.js.map +3 -3
  49. package/dist/cjs/security/other.d.ts +92 -0
  50. package/dist/cjs/security/other.d.ts.map +1 -0
  51. package/dist/cjs/security/other.js +164 -0
  52. package/dist/cjs/security/other.js.map +7 -0
  53. package/dist/cjs/session/bars.d.ts +10 -1
  54. package/dist/cjs/session/bars.d.ts.map +1 -1
  55. package/dist/cjs/session/bars.js +16 -2
  56. package/dist/cjs/session/bars.js.map +2 -2
  57. package/dist/cjs/session/calendar.d.ts +4 -1
  58. package/dist/cjs/session/calendar.d.ts.map +1 -1
  59. package/dist/cjs/session/calendar.js +12 -7
  60. package/dist/cjs/session/calendar.js.map +2 -2
  61. package/dist/cjs/session/context.d.ts +22 -5
  62. package/dist/cjs/session/context.d.ts.map +1 -1
  63. package/dist/cjs/session/context.js +67 -6
  64. package/dist/cjs/session/context.js.map +2 -2
  65. package/dist/cjs/str/floatingdecimal.d.ts +31 -0
  66. package/dist/cjs/str/floatingdecimal.d.ts.map +1 -0
  67. package/dist/cjs/str/floatingdecimal.js +298 -0
  68. package/dist/cjs/str/floatingdecimal.js.map +7 -0
  69. package/dist/cjs/str/index.d.ts +4 -3
  70. package/dist/cjs/str/index.d.ts.map +1 -1
  71. package/dist/cjs/str/index.js +1 -1
  72. package/dist/cjs/str/index.js.map +2 -2
  73. package/dist/cjs/str/numberformat.d.ts +6 -4
  74. package/dist/cjs/str/numberformat.d.ts.map +1 -1
  75. package/dist/cjs/str/numberformat.js +3 -2
  76. package/dist/cjs/str/numberformat.js.map +2 -2
  77. package/dist/cjs/ta/index.d.ts +64 -45
  78. package/dist/cjs/ta/index.d.ts.map +1 -1
  79. package/dist/cjs/ta/index.js +140 -126
  80. package/dist/cjs/ta/index.js.map +3 -3
  81. package/dist/cjs/ta/limits.d.ts +11 -0
  82. package/dist/cjs/ta/limits.d.ts.map +1 -1
  83. package/dist/cjs/ta/limits.js +15 -1
  84. package/dist/cjs/ta/limits.js.map +2 -2
  85. package/dist/cjs/ta/running-sum.js +1 -1
  86. package/dist/cjs/ta/running-sum.js.map +2 -2
  87. package/dist/cjs/ta-series.d.ts +1 -1
  88. package/dist/cjs/ta-series.d.ts.map +1 -1
  89. package/dist/cjs/ta-series.js +1 -1
  90. package/dist/cjs/ta-series.js.map +2 -2
  91. package/dist/cjs/table/index.d.ts +10 -3
  92. package/dist/cjs/table/index.d.ts.map +1 -1
  93. package/dist/cjs/table/index.js +11 -1
  94. package/dist/cjs/table/index.js.map +3 -3
  95. package/dist/cjs/time/session.d.ts +9 -0
  96. package/dist/cjs/time/session.d.ts.map +1 -1
  97. package/dist/cjs/time/session.js +42 -14
  98. package/dist/cjs/time/session.js.map +3 -3
  99. package/dist/cjs/time/timezone.d.ts +6 -1
  100. package/dist/cjs/time/timezone.d.ts.map +1 -1
  101. package/dist/cjs/time/timezone.js +2 -2
  102. package/dist/cjs/time/timezone.js.map +2 -2
  103. package/dist/cjs/types/metadata.d.ts +1 -1
  104. package/dist/cjs/types/metadata.d.ts.map +1 -1
  105. package/dist/cjs/types/metadata.js.map +1 -1
  106. package/dist/esm/array/index.d.ts +8 -2
  107. package/dist/esm/array/index.d.ts.map +1 -1
  108. package/dist/esm/array/index.js +12 -3
  109. package/dist/esm/array/index.js.map +1 -1
  110. package/dist/esm/box/index.js +6 -6
  111. package/dist/esm/box/index.js.map +1 -1
  112. package/dist/esm/callsite/index.d.ts.map +1 -1
  113. package/dist/esm/callsite/index.js +6 -3
  114. package/dist/esm/callsite/index.js.map +1 -1
  115. package/dist/esm/drawing/registry.d.ts +15 -6
  116. package/dist/esm/drawing/registry.d.ts.map +1 -1
  117. package/dist/esm/drawing/registry.js +30 -7
  118. package/dist/esm/drawing/registry.js.map +1 -1
  119. package/dist/esm/index.d.ts +4 -3
  120. package/dist/esm/index.d.ts.map +1 -1
  121. package/dist/esm/index.js +8 -5
  122. package/dist/esm/index.js.map +1 -1
  123. package/dist/esm/input.d.ts +9 -1
  124. package/dist/esm/input.d.ts.map +1 -1
  125. package/dist/esm/input.js +16 -0
  126. package/dist/esm/input.js.map +1 -1
  127. package/dist/esm/label/index.js +3 -3
  128. package/dist/esm/label/index.js.map +1 -1
  129. package/dist/esm/line/index.d.ts +10 -27
  130. package/dist/esm/line/index.d.ts.map +1 -1
  131. package/dist/esm/line/index.js +20 -64
  132. package/dist/esm/line/index.js.map +1 -1
  133. package/dist/esm/linefill/index.d.ts +3 -0
  134. package/dist/esm/linefill/index.d.ts.map +1 -1
  135. package/dist/esm/linefill/index.js +20 -1
  136. package/dist/esm/linefill/index.js.map +1 -1
  137. package/dist/esm/runtime/adapters/SimpleInputAdapter.js +1 -1
  138. package/dist/esm/runtime/adapters/SimpleInputAdapter.js.map +1 -1
  139. package/dist/esm/runtime/index.d.ts +1 -1
  140. package/dist/esm/runtime/index.d.ts.map +1 -1
  141. package/dist/esm/runtime/index.js +1 -1
  142. package/dist/esm/runtime/index.js.map +1 -1
  143. package/dist/esm/runtime/inputs.d.ts +9 -0
  144. package/dist/esm/runtime/inputs.d.ts.map +1 -1
  145. package/dist/esm/runtime/inputs.js +15 -0
  146. package/dist/esm/runtime/inputs.js.map +1 -1
  147. package/dist/esm/runtime/types.d.ts +1 -1
  148. package/dist/esm/runtime/types.d.ts.map +1 -1
  149. package/dist/esm/script/index.d.ts +66 -13
  150. package/dist/esm/script/index.d.ts.map +1 -1
  151. package/dist/esm/script/index.js +187 -54
  152. package/dist/esm/script/index.js.map +1 -1
  153. package/dist/esm/security/other.d.ts +92 -0
  154. package/dist/esm/security/other.d.ts.map +1 -0
  155. package/dist/esm/security/other.js +211 -0
  156. package/dist/esm/security/other.js.map +1 -0
  157. package/dist/esm/session/bars.d.ts +10 -1
  158. package/dist/esm/session/bars.d.ts.map +1 -1
  159. package/dist/esm/session/bars.js +26 -1
  160. package/dist/esm/session/bars.js.map +1 -1
  161. package/dist/esm/session/calendar.d.ts +4 -1
  162. package/dist/esm/session/calendar.d.ts.map +1 -1
  163. package/dist/esm/session/calendar.js +23 -7
  164. package/dist/esm/session/calendar.js.map +1 -1
  165. package/dist/esm/session/context.d.ts +22 -5
  166. package/dist/esm/session/context.d.ts.map +1 -1
  167. package/dist/esm/session/context.js +86 -10
  168. package/dist/esm/session/context.js.map +1 -1
  169. package/dist/esm/str/floatingdecimal.d.ts +31 -0
  170. package/dist/esm/str/floatingdecimal.d.ts.map +1 -0
  171. package/dist/esm/str/floatingdecimal.js +272 -0
  172. package/dist/esm/str/floatingdecimal.js.map +1 -0
  173. package/dist/esm/str/index.d.ts +4 -3
  174. package/dist/esm/str/index.d.ts.map +1 -1
  175. package/dist/esm/str/index.js +6 -5
  176. package/dist/esm/str/index.js.map +1 -1
  177. package/dist/esm/str/numberformat.d.ts +6 -4
  178. package/dist/esm/str/numberformat.d.ts.map +1 -1
  179. package/dist/esm/str/numberformat.js +9 -5
  180. package/dist/esm/str/numberformat.js.map +1 -1
  181. package/dist/esm/ta/index.d.ts +64 -45
  182. package/dist/esm/ta/index.d.ts.map +1 -1
  183. package/dist/esm/ta/index.js +198 -228
  184. package/dist/esm/ta/index.js.map +1 -1
  185. package/dist/esm/ta/limits.d.ts +11 -0
  186. package/dist/esm/ta/limits.d.ts.map +1 -1
  187. package/dist/esm/ta/limits.js +27 -2
  188. package/dist/esm/ta/limits.js.map +1 -1
  189. package/dist/esm/ta/running-sum.js +1 -1
  190. package/dist/esm/ta/running-sum.js.map +1 -1
  191. package/dist/esm/ta-series.d.ts +1 -1
  192. package/dist/esm/ta-series.d.ts.map +1 -1
  193. package/dist/esm/ta-series.js +2 -1
  194. package/dist/esm/ta-series.js.map +1 -1
  195. package/dist/esm/table/index.d.ts +10 -3
  196. package/dist/esm/table/index.d.ts.map +1 -1
  197. package/dist/esm/table/index.js +23 -3
  198. package/dist/esm/table/index.js.map +1 -1
  199. package/dist/esm/time/session.d.ts +9 -0
  200. package/dist/esm/time/session.d.ts.map +1 -1
  201. package/dist/esm/time/session.js +53 -15
  202. package/dist/esm/time/session.js.map +1 -1
  203. package/dist/esm/time/timezone.d.ts +6 -1
  204. package/dist/esm/time/timezone.d.ts.map +1 -1
  205. package/dist/esm/time/timezone.js +8 -2
  206. package/dist/esm/time/timezone.js.map +1 -1
  207. package/dist/esm/types/metadata.d.ts +1 -1
  208. package/dist/esm/types/metadata.d.ts.map +1 -1
  209. package/package.json +1 -1
  210. package/src/array/index.ts +11 -3
  211. package/src/box/index.ts +6 -6
  212. package/src/callsite/index.ts +6 -3
  213. package/src/drawing/registry.ts +30 -7
  214. package/src/index.ts +16 -3
  215. package/src/input.ts +18 -1
  216. package/src/label/index.ts +3 -3
  217. package/src/line/index.ts +20 -68
  218. package/src/linefill/index.ts +20 -1
  219. package/src/runtime/adapters/SimpleInputAdapter.ts +1 -1
  220. package/src/runtime/index.ts +1 -0
  221. package/src/runtime/inputs.ts +16 -0
  222. package/src/runtime/types.ts +1 -1
  223. package/src/script/index.ts +262 -58
  224. package/src/security/other.ts +269 -0
  225. package/src/session/bars.ts +24 -1
  226. package/src/session/calendar.ts +26 -7
  227. package/src/session/context.ts +104 -10
  228. package/src/str/floatingdecimal.ts +268 -0
  229. package/src/str/index.ts +6 -5
  230. package/src/str/numberformat.ts +11 -6
  231. package/src/ta/index.ts +200 -225
  232. package/src/ta/limits.ts +28 -1
  233. package/src/ta/running-sum.ts +1 -1
  234. package/src/ta-series.ts +3 -2
  235. package/src/table/index.ts +22 -3
  236. package/src/time/session.ts +58 -16
  237. package/src/time/timezone.ts +9 -2
  238. package/src/types/metadata.ts +1 -1
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/table/index.ts"],
4
- "sourcesContent": ["/**\n * Table namespace\n * Functions for creating and filling table drawing objects.\n *\n * @remarks\n * A table is drawn at a fixed position of the pane (`position.*`), not at a bar. Tables have no getters in\n * PineScript; the script API returns the live tables in `result.tables`.\n *\n * PineScript rules:\n * - `table.cell` defines a cell: the arguments it does not give get their default, a previous definition of the\n * cell is replaced\n * - `table.cell_set_*` changes one property of a cell (a cell that was not defined is created)\n * - a column or row outside the table is a runtime error\n * - a deleted table is `na`: its functions do nothing\n *\n * @version 6\n */\n\nimport { all as allDrawings, isDeleted, register, remove } from '../drawing/registry.js';\nimport type { Table, TableCell, color } from '../types/index.js';\n\ntype TablePosition = Table['position'];\ntype HAlign = 'left' | 'center' | 'right';\ntype VAlign = 'top' | 'center' | 'bottom';\ntype FontFamily = 'default' | 'monospace';\n\n/**\n * Creates a new table (PineScript `table.new`).\n *\n * @example\n * ```typescript\n * const t = table.new(position.top_right, 2, 3, '#131722', '#787B86', 1);\n * table.cell(t, 0, 0, 'RSI', 0, 0, '#FFFFFF');\n * ```\n */\nexport function new_table(\n position: TablePosition,\n columns: number,\n rows: number,\n bgcolor?: color,\n frame_color?: color,\n frame_width?: number,\n border_color?: color,\n border_width?: number,\n force_overlay?: boolean\n): Table {\n return register('table', {\n position,\n columns,\n rows,\n bgcolor,\n frame_color,\n frame_width,\n border_color,\n border_width,\n force_overlay: force_overlay ?? false,\n cells: new Map(),\n merges: [],\n });\n}\n\nfunction checkCell(caller: string, id: Table, column: number, row: number): void {\n if (!(column >= 0 && column < id.columns && row >= 0 && row < id.rows)) {\n throw new RangeError(\n `${caller}: column ${column}, row ${row} is outside the table (${id.columns} columns, ${id.rows} rows).`\n );\n }\n}\n\nconst key = (column: number, row: number): string => `${column},${row}`;\n\n/** The cell at column / row, created when it was not defined. */\nfunction cellOf(caller: string, id: Table, column: number, row: number): TableCell {\n checkCell(caller, id, column, row);\n const cells = (id.cells ??= new Map());\n let cell = cells.get(key(column, row));\n if (!cell) cells.set(key(column, row), (cell = { text: '' }));\n return cell;\n}\n\n/**\n * Defines a cell (PineScript `table.cell`): its text and properties. Omitted properties get their default.\n */\nexport function cell(\n table_id: Table,\n column: number,\n row: number,\n text?: string,\n width?: number,\n height?: number,\n text_color?: color,\n text_halign?: HAlign,\n text_valign?: VAlign,\n text_size?: string | number,\n bgcolor?: color,\n tooltip?: string,\n text_font_family?: FontFamily,\n text_formatting?: number\n): void {\n if (isDeleted(table_id)) return;\n checkCell('table.cell()', table_id, column, row);\n (table_id.cells ??= new Map()).set(key(column, row), {\n text: text ?? '',\n width,\n height,\n text_color,\n text_halign,\n text_valign,\n text_size,\n bgcolor,\n tooltip,\n text_font_family,\n text_formatting,\n });\n}\n\nfunction setCell<K extends keyof TableCell>(name: string, field: K) {\n return (table_id: Table, column: number, row: number, value: TableCell[K]): void => {\n if (isDeleted(table_id)) return;\n cellOf(`table.${name}()`, table_id, column, row)[field] = value;\n };\n}\n\n/** Sets the text of a cell. */\nexport const cell_set_text = setCell('cell_set_text', 'text');\n/** Sets the width of a cell (% of the chart width; 0 fits the text). */\nexport const cell_set_width = setCell('cell_set_width', 'width');\n/** Sets the height of a cell (% of the chart height; 0 fits the text). */\nexport const cell_set_height = setCell('cell_set_height', 'height');\n/** Sets the text colour of a cell. */\nexport const cell_set_text_color = setCell('cell_set_text_color', 'text_color');\n/** Sets the horizontal text alignment of a cell. */\nexport const cell_set_text_halign = setCell('cell_set_text_halign', 'text_halign');\n/** Sets the vertical text alignment of a cell. */\nexport const cell_set_text_valign = setCell('cell_set_text_valign', 'text_valign');\n/** Sets the text size of a cell. */\nexport const cell_set_text_size = setCell('cell_set_text_size', 'text_size');\n/** Sets the background colour of a cell. */\nexport const cell_set_bgcolor = setCell('cell_set_bgcolor', 'bgcolor');\n/** Sets the tooltip of a cell. */\nexport const cell_set_tooltip = setCell('cell_set_tooltip', 'tooltip');\n/** Sets the font family of a cell. */\nexport const cell_set_text_font_family = setCell('cell_set_text_font_family', 'text_font_family');\n/** Sets the text formatting of a cell (`text.format_*` flags). */\nexport const cell_set_text_formatting = setCell('cell_set_text_formatting', 'text_formatting');\n\n/**\n * Merges the cells from start_column / start_row to end_column / end_row (PineScript `table.merge_cells`). The\n * merged cell shows the content of the start cell.\n */\nexport function merge_cells(\n table_id: Table,\n start_column: number,\n start_row: number,\n end_column: number,\n end_row: number\n): void {\n if (isDeleted(table_id)) return;\n checkCell('table.merge_cells()', table_id, start_column, start_row);\n checkCell('table.merge_cells()', table_id, end_column, end_row);\n if (end_column < start_column || end_row < start_row) {\n throw new RangeError('table.merge_cells(): the end cell is before the start cell.');\n }\n (table_id.merges ??= []).push({ start_column, start_row, end_column, end_row });\n}\n\n/**\n * Removes the cells from start_column / start_row to end_column / end_row (PineScript `table.clear`; default end:\n * the start cell), and the merges that start in that range.\n */\nexport function clear(\n table_id: Table,\n start_column: number,\n start_row: number,\n end_column: number = start_column,\n end_row: number = start_row\n): void {\n if (isDeleted(table_id)) return;\n checkCell('table.clear()', table_id, start_column, start_row);\n checkCell('table.clear()', table_id, end_column, end_row);\n const inside = (column: number, row: number): boolean =>\n column >= start_column && column <= end_column && row >= start_row && row <= end_row;\n for (let column = start_column; column <= end_column; column++) {\n for (let row = start_row; row <= end_row; row++) table_id.cells?.delete(key(column, row));\n }\n if (table_id.merges) table_id.merges = table_id.merges.filter((m) => !inside(m.start_column, m.start_row));\n}\n\nfunction setTable<K extends keyof Table>(field: K) {\n return (table_id: Table, value: Table[K]): void => {\n if (isDeleted(table_id)) return;\n table_id[field] = value;\n };\n}\n\n/** Moves the table to another position (`position.*`). */\nexport const set_position = setTable('position');\n/** Sets the background colour of the table. */\nexport const set_bgcolor = setTable('bgcolor');\n/** Sets the colour of the outer frame. */\nexport const set_frame_color = setTable('frame_color');\n/** Sets the width of the outer frame. */\nexport const set_frame_width = setTable('frame_width');\n/** Sets the colour of the cell borders. */\nexport const set_border_color = setTable('border_color');\n/** Sets the width of the cell borders. */\nexport const set_border_width = setTable('border_width');\n\n/** Deletes the table (PineScript `table.delete`). */\nexport function delete_table(table_id: Table): void {\n remove('table', table_id);\n}\n\n/** All live tables, in creation order (PineScript `table.all`). A new array. */\nexport function all(): Table[] {\n return allDrawings('table');\n}\n\n// Alias to match PineScript API\nexport { new_table as new };\nexport { delete_table as delete };\n"],
5
- "mappings": "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",
6
- "names": ["cell", "allDrawings"]
4
+ "sourcesContent": ["/**\n * Table namespace\n * Functions for creating and filling table drawing objects.\n *\n * @remarks\n * A table is drawn at a fixed position of the pane (`position.*`), not at a bar. Tables have no getters in\n * PineScript; the script API returns the live tables in `result.tables`.\n *\n * PineScript rules:\n * - `table.cell` defines a cell: the arguments it does not give get their default, a previous definition of the\n * cell is replaced\n * - `table.cell_set_*` changes one property of a cell (a cell that was not defined is created)\n * - a column or row outside the table is a runtime error\n * - a deleted table is `na`: its functions do nothing\n * - one live table per position and pane: `table.new` or `table.set_position` at the position of a live table with\n * the same `force_overlay` deletes that table (#176, #182); a table with `force_overlay = true` and one without\n * keep each their own position, also in an overlay script\n *\n * @version 6\n */\n\nimport { all as allDrawings, isDeleted, register, remove } from '../drawing/registry.js';\nimport type { Table, TableCell, color } from '../types/index.js';\n\ntype TablePosition = Table['position'];\ntype HAlign = 'left' | 'center' | 'right';\ntype VAlign = 'top' | 'center' | 'bottom';\ntype FontFamily = 'default' | 'monospace';\n\n/** Deletes the live tables other than `keep` at `position` with the same `force_overlay` (#176, #182). */\nfunction freePosition(position: TablePosition, force_overlay: boolean, keep?: Table): void {\n for (const old of allDrawings('table')) {\n if (old !== keep && old.position === position && (old.force_overlay ?? false) === force_overlay) remove('table', old);\n }\n}\n\n/**\n * Creates a new table (PineScript `table.new`). A live table at the same position with the same `force_overlay` is\n * deleted, as PineScript keeps one table per position and pane (#176, #182).\n *\n * @example\n * ```typescript\n * const t = table.new(position.top_right, 2, 3, '#131722', '#787B86', 1);\n * table.cell(t, 0, 0, 'RSI', 0, 0, '#FFFFFF');\n * ```\n */\nexport function new_table(\n position: TablePosition,\n columns: number,\n rows: number,\n bgcolor?: color,\n frame_color?: color,\n frame_width?: number,\n border_color?: color,\n border_width?: number,\n force_overlay?: boolean\n): Table {\n freePosition(position, force_overlay ?? false);\n return register('table', {\n position,\n columns,\n rows,\n bgcolor,\n frame_color,\n frame_width,\n border_color,\n border_width,\n force_overlay: force_overlay ?? false,\n cells: new Map(),\n merges: [],\n });\n}\n\nfunction checkCell(caller: string, id: Table, column: number, row: number): void {\n if (!(column >= 0 && column < id.columns && row >= 0 && row < id.rows)) {\n throw new RangeError(\n `${caller}: column ${column}, row ${row} is outside the table (${id.columns} columns, ${id.rows} rows).`\n );\n }\n}\n\nconst key = (column: number, row: number): string => `${column},${row}`;\n\n/** The cell at column / row, created when it was not defined. */\nfunction cellOf(caller: string, id: Table, column: number, row: number): TableCell {\n checkCell(caller, id, column, row);\n const cells = (id.cells ??= new Map());\n let cell = cells.get(key(column, row));\n if (!cell) cells.set(key(column, row), (cell = { text: '' }));\n return cell;\n}\n\n/**\n * Defines a cell (PineScript `table.cell`): its text and properties. Omitted properties get their default.\n */\nexport function cell(\n table_id: Table,\n column: number,\n row: number,\n text?: string,\n width?: number,\n height?: number,\n text_color?: color,\n text_halign?: HAlign,\n text_valign?: VAlign,\n text_size?: string | number,\n bgcolor?: color,\n tooltip?: string,\n text_font_family?: FontFamily,\n text_formatting?: number\n): void {\n if (isDeleted(table_id)) return;\n checkCell('table.cell()', table_id, column, row);\n (table_id.cells ??= new Map()).set(key(column, row), {\n text: text ?? '',\n width,\n height,\n text_color,\n text_halign,\n text_valign,\n text_size,\n bgcolor,\n tooltip,\n text_font_family,\n text_formatting,\n });\n}\n\nfunction setCell<K extends keyof TableCell>(name: string, field: K) {\n return (table_id: Table, column: number, row: number, value: TableCell[K]): void => {\n if (isDeleted(table_id)) return;\n cellOf(`table.${name}()`, table_id, column, row)[field] = value;\n };\n}\n\n/** Sets the text of a cell. */\nexport const cell_set_text = setCell('cell_set_text', 'text');\n/** Sets the width of a cell (% of the chart width; 0 fits the text). */\nexport const cell_set_width = setCell('cell_set_width', 'width');\n/** Sets the height of a cell (% of the chart height; 0 fits the text). */\nexport const cell_set_height = setCell('cell_set_height', 'height');\n/** Sets the text colour of a cell. */\nexport const cell_set_text_color = setCell('cell_set_text_color', 'text_color');\n/** Sets the horizontal text alignment of a cell. */\nexport const cell_set_text_halign = setCell('cell_set_text_halign', 'text_halign');\n/** Sets the vertical text alignment of a cell. */\nexport const cell_set_text_valign = setCell('cell_set_text_valign', 'text_valign');\n/** Sets the text size of a cell. */\nexport const cell_set_text_size = setCell('cell_set_text_size', 'text_size');\n/** Sets the background colour of a cell. */\nexport const cell_set_bgcolor = setCell('cell_set_bgcolor', 'bgcolor');\n/** Sets the tooltip of a cell. */\nexport const cell_set_tooltip = setCell('cell_set_tooltip', 'tooltip');\n/** Sets the font family of a cell. */\nexport const cell_set_text_font_family = setCell('cell_set_text_font_family', 'text_font_family');\n/** Sets the text formatting of a cell (`text.format_*` flags). */\nexport const cell_set_text_formatting = setCell('cell_set_text_formatting', 'text_formatting');\n\n/**\n * Merges the cells from start_column / start_row to end_column / end_row (PineScript `table.merge_cells`). The\n * merged cell shows the content of the start cell.\n */\nexport function merge_cells(\n table_id: Table,\n start_column: number,\n start_row: number,\n end_column: number,\n end_row: number\n): void {\n if (isDeleted(table_id)) return;\n checkCell('table.merge_cells()', table_id, start_column, start_row);\n checkCell('table.merge_cells()', table_id, end_column, end_row);\n if (end_column < start_column || end_row < start_row) {\n throw new RangeError('table.merge_cells(): the end cell is before the start cell.');\n }\n (table_id.merges ??= []).push({ start_column, start_row, end_column, end_row });\n}\n\n/**\n * Removes the cells from start_column / start_row to end_column / end_row (PineScript `table.clear`; default end:\n * the start cell), and the merges that start in that range.\n */\nexport function clear(\n table_id: Table,\n start_column: number,\n start_row: number,\n end_column: number = start_column,\n end_row: number = start_row\n): void {\n if (isDeleted(table_id)) return;\n checkCell('table.clear()', table_id, start_column, start_row);\n checkCell('table.clear()', table_id, end_column, end_row);\n const inside = (column: number, row: number): boolean =>\n column >= start_column && column <= end_column && row >= start_row && row <= end_row;\n for (let column = start_column; column <= end_column; column++) {\n for (let row = start_row; row <= end_row; row++) table_id.cells?.delete(key(column, row));\n }\n if (table_id.merges) table_id.merges = table_id.merges.filter((m) => !inside(m.start_column, m.start_row));\n}\n\nfunction setTable<K extends keyof Table>(field: K) {\n return (table_id: Table, value: Table[K]): void => {\n if (isDeleted(table_id)) return;\n table_id[field] = value;\n };\n}\n\n/**\n * Moves the table to another position (`position.*`). A live table at that position with the same `force_overlay` is\n * deleted (#182).\n */\nexport function set_position(table_id: Table, position: TablePosition): void {\n if (isDeleted(table_id)) return;\n freePosition(position, table_id.force_overlay ?? false, table_id);\n table_id.position = position;\n}\n/** Sets the background colour of the table. */\nexport const set_bgcolor = setTable('bgcolor');\n/** Sets the colour of the outer frame. */\nexport const set_frame_color = setTable('frame_color');\n/** Sets the width of the outer frame. */\nexport const set_frame_width = setTable('frame_width');\n/** Sets the colour of the cell borders. */\nexport const set_border_color = setTable('border_color');\n/** Sets the width of the cell borders. */\nexport const set_border_width = setTable('border_width');\n\n/** Deletes the table (PineScript `table.delete`). */\nexport function delete_table(table_id: Table): void {\n remove('table', table_id);\n}\n\n/** All live tables, in creation order (PineScript `table.all`). A new array. */\nexport function all(): Table[] {\n return allDrawings('table');\n}\n\n// Alias to match PineScript API\nexport { new_table as new };\nexport { delete_table as delete };\n"],
5
+ "mappings": "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",
6
+ "names": ["allDrawings", "cell"]
7
7
  }
@@ -14,6 +14,8 @@
14
14
  * "0000-0000" and "24x7" are the whole day, every day
15
15
  * - a run that ends at 0000 ("2000-0000") ends at 24:00 of the day it starts and belongs to that day
16
16
  * ("2000-0000:6" is Friday 20:00 to midnight)
17
+ * - "F" after the start moves it one day before the day the run ends on ("1700F-1900:2": Sunday 17:00 to Monday
18
+ * 19:00; "1900-1900:3456|1700F-1900:2" is the TVC:DXY symbol session) (#173)
17
19
  * - a string that is empty or does not start with a digit ("regular", "extended") is the symbol's own session
18
20
  * - a malformed string ("1100 -1400", "0930-16", ":8") is an error, as the PineScript runtime error
19
21
  */
@@ -22,6 +24,8 @@ export interface SessionRange {
22
24
  start: number;
23
25
  end: number;
24
26
  days: Set<number>;
27
+ /** Days between the start and the day the run ends on, given by "F" after the start (absent otherwise) */
28
+ startDays?: number;
25
29
  }
26
30
  /**
27
31
  * Runs of a PineScript session string, or null for the symbol's own session (empty or not starting with a digit).
@@ -49,4 +53,9 @@ export declare function parsePineSession(session: string): SessionRange[] | null
49
53
  * `time(timeframe, session)` in a script with the chart session
50
54
  */
51
55
  export declare function inSession(time: number, session: string, timezone: string, barMs?: number): boolean;
56
+ /**
57
+ * The run of `session` that contains `time`, as [start, end) UNIX times (ms), or null outside the session; rules in
58
+ * {@link inSession}. PineScript aligns the intraday periods of `time(tf, session)` on the start of this run (#173).
59
+ */
60
+ export declare function sessionRun(time: number, session: string, timezone: string, barMs?: number): [number, number] | null;
52
61
  //# sourceMappingURL=session.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../src/time/session.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAQH,iHAAiH;AACjH,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CACnB;AA+BD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,EAAE,GAAG,IAAI,CAuCvE;AAuBD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CA4DlG"}
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../src/time/session.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAQH,iHAAiH;AACjH,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAClB,0GAA0G;IAC1G,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA0CD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,EAAE,GAAG,IAAI,CAuCvE;AAuBD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAElG;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CA+EnH"}
@@ -19,7 +19,8 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
19
19
  var session_exports = {};
20
20
  __export(session_exports, {
21
21
  inSession: () => inSession,
22
- parsePineSession: () => parsePineSession
22
+ parsePineSession: () => parsePineSession,
23
+ sessionRun: () => sessionRun
23
24
  });
24
25
  module.exports = __toCommonJS(session_exports);
25
26
  var import_timezone = require("./timezone.js");
@@ -34,6 +35,13 @@ function parseRanges(text, session) {
34
35
  const entries = text.split(",");
35
36
  if (entries.length > 1 && entries[entries.length - 1] === "") entries.pop();
36
37
  return entries.map((entry) => {
38
+ const f = /^(\d{4})F-(\d{4})$/.exec(entry);
39
+ if (f) {
40
+ const minutes = (hhmm) => Number(hhmm.slice(0, 2)) * 60 + Number(hhmm.slice(2, 4));
41
+ const [start2, end2] = [minutes(f[1]), minutes(f[2])];
42
+ if (start2 >= MINUTES_PER_DAY || end2 >= MINUTES_PER_DAY) throw invalid(session);
43
+ return [start2, end2, 1];
44
+ }
37
45
  if (!/^\d{4}-\d{4}$/.test(entry)) throw invalid(session);
38
46
  let start = Number(entry.slice(0, 2)) * 60 + Number(entry.slice(2, 4));
39
47
  let end = Number(entry.slice(5, 7)) * 60 + Number(entry.slice(7, 9));
@@ -51,6 +59,7 @@ function parseDays(text, session) {
51
59
  return new Set([...text].map(Number));
52
60
  }
53
61
  const parsed = /* @__PURE__ */ new Map();
62
+ const range = (start, end, days, startDays) => startDays === void 0 ? { start, end, days } : { start, end, days, startDays };
54
63
  function parsePineSession(session) {
55
64
  const cached = parsed.get(session);
56
65
  if (cached !== void 0) return cached;
@@ -61,7 +70,7 @@ function parsePineSession(session) {
61
70
  } else if (spec === "24x7") {
62
71
  out = [{ start: 0, end: 0, days: new Set(ALL_DAYS) }];
63
72
  } else if (!/[:,|]/.test(spec)) {
64
- out = parseRanges(spec, session).map(([start, end]) => ({ start, end, days: new Set(ALL_DAYS) }));
73
+ out = parseRanges(spec, session).map(([start, end, startDays]) => range(start, end, new Set(ALL_DAYS), startDays));
65
74
  } else {
66
75
  const sections = spec.split("|");
67
76
  if (sections.length > 1 && sections[sections.length - 1] === "") sections.pop();
@@ -86,7 +95,7 @@ function parsePineSession(session) {
86
95
  for (const d of WEEKDAYS) if (!claimed.has(d)) own[i].add(d);
87
96
  }
88
97
  });
89
- out = items.flatMap((it, i) => own[i].size ? it.ranges.map(([start, end]) => ({ start, end, days: own[i] })) : []);
98
+ out = items.flatMap((it, i) => own[i].size ? it.ranges.map(([start, end, startDays]) => range(start, end, own[i], startDays)) : []);
90
99
  }
91
100
  parsed.set(session, out);
92
101
  return out;
@@ -109,26 +118,45 @@ function clockChangeNear(time, timezone) {
109
118
  return { at: hi, before, after };
110
119
  }
111
120
  function inSession(time, session, timezone, barMs) {
112
- if (Number.isNaN(time)) return false;
121
+ return sessionRun(time, session, timezone, barMs) !== null;
122
+ }
123
+ function sessionRun(time, session, timezone, barMs) {
124
+ if (Number.isNaN(time)) return null;
113
125
  const ranges = parsePineSession(session);
114
126
  if (ranges === null) throw new Error(`Session "${session}" is the symbol session: it needs the chart session (time(timeframe, session) in a script)`);
115
127
  const change = clockChangeNear(time, timezone);
116
128
  const f = (0, import_timezone.zonedFields)(time, timezone);
117
129
  const minute = f.hour * 60 + f.minute;
118
130
  const nextDay = f.dayOfWeek % 7 + 1;
119
- for (const { start, end: rawEnd, days } of ranges) {
131
+ for (const { start, end: rawEnd, days, startDays } of ranges) {
132
+ if (startDays !== void 0) {
133
+ for (let k = 0; k <= startDays + 1; k++) {
134
+ const endDay = Date.UTC(f.year, f.month - 1, f.day + k);
135
+ if (!days.has(new Date(endDay).getUTCDay() + 1)) continue;
136
+ const d = new Date(endDay);
137
+ const at = (dayShift, minutes) => (0, import_timezone.zonedToUnix)(timezone, d.getUTCFullYear(), d.getUTCMonth() + 1, d.getUTCDate() - dayShift, Math.floor(minutes / 60), minutes % 60);
138
+ const from = at(startDays, start);
139
+ const to = at(0, rawEnd);
140
+ if (time >= from && time < to) return [from, to];
141
+ }
142
+ continue;
143
+ }
120
144
  if (start === rawEnd) {
121
- if (days.has(start === 0 || minute < start ? f.dayOfWeek : nextDay)) return true;
145
+ if (days.has(start === 0 || minute < start ? f.dayOfWeek : nextDay)) {
146
+ const from = time - (minute - start + MINUTES_PER_DAY) % MINUTES_PER_DAY * MS_PER_MINUTE - f.second * 1e3 - time % 1e3;
147
+ return [from, from + MS_PER_DAY];
148
+ }
122
149
  continue;
123
150
  }
124
151
  const end = rawEnd === 0 ? MINUTES_PER_DAY : rawEnd;
125
152
  const overnight = start > end;
126
153
  if (!change) {
154
+ const midnight = time - minute * MS_PER_MINUTE - f.second * 1e3 - time % 1e3;
127
155
  if (!overnight) {
128
- if (minute >= start && minute < end && days.has(f.dayOfWeek)) return true;
156
+ if (minute >= start && minute < end && days.has(f.dayOfWeek)) return [midnight + start * MS_PER_MINUTE, midnight + end * MS_PER_MINUTE];
129
157
  } else {
130
- if (minute >= start && days.has(nextDay)) return true;
131
- if (minute < end && days.has(f.dayOfWeek)) return true;
158
+ if (minute >= start && days.has(nextDay)) return [midnight + start * MS_PER_MINUTE, midnight + (end + MINUTES_PER_DAY) * MS_PER_MINUTE];
159
+ if (minute < end && days.has(f.dayOfWeek)) return [midnight + (start - MINUTES_PER_DAY) * MS_PER_MINUTE, midnight + end * MS_PER_MINUTE];
132
160
  }
133
161
  continue;
134
162
  }
@@ -140,13 +168,13 @@ function inSession(time, session, timezone, barMs) {
140
168
  const from = day * MS_PER_DAY + (overnight ? start - MINUTES_PER_DAY : start) * MS_PER_MINUTE;
141
169
  const to = day * MS_PER_DAY + end * MS_PER_MINUTE;
142
170
  if (to === changeWall) {
143
- if (time >= from - change.after && time < to - change.after) return true;
171
+ if (time >= from - change.after && time < to - change.after) return [from - change.after, to - change.after];
144
172
  continue;
145
173
  }
146
- if (time >= place(from) && time < place(to)) return true;
174
+ if (time >= place(from) && time < place(to)) return [place(from), place(to)];
147
175
  const repeated = change.at + change.after;
148
176
  if (change.after < change.before && to < changeWall && to > repeated) {
149
- if (time >= Math.max(from, repeated) - change.after && time < to - change.after) return true;
177
+ if (time >= Math.max(from, repeated) - change.after && time < to - change.after) return [place(from), to - change.after];
150
178
  }
151
179
  }
152
180
  if (barMs !== void 0 && change.after < change.before) {
@@ -156,10 +184,10 @@ function inSession(time, session, timezone, barMs) {
156
184
  const from = day * MS_PER_DAY + (overnight ? start - MINUTES_PER_DAY : start) * MS_PER_MINUTE - change.before;
157
185
  const to = day * MS_PER_DAY + end * MS_PER_MINUTE - change.before;
158
186
  const shift = change.before - change.after;
159
- if (time >= from + shift && time < to + shift && time >= to + barMs) return true;
187
+ if (time >= from + shift && time < to + shift && time >= to + barMs) return [from + shift, to + shift];
160
188
  }
161
189
  }
162
190
  }
163
- return false;
191
+ return null;
164
192
  }
165
193
  //# sourceMappingURL=session.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/time/session.ts"],
4
- "sourcesContent": ["/**\n * PineScript session strings (\"0930-1600\", \"0930-1600:23456\", \"1000-1100,1400-1500:23456\", \"0930-1600|1000-1300:7\",\n * \"24x7\").\n *\n * Grammar (measured on PineScript): `range[,range...][:days]`, several sections joined by \"|\".\n * - a range is exactly \"HHMM-HHMM\"; hours and minutes are minute counts taken modulo one day (\"0930-2500\" runs\n * 09:30 to 01:00, \"0960-1600\" 10:00 to 16:00); a start of 24:00 or later must open a run of at most a day\n * - days are digits 1 (Sunday) to 7 (Saturday), the day each run ends on\n * - a lone range without days runs every day; otherwise a section without days is the default section, which runs\n * on the weekdays (2-6) no other section names, and a later section naming a day replaces the earlier ones on that\n * day (\"1100-1400|1200-1300:7\": 11:00-14:00 Monday to Friday, 12:00-13:00 Saturday)\n * - a trailing \",\", \":\" or \"|\" ends its list (\"1100-1400,\" is \"1100-1400\" Monday to Friday)\n * - an end before the start is an overnight run that belongs to the day it ends; equal ends are 24 hours;\n * \"0000-0000\" and \"24x7\" are the whole day, every day\n * - a run that ends at 0000 (\"2000-0000\") ends at 24:00 of the day it starts and belongs to that day\n * (\"2000-0000:6\" is Friday 20:00 to midnight)\n * - a string that is empty or does not start with a digit (\"regular\", \"extended\") is the symbol's own session\n * - a malformed string (\"1100 -1400\", \"0930-16\", \":8\") is an error, as the PineScript runtime error\n */\n\nimport { zoneOffset, zonedFields } from './timezone.js';\n\nconst MINUTES_PER_DAY = 1440;\nconst WEEKDAYS = [2, 3, 4, 5, 6];\nconst ALL_DAYS = [1, 2, 3, 4, 5, 6, 7];\n\n/** A run of a session: minutes after midnight (0-1439) and the days it ends on (1 = Sunday ... 7 = Saturday). */\nexport interface SessionRange {\n start: number;\n end: number;\n days: Set<number>;\n}\n\nfunction invalid(session: string): SyntaxError {\n return new SyntaxError(`Invalid session \"${session}\": expected \"HHMM-HHMM[,HHMM-HHMM...][:days][|...]\"`);\n}\n\nfunction parseRanges(text: string, session: string): Array<[number, number]> {\n if (!text) return [];\n const entries = text.split(',');\n if (entries.length > 1 && entries[entries.length - 1] === '') entries.pop();\n return entries.map((entry) => {\n if (!/^\\d{4}-\\d{4}$/.test(entry)) throw invalid(session);\n let start = Number(entry.slice(0, 2)) * 60 + Number(entry.slice(2, 4));\n let end = Number(entry.slice(5, 7)) * 60 + Number(entry.slice(7, 9));\n if (start >= MINUTES_PER_DAY) {\n const endOfRun = end || MINUTES_PER_DAY;\n if (!(start - MINUTES_PER_DAY < endOfRun && endOfRun <= start && start < 2 * MINUTES_PER_DAY)) throw invalid(session);\n }\n start %= MINUTES_PER_DAY;\n end %= MINUTES_PER_DAY;\n return [start, end];\n });\n}\n\nfunction parseDays(text: string, session: string): Set<number> {\n if (!/^[1-7]+$/.test(text)) throw invalid(session);\n return new Set([...text].map(Number));\n}\n\nconst parsed = new Map<string, SessionRange[] | null>();\n\n/**\n * Runs of a PineScript session string, or null for the symbol's own session (empty or not starting with a digit).\n * @throws SyntaxError when the string is malformed (a PineScript runtime error)\n */\nexport function parsePineSession(session: string): SessionRange[] | null {\n const cached = parsed.get(session);\n if (cached !== undefined) return cached;\n const spec = session.trim();\n let out: SessionRange[] | null;\n if (!spec || !/^\\d/.test(spec)) {\n out = null;\n } else if (spec === '24x7') {\n out = [{ start: 0, end: 0, days: new Set(ALL_DAYS) }];\n } else if (!/[:,|]/.test(spec)) {\n out = parseRanges(spec, session).map(([start, end]) => ({ start, end, days: new Set(ALL_DAYS) }));\n } else {\n const sections = spec.split('|');\n if (sections.length > 1 && sections[sections.length - 1] === '') sections.pop();\n const items = sections.map((section) => {\n const parts = section.split(':');\n if (parts.length > 2) throw invalid(session);\n const ranges = parseRanges(parts[0]!, session);\n const days = parts.length === 1 || parts[1] === '' ? null : parseDays(parts[1]!, session);\n return { ranges, days };\n });\n if (items.filter((it) => it.days === null).length > 1) throw invalid(session);\n // a later section naming a day replaces the earlier ones on that day; the default section takes the weekdays\n // no other section names\n const own: Set<number>[] = items.map(() => new Set<number>());\n const claimed = new Set<number>();\n for (let i = items.length - 1; i >= 0; i--) {\n const days = items[i]!.days;\n if (days === null) continue;\n for (const d of days) if (!claimed.has(d)) own[i]!.add(d);\n for (const d of days) claimed.add(d);\n }\n items.forEach((it, i) => {\n if (it.days === null) for (const d of WEEKDAYS) if (!claimed.has(d)) own[i]!.add(d);\n });\n out = items.flatMap((it, i) => (own[i]!.size ? it.ranges.map(([start, end]) => ({ start, end, days: own[i]! })) : []));\n }\n parsed.set(session, out);\n return out;\n}\n\nconst MS_PER_MINUTE = 60_000;\nconst MS_PER_HOUR = 3_600_000;\nconst MS_PER_DAY = 86_400_000;\n/** A clock change is looked for this far on each side of the tested time. */\nconst CHANGE_WINDOW = 36 * MS_PER_HOUR;\n\n/** The clock change of `timezone` within 36 hours of `time`: its UNIX time and the offsets (ms) around it. */\nfunction clockChangeNear(time: number, timezone: string): { at: number; before: number; after: number } | null {\n let lo = time - CHANGE_WINDOW;\n let hi = time + CHANGE_WINDOW;\n const before = zoneOffset(lo, timezone);\n const after = zoneOffset(hi, timezone);\n if (before === after) return null;\n while (hi - lo > MS_PER_MINUTE) {\n const mid = Math.floor((lo + hi) / 2 / MS_PER_MINUTE) * MS_PER_MINUTE;\n if (zoneOffset(mid, timezone) === before) lo = mid;\n else hi = mid;\n }\n return { at: hi, before, after };\n}\n\n/**\n * True when `time` falls inside `session`, with the session hours read in `timezone`.\n * A run includes its start minute and excludes its end minute.\n *\n * On the days around a clock change PineScript does not read the wall clock of each bar; it places each run of\n * each local day (measured on 15- and 5-minute bars, clocks going forward and back, four time zones):\n * - a wall time of the day is placed with the offset before the change when it is before the wall time of the\n * change (02:00 for 02:00 -> 03:00, 03:00 for 03:00 -> 02:00), with the offset after it otherwise. Forward\n * change: \"0100-0300\" lasts one hour and \"0130-0230\" is empty; back change: \"0230-0330\" lasts two hours\n * - a run that ends exactly on the wall time of the change is placed with the offset after the change at both ends\n * (forward change: \"0100-0200\" is one hour earlier than the wall clock says)\n * - clocks going back: a run that ends inside the repeated hour also covers its second pass\n * - clocks going back, the day BEFORE the change: a run with a start or an end on the wall time of the change is\n * also true one hour (the amount of the change) later, from one bar after its usual end. This needs the bar\n * duration `barMs`; without it the rule is not applied\n *\n * @param barMs - Duration of the bars in ms (the chart timeframe); only used by the last rule\n * @throws Error for the symbol's own session (\"regular\", \"extended\", \"\"), which this function does not know: use\n * `time(timeframe, session)` in a script with the chart session\n */\nexport function inSession(time: number, session: string, timezone: string, barMs?: number): boolean {\n if (Number.isNaN(time)) return false;\n const ranges = parsePineSession(session);\n if (ranges === null) throw new Error(`Session \"${session}\" is the symbol session: it needs the chart session (time(timeframe, session) in a script)`);\n const change = clockChangeNear(time, timezone);\n const f = zonedFields(time, timezone);\n const minute = f.hour * 60 + f.minute;\n const nextDay = (f.dayOfWeek % 7) + 1;\n for (const { start, end: rawEnd, days } of ranges) {\n if (start === rawEnd) {\n // 24 hours: the run belongs to the day it ends (\"0000-0000\": the day itself)\n if (days.has(start === 0 || minute < start ? f.dayOfWeek : nextDay)) return true;\n continue;\n }\n // a run that ends at 0000 ends at 24:00 of the day it starts\n const end = rawEnd === 0 ? MINUTES_PER_DAY : rawEnd;\n const overnight = start > end;\n if (!change) {\n if (!overnight) {\n if (minute >= start && minute < end && days.has(f.dayOfWeek)) return true;\n } else {\n // the part from `start` belongs to the next day\n if (minute >= start && days.has(nextDay)) return true;\n if (minute < end && days.has(f.dayOfWeek)) return true;\n }\n continue;\n }\n // local days as naive instants (wall clock read as UTC)\n const changeWall = change.at + change.before;\n const place = (naive: number): number => (naive < changeWall ? naive - change.before : naive - change.after);\n const today = Math.floor((time + change.before) / MS_PER_DAY);\n for (let day = today - 1; day <= today + 1; day++) {\n if (!days.has(((day + 4) % 7) + 1)) continue; // 01/01/1970 is a Thursday (5)\n const from = day * MS_PER_DAY + (overnight ? start - MINUTES_PER_DAY : start) * MS_PER_MINUTE;\n const to = day * MS_PER_DAY + end * MS_PER_MINUTE;\n if (to === changeWall) {\n if (time >= from - change.after && time < to - change.after) return true;\n continue;\n }\n if (time >= place(from) && time < place(to)) return true;\n // clocks going back: the second pass of the repeated hour\n const repeated = change.at + change.after;\n if (change.after < change.before && to < changeWall && to > repeated) {\n if (time >= Math.max(from, repeated) - change.after && time < to - change.after) return true;\n }\n }\n // clocks going back, the day before: a run with an end on the wall time of the change is also true one change\n // later, from one bar after its usual end\n if (barMs !== undefined && change.after < change.before) {\n const day = Math.floor(changeWall / MS_PER_DAY) - 1;\n const wallMinute = (changeWall - (day + 1) * MS_PER_DAY) / MS_PER_MINUTE;\n if ((start === wallMinute || end === wallMinute) && days.has(((day + 4) % 7) + 1)) {\n const from = day * MS_PER_DAY + (overnight ? start - MINUTES_PER_DAY : start) * MS_PER_MINUTE - change.before;\n const to = day * MS_PER_DAY + end * MS_PER_MINUTE - change.before;\n const shift = change.before - change.after;\n if (time >= from + shift && time < to + shift && time >= to + barMs) return true;\n }\n }\n }\n return false;\n}\n"],
5
- "mappings": "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",
6
- "names": []
4
+ "sourcesContent": ["/**\n * PineScript session strings (\"0930-1600\", \"0930-1600:23456\", \"1000-1100,1400-1500:23456\", \"0930-1600|1000-1300:7\",\n * \"24x7\").\n *\n * Grammar (measured on PineScript): `range[,range...][:days]`, several sections joined by \"|\".\n * - a range is exactly \"HHMM-HHMM\"; hours and minutes are minute counts taken modulo one day (\"0930-2500\" runs\n * 09:30 to 01:00, \"0960-1600\" 10:00 to 16:00); a start of 24:00 or later must open a run of at most a day\n * - days are digits 1 (Sunday) to 7 (Saturday), the day each run ends on\n * - a lone range without days runs every day; otherwise a section without days is the default section, which runs\n * on the weekdays (2-6) no other section names, and a later section naming a day replaces the earlier ones on that\n * day (\"1100-1400|1200-1300:7\": 11:00-14:00 Monday to Friday, 12:00-13:00 Saturday)\n * - a trailing \",\", \":\" or \"|\" ends its list (\"1100-1400,\" is \"1100-1400\" Monday to Friday)\n * - an end before the start is an overnight run that belongs to the day it ends; equal ends are 24 hours;\n * \"0000-0000\" and \"24x7\" are the whole day, every day\n * - a run that ends at 0000 (\"2000-0000\") ends at 24:00 of the day it starts and belongs to that day\n * (\"2000-0000:6\" is Friday 20:00 to midnight)\n * - \"F\" after the start moves it one day before the day the run ends on (\"1700F-1900:2\": Sunday 17:00 to Monday\n * 19:00; \"1900-1900:3456|1700F-1900:2\" is the TVC:DXY symbol session) (#173)\n * - a string that is empty or does not start with a digit (\"regular\", \"extended\") is the symbol's own session\n * - a malformed string (\"1100 -1400\", \"0930-16\", \":8\") is an error, as the PineScript runtime error\n */\n\nimport { zoneOffset, zonedFields, zonedToUnix } from './timezone.js';\n\nconst MINUTES_PER_DAY = 1440;\nconst WEEKDAYS = [2, 3, 4, 5, 6];\nconst ALL_DAYS = [1, 2, 3, 4, 5, 6, 7];\n\n/** A run of a session: minutes after midnight (0-1439) and the days it ends on (1 = Sunday ... 7 = Saturday). */\nexport interface SessionRange {\n start: number;\n end: number;\n days: Set<number>;\n /** Days between the start and the day the run ends on, given by \"F\" after the start (absent otherwise) */\n startDays?: number;\n}\n\nfunction invalid(session: string): SyntaxError {\n return new SyntaxError(`Invalid session \"${session}\": expected \"HHMM-HHMM[,HHMM-HHMM...][:days][|...]\"`);\n}\n\nfunction parseRanges(text: string, session: string): Array<[number, number, number?]> {\n if (!text) return [];\n const entries = text.split(',');\n if (entries.length > 1 && entries[entries.length - 1] === '') entries.pop();\n return entries.map((entry): [number, number, number?] => {\n // \"HHMMF-HHMM\": the start is one day before the day the run ends on\n const f = /^(\\d{4})F-(\\d{4})$/.exec(entry);\n if (f) {\n const minutes = (hhmm: string): number => Number(hhmm.slice(0, 2)) * 60 + Number(hhmm.slice(2, 4));\n const [start, end] = [minutes(f[1]!), minutes(f[2]!)];\n if (start >= MINUTES_PER_DAY || end >= MINUTES_PER_DAY) throw invalid(session);\n return [start, end, 1];\n }\n if (!/^\\d{4}-\\d{4}$/.test(entry)) throw invalid(session);\n let start = Number(entry.slice(0, 2)) * 60 + Number(entry.slice(2, 4));\n let end = Number(entry.slice(5, 7)) * 60 + Number(entry.slice(7, 9));\n if (start >= MINUTES_PER_DAY) {\n const endOfRun = end || MINUTES_PER_DAY;\n if (!(start - MINUTES_PER_DAY < endOfRun && endOfRun <= start && start < 2 * MINUTES_PER_DAY)) throw invalid(session);\n }\n start %= MINUTES_PER_DAY;\n end %= MINUTES_PER_DAY;\n return [start, end];\n });\n}\n\nfunction parseDays(text: string, session: string): Set<number> {\n if (!/^[1-7]+$/.test(text)) throw invalid(session);\n return new Set([...text].map(Number));\n}\n\nconst parsed = new Map<string, SessionRange[] | null>();\n\nconst range = (start: number, end: number, days: Set<number>, startDays?: number): SessionRange =>\n startDays === undefined ? { start, end, days } : { start, end, days, startDays };\n\n/**\n * Runs of a PineScript session string, or null for the symbol's own session (empty or not starting with a digit).\n * @throws SyntaxError when the string is malformed (a PineScript runtime error)\n */\nexport function parsePineSession(session: string): SessionRange[] | null {\n const cached = parsed.get(session);\n if (cached !== undefined) return cached;\n const spec = session.trim();\n let out: SessionRange[] | null;\n if (!spec || !/^\\d/.test(spec)) {\n out = null;\n } else if (spec === '24x7') {\n out = [{ start: 0, end: 0, days: new Set(ALL_DAYS) }];\n } else if (!/[:,|]/.test(spec)) {\n out = parseRanges(spec, session).map(([start, end, startDays]) => range(start, end, new Set(ALL_DAYS), startDays));\n } else {\n const sections = spec.split('|');\n if (sections.length > 1 && sections[sections.length - 1] === '') sections.pop();\n const items = sections.map((section) => {\n const parts = section.split(':');\n if (parts.length > 2) throw invalid(session);\n const ranges = parseRanges(parts[0]!, session);\n const days = parts.length === 1 || parts[1] === '' ? null : parseDays(parts[1]!, session);\n return { ranges, days };\n });\n if (items.filter((it) => it.days === null).length > 1) throw invalid(session);\n // a later section naming a day replaces the earlier ones on that day; the default section takes the weekdays\n // no other section names\n const own: Set<number>[] = items.map(() => new Set<number>());\n const claimed = new Set<number>();\n for (let i = items.length - 1; i >= 0; i--) {\n const days = items[i]!.days;\n if (days === null) continue;\n for (const d of days) if (!claimed.has(d)) own[i]!.add(d);\n for (const d of days) claimed.add(d);\n }\n items.forEach((it, i) => {\n if (it.days === null) for (const d of WEEKDAYS) if (!claimed.has(d)) own[i]!.add(d);\n });\n out = items.flatMap((it, i) => (own[i]!.size ? it.ranges.map(([start, end, startDays]) => range(start, end, own[i]!, startDays)) : []));\n }\n parsed.set(session, out);\n return out;\n}\n\nconst MS_PER_MINUTE = 60_000;\nconst MS_PER_HOUR = 3_600_000;\nconst MS_PER_DAY = 86_400_000;\n/** A clock change is looked for this far on each side of the tested time. */\nconst CHANGE_WINDOW = 36 * MS_PER_HOUR;\n\n/** The clock change of `timezone` within 36 hours of `time`: its UNIX time and the offsets (ms) around it. */\nfunction clockChangeNear(time: number, timezone: string): { at: number; before: number; after: number } | null {\n let lo = time - CHANGE_WINDOW;\n let hi = time + CHANGE_WINDOW;\n const before = zoneOffset(lo, timezone);\n const after = zoneOffset(hi, timezone);\n if (before === after) return null;\n while (hi - lo > MS_PER_MINUTE) {\n const mid = Math.floor((lo + hi) / 2 / MS_PER_MINUTE) * MS_PER_MINUTE;\n if (zoneOffset(mid, timezone) === before) lo = mid;\n else hi = mid;\n }\n return { at: hi, before, after };\n}\n\n/**\n * True when `time` falls inside `session`, with the session hours read in `timezone`.\n * A run includes its start minute and excludes its end minute.\n *\n * On the days around a clock change PineScript does not read the wall clock of each bar; it places each run of\n * each local day (measured on 15- and 5-minute bars, clocks going forward and back, four time zones):\n * - a wall time of the day is placed with the offset before the change when it is before the wall time of the\n * change (02:00 for 02:00 -> 03:00, 03:00 for 03:00 -> 02:00), with the offset after it otherwise. Forward\n * change: \"0100-0300\" lasts one hour and \"0130-0230\" is empty; back change: \"0230-0330\" lasts two hours\n * - a run that ends exactly on the wall time of the change is placed with the offset after the change at both ends\n * (forward change: \"0100-0200\" is one hour earlier than the wall clock says)\n * - clocks going back: a run that ends inside the repeated hour also covers its second pass\n * - clocks going back, the day BEFORE the change: a run with a start or an end on the wall time of the change is\n * also true one hour (the amount of the change) later, from one bar after its usual end. This needs the bar\n * duration `barMs`; without it the rule is not applied\n *\n * @param barMs - Duration of the bars in ms (the chart timeframe); only used by the last rule\n * @throws Error for the symbol's own session (\"regular\", \"extended\", \"\"), which this function does not know: use\n * `time(timeframe, session)` in a script with the chart session\n */\nexport function inSession(time: number, session: string, timezone: string, barMs?: number): boolean {\n return sessionRun(time, session, timezone, barMs) !== null;\n}\n\n/**\n * The run of `session` that contains `time`, as [start, end) UNIX times (ms), or null outside the session; rules in\n * {@link inSession}. PineScript aligns the intraday periods of `time(tf, session)` on the start of this run (#173).\n */\nexport function sessionRun(time: number, session: string, timezone: string, barMs?: number): [number, number] | null {\n if (Number.isNaN(time)) return null;\n const ranges = parsePineSession(session);\n if (ranges === null) throw new Error(`Session \"${session}\" is the symbol session: it needs the chart session (time(timeframe, session) in a script)`);\n const change = clockChangeNear(time, timezone);\n const f = zonedFields(time, timezone);\n const minute = f.hour * 60 + f.minute;\n const nextDay = (f.dayOfWeek % 7) + 1;\n for (const { start, end: rawEnd, days, startDays } of ranges) {\n if (startDays !== undefined) {\n // \"F\": from `start` of `startDays` days before the end day to `end` of the end day, wall times read in the zone\n for (let k = 0; k <= startDays + 1; k++) {\n const endDay = Date.UTC(f.year, f.month - 1, f.day + k);\n if (!days.has(new Date(endDay).getUTCDay() + 1)) continue;\n const d = new Date(endDay);\n const at = (dayShift: number, minutes: number): number =>\n zonedToUnix(timezone, d.getUTCFullYear(), d.getUTCMonth() + 1, d.getUTCDate() - dayShift, Math.floor(minutes / 60), minutes % 60);\n const from = at(startDays, start);\n const to = at(0, rawEnd);\n if (time >= from && time < to) return [from, to];\n }\n continue;\n }\n if (start === rawEnd) {\n // 24 hours: the run belongs to the day it ends (\"0000-0000\": the day itself)\n if (days.has(start === 0 || minute < start ? f.dayOfWeek : nextDay)) {\n const from = time - ((minute - start + MINUTES_PER_DAY) % MINUTES_PER_DAY) * MS_PER_MINUTE - f.second * 1000 - (time % 1000);\n return [from, from + MS_PER_DAY];\n }\n continue;\n }\n // a run that ends at 0000 ends at 24:00 of the day it starts\n const end = rawEnd === 0 ? MINUTES_PER_DAY : rawEnd;\n const overnight = start > end;\n if (!change) {\n // the wall-clock minute of the bar: the run is `start` to `end` minutes of the same offset\n const midnight = time - minute * MS_PER_MINUTE - f.second * 1000 - (time % 1000);\n if (!overnight) {\n if (minute >= start && minute < end && days.has(f.dayOfWeek)) return [midnight + start * MS_PER_MINUTE, midnight + end * MS_PER_MINUTE];\n } else {\n // the part from `start` belongs to the next day\n if (minute >= start && days.has(nextDay)) return [midnight + start * MS_PER_MINUTE, midnight + (end + MINUTES_PER_DAY) * MS_PER_MINUTE];\n if (minute < end && days.has(f.dayOfWeek)) return [midnight + (start - MINUTES_PER_DAY) * MS_PER_MINUTE, midnight + end * MS_PER_MINUTE];\n }\n continue;\n }\n // local days as naive instants (wall clock read as UTC)\n const changeWall = change.at + change.before;\n const place = (naive: number): number => (naive < changeWall ? naive - change.before : naive - change.after);\n const today = Math.floor((time + change.before) / MS_PER_DAY);\n for (let day = today - 1; day <= today + 1; day++) {\n if (!days.has(((day + 4) % 7) + 1)) continue; // 01/01/1970 is a Thursday (5)\n const from = day * MS_PER_DAY + (overnight ? start - MINUTES_PER_DAY : start) * MS_PER_MINUTE;\n const to = day * MS_PER_DAY + end * MS_PER_MINUTE;\n if (to === changeWall) {\n if (time >= from - change.after && time < to - change.after) return [from - change.after, to - change.after];\n continue;\n }\n if (time >= place(from) && time < place(to)) return [place(from), place(to)];\n // clocks going back: the second pass of the repeated hour\n const repeated = change.at + change.after;\n if (change.after < change.before && to < changeWall && to > repeated) {\n if (time >= Math.max(from, repeated) - change.after && time < to - change.after) return [place(from), to - change.after];\n }\n }\n // clocks going back, the day before: a run with an end on the wall time of the change is also true one change\n // later, from one bar after its usual end\n if (barMs !== undefined && change.after < change.before) {\n const day = Math.floor(changeWall / MS_PER_DAY) - 1;\n const wallMinute = (changeWall - (day + 1) * MS_PER_DAY) / MS_PER_MINUTE;\n if ((start === wallMinute || end === wallMinute) && days.has(((day + 4) % 7) + 1)) {\n const from = day * MS_PER_DAY + (overnight ? start - MINUTES_PER_DAY : start) * MS_PER_MINUTE - change.before;\n const to = day * MS_PER_DAY + end * MS_PER_MINUTE - change.before;\n const shift = change.before - change.after;\n if (time >= from + shift && time < to + shift && time >= to + barMs) return [from + shift, to + shift];\n }\n }\n }\n return null;\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["start", "end"]
7
7
  }
@@ -41,5 +41,10 @@ export declare function zonedFields(time: number, timezone: string): ZonedFields
41
41
  * PineScript: 1582-10-05 is 1582-10-15). Out-of-range fields roll over like `Date.UTC`.
42
42
  */
43
43
  export declare function civilToUnix(year: number, month: number, day: number, hour?: number, minute?: number, second?: number): number;
44
- export declare function zonedToUnix(timezone: string, year: number, month: number, day: number, hour?: number, minute?: number, second?: number): number;
44
+ /**
45
+ * UNIX time (ms) of a wall-clock date in `timezone`. A wall time skipped by a clock change is read with the offset
46
+ * before the change (02:30 on a 02:00 -> 03:00 night is 03:30 after it); a wall time that occurs twice gives the
47
+ * later instant, or the earlier one with `earlier`.
48
+ */
49
+ export declare function zonedToUnix(timezone: string, year: number, month: number, day: number, hour?: number, minute?: number, second?: number, earlier?: boolean): number;
45
50
  //# sourceMappingURL=timezone.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"timezone.d.ts","sourceRoot":"","sources":["../../../src/time/timezone.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AA0GH,qDAAqD;AACrD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,mEAAmE;IACnE,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,uFAAuF;AACvF,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEjE;AAED,kEAAkE;AAClE,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,WAAW,CAWvE;AAED;;;;;;;GAOG;AACH;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,SAAI,EAAE,MAAM,SAAI,EAAE,MAAM,SAAI,GAAG,MAAM,CAc9G;AAED,wBAAgB,WAAW,CACzB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,MAAU,EAChB,MAAM,GAAE,MAAU,EAClB,MAAM,GAAE,MAAU,GACjB,MAAM,CAYR"}
1
+ {"version":3,"file":"timezone.d.ts","sourceRoot":"","sources":["../../../src/time/timezone.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AA0GH,qDAAqD;AACrD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,mEAAmE;IACnE,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,uFAAuF;AACvF,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEjE;AAED,kEAAkE;AAClE,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,WAAW,CAWvE;AAED;;;;;;;GAOG;AACH;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,SAAI,EAAE,MAAM,SAAI,EAAE,MAAM,SAAI,GAAG,MAAM,CAc9G;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CACzB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,MAAU,EAChB,MAAM,GAAE,MAAU,EAClB,MAAM,GAAE,MAAU,EAClB,OAAO,GAAE,OAAe,GACvB,MAAM,CAaR"}
@@ -126,14 +126,14 @@ function civilToUnix(year, month, day, hour = 0, minute = 0, second = 0) {
126
126
  const days = jdn - 2440588 + (day - 1);
127
127
  return days * MS_PER_DAY + Date.UTC(1970, 0, 1, hour, minute, second);
128
128
  }
129
- function zonedToUnix(timezone, year, month, day, hour = 0, minute = 0, second = 0) {
129
+ function zonedToUnix(timezone, year, month, day, hour = 0, minute = 0, second = 0, earlier = false) {
130
130
  const zone = resolveZone(timezone);
131
131
  const local = civilToUnix(year, month, day, hour, minute, second);
132
132
  if (zone.kind === "fixed") return local - zone.offsetMs;
133
133
  const before = offsetAt(zone, local - MS_PER_DAY);
134
134
  const after = offsetAt(zone, local + MS_PER_DAY);
135
135
  const candidates = [local - before, local - after].filter((t) => local - offsetAt(zone, t) === t);
136
- if (candidates.length) return Math.max(...candidates);
136
+ if (candidates.length) return earlier ? Math.min(...candidates) : Math.max(...candidates);
137
137
  return local - before;
138
138
  }
139
139
  //# sourceMappingURL=timezone.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/time/timezone.ts"],
4
- "sourcesContent": ["/**\n * Time zone resolution for the calendar functions.\n *\n * PineScript accepts two time zone notations:\n * - UTC/GMT offset notation: \"UTC\", \"UTC-5\", \"UTC+05:30\", \"GMT+0530\", \"GMT+05:30:00\", up to \u00B118:00\n * - IANA time zone database names, case-sensitive: \"America/New_York\", \"Etc/UTC\", \"US/Eastern\", \"CET\"\n *\n * \"utc+2\", \"america/new_york\", \"UTC+5:3\", \"UTC+5:30:15\", \"GMT+18:01\", \"EST\", \"MST\" and \"HST\" are\n * errors in PineScript, and so here.\n *\n * Offsets of IANA zones (daylight saving time and historical changes included)\n * come from the host's `Intl.DateTimeFormat`, so no time zone data ships with the library.\n */\n\nconst MS_PER_SECOND = 1000;\nconst MS_PER_DAY = 86_400_000;\nconst MAX_OFFSET_SECONDS = 18 * 3600;\n\nconst OFFSET_NOTATION = /^(?:UTC|GMT)(?:([+-])(\\d{1,2})(?::?(\\d{2})(?::?(\\d{2}))?)?)?$/;\n\n/** Time zone database names that PineScript rejects although `Intl` accepts them. */\nconst REJECTED_NAMES = new Set(['EST', 'MST', 'HST']);\n\nlet canonicalNames: Map<string, string> | undefined;\n\n/** False when `name` is a wrong-case spelling of a time zone name (`Intl` matches names case-insensitively). */\nfunction hasTimeZoneCase(name: string): boolean {\n if (name.split('/').some((segment) => !/^[A-Z]/.test(segment))) return false;\n canonicalNames ??= new Map(Intl.supportedValuesOf('timeZone').map((n) => [n.toLowerCase(), n]));\n const canonical = canonicalNames.get(name.toLowerCase());\n return canonical === undefined || canonical === name;\n}\n\ntype Zone =\n | { readonly kind: 'fixed'; readonly offsetMs: number }\n | {\n readonly kind: 'iana';\n readonly format: Intl.DateTimeFormat;\n /** Offset of each UTC hour (`floor(time / 1 h)`); null for an hour with an offset change inside */\n readonly hours: Map<number, number | null>;\n };\n\nconst MS_PER_HOUR = 3_600_000;\n/** Cached hours per zone before the cache restarts (about 11 years of hours) */\nconst MAX_CACHED_HOURS = 100_000;\n\nconst zones = new Map<string, Zone>();\n\nfunction resolveZone(timezone: string): Zone {\n let zone = zones.get(timezone);\n if (zone) return zone;\n\n const invalid = () =>\n new RangeError(\n `Invalid time zone \"${timezone}\": use UTC/GMT offset notation (\"UTC-5\", \"GMT+0530\") or an IANA name (\"America/New_York\")`\n );\n const m = OFFSET_NOTATION.exec(timezone);\n if (m) {\n const [, sign, h = '0', mi = '0', s] = m;\n const minutes = Number(mi);\n const seconds = s === undefined ? 0 : Number(s);\n if (minutes > 59 || seconds > 59 || (s !== undefined && h.length !== 2)) throw invalid();\n const offsetSeconds = Number(h) * 3600 + minutes * 60 + seconds;\n if (offsetSeconds > MAX_OFFSET_SECONDS) throw invalid();\n zone = { kind: 'fixed', offsetMs: (sign === '-' ? -offsetSeconds : offsetSeconds) * MS_PER_SECOND };\n } else {\n if (REJECTED_NAMES.has(timezone) || !hasTimeZoneCase(timezone)) throw invalid();\n let format: Intl.DateTimeFormat;\n try {\n format = new Intl.DateTimeFormat('en-US', {\n timeZone: timezone,\n hourCycle: 'h23',\n year: 'numeric',\n month: 'numeric',\n day: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric',\n });\n } catch {\n throw invalid();\n }\n zone = { kind: 'iana', format, hours: new Map() };\n }\n zones.set(timezone, zone);\n return zone;\n}\n\n/**\n * Offset of the zone from UTC at instant `time`, in milliseconds (local = UTC + offset).\n * An offset change happens at most once in a UTC hour, so when the first and the last second of the hour have the\n * same offset, the whole hour has it: it is computed once and cached.\n */\nfunction offsetAt(zone: Zone, time: number): number {\n if (zone.kind === 'fixed') return zone.offsetMs;\n const hour = Math.floor(time / MS_PER_HOUR);\n let offset = zone.hours.get(hour);\n if (offset === undefined) {\n const first = formattedOffset(zone.format, hour * MS_PER_HOUR);\n const last = formattedOffset(zone.format, hour * MS_PER_HOUR + MS_PER_HOUR - MS_PER_SECOND);\n offset = first === last ? first : null;\n if (zone.hours.size >= MAX_CACHED_HOURS) zone.hours.clear();\n zone.hours.set(hour, offset);\n }\n return offset ?? formattedOffset(zone.format, time);\n}\n\n/** Offset of the zone at instant `time` (whole second), from the host's `Intl` time zone data. */\nfunction formattedOffset(format: Intl.DateTimeFormat, time: number): number {\n const wholeSecond = Math.floor(time / 1000) * 1000;\n const f: Record<string, number> = {};\n for (const part of format.formatToParts(wholeSecond)) {\n if (part.type !== 'literal') f[part.type] = Number(part.value);\n }\n const local = Date.UTC(f.year!, f.month! - 1, f.day!, f.hour!, f.minute!, f.second!);\n return local - wholeSecond;\n}\n\n/** Calendar fields of a UNIX time in a time zone. */\nexport interface ZonedFields {\n year: number;\n /** 1-12 */\n month: number;\n /** 1-31 */\n day: number;\n hour: number;\n minute: number;\n second: number;\n /** 1 = Sunday ... 7 = Saturday (PineScript dayofweek numbering) */\n dayOfWeek: number;\n}\n\n/** Offset of `timezone` from UTC at `time`, in milliseconds (local = UTC + offset). */\nexport function zoneOffset(time: number, timezone: string): number {\n return offsetAt(resolveZone(timezone), time);\n}\n\n/** Splits a UNIX time (ms) into calendar fields in `timezone`. */\nexport function zonedFields(time: number, timezone: string): ZonedFields {\n const local = new Date(time + offsetAt(resolveZone(timezone), time));\n return {\n year: local.getUTCFullYear(),\n month: local.getUTCMonth() + 1,\n day: local.getUTCDate(),\n hour: local.getUTCHours(),\n minute: local.getUTCMinutes(),\n second: local.getUTCSeconds(),\n dayOfWeek: local.getUTCDay() + 1,\n };\n}\n\n/**\n * Converts a wall-clock date and time in `timezone` to a UNIX time (ms).\n * Out-of-range fields roll over like `Date.UTC` (month 13 is January of the next year).\n *\n * As in PineScript: wall-clock times that occur twice (end of daylight saving time)\n * resolve to the later instant, and wall-clock times that do not exist (start of\n * daylight saving time) are shifted forward by the length of the gap.\n */\n/**\n * UNIX time (ms) of a UTC wall-clock date: Gregorian calendar from 1582-10-15, Julian calendar before it (as\n * PineScript: 1582-10-05 is 1582-10-15). Out-of-range fields roll over like `Date.UTC`.\n */\nexport function civilToUnix(year: number, month: number, day: number, hour = 0, minute = 0, second = 0): number {\n const gregorian = Date.UTC(year, month - 1, day, hour, minute, second);\n // normalized year / month / day of the Gregorian reading decides the calendar\n const d = new Date(Date.UTC(year, month - 1, 1));\n const y = d.getUTCFullYear();\n const m = d.getUTCMonth() + 1;\n if (y > 1582 || (y === 1582 && (m > 10 || (m === 10 && day >= 15)))) return gregorian;\n // Julian day number of y-m-1, then the day offset and the time of day\n const a = Math.floor((14 - m) / 12);\n const yy = y + 4800 - a;\n const mm = m + 12 * a - 3;\n const jdn = 1 + Math.floor((153 * mm + 2) / 5) + 365 * yy + Math.floor(yy / 4) - 32083;\n const days = jdn - 2440588 + (day - 1);\n return days * MS_PER_DAY + Date.UTC(1970, 0, 1, hour, minute, second);\n}\n\nexport function zonedToUnix(\n timezone: string,\n year: number,\n month: number,\n day: number,\n hour: number = 0,\n minute: number = 0,\n second: number = 0\n): number {\n const zone = resolveZone(timezone);\n const local = civilToUnix(year, month, day, hour, minute, second);\n if (zone.kind === 'fixed') return local - zone.offsetMs;\n\n // At most one offset transition happens within a day of `local`: the offsets\n // one day before and one day after are the two candidates.\n const before = offsetAt(zone, local - MS_PER_DAY);\n const after = offsetAt(zone, local + MS_PER_DAY);\n const candidates = [local - before, local - after].filter((t) => local - offsetAt(zone, t) === t);\n if (candidates.length) return Math.max(...candidates);\n return local - before;\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/**\n * Time zone resolution for the calendar functions.\n *\n * PineScript accepts two time zone notations:\n * - UTC/GMT offset notation: \"UTC\", \"UTC-5\", \"UTC+05:30\", \"GMT+0530\", \"GMT+05:30:00\", up to \u00B118:00\n * - IANA time zone database names, case-sensitive: \"America/New_York\", \"Etc/UTC\", \"US/Eastern\", \"CET\"\n *\n * \"utc+2\", \"america/new_york\", \"UTC+5:3\", \"UTC+5:30:15\", \"GMT+18:01\", \"EST\", \"MST\" and \"HST\" are\n * errors in PineScript, and so here.\n *\n * Offsets of IANA zones (daylight saving time and historical changes included)\n * come from the host's `Intl.DateTimeFormat`, so no time zone data ships with the library.\n */\n\nconst MS_PER_SECOND = 1000;\nconst MS_PER_DAY = 86_400_000;\nconst MAX_OFFSET_SECONDS = 18 * 3600;\n\nconst OFFSET_NOTATION = /^(?:UTC|GMT)(?:([+-])(\\d{1,2})(?::?(\\d{2})(?::?(\\d{2}))?)?)?$/;\n\n/** Time zone database names that PineScript rejects although `Intl` accepts them. */\nconst REJECTED_NAMES = new Set(['EST', 'MST', 'HST']);\n\nlet canonicalNames: Map<string, string> | undefined;\n\n/** False when `name` is a wrong-case spelling of a time zone name (`Intl` matches names case-insensitively). */\nfunction hasTimeZoneCase(name: string): boolean {\n if (name.split('/').some((segment) => !/^[A-Z]/.test(segment))) return false;\n canonicalNames ??= new Map(Intl.supportedValuesOf('timeZone').map((n) => [n.toLowerCase(), n]));\n const canonical = canonicalNames.get(name.toLowerCase());\n return canonical === undefined || canonical === name;\n}\n\ntype Zone =\n | { readonly kind: 'fixed'; readonly offsetMs: number }\n | {\n readonly kind: 'iana';\n readonly format: Intl.DateTimeFormat;\n /** Offset of each UTC hour (`floor(time / 1 h)`); null for an hour with an offset change inside */\n readonly hours: Map<number, number | null>;\n };\n\nconst MS_PER_HOUR = 3_600_000;\n/** Cached hours per zone before the cache restarts (about 11 years of hours) */\nconst MAX_CACHED_HOURS = 100_000;\n\nconst zones = new Map<string, Zone>();\n\nfunction resolveZone(timezone: string): Zone {\n let zone = zones.get(timezone);\n if (zone) return zone;\n\n const invalid = () =>\n new RangeError(\n `Invalid time zone \"${timezone}\": use UTC/GMT offset notation (\"UTC-5\", \"GMT+0530\") or an IANA name (\"America/New_York\")`\n );\n const m = OFFSET_NOTATION.exec(timezone);\n if (m) {\n const [, sign, h = '0', mi = '0', s] = m;\n const minutes = Number(mi);\n const seconds = s === undefined ? 0 : Number(s);\n if (minutes > 59 || seconds > 59 || (s !== undefined && h.length !== 2)) throw invalid();\n const offsetSeconds = Number(h) * 3600 + minutes * 60 + seconds;\n if (offsetSeconds > MAX_OFFSET_SECONDS) throw invalid();\n zone = { kind: 'fixed', offsetMs: (sign === '-' ? -offsetSeconds : offsetSeconds) * MS_PER_SECOND };\n } else {\n if (REJECTED_NAMES.has(timezone) || !hasTimeZoneCase(timezone)) throw invalid();\n let format: Intl.DateTimeFormat;\n try {\n format = new Intl.DateTimeFormat('en-US', {\n timeZone: timezone,\n hourCycle: 'h23',\n year: 'numeric',\n month: 'numeric',\n day: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric',\n });\n } catch {\n throw invalid();\n }\n zone = { kind: 'iana', format, hours: new Map() };\n }\n zones.set(timezone, zone);\n return zone;\n}\n\n/**\n * Offset of the zone from UTC at instant `time`, in milliseconds (local = UTC + offset).\n * An offset change happens at most once in a UTC hour, so when the first and the last second of the hour have the\n * same offset, the whole hour has it: it is computed once and cached.\n */\nfunction offsetAt(zone: Zone, time: number): number {\n if (zone.kind === 'fixed') return zone.offsetMs;\n const hour = Math.floor(time / MS_PER_HOUR);\n let offset = zone.hours.get(hour);\n if (offset === undefined) {\n const first = formattedOffset(zone.format, hour * MS_PER_HOUR);\n const last = formattedOffset(zone.format, hour * MS_PER_HOUR + MS_PER_HOUR - MS_PER_SECOND);\n offset = first === last ? first : null;\n if (zone.hours.size >= MAX_CACHED_HOURS) zone.hours.clear();\n zone.hours.set(hour, offset);\n }\n return offset ?? formattedOffset(zone.format, time);\n}\n\n/** Offset of the zone at instant `time` (whole second), from the host's `Intl` time zone data. */\nfunction formattedOffset(format: Intl.DateTimeFormat, time: number): number {\n const wholeSecond = Math.floor(time / 1000) * 1000;\n const f: Record<string, number> = {};\n for (const part of format.formatToParts(wholeSecond)) {\n if (part.type !== 'literal') f[part.type] = Number(part.value);\n }\n const local = Date.UTC(f.year!, f.month! - 1, f.day!, f.hour!, f.minute!, f.second!);\n return local - wholeSecond;\n}\n\n/** Calendar fields of a UNIX time in a time zone. */\nexport interface ZonedFields {\n year: number;\n /** 1-12 */\n month: number;\n /** 1-31 */\n day: number;\n hour: number;\n minute: number;\n second: number;\n /** 1 = Sunday ... 7 = Saturday (PineScript dayofweek numbering) */\n dayOfWeek: number;\n}\n\n/** Offset of `timezone` from UTC at `time`, in milliseconds (local = UTC + offset). */\nexport function zoneOffset(time: number, timezone: string): number {\n return offsetAt(resolveZone(timezone), time);\n}\n\n/** Splits a UNIX time (ms) into calendar fields in `timezone`. */\nexport function zonedFields(time: number, timezone: string): ZonedFields {\n const local = new Date(time + offsetAt(resolveZone(timezone), time));\n return {\n year: local.getUTCFullYear(),\n month: local.getUTCMonth() + 1,\n day: local.getUTCDate(),\n hour: local.getUTCHours(),\n minute: local.getUTCMinutes(),\n second: local.getUTCSeconds(),\n dayOfWeek: local.getUTCDay() + 1,\n };\n}\n\n/**\n * Converts a wall-clock date and time in `timezone` to a UNIX time (ms).\n * Out-of-range fields roll over like `Date.UTC` (month 13 is January of the next year).\n *\n * As in PineScript: wall-clock times that occur twice (end of daylight saving time)\n * resolve to the later instant, and wall-clock times that do not exist (start of\n * daylight saving time) are shifted forward by the length of the gap.\n */\n/**\n * UNIX time (ms) of a UTC wall-clock date: Gregorian calendar from 1582-10-15, Julian calendar before it (as\n * PineScript: 1582-10-05 is 1582-10-15). Out-of-range fields roll over like `Date.UTC`.\n */\nexport function civilToUnix(year: number, month: number, day: number, hour = 0, minute = 0, second = 0): number {\n const gregorian = Date.UTC(year, month - 1, day, hour, minute, second);\n // normalized year / month / day of the Gregorian reading decides the calendar\n const d = new Date(Date.UTC(year, month - 1, 1));\n const y = d.getUTCFullYear();\n const m = d.getUTCMonth() + 1;\n if (y > 1582 || (y === 1582 && (m > 10 || (m === 10 && day >= 15)))) return gregorian;\n // Julian day number of y-m-1, then the day offset and the time of day\n const a = Math.floor((14 - m) / 12);\n const yy = y + 4800 - a;\n const mm = m + 12 * a - 3;\n const jdn = 1 + Math.floor((153 * mm + 2) / 5) + 365 * yy + Math.floor(yy / 4) - 32083;\n const days = jdn - 2440588 + (day - 1);\n return days * MS_PER_DAY + Date.UTC(1970, 0, 1, hour, minute, second);\n}\n\n/**\n * UNIX time (ms) of a wall-clock date in `timezone`. A wall time skipped by a clock change is read with the offset\n * before the change (02:30 on a 02:00 -> 03:00 night is 03:30 after it); a wall time that occurs twice gives the\n * later instant, or the earlier one with `earlier`.\n */\nexport function zonedToUnix(\n timezone: string,\n year: number,\n month: number,\n day: number,\n hour: number = 0,\n minute: number = 0,\n second: number = 0,\n earlier: boolean = false\n): number {\n const zone = resolveZone(timezone);\n const local = civilToUnix(year, month, day, hour, minute, second);\n if (zone.kind === 'fixed') return local - zone.offsetMs;\n\n // At most one offset transition happens within a day of `local`: the offsets\n // one day before and one day after are the two candidates.\n const before = offsetAt(zone, local - MS_PER_DAY);\n const after = offsetAt(zone, local + MS_PER_DAY);\n const candidates = [local - before, local - after].filter((t) => local - offsetAt(zone, t) === t);\n // a wall time that occurs twice: the later instant, or the earlier one with `earlier`\n if (candidates.length) return earlier ? Math.min(...candidates) : Math.max(...candidates);\n return local - before;\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAcA,MAAM,gBAAgB;AACtB,MAAM,aAAa;AACnB,MAAM,qBAAqB,KAAK;AAEhC,MAAM,kBAAkB;AAGxB,MAAM,iBAAiB,oBAAI,IAAI,CAAC,OAAO,OAAO,KAAK,CAAC;AAEpD,IAAI;AAGJ,SAAS,gBAAgB,MAAuB;AAC9C,MAAI,KAAK,MAAM,GAAG,EAAE,KAAK,CAAC,YAAY,CAAC,SAAS,KAAK,OAAO,CAAC,EAAG,QAAO;AACvE,qBAAmB,IAAI,IAAI,KAAK,kBAAkB,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,CAAC,CAAC,CAAC;AAC9F,QAAM,YAAY,eAAe,IAAI,KAAK,YAAY,CAAC;AACvD,SAAO,cAAc,UAAa,cAAc;AAClD;AAWA,MAAM,cAAc;AAEpB,MAAM,mBAAmB;AAEzB,MAAM,QAAQ,oBAAI,IAAkB;AAEpC,SAAS,YAAY,UAAwB;AAC3C,MAAI,OAAO,MAAM,IAAI,QAAQ;AAC7B,MAAI,KAAM,QAAO;AAEjB,QAAM,UAAU,MACd,IAAI;AAAA,IACF,sBAAsB,QAAQ;AAAA,EAChC;AACF,QAAM,IAAI,gBAAgB,KAAK,QAAQ;AACvC,MAAI,GAAG;AACL,UAAM,CAAC,EAAE,MAAM,IAAI,KAAK,KAAK,KAAK,CAAC,IAAI;AACvC,UAAM,UAAU,OAAO,EAAE;AACzB,UAAM,UAAU,MAAM,SAAY,IAAI,OAAO,CAAC;AAC9C,QAAI,UAAU,MAAM,UAAU,MAAO,MAAM,UAAa,EAAE,WAAW,EAAI,OAAM,QAAQ;AACvF,UAAM,gBAAgB,OAAO,CAAC,IAAI,OAAO,UAAU,KAAK;AACxD,QAAI,gBAAgB,mBAAoB,OAAM,QAAQ;AACtD,WAAO,EAAE,MAAM,SAAS,WAAW,SAAS,MAAM,CAAC,gBAAgB,iBAAiB,cAAc;AAAA,EACpG,OAAO;AACL,QAAI,eAAe,IAAI,QAAQ,KAAK,CAAC,gBAAgB,QAAQ,EAAG,OAAM,QAAQ;AAC9E,QAAI;AACJ,QAAI;AACF,eAAS,IAAI,KAAK,eAAe,SAAS;AAAA,QACxC,UAAU;AAAA,QACV,WAAW;AAAA,QACX,MAAM;AAAA,QACN,OAAO;AAAA,QACP,KAAK;AAAA,QACL,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,QAAQ;AAAA,MACV,CAAC;AAAA,IACH,QAAQ;AACN,YAAM,QAAQ;AAAA,IAChB;AACA,WAAO,EAAE,MAAM,QAAQ,QAAQ,OAAO,oBAAI,IAAI,EAAE;AAAA,EAClD;AACA,QAAM,IAAI,UAAU,IAAI;AACxB,SAAO;AACT;AAOA,SAAS,SAAS,MAAY,MAAsB;AAClD,MAAI,KAAK,SAAS,QAAS,QAAO,KAAK;AACvC,QAAM,OAAO,KAAK,MAAM,OAAO,WAAW;AAC1C,MAAI,SAAS,KAAK,MAAM,IAAI,IAAI;AAChC,MAAI,WAAW,QAAW;AACxB,UAAM,QAAQ,gBAAgB,KAAK,QAAQ,OAAO,WAAW;AAC7D,UAAM,OAAO,gBAAgB,KAAK,QAAQ,OAAO,cAAc,cAAc,aAAa;AAC1F,aAAS,UAAU,OAAO,QAAQ;AAClC,QAAI,KAAK,MAAM,QAAQ,iBAAkB,MAAK,MAAM,MAAM;AAC1D,SAAK,MAAM,IAAI,MAAM,MAAM;AAAA,EAC7B;AACA,SAAO,UAAU,gBAAgB,KAAK,QAAQ,IAAI;AACpD;AAGA,SAAS,gBAAgB,QAA6B,MAAsB;AAC1E,QAAM,cAAc,KAAK,MAAM,OAAO,GAAI,IAAI;AAC9C,QAAM,IAA4B,CAAC;AACnC,aAAW,QAAQ,OAAO,cAAc,WAAW,GAAG;AACpD,QAAI,KAAK,SAAS,UAAW,GAAE,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK;AAAA,EAC/D;AACA,QAAM,QAAQ,KAAK,IAAI,EAAE,MAAO,EAAE,QAAS,GAAG,EAAE,KAAM,EAAE,MAAO,EAAE,QAAS,EAAE,MAAO;AACnF,SAAO,QAAQ;AACjB;AAiBO,SAAS,WAAW,MAAc,UAA0B;AACjE,SAAO,SAAS,YAAY,QAAQ,GAAG,IAAI;AAC7C;AAGO,SAAS,YAAY,MAAc,UAA+B;AACvE,QAAM,QAAQ,IAAI,KAAK,OAAO,SAAS,YAAY,QAAQ,GAAG,IAAI,CAAC;AACnE,SAAO;AAAA,IACL,MAAM,MAAM,eAAe;AAAA,IAC3B,OAAO,MAAM,YAAY,IAAI;AAAA,IAC7B,KAAK,MAAM,WAAW;AAAA,IACtB,MAAM,MAAM,YAAY;AAAA,IACxB,QAAQ,MAAM,cAAc;AAAA,IAC5B,QAAQ,MAAM,cAAc;AAAA,IAC5B,WAAW,MAAM,UAAU,IAAI;AAAA,EACjC;AACF;AAcO,SAAS,YAAY,MAAc,OAAe,KAAa,OAAO,GAAG,SAAS,GAAG,SAAS,GAAW;AAC9G,QAAM,YAAY,KAAK,IAAI,MAAM,QAAQ,GAAG,KAAK,MAAM,QAAQ,MAAM;AAErE,QAAM,IAAI,IAAI,KAAK,KAAK,IAAI,MAAM,QAAQ,GAAG,CAAC,CAAC;AAC/C,QAAM,IAAI,EAAE,eAAe;AAC3B,QAAM,IAAI,EAAE,YAAY,IAAI;AAC5B,MAAI,IAAI,QAAS,MAAM,SAAS,IAAI,MAAO,MAAM,MAAM,OAAO,IAAO,QAAO;AAE5E,QAAM,IAAI,KAAK,OAAO,KAAK,KAAK,EAAE;AAClC,QAAM,KAAK,IAAI,OAAO;AACtB,QAAM,KAAK,IAAI,KAAK,IAAI;AACxB,QAAM,MAAM,IAAI,KAAK,OAAO,MAAM,KAAK,KAAK,CAAC,IAAI,MAAM,KAAK,KAAK,MAAM,KAAK,CAAC,IAAI;AACjF,QAAM,OAAO,MAAM,WAAW,MAAM;AACpC,SAAO,OAAO,aAAa,KAAK,IAAI,MAAM,GAAG,GAAG,MAAM,QAAQ,MAAM;AACtE;AAOO,SAAS,YACd,UACA,MACA,OACA,KACA,OAAe,GACf,SAAiB,GACjB,SAAiB,GACjB,UAAmB,OACX;AACR,QAAM,OAAO,YAAY,QAAQ;AACjC,QAAM,QAAQ,YAAY,MAAM,OAAO,KAAK,MAAM,QAAQ,MAAM;AAChE,MAAI,KAAK,SAAS,QAAS,QAAO,QAAQ,KAAK;AAI/C,QAAM,SAAS,SAAS,MAAM,QAAQ,UAAU;AAChD,QAAM,QAAQ,SAAS,MAAM,QAAQ,UAAU;AAC/C,QAAM,aAAa,CAAC,QAAQ,QAAQ,QAAQ,KAAK,EAAE,OAAO,CAAC,MAAM,QAAQ,SAAS,MAAM,CAAC,MAAM,CAAC;AAEhG,MAAI,WAAW,OAAQ,QAAO,UAAU,KAAK,IAAI,GAAG,UAAU,IAAI,KAAK,IAAI,GAAG,UAAU;AACxF,SAAO,QAAQ;AACjB;",
6
6
  "names": []
7
7
  }
@@ -79,7 +79,7 @@ export interface FillOptions {
79
79
  /**
80
80
  * Input parameter type
81
81
  */
82
- export type InputType = 'int' | 'float' | 'bool' | 'string' | 'source' | 'color' | 'timeframe' | 'session' | 'time';
82
+ export type InputType = 'int' | 'float' | 'bool' | 'string' | 'source' | 'color' | 'timeframe' | 'session' | 'time' | 'symbol';
83
83
  /**
84
84
  * Input parameter metadata
85
85
  */
@@ -1 +1 @@
1
- {"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../../src/types/metadata.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../../../src/types/metadata.ts"],"names":[],"mappings":"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"}