oakscriptjs 0.8.1 → 0.9.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.
- package/LICENSE +1 -1
- package/README.md +31 -9
- package/dist/cjs/array/index.d.ts +701 -0
- package/dist/cjs/array/index.d.ts.map +1 -0
- package/dist/cjs/array/index.js +392 -0
- package/dist/cjs/array/index.js.map +7 -0
- package/dist/cjs/box/index.d.ts +444 -0
- package/dist/cjs/box/index.d.ts.map +1 -0
- package/dist/cjs/box/index.js +246 -0
- package/dist/cjs/box/index.js.map +7 -0
- package/dist/cjs/callsite/index.d.ts +61 -0
- package/dist/cjs/callsite/index.d.ts.map +1 -0
- package/dist/cjs/callsite/index.js +65 -0
- package/dist/cjs/callsite/index.js.map +7 -0
- package/dist/cjs/chartpoint/index.d.ts +90 -0
- package/dist/cjs/chartpoint/index.d.ts.map +1 -0
- package/dist/cjs/chartpoint/index.js +56 -0
- package/dist/cjs/chartpoint/index.js.map +7 -0
- package/dist/cjs/color/index.d.ts +285 -0
- package/dist/cjs/color/index.d.ts.map +1 -0
- package/dist/cjs/color/index.js +143 -0
- package/dist/cjs/color/index.js.map +7 -0
- package/dist/cjs/compare/index.d.ts +26 -0
- package/dist/cjs/compare/index.d.ts.map +1 -0
- package/dist/cjs/compare/index.js +50 -0
- package/dist/cjs/compare/index.js.map +7 -0
- package/dist/cjs/drawing/registry.d.ts +42 -0
- package/dist/cjs/drawing/registry.d.ts.map +1 -0
- package/dist/cjs/drawing/registry.js +87 -0
- package/dist/cjs/drawing/registry.js.map +7 -0
- package/dist/cjs/index.d.ts +85 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +184 -0
- package/dist/cjs/index.js.map +7 -0
- package/dist/cjs/indicator.d.ts +117 -0
- package/dist/cjs/indicator.d.ts.map +1 -0
- package/dist/cjs/indicator.js +74 -0
- package/dist/cjs/indicator.js.map +7 -0
- package/dist/cjs/input.d.ts +196 -0
- package/dist/cjs/input.d.ts.map +1 -0
- package/dist/cjs/input.js +197 -0
- package/dist/cjs/input.js.map +7 -0
- package/dist/cjs/label/index.d.ts +303 -0
- package/dist/cjs/label/index.d.ts.map +1 -0
- package/dist/cjs/label/index.js +190 -0
- package/dist/cjs/label/index.js.map +7 -0
- package/dist/cjs/lib/index.d.ts +8 -0
- package/dist/cjs/lib/index.d.ts.map +1 -0
- package/dist/cjs/lib/index.js +19 -0
- package/dist/cjs/lib/index.js.map +7 -0
- package/dist/{lib → cjs/lib}/zigzag/index.d.ts +4 -1
- package/dist/cjs/lib/zigzag/index.d.ts.map +1 -0
- package/dist/cjs/lib/zigzag/index.js +27 -0
- package/dist/cjs/lib/zigzag/index.js.map +7 -0
- package/dist/cjs/lib/zigzag/zigzag.d.ts +100 -0
- package/dist/cjs/lib/zigzag/zigzag.d.ts.map +1 -0
- package/dist/cjs/lib/zigzag/zigzag.js +207 -0
- package/dist/cjs/lib/zigzag/zigzag.js.map +7 -0
- package/dist/cjs/line/index.d.ts +342 -0
- package/dist/cjs/line/index.d.ts.map +1 -0
- package/dist/cjs/line/index.js +193 -0
- package/dist/cjs/line/index.js.map +7 -0
- package/dist/cjs/linefill/index.d.ts +124 -0
- package/dist/cjs/linefill/index.d.ts.map +1 -0
- package/dist/cjs/linefill/index.js +56 -0
- package/dist/cjs/linefill/index.js.map +7 -0
- package/dist/cjs/map/index.d.ts +69 -0
- package/dist/cjs/map/index.d.ts.map +1 -0
- package/dist/cjs/map/index.js +80 -0
- package/dist/cjs/map/index.js.map +7 -0
- package/dist/cjs/math/index.d.ts +560 -0
- package/dist/cjs/math/index.d.ts.map +1 -0
- package/dist/cjs/math/index.js +441 -0
- package/dist/cjs/math/index.js.map +7 -0
- package/dist/cjs/matrix/index.d.ts +1231 -0
- package/dist/cjs/matrix/index.d.ts.map +1 -0
- package/dist/cjs/matrix/index.js +1200 -0
- package/dist/cjs/matrix/index.js.map +7 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/plot.d.ts +76 -0
- package/dist/cjs/plot.d.ts.map +1 -0
- package/dist/cjs/plot.js +51 -0
- package/dist/cjs/plot.js.map +7 -0
- package/dist/cjs/polyline/index.d.ts +115 -0
- package/dist/cjs/polyline/index.d.ts.map +1 -0
- package/dist/cjs/polyline/index.js +76 -0
- package/dist/cjs/polyline/index.js.map +7 -0
- package/dist/cjs/runtime/adapters/LightweightChartsAdapter.d.ts +86 -0
- package/dist/cjs/runtime/adapters/LightweightChartsAdapter.d.ts.map +1 -0
- package/dist/cjs/runtime/adapters/LightweightChartsAdapter.js +141 -0
- package/dist/cjs/runtime/adapters/LightweightChartsAdapter.js.map +7 -0
- package/dist/cjs/runtime/adapters/SimpleInputAdapter.d.ts +59 -0
- package/dist/cjs/runtime/adapters/SimpleInputAdapter.d.ts.map +1 -0
- package/dist/cjs/runtime/adapters/SimpleInputAdapter.js +117 -0
- package/dist/cjs/runtime/adapters/SimpleInputAdapter.js.map +7 -0
- package/dist/{runtime → cjs/runtime}/index.d.ts +12 -5
- package/dist/cjs/runtime/index.d.ts.map +1 -0
- package/dist/cjs/runtime/index.js +49 -0
- package/dist/cjs/runtime/index.js.map +7 -0
- package/dist/cjs/runtime/inputs.d.ts +91 -0
- package/dist/cjs/runtime/inputs.d.ts.map +1 -0
- package/dist/cjs/runtime/inputs.js +262 -0
- package/dist/cjs/runtime/inputs.js.map +7 -0
- package/dist/cjs/runtime/runtime.d.ts +70 -0
- package/dist/cjs/runtime/runtime.d.ts.map +1 -0
- package/dist/cjs/runtime/runtime.js +148 -0
- package/dist/cjs/runtime/runtime.js.map +7 -0
- package/dist/cjs/runtime/series.d.ts +362 -0
- package/dist/cjs/runtime/series.d.ts.map +1 -0
- package/dist/cjs/runtime/series.js +560 -0
- package/dist/cjs/runtime/series.js.map +7 -0
- package/dist/cjs/runtime/types.d.ts +282 -0
- package/dist/cjs/runtime/types.d.ts.map +1 -0
- package/dist/cjs/runtime/types.js +17 -0
- package/dist/cjs/runtime/types.js.map +7 -0
- package/dist/cjs/script/index.d.ts +987 -0
- package/dist/cjs/script/index.d.ts.map +1 -0
- package/dist/cjs/script/index.js +1169 -0
- package/dist/cjs/script/index.js.map +7 -0
- package/dist/cjs/security/resample.d.ts +63 -0
- package/dist/cjs/security/resample.d.ts.map +1 -0
- package/dist/cjs/security/resample.js +84 -0
- package/dist/cjs/security/resample.js.map +7 -0
- package/dist/cjs/session/bars.d.ts +80 -0
- package/dist/cjs/session/bars.d.ts.map +1 -0
- package/dist/cjs/session/bars.js +219 -0
- package/dist/cjs/session/bars.js.map +7 -0
- package/dist/cjs/session/calendar.d.ts +70 -0
- package/dist/cjs/session/calendar.d.ts.map +1 -0
- package/dist/cjs/session/calendar.js +164 -0
- package/dist/cjs/session/calendar.js.map +7 -0
- package/dist/cjs/str/dateformat.d.ts +15 -0
- package/dist/cjs/str/dateformat.d.ts.map +1 -0
- package/dist/cjs/str/dateformat.js +149 -0
- package/dist/cjs/str/dateformat.js.map +7 -0
- package/dist/cjs/str/index.d.ts +459 -0
- package/dist/cjs/str/index.d.ts.map +1 -0
- package/dist/cjs/str/index.js +143 -0
- package/dist/cjs/str/index.js.map +7 -0
- package/dist/cjs/str/messageformat.d.ts +14 -0
- package/dist/cjs/str/messageformat.d.ts.map +1 -0
- package/dist/cjs/str/messageformat.js +114 -0
- package/dist/cjs/str/messageformat.js.map +7 -0
- package/dist/cjs/str/numberformat.d.ts +19 -0
- package/dist/cjs/str/numberformat.d.ts.map +1 -0
- package/dist/cjs/str/numberformat.js +170 -0
- package/dist/cjs/str/numberformat.js.map +7 -0
- package/dist/{strategy → cjs/strategy}/index.d.ts +50 -0
- package/dist/cjs/strategy/index.d.ts.map +1 -0
- package/dist/cjs/strategy/index.js +92 -0
- package/dist/cjs/strategy/index.js.map +7 -0
- package/dist/cjs/ta/index.d.ts +1397 -0
- package/dist/cjs/ta/index.d.ts.map +1 -0
- package/dist/cjs/ta/index.js +1715 -0
- package/dist/cjs/ta/index.js.map +7 -0
- package/dist/cjs/ta/running-sum.d.ts +30 -0
- package/dist/cjs/ta/running-sum.d.ts.map +1 -0
- package/dist/cjs/ta/running-sum.js +99 -0
- package/dist/cjs/ta/running-sum.js.map +7 -0
- package/dist/cjs/ta-series.d.ts +558 -0
- package/dist/cjs/ta-series.d.ts.map +1 -0
- package/dist/cjs/ta-series.js +606 -0
- package/dist/cjs/ta-series.js.map +7 -0
- package/dist/cjs/text/index.d.ts +14 -0
- package/dist/cjs/text/index.d.ts.map +1 -0
- package/dist/cjs/text/index.js +29 -0
- package/dist/cjs/text/index.js.map +7 -0
- package/dist/cjs/time/datestring.d.ts +23 -0
- package/dist/cjs/time/datestring.d.ts.map +1 -0
- package/dist/cjs/time/datestring.js +106 -0
- package/dist/cjs/time/datestring.js.map +7 -0
- package/dist/cjs/time/index.d.ts +89 -0
- package/dist/cjs/time/index.d.ts.map +1 -0
- package/dist/cjs/time/index.js +85 -0
- package/dist/cjs/time/index.js.map +7 -0
- package/dist/cjs/time/session.d.ts +17 -0
- package/dist/cjs/time/session.d.ts.map +1 -0
- package/dist/cjs/time/session.js +65 -0
- package/dist/cjs/time/session.js.map +7 -0
- package/dist/cjs/time/timezone.d.ts +40 -0
- package/dist/cjs/time/timezone.d.ts.map +1 -0
- package/dist/cjs/time/timezone.js +125 -0
- package/dist/cjs/time/timezone.js.map +7 -0
- package/dist/cjs/timeframe/index.d.ts +73 -0
- package/dist/cjs/timeframe/index.d.ts.map +1 -0
- package/dist/cjs/timeframe/index.js +85 -0
- package/dist/cjs/timeframe/index.js.map +7 -0
- package/dist/cjs/types/index.d.ts +343 -0
- package/dist/cjs/types/index.d.ts.map +1 -0
- package/dist/cjs/types/index.js +32 -0
- package/dist/cjs/types/index.js.map +7 -0
- package/dist/cjs/types/metadata.d.ts +300 -0
- package/dist/cjs/types/metadata.d.ts.map +1 -0
- package/dist/cjs/types/metadata.js +17 -0
- package/dist/cjs/types/metadata.js.map +7 -0
- package/dist/cjs/utils/index.d.ts +167 -0
- package/dist/cjs/utils/index.d.ts.map +1 -0
- package/dist/cjs/utils/index.js +209 -0
- package/dist/cjs/utils/index.js.map +7 -0
- package/dist/esm/array/index.d.ts +701 -0
- package/dist/esm/array/index.d.ts.map +1 -0
- package/dist/esm/array/index.js +983 -0
- package/dist/esm/array/index.js.map +1 -0
- package/dist/esm/box/index.d.ts +444 -0
- package/dist/esm/box/index.d.ts.map +1 -0
- package/dist/esm/box/index.js +602 -0
- package/dist/esm/box/index.js.map +1 -0
- package/dist/esm/callsite/index.d.ts +61 -0
- package/dist/esm/callsite/index.d.ts.map +1 -0
- package/dist/esm/callsite/index.js +97 -0
- package/dist/esm/callsite/index.js.map +1 -0
- package/dist/esm/chartpoint/index.d.ts +90 -0
- package/dist/esm/chartpoint/index.d.ts.map +1 -0
- package/dist/esm/chartpoint/index.js +113 -0
- package/dist/esm/chartpoint/index.js.map +1 -0
- package/dist/esm/color/index.d.ts +285 -0
- package/dist/esm/color/index.d.ts.map +1 -0
- package/dist/esm/color/index.js +373 -0
- package/dist/esm/color/index.js.map +1 -0
- package/dist/esm/compare/index.d.ts +26 -0
- package/dist/esm/compare/index.d.ts.map +1 -0
- package/dist/esm/compare/index.js +39 -0
- package/dist/esm/compare/index.js.map +1 -0
- package/dist/esm/drawing/registry.d.ts +42 -0
- package/dist/esm/drawing/registry.d.ts.map +1 -0
- package/dist/esm/drawing/registry.js +89 -0
- package/dist/esm/drawing/registry.js.map +1 -0
- package/dist/esm/index.d.ts +85 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +96 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/indicator.d.ts +117 -0
- package/dist/esm/indicator.d.ts.map +1 -0
- package/dist/esm/indicator.js +84 -0
- package/dist/esm/indicator.js.map +1 -0
- package/dist/esm/input.d.ts +196 -0
- package/dist/esm/input.d.ts.map +1 -0
- package/dist/esm/input.js +183 -0
- package/dist/esm/input.js.map +1 -0
- package/dist/esm/label/index.d.ts +303 -0
- package/dist/esm/label/index.d.ts.map +1 -0
- package/dist/esm/label/index.js +417 -0
- package/dist/esm/label/index.js.map +1 -0
- package/dist/esm/lib/index.d.ts +8 -0
- package/dist/esm/lib/index.d.ts.map +1 -0
- package/dist/esm/lib/index.js +8 -0
- package/dist/esm/lib/index.js.map +1 -0
- package/dist/esm/lib/zigzag/index.d.ts +5 -0
- package/dist/esm/lib/zigzag/index.d.ts.map +1 -0
- package/dist/esm/lib/zigzag/index.js +5 -0
- package/dist/esm/lib/zigzag/index.js.map +1 -0
- package/dist/esm/lib/zigzag/zigzag.d.ts +100 -0
- package/dist/esm/lib/zigzag/zigzag.d.ts.map +1 -0
- package/dist/esm/lib/zigzag/zigzag.js +229 -0
- package/dist/esm/lib/zigzag/zigzag.js.map +1 -0
- package/dist/esm/line/index.d.ts +342 -0
- package/dist/esm/line/index.d.ts.map +1 -0
- package/dist/esm/line/index.js +470 -0
- package/dist/esm/line/index.js.map +1 -0
- package/dist/esm/linefill/index.d.ts +124 -0
- package/dist/esm/linefill/index.d.ts.map +1 -0
- package/dist/esm/linefill/index.js +144 -0
- package/dist/esm/linefill/index.js.map +1 -0
- package/dist/esm/map/index.d.ts +69 -0
- package/dist/esm/map/index.d.ts.map +1 -0
- package/dist/esm/map/index.js +106 -0
- package/dist/esm/map/index.js.map +1 -0
- package/dist/esm/math/index.d.ts +560 -0
- package/dist/esm/math/index.d.ts.map +1 -0
- package/dist/esm/math/index.js +495 -0
- package/dist/esm/math/index.js.map +1 -0
- package/dist/esm/matrix/index.d.ts +1231 -0
- package/dist/esm/matrix/index.d.ts.map +1 -0
- package/dist/esm/matrix/index.js +2450 -0
- package/dist/esm/matrix/index.js.map +1 -0
- package/dist/esm/plot.d.ts +76 -0
- package/dist/esm/plot.d.ts.map +1 -0
- package/dist/esm/plot.js +63 -0
- package/dist/esm/plot.js.map +1 -0
- package/dist/esm/polyline/index.d.ts +115 -0
- package/dist/esm/polyline/index.d.ts.map +1 -0
- package/dist/esm/polyline/index.js +157 -0
- package/dist/esm/polyline/index.js.map +1 -0
- package/dist/esm/runtime/adapters/LightweightChartsAdapter.d.ts +86 -0
- package/dist/esm/runtime/adapters/LightweightChartsAdapter.d.ts.map +1 -0
- package/dist/esm/runtime/adapters/LightweightChartsAdapter.js +140 -0
- package/dist/esm/runtime/adapters/LightweightChartsAdapter.js.map +1 -0
- package/dist/esm/runtime/adapters/SimpleInputAdapter.d.ts +59 -0
- package/dist/esm/runtime/adapters/SimpleInputAdapter.d.ts.map +1 -0
- package/dist/esm/runtime/adapters/SimpleInputAdapter.js +115 -0
- package/dist/esm/runtime/adapters/SimpleInputAdapter.js.map +1 -0
- package/dist/esm/runtime/index.d.ts +13 -0
- package/dist/esm/runtime/index.d.ts.map +1 -0
- package/dist/esm/runtime/index.js +14 -0
- package/dist/esm/runtime/index.js.map +1 -0
- package/dist/esm/runtime/inputs.d.ts +91 -0
- package/dist/esm/runtime/inputs.d.ts.map +1 -0
- package/dist/esm/runtime/inputs.js +334 -0
- package/dist/esm/runtime/inputs.js.map +1 -0
- package/dist/esm/runtime/runtime.d.ts +70 -0
- package/dist/esm/runtime/runtime.d.ts.map +1 -0
- package/dist/esm/runtime/runtime.js +193 -0
- package/dist/esm/runtime/runtime.js.map +1 -0
- package/dist/esm/runtime/series.d.ts +362 -0
- package/dist/esm/runtime/series.d.ts.map +1 -0
- package/dist/esm/runtime/series.js +583 -0
- package/dist/esm/runtime/series.js.map +1 -0
- package/dist/esm/runtime/types.d.ts +282 -0
- package/dist/esm/runtime/types.d.ts.map +1 -0
- package/dist/esm/runtime/types.js +7 -0
- package/dist/esm/runtime/types.js.map +1 -0
- package/dist/esm/script/index.d.ts +987 -0
- package/dist/esm/script/index.d.ts.map +1 -0
- package/dist/esm/script/index.js +1289 -0
- package/dist/esm/script/index.js.map +1 -0
- package/dist/esm/security/resample.d.ts +63 -0
- package/dist/esm/security/resample.d.ts.map +1 -0
- package/dist/esm/security/resample.js +110 -0
- package/dist/esm/security/resample.js.map +1 -0
- package/dist/esm/session/bars.d.ts +80 -0
- package/dist/esm/session/bars.d.ts.map +1 -0
- package/dist/esm/session/bars.js +232 -0
- package/dist/esm/session/bars.js.map +1 -0
- package/dist/esm/session/calendar.d.ts +70 -0
- package/dist/esm/session/calendar.d.ts.map +1 -0
- package/dist/esm/session/calendar.js +172 -0
- package/dist/esm/session/calendar.js.map +1 -0
- package/dist/esm/str/dateformat.d.ts +15 -0
- package/dist/esm/str/dateformat.d.ts.map +1 -0
- package/dist/esm/str/dateformat.js +136 -0
- package/dist/esm/str/dateformat.js.map +1 -0
- package/dist/esm/str/index.d.ts +459 -0
- package/dist/esm/str/index.d.ts.map +1 -0
- package/dist/esm/str/index.js +540 -0
- package/dist/esm/str/index.js.map +1 -0
- package/dist/esm/str/messageformat.d.ts +14 -0
- package/dist/esm/str/messageformat.d.ts.map +1 -0
- package/dist/esm/str/messageformat.js +111 -0
- package/dist/esm/str/messageformat.js.map +1 -0
- package/dist/esm/str/numberformat.d.ts +19 -0
- package/dist/esm/str/numberformat.d.ts.map +1 -0
- package/dist/esm/str/numberformat.js +189 -0
- package/dist/esm/str/numberformat.js.map +1 -0
- package/dist/esm/strategy/index.d.ts +245 -0
- package/dist/esm/strategy/index.d.ts.map +1 -0
- package/dist/esm/strategy/index.js +84 -0
- package/dist/esm/strategy/index.js.map +1 -0
- package/dist/esm/ta/index.d.ts +1397 -0
- package/dist/esm/ta/index.d.ts.map +1 -0
- package/dist/esm/ta/index.js +3227 -0
- package/dist/esm/ta/index.js.map +1 -0
- package/dist/esm/ta/running-sum.d.ts +30 -0
- package/dist/esm/ta/running-sum.d.ts.map +1 -0
- package/dist/esm/ta/running-sum.js +113 -0
- package/dist/esm/ta/running-sum.js.map +1 -0
- package/dist/esm/ta-series.d.ts +558 -0
- package/dist/esm/ta-series.d.ts.map +1 -0
- package/dist/esm/ta-series.js +910 -0
- package/dist/esm/ta-series.js.map +1 -0
- package/dist/esm/text/index.d.ts +14 -0
- package/dist/esm/text/index.d.ts.map +1 -0
- package/dist/esm/text/index.js +14 -0
- package/dist/esm/text/index.js.map +1 -0
- package/dist/esm/time/datestring.d.ts +23 -0
- package/dist/esm/time/datestring.d.ts.map +1 -0
- package/dist/esm/time/datestring.js +94 -0
- package/dist/esm/time/datestring.js.map +1 -0
- package/dist/esm/time/index.d.ts +89 -0
- package/dist/esm/time/index.d.ts.map +1 -0
- package/dist/esm/time/index.js +108 -0
- package/dist/esm/time/index.js.map +1 -0
- package/dist/esm/time/session.d.ts +17 -0
- package/dist/esm/time/session.d.ts.map +1 -0
- package/dist/esm/time/session.js +69 -0
- package/dist/esm/time/session.js.map +1 -0
- package/dist/esm/time/timezone.d.ts +40 -0
- package/dist/esm/time/timezone.d.ts.map +1 -0
- package/dist/esm/time/timezone.js +144 -0
- package/dist/esm/time/timezone.js.map +1 -0
- package/dist/esm/timeframe/index.d.ts +73 -0
- package/dist/esm/timeframe/index.d.ts.map +1 -0
- package/dist/esm/timeframe/index.js +131 -0
- package/dist/esm/timeframe/index.js.map +1 -0
- package/dist/esm/types/index.d.ts +343 -0
- package/dist/esm/types/index.d.ts.map +1 -0
- package/dist/esm/types/index.js +17 -0
- package/dist/esm/types/index.js.map +1 -0
- package/dist/esm/types/metadata.d.ts +300 -0
- package/dist/esm/types/metadata.d.ts.map +1 -0
- package/dist/esm/types/metadata.js +7 -0
- package/dist/esm/types/metadata.js.map +1 -0
- package/dist/esm/utils/index.d.ts +167 -0
- package/dist/esm/utils/index.d.ts.map +1 -0
- package/dist/esm/utils/index.js +295 -0
- package/dist/esm/utils/index.js.map +1 -0
- package/package.json +53 -23
- package/src/array/index.ts +1056 -0
- package/src/box/index.ts +680 -0
- package/src/callsite/index.ts +104 -0
- package/src/chartpoint/index.ts +126 -0
- package/src/color/index.ts +411 -0
- package/src/compare/index.ts +46 -0
- package/src/drawing/registry.ts +106 -0
- package/src/index.ts +201 -0
- package/src/indicator.ts +185 -0
- package/src/input.ts +280 -0
- package/src/label/index.ts +490 -0
- package/src/lib/index.ts +8 -0
- package/src/lib/zigzag/index.ts +13 -0
- package/src/lib/zigzag/zigzag.ts +318 -0
- package/src/line/index.ts +530 -0
- package/src/linefill/index.ts +152 -0
- package/src/map/index.ts +115 -0
- package/src/math/index.ts +1071 -0
- package/src/matrix/index.ts +2697 -0
- package/src/plot.ts +121 -0
- package/src/polyline/index.ts +184 -0
- package/src/runtime/adapters/LightweightChartsAdapter.ts +201 -0
- package/src/runtime/adapters/SimpleInputAdapter.ts +132 -0
- package/src/runtime/index.ts +52 -0
- package/src/runtime/inputs.ts +377 -0
- package/src/runtime/runtime.ts +241 -0
- package/src/runtime/series.ts +644 -0
- package/src/runtime/types.ts +292 -0
- package/src/script/index.ts +1865 -0
- package/src/security/resample.ts +119 -0
- package/src/session/bars.ts +262 -0
- package/src/session/calendar.ts +199 -0
- package/src/str/dateformat.ts +104 -0
- package/src/str/index.ts +557 -0
- package/src/str/messageformat.ts +109 -0
- package/src/str/numberformat.ts +197 -0
- package/src/strategy/index.ts +281 -0
- package/src/ta/index.ts +3580 -0
- package/src/ta/running-sum.ts +117 -0
- package/src/ta-series.ts +1036 -0
- package/src/text/index.ts +14 -0
- package/src/time/datestring.ts +96 -0
- package/src/time/index.ts +161 -0
- package/src/time/session.ts +79 -0
- package/src/time/timezone.ts +180 -0
- package/src/timeframe/index.ts +144 -0
- package/src/types/index.ts +398 -0
- package/src/types/metadata.ts +334 -0
- package/src/utils/index.ts +334 -0
- package/dist/array/index.d.ts +0 -57
- package/dist/array/index.d.ts.map +0 -1
- package/dist/box/index.d.ts +0 -37
- package/dist/box/index.d.ts.map +0 -1
- package/dist/callsite/index.d.ts +0 -7
- package/dist/callsite/index.d.ts.map +0 -1
- package/dist/chartpoint/index.d.ts +0 -8
- package/dist/chartpoint/index.d.ts.map +0 -1
- package/dist/color/index.d.ts +0 -28
- package/dist/color/index.d.ts.map +0 -1
- package/dist/compare/index.d.ts +0 -8
- package/dist/compare/index.d.ts.map +0 -1
- package/dist/drawing/registry.d.ts +0 -19
- package/dist/drawing/registry.d.ts.map +0 -1
- package/dist/index.cjs +0 -7979
- package/dist/index.d.ts +0 -64
- package/dist/index.d.ts.map +0 -1
- package/dist/index.mjs +0 -7962
- package/dist/indicator.d.ts +0 -42
- package/dist/indicator.d.ts.map +0 -1
- package/dist/input.d.ts +0 -47
- package/dist/input.d.ts.map +0 -1
- package/dist/label/index.d.ts +0 -30
- package/dist/label/index.d.ts.map +0 -1
- package/dist/lib/index.d.ts +0 -2
- package/dist/lib/index.d.ts.map +0 -1
- package/dist/lib/zigzag/index.d.ts.map +0 -1
- package/dist/lib/zigzag/zigzag.d.ts +0 -47
- package/dist/lib/zigzag/zigzag.d.ts.map +0 -1
- package/dist/line/index.d.ts +0 -30
- package/dist/line/index.d.ts.map +0 -1
- package/dist/linefill/index.d.ts +0 -10
- package/dist/linefill/index.d.ts.map +0 -1
- package/dist/map/index.d.ts +0 -14
- package/dist/map/index.d.ts.map +0 -1
- package/dist/math/index.d.ts +0 -53
- package/dist/math/index.d.ts.map +0 -1
- package/dist/matrix/index.d.ts +0 -52
- package/dist/matrix/index.d.ts.map +0 -1
- package/dist/plot.d.ts +0 -20
- package/dist/plot.d.ts.map +0 -1
- package/dist/polyline/index.d.ts +0 -11
- package/dist/polyline/index.d.ts.map +0 -1
- package/dist/runtime/adapters/LightweightChartsAdapter.d.ts +0 -15
- package/dist/runtime/adapters/LightweightChartsAdapter.d.ts.map +0 -1
- package/dist/runtime/adapters/SimpleInputAdapter.d.ts +0 -16
- package/dist/runtime/adapters/SimpleInputAdapter.d.ts.map +0 -1
- package/dist/runtime/index.cjs +0 -600
- package/dist/runtime/index.d.ts.map +0 -1
- package/dist/runtime/index.mjs +0 -577
- package/dist/runtime/inputs.d.ts +0 -13
- package/dist/runtime/inputs.d.ts.map +0 -1
- package/dist/runtime/runtime.d.ts +0 -16
- package/dist/runtime/runtime.d.ts.map +0 -1
- package/dist/runtime/series.d.ts +0 -60
- package/dist/runtime/series.d.ts.map +0 -1
- package/dist/runtime/types.d.ts +0 -122
- package/dist/runtime/types.d.ts.map +0 -1
- package/dist/script/index.cjs +0 -6372
- package/dist/script/index.d.ts +0 -709
- package/dist/script/index.d.ts.map +0 -1
- package/dist/script/index.mjs +0 -6355
- package/dist/security/resample.d.ts +0 -13
- package/dist/security/resample.d.ts.map +0 -1
- package/dist/session/bars.d.ts +0 -34
- package/dist/session/bars.d.ts.map +0 -1
- package/dist/session/calendar.d.ts +0 -31
- package/dist/session/calendar.d.ts.map +0 -1
- package/dist/str/dateformat.d.ts +0 -2
- package/dist/str/dateformat.d.ts.map +0 -1
- package/dist/str/index.d.ts +0 -24
- package/dist/str/index.d.ts.map +0 -1
- package/dist/str/messageformat.d.ts +0 -2
- package/dist/str/messageformat.d.ts.map +0 -1
- package/dist/str/numberformat.d.ts +0 -3
- package/dist/str/numberformat.d.ts.map +0 -1
- package/dist/strategy/index.d.ts.map +0 -1
- package/dist/ta/index.d.ts +0 -72
- package/dist/ta/index.d.ts.map +0 -1
- package/dist/ta-series.d.ts +0 -143
- package/dist/ta-series.d.ts.map +0 -1
- package/dist/text/index.d.ts +0 -4
- package/dist/text/index.d.ts.map +0 -1
- package/dist/time/datestring.d.ts +0 -2
- package/dist/time/datestring.d.ts.map +0 -1
- package/dist/time/index.d.ts +0 -15
- package/dist/time/index.d.ts.map +0 -1
- package/dist/time/session.d.ts +0 -2
- package/dist/time/session.d.ts.map +0 -1
- package/dist/time/timezone.d.ts +0 -13
- package/dist/time/timezone.d.ts.map +0 -1
- package/dist/timeframe/index.d.ts +0 -17
- package/dist/timeframe/index.d.ts.map +0 -1
- package/dist/types/index.d.ts +0 -181
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/metadata.d.ts +0 -131
- package/dist/types/metadata.d.ts.map +0 -1
- package/dist/utils/index.d.ts +0 -26
- package/dist/utils/index.d.ts.map +0 -1
package/src/plot.ts
ADDED
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Plot helper functions for indicator visualization
|
|
3
|
+
* These functions help format and prepare data for plotting.
|
|
4
|
+
* @module plot
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Time value type (can be number timestamp or string date)
|
|
9
|
+
*/
|
|
10
|
+
export type Time = number | string;
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Time-value pair for chart data
|
|
14
|
+
*/
|
|
15
|
+
export interface TimeValuePair {
|
|
16
|
+
/** Time (timestamp or date string) */
|
|
17
|
+
time: Time;
|
|
18
|
+
/** Value at this time point */
|
|
19
|
+
value: number;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Options for plot function
|
|
24
|
+
*/
|
|
25
|
+
export interface PlotOptions {
|
|
26
|
+
/** Plot color */
|
|
27
|
+
color?: string;
|
|
28
|
+
/** Display title */
|
|
29
|
+
title?: string;
|
|
30
|
+
/** Line width (1-4) */
|
|
31
|
+
lineWidth?: number;
|
|
32
|
+
/** Line style */
|
|
33
|
+
lineStyle?: 'solid' | 'dashed' | 'dotted';
|
|
34
|
+
/** Offset from current bar */
|
|
35
|
+
offset?: number;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Prepare values for plotting by combining with time data
|
|
40
|
+
*
|
|
41
|
+
* @param values - Array of values to plot (null values create gaps)
|
|
42
|
+
* @param times - Array of time values corresponding to each value
|
|
43
|
+
* @param options - Plot options (color, title, lineWidth, etc.)
|
|
44
|
+
* @returns Array of time-value pairs ready for charting
|
|
45
|
+
*
|
|
46
|
+
* @example
|
|
47
|
+
* ```typescript
|
|
48
|
+
* const smaValues = ta.sma(ctx.close, 14);
|
|
49
|
+
* const plotData = plot(smaValues, ctx.time, { color: '#2196F3', title: 'SMA' });
|
|
50
|
+
* // Returns: [{ time: 1000, value: 100.5 }, { time: 2000, value: 101.2 }, ...]
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
53
|
+
export function plot(
|
|
54
|
+
values: (number | null)[],
|
|
55
|
+
times: Time[],
|
|
56
|
+
options: PlotOptions = {}
|
|
57
|
+
): TimeValuePair[] {
|
|
58
|
+
const result: TimeValuePair[] = [];
|
|
59
|
+
const offset = options.offset ?? 0;
|
|
60
|
+
|
|
61
|
+
for (let i = 0; i < values.length; i++) {
|
|
62
|
+
const value = values[i];
|
|
63
|
+
const timeIndex = i + offset;
|
|
64
|
+
|
|
65
|
+
// Skip null/undefined/NaN values (creates gaps in the chart)
|
|
66
|
+
if (value === null || value === undefined || Number.isNaN(value)) {
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// Skip if time index is out of bounds
|
|
71
|
+
if (timeIndex < 0 || timeIndex >= times.length) {
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
const time = times[timeIndex];
|
|
76
|
+
if (time !== undefined) {
|
|
77
|
+
result.push({ time, value });
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
return result;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Plot result with metadata
|
|
86
|
+
*/
|
|
87
|
+
export interface PlotResult {
|
|
88
|
+
/** Plot identifier */
|
|
89
|
+
id: string;
|
|
90
|
+
/** Time-value data pairs */
|
|
91
|
+
data: TimeValuePair[];
|
|
92
|
+
/** Plot options */
|
|
93
|
+
options: PlotOptions;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Create a named plot with data and options
|
|
98
|
+
*
|
|
99
|
+
* @param id - Unique identifier for this plot
|
|
100
|
+
* @param values - Array of values to plot
|
|
101
|
+
* @param times - Array of time values
|
|
102
|
+
* @param options - Plot options
|
|
103
|
+
* @returns PlotResult with id, data, and options
|
|
104
|
+
*
|
|
105
|
+
* @example
|
|
106
|
+
* ```typescript
|
|
107
|
+
* const smaPlot = createPlot('sma', smaValues, ctx.time, { color: '#2196F3' });
|
|
108
|
+
* ```
|
|
109
|
+
*/
|
|
110
|
+
export function createPlot(
|
|
111
|
+
id: string,
|
|
112
|
+
values: (number | null)[],
|
|
113
|
+
times: Time[],
|
|
114
|
+
options: PlotOptions = {}
|
|
115
|
+
): PlotResult {
|
|
116
|
+
return {
|
|
117
|
+
id,
|
|
118
|
+
data: plot(values, times, options),
|
|
119
|
+
options,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Polyline namespace
|
|
3
|
+
* Functions for creating and manipulating polyline drawing objects.
|
|
4
|
+
*
|
|
5
|
+
* @remarks
|
|
6
|
+
* Polylines allow connecting multiple points with line segments, enabling complex chart drawings
|
|
7
|
+
* like trend channels, patterns, and custom shapes. This implementation focuses on basic
|
|
8
|
+
* polylines (straight lines) - curved polylines can be added in a future iteration.
|
|
9
|
+
*
|
|
10
|
+
* @version 6
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
import type { ChartPoint, Polyline, color } from '../types/index.js';
|
|
14
|
+
import { all as allDrawings, register, remove } from '../drawing/registry.js';
|
|
15
|
+
|
|
16
|
+
// Re-export the Polyline type for convenience
|
|
17
|
+
export type { Polyline };
|
|
18
|
+
|
|
19
|
+
// Internal counter for generating unique IDs
|
|
20
|
+
let polylineIdCounter = 0;
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Generates a unique ID for a polyline
|
|
24
|
+
*/
|
|
25
|
+
function generateId(): string {
|
|
26
|
+
return `polyline_${++polylineIdCounter}`;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Creates a new polyline connecting all points.
|
|
31
|
+
*
|
|
32
|
+
* @param points - Array of chart.point objects to connect
|
|
33
|
+
* @param curved - If true, use curved line segments (default: false, NOT YET SUPPORTED)
|
|
34
|
+
* @param closed - If true, connect first point to last point (default: false)
|
|
35
|
+
* @param xloc - X-coordinate mode: 'bar_index' or 'bar_time' (default: 'bar_index')
|
|
36
|
+
* @param line_color - Color of line segments (default: '#2196F3' - blue)
|
|
37
|
+
* @param fill_color - Fill color for closed polylines (default: null)
|
|
38
|
+
* @param line_style - Line style (default: 'solid')
|
|
39
|
+
* @param line_width - Line width in pixels (default: 1)
|
|
40
|
+
* @param force_overlay - Force display on main pane (default: false)
|
|
41
|
+
* @returns New Polyline object
|
|
42
|
+
*
|
|
43
|
+
* @remarks
|
|
44
|
+
* - The curved parameter is accepted but currently logs a warning as curved lines
|
|
45
|
+
* are not yet supported. Straight-line connections are used instead.
|
|
46
|
+
* - For meaningful polylines, provide at least 2 points.
|
|
47
|
+
* - Closed polylines can be filled with a color by setting fill_color.
|
|
48
|
+
*
|
|
49
|
+
* @example
|
|
50
|
+
* ```typescript
|
|
51
|
+
* import { chartPoint, polyline } from 'oakscriptjs';
|
|
52
|
+
*
|
|
53
|
+
* // Create points
|
|
54
|
+
* const points = [
|
|
55
|
+
* chartPoint.from_index(0, 100),
|
|
56
|
+
* chartPoint.from_index(10, 120),
|
|
57
|
+
* chartPoint.from_index(20, 110)
|
|
58
|
+
* ];
|
|
59
|
+
*
|
|
60
|
+
* // Create a basic polyline
|
|
61
|
+
* const myPolyline = polyline.new(points);
|
|
62
|
+
*
|
|
63
|
+
* // Create a closed polygon with fill
|
|
64
|
+
* const polygon = polyline.new(
|
|
65
|
+
* points,
|
|
66
|
+
* false, // curved
|
|
67
|
+
* true, // closed
|
|
68
|
+
* 'bar_index', // xloc
|
|
69
|
+
* '#FF5722', // line_color
|
|
70
|
+
* 'rgba(255, 87, 34, 0.3)' // fill_color
|
|
71
|
+
* );
|
|
72
|
+
* ```
|
|
73
|
+
*/
|
|
74
|
+
export function new_polyline(
|
|
75
|
+
points: ChartPoint[],
|
|
76
|
+
curved: boolean = false,
|
|
77
|
+
closed: boolean = false,
|
|
78
|
+
xloc: 'bar_index' | 'bar_time' = 'bar_index',
|
|
79
|
+
line_color: color = '#2196F3',
|
|
80
|
+
fill_color: color | null = null,
|
|
81
|
+
line_style: 'solid' | 'dotted' | 'dashed' = 'solid',
|
|
82
|
+
line_width: number = 1,
|
|
83
|
+
force_overlay: boolean = false
|
|
84
|
+
): Polyline {
|
|
85
|
+
// Warn about curved polylines not being supported yet
|
|
86
|
+
if (curved) {
|
|
87
|
+
console.warn(
|
|
88
|
+
'polyline.new(): curved polylines are not yet supported. Using straight-line connections.'
|
|
89
|
+
);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// Validate line_width is positive
|
|
93
|
+
if (line_width < 1) {
|
|
94
|
+
console.warn('polyline.new(): line_width must be at least 1. Using 1.');
|
|
95
|
+
line_width = 1;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
const polyline: Polyline = {
|
|
99
|
+
id: generateId(),
|
|
100
|
+
points: [...points], // Create a copy of the points array
|
|
101
|
+
curved,
|
|
102
|
+
closed,
|
|
103
|
+
xloc,
|
|
104
|
+
line_color,
|
|
105
|
+
fill_color,
|
|
106
|
+
line_style,
|
|
107
|
+
line_width,
|
|
108
|
+
force_overlay,
|
|
109
|
+
};
|
|
110
|
+
|
|
111
|
+
return register('polyline', polyline);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Deletes a polyline.
|
|
116
|
+
*
|
|
117
|
+
* @param id - Polyline object to delete
|
|
118
|
+
*
|
|
119
|
+
* @remarks
|
|
120
|
+
* Removes the polyline from `polyline.all()` (the drawing registry, see drawing/registry).
|
|
121
|
+
*
|
|
122
|
+
* @example
|
|
123
|
+
* ```typescript
|
|
124
|
+
* const myPolyline = polyline.new(points);
|
|
125
|
+
* polyline.delete(myPolyline);
|
|
126
|
+
* ```
|
|
127
|
+
*/
|
|
128
|
+
export function delete_polyline(id: Polyline): void {
|
|
129
|
+
remove('polyline', id);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* Gets all active polylines.
|
|
134
|
+
*
|
|
135
|
+
* @returns Array of all active polylines
|
|
136
|
+
*
|
|
137
|
+
* @remarks
|
|
138
|
+
* Returns a copy of the internal polylines array to prevent external modification.
|
|
139
|
+
*
|
|
140
|
+
* @example
|
|
141
|
+
* ```typescript
|
|
142
|
+
* console.log('Total polylines:', polyline.all.length);
|
|
143
|
+
*
|
|
144
|
+
* for (const p of polyline.all) {
|
|
145
|
+
* console.log('Polyline ID:', p.id, 'Points:', p.points.length);
|
|
146
|
+
* }
|
|
147
|
+
* ```
|
|
148
|
+
*/
|
|
149
|
+
export function get_all(): readonly Polyline[] {
|
|
150
|
+
return allDrawings('polyline');
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* All live polylines, in creation order (PineScript `polyline.all`). A new array.
|
|
155
|
+
*/
|
|
156
|
+
export function all(): Polyline[] {
|
|
157
|
+
return allDrawings('polyline');
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* Deletes all polylines.
|
|
162
|
+
*
|
|
163
|
+
* @remarks
|
|
164
|
+
* This is useful for resetting state, especially in tests.
|
|
165
|
+
* Not part of the PineScript API.
|
|
166
|
+
*/
|
|
167
|
+
export function clear_all(): void {
|
|
168
|
+
for (const p of allDrawings('polyline')) remove('polyline', p);
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* Resets the polyline ID counter.
|
|
173
|
+
*
|
|
174
|
+
* @remarks
|
|
175
|
+
* This is useful for resetting state, especially in tests.
|
|
176
|
+
* Not part of the PineScript API.
|
|
177
|
+
*/
|
|
178
|
+
export function reset_id_counter(): void {
|
|
179
|
+
polylineIdCounter = 0;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
// Aliases to match PineScript API
|
|
183
|
+
export { new_polyline as new };
|
|
184
|
+
export { delete_polyline as delete };
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Lightweight-charts v5 adapter
|
|
3
|
+
* Provides integration with lightweight-charts library
|
|
4
|
+
* @module runtime/adapters/LightweightChartsAdapter
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import type { ChartAdapter, SeriesHandle, SeriesOptions } from '../types.js';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Minimal interface for lightweight-charts chart API
|
|
11
|
+
* Only includes methods used by this adapter
|
|
12
|
+
*/
|
|
13
|
+
interface LightweightChart {
|
|
14
|
+
addSeries<T>(seriesDefinition: unknown, options?: unknown, paneIndex?: number): LightweightSeries<T>;
|
|
15
|
+
removeSeries(series: LightweightSeries<unknown>): void;
|
|
16
|
+
panes(): unknown[];
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Minimal interface for lightweight-charts series
|
|
21
|
+
*/
|
|
22
|
+
interface LightweightSeries<T> {
|
|
23
|
+
setData(data: T[]): void;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Data point format for lightweight-charts
|
|
28
|
+
*/
|
|
29
|
+
interface TimeValueData {
|
|
30
|
+
time: number;
|
|
31
|
+
value: number;
|
|
32
|
+
color?: string;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* The lightweight-charts v5 series definitions the adapter creates series with. Pass the library's own exports
|
|
37
|
+
* (`import { LineSeries, HistogramSeries } from 'lightweight-charts'`, or the whole module): OakScriptJS does not
|
|
38
|
+
* import lightweight-charts itself. `LineSeries` is required; the others are needed only for the series types used.
|
|
39
|
+
*/
|
|
40
|
+
export interface LightweightSeriesDefinitions {
|
|
41
|
+
LineSeries: unknown;
|
|
42
|
+
HistogramSeries?: unknown;
|
|
43
|
+
AreaSeries?: unknown;
|
|
44
|
+
BaselineSeries?: unknown;
|
|
45
|
+
BarSeries?: unknown;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Adapter for lightweight-charts v5
|
|
50
|
+
* Translates OakScriptJS chart operations into lightweight-charts API calls
|
|
51
|
+
*
|
|
52
|
+
* @example
|
|
53
|
+
* ```typescript
|
|
54
|
+
* import { createChart, CandlestickSeries, LineSeries, HistogramSeries } from 'lightweight-charts';
|
|
55
|
+
*
|
|
56
|
+
* const chart = createChart(container);
|
|
57
|
+
* const candles = chart.addSeries(CandlestickSeries);
|
|
58
|
+
* const adapter = new LightweightChartsAdapter(chart, { LineSeries, HistogramSeries }, candles);
|
|
59
|
+
* ```
|
|
60
|
+
*/
|
|
61
|
+
export class LightweightChartsAdapter implements ChartAdapter {
|
|
62
|
+
private chart: LightweightChart;
|
|
63
|
+
private definitions: LightweightSeriesDefinitions;
|
|
64
|
+
private mainSeries: SeriesHandle | undefined;
|
|
65
|
+
private paneCount: number = 0;
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Create a new LightweightChartsAdapter
|
|
69
|
+
* @param chart - The lightweight-charts chart instance
|
|
70
|
+
* @param definitions - The lightweight-charts series definitions (`LineSeries`, `HistogramSeries`...)
|
|
71
|
+
* @param mainSeries - Optional main price series (candlestick/line series)
|
|
72
|
+
*/
|
|
73
|
+
constructor(chart: unknown, definitions: LightweightSeriesDefinitions, mainSeries?: unknown) {
|
|
74
|
+
if (!definitions?.LineSeries) {
|
|
75
|
+
throw new Error(
|
|
76
|
+
'LightweightChartsAdapter: pass the lightweight-charts series definitions, ' +
|
|
77
|
+
"e.g. new LightweightChartsAdapter(chart, { LineSeries, HistogramSeries }) with the imports from 'lightweight-charts'."
|
|
78
|
+
);
|
|
79
|
+
}
|
|
80
|
+
this.chart = chart as LightweightChart;
|
|
81
|
+
this.definitions = definitions;
|
|
82
|
+
if (mainSeries) {
|
|
83
|
+
this.mainSeries = this.wrapSeries(mainSeries as LightweightSeries<TimeValueData>);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Wrap a lightweight-charts series to implement SeriesHandle
|
|
89
|
+
* @param lwcSeries - The lightweight-charts series
|
|
90
|
+
* @returns SeriesHandle wrapper
|
|
91
|
+
*/
|
|
92
|
+
private wrapSeries(lwcSeries: LightweightSeries<TimeValueData>): SeriesHandle {
|
|
93
|
+
return {
|
|
94
|
+
setData: (data: Array<{ time: number; value: number; color?: string }>) => {
|
|
95
|
+
lwcSeries.setData(data);
|
|
96
|
+
},
|
|
97
|
+
// Store reference for removal
|
|
98
|
+
_lwcSeries: lwcSeries,
|
|
99
|
+
} as SeriesHandle & { _lwcSeries: LightweightSeries<TimeValueData> };
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Map series type string to lightweight-charts series definition
|
|
104
|
+
* @param type - Series type ('line', 'histogram', 'area', 'baseline', 'bar')
|
|
105
|
+
* @returns Lightweight-charts series definition
|
|
106
|
+
* @throws When the definition of that series type was not given to the constructor
|
|
107
|
+
*/
|
|
108
|
+
private getSeriesDefinition(type: string): unknown {
|
|
109
|
+
const key = (
|
|
110
|
+
{
|
|
111
|
+
histogram: 'HistogramSeries',
|
|
112
|
+
area: 'AreaSeries',
|
|
113
|
+
baseline: 'BaselineSeries',
|
|
114
|
+
bar: 'BarSeries',
|
|
115
|
+
} as const
|
|
116
|
+
)[type as 'histogram' | 'area' | 'baseline' | 'bar'] ?? 'LineSeries';
|
|
117
|
+
const definition = this.definitions[key];
|
|
118
|
+
if (!definition) {
|
|
119
|
+
throw new Error(`LightweightChartsAdapter: a '${type}' series needs ${key}; pass it in the constructor definitions.`);
|
|
120
|
+
}
|
|
121
|
+
return definition;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Convert OakScriptJS series options to lightweight-charts options
|
|
126
|
+
* @param options - OakScriptJS series options
|
|
127
|
+
* @returns Lightweight-charts compatible options
|
|
128
|
+
*/
|
|
129
|
+
private convertOptions(options?: SeriesOptions): Record<string, unknown> {
|
|
130
|
+
if (!options) {
|
|
131
|
+
return {};
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
const lwcOptions: Record<string, unknown> = {};
|
|
135
|
+
|
|
136
|
+
if (options.color) {
|
|
137
|
+
lwcOptions.color = options.color;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
if (options.lineWidth !== undefined) {
|
|
141
|
+
lwcOptions.lineWidth = options.lineWidth;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
if (options.lineStyle !== undefined) {
|
|
145
|
+
lwcOptions.lineStyle = options.lineStyle;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
if (options.priceScaleId) {
|
|
149
|
+
lwcOptions.priceScaleId = options.priceScaleId;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
return lwcOptions;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* Add a new series to the chart
|
|
157
|
+
* @param type - Series type ('line', 'histogram', 'area', 'baseline', 'bar')
|
|
158
|
+
* @param options - Series options (`pane` is the lightweight-charts pane index)
|
|
159
|
+
* @returns SeriesHandle for the new series
|
|
160
|
+
*/
|
|
161
|
+
addSeries(type: string, options?: SeriesOptions): SeriesHandle {
|
|
162
|
+
const seriesDefinition = this.getSeriesDefinition(type);
|
|
163
|
+
const lwcOptions = this.convertOptions(options);
|
|
164
|
+
|
|
165
|
+
const lwcSeries =
|
|
166
|
+
options?.pane !== undefined
|
|
167
|
+
? this.chart.addSeries<TimeValueData>(seriesDefinition, lwcOptions, options.pane)
|
|
168
|
+
: this.chart.addSeries<TimeValueData>(seriesDefinition, lwcOptions);
|
|
169
|
+
return this.wrapSeries(lwcSeries);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* Remove a series from the chart
|
|
174
|
+
* @param series - SeriesHandle to remove
|
|
175
|
+
*/
|
|
176
|
+
removeSeries(series: SeriesHandle): void {
|
|
177
|
+
const wrappedSeries = series as SeriesHandle & { _lwcSeries?: LightweightSeries<unknown> };
|
|
178
|
+
if (wrappedSeries._lwcSeries) {
|
|
179
|
+
this.chart.removeSeries(wrappedSeries._lwcSeries);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
/**
|
|
184
|
+
* Get the main price series
|
|
185
|
+
* @returns Main series handle or undefined
|
|
186
|
+
*/
|
|
187
|
+
getMainSeries(): SeriesHandle | undefined {
|
|
188
|
+
return this.mainSeries;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
/**
|
|
192
|
+
* Create a new pane (if supported by the chart configuration)
|
|
193
|
+
* @returns Index of the new pane
|
|
194
|
+
*/
|
|
195
|
+
createPane(): number {
|
|
196
|
+
// Lightweight-charts v5 doesn't have a direct createPane API
|
|
197
|
+
// Panes are typically created via chart configuration
|
|
198
|
+
// This returns an incremented pane count for reference
|
|
199
|
+
return ++this.paneCount;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Simple in-memory input adapter for demos and testing
|
|
3
|
+
* Stores input values in memory and provides change notification
|
|
4
|
+
* @module runtime/adapters/SimpleInputAdapter
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import type { InputAdapter, InputConfig } from '../types.js';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Simple in-memory input adapter
|
|
11
|
+
* Stores input configurations and values in memory
|
|
12
|
+
* Useful for demos, testing, and simple applications
|
|
13
|
+
*/
|
|
14
|
+
export class SimpleInputAdapter implements InputAdapter {
|
|
15
|
+
private inputs: Map<string, { config: InputConfig; value: unknown }> = new Map();
|
|
16
|
+
private changeCallbacks: Array<(id: string, value: unknown) => void> = [];
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Register an input configuration
|
|
20
|
+
* If already registered, returns current value without modifying config
|
|
21
|
+
* @param config - Input configuration
|
|
22
|
+
* @returns Current value (defval on first registration)
|
|
23
|
+
*/
|
|
24
|
+
registerInput(config: InputConfig): unknown {
|
|
25
|
+
if (!this.inputs.has(config.id)) {
|
|
26
|
+
this.inputs.set(config.id, { config, value: config.defval });
|
|
27
|
+
}
|
|
28
|
+
return this.inputs.get(config.id)!.value;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Get current value of an input
|
|
33
|
+
* @param id - Input identifier
|
|
34
|
+
* @returns Current value or undefined if not registered
|
|
35
|
+
*/
|
|
36
|
+
getValue(id: string): unknown {
|
|
37
|
+
return this.inputs.get(id)?.value;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Set value of an input with validation
|
|
42
|
+
* Validates against config constraints (min/max/step for numerics, options for strings)
|
|
43
|
+
* @param id - Input identifier
|
|
44
|
+
* @param value - New value
|
|
45
|
+
*/
|
|
46
|
+
setValue(id: string, value: unknown): void {
|
|
47
|
+
const input = this.inputs.get(id);
|
|
48
|
+
if (!input) {
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
const { config } = input;
|
|
53
|
+
let validatedValue = value;
|
|
54
|
+
|
|
55
|
+
// Validate numeric inputs
|
|
56
|
+
if ((config.type === 'int' || config.type === 'float') && typeof value === 'number') {
|
|
57
|
+
// Apply min constraint
|
|
58
|
+
if (config.min !== undefined && value < config.min) {
|
|
59
|
+
validatedValue = config.min;
|
|
60
|
+
}
|
|
61
|
+
// Apply max constraint
|
|
62
|
+
if (config.max !== undefined && value > config.max) {
|
|
63
|
+
validatedValue = config.max;
|
|
64
|
+
}
|
|
65
|
+
// Round to step for int type
|
|
66
|
+
if (config.type === 'int') {
|
|
67
|
+
validatedValue = Math.floor(validatedValue as number);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
// Validate string, timeframe and session inputs with options
|
|
72
|
+
if (
|
|
73
|
+
(config.type === 'string' || config.type === 'timeframe' || config.type === 'session') &&
|
|
74
|
+
config.options &&
|
|
75
|
+
typeof value === 'string'
|
|
76
|
+
) {
|
|
77
|
+
if (!config.options.includes(value)) {
|
|
78
|
+
// Keep current value if invalid option
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// Validate source inputs
|
|
84
|
+
if (config.type === 'source' && config.options && typeof value === 'string') {
|
|
85
|
+
if (!config.options.includes(value)) {
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
// Update value
|
|
91
|
+
input.value = validatedValue;
|
|
92
|
+
|
|
93
|
+
// Notify callbacks
|
|
94
|
+
this.changeCallbacks.forEach(cb => cb(id, validatedValue));
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Register a callback for input value changes
|
|
99
|
+
* @param callback - Function to call when any input value changes
|
|
100
|
+
*/
|
|
101
|
+
onInputChange(callback: (id: string, value: unknown) => void): void {
|
|
102
|
+
this.changeCallbacks.push(callback);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Get all registered inputs (for UI rendering)
|
|
107
|
+
* @returns Map of input IDs to their configs and values
|
|
108
|
+
*/
|
|
109
|
+
getAllInputs(): Map<string, { config: InputConfig; value: unknown }> {
|
|
110
|
+
return new Map(this.inputs);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Clear all registered inputs
|
|
115
|
+
* Useful for testing or resetting state
|
|
116
|
+
*/
|
|
117
|
+
clear(): void {
|
|
118
|
+
this.inputs.clear();
|
|
119
|
+
this.changeCallbacks = [];
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Remove a specific change callback
|
|
124
|
+
* @param callback - The callback to remove
|
|
125
|
+
*/
|
|
126
|
+
removeChangeCallback(callback: (id: string, value: unknown) => void): void {
|
|
127
|
+
const index = this.changeCallbacks.indexOf(callback);
|
|
128
|
+
if (index !== -1) {
|
|
129
|
+
this.changeCallbacks.splice(index, 1);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview OakScriptJS Runtime Module
|
|
3
|
+
* Provides global context management, plot functions, and input handling
|
|
4
|
+
* for indicators that draw through a ChartAdapter
|
|
5
|
+
* @module runtime
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
// Core runtime exports
|
|
9
|
+
export {
|
|
10
|
+
setContext,
|
|
11
|
+
clearContext,
|
|
12
|
+
getContext,
|
|
13
|
+
registerCalculate,
|
|
14
|
+
recalculate,
|
|
15
|
+
plot,
|
|
16
|
+
hline,
|
|
17
|
+
clearPlots,
|
|
18
|
+
getActivePlots,
|
|
19
|
+
} from './runtime.js';
|
|
20
|
+
|
|
21
|
+
// Input function exports
|
|
22
|
+
export {
|
|
23
|
+
input_int,
|
|
24
|
+
input_float,
|
|
25
|
+
input_bool,
|
|
26
|
+
input_string,
|
|
27
|
+
input_source,
|
|
28
|
+
input_timeframe,
|
|
29
|
+
input_session,
|
|
30
|
+
input_time,
|
|
31
|
+
enableAutoRecalculate,
|
|
32
|
+
disableAutoRecalculate,
|
|
33
|
+
resetInputs,
|
|
34
|
+
} from './inputs.js';
|
|
35
|
+
|
|
36
|
+
// Type exports
|
|
37
|
+
export type {
|
|
38
|
+
OakScriptContext,
|
|
39
|
+
ChartAdapter,
|
|
40
|
+
InputAdapter,
|
|
41
|
+
SeriesHandle,
|
|
42
|
+
SeriesOptions,
|
|
43
|
+
InputConfig,
|
|
44
|
+
InputOptions,
|
|
45
|
+
OhlcvData,
|
|
46
|
+
PlotConfig,
|
|
47
|
+
} from './types.js';
|
|
48
|
+
|
|
49
|
+
// Adapter exports
|
|
50
|
+
export { LightweightChartsAdapter } from './adapters/LightweightChartsAdapter.js';
|
|
51
|
+
export type { LightweightSeriesDefinitions } from './adapters/LightweightChartsAdapter.js';
|
|
52
|
+
export { SimpleInputAdapter } from './adapters/SimpleInputAdapter.js';
|