openalgo-script 0.1.0-alpha.0 → 0.2.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/CHANGELOG.md +1249 -0
- package/README.md +288 -255
- package/dist/adapters/charts/alerts.d.ts +70 -0
- package/dist/adapters/charts/alerts.d.ts.map +1 -0
- package/dist/adapters/charts/alerts.js +52 -0
- package/dist/adapters/charts/alerts.js.map +1 -0
- package/dist/adapters/charts/bars.d.ts +39 -0
- package/dist/adapters/charts/bars.d.ts.map +1 -0
- package/dist/adapters/charts/bars.js +32 -0
- package/dist/adapters/charts/bars.js.map +1 -0
- package/dist/adapters/charts/candles.d.ts +40 -0
- package/dist/adapters/charts/candles.d.ts.map +1 -0
- package/dist/adapters/charts/candles.js +85 -0
- package/dist/adapters/charts/candles.js.map +1 -0
- package/dist/adapters/charts/colours.d.ts +47 -0
- package/dist/adapters/charts/colours.d.ts.map +1 -0
- package/dist/adapters/charts/colours.js +80 -0
- package/dist/adapters/charts/colours.js.map +1 -0
- package/dist/adapters/charts/columns.d.ts +37 -0
- package/dist/adapters/charts/columns.d.ts.map +1 -0
- package/dist/adapters/charts/columns.js +56 -0
- package/dist/adapters/charts/columns.js.map +1 -0
- package/dist/adapters/charts/contract.d.ts +278 -0
- package/dist/adapters/charts/contract.d.ts.map +1 -0
- package/dist/adapters/charts/contract.js +2 -0
- package/dist/adapters/charts/contract.js.map +1 -0
- package/dist/adapters/charts/descriptor.d.ts +48 -0
- package/dist/adapters/charts/descriptor.d.ts.map +1 -0
- package/dist/adapters/charts/descriptor.js +111 -0
- package/dist/adapters/charts/descriptor.js.map +1 -0
- package/dist/adapters/charts/drawings.d.ts +43 -0
- package/dist/adapters/charts/drawings.d.ts.map +1 -0
- package/dist/adapters/charts/drawings.js +172 -0
- package/dist/adapters/charts/drawings.js.map +1 -0
- package/dist/adapters/charts/errors.d.ts +28 -0
- package/dist/adapters/charts/errors.d.ts.map +1 -0
- package/dist/adapters/charts/errors.js +21 -0
- package/dist/adapters/charts/errors.js.map +1 -0
- package/dist/adapters/charts/fields.d.ts +33 -0
- package/dist/adapters/charts/fields.d.ts.map +1 -0
- package/dist/adapters/charts/fields.js +51 -0
- package/dist/adapters/charts/fields.js.map +1 -0
- package/dist/adapters/charts/fills.d.ts +23 -0
- package/dist/adapters/charts/fills.d.ts.map +1 -0
- package/dist/adapters/charts/fills.js +48 -0
- package/dist/adapters/charts/fills.js.map +1 -0
- package/dist/adapters/charts/index.d.ts +37 -0
- package/dist/adapters/charts/index.d.ts.map +1 -0
- package/dist/adapters/charts/index.js +33 -0
- package/dist/adapters/charts/index.js.map +1 -0
- package/dist/adapters/charts/levels.d.ts +39 -0
- package/dist/adapters/charts/levels.d.ts.map +1 -0
- package/dist/adapters/charts/levels.js +61 -0
- package/dist/adapters/charts/levels.js.map +1 -0
- package/dist/adapters/charts/markers.d.ts +41 -0
- package/dist/adapters/charts/markers.d.ts.map +1 -0
- package/dist/adapters/charts/markers.js +75 -0
- package/dist/adapters/charts/markers.js.map +1 -0
- package/dist/adapters/charts/paint.d.ts +61 -0
- package/dist/adapters/charts/paint.d.ts.map +1 -0
- package/dist/adapters/charts/paint.js +47 -0
- package/dist/adapters/charts/paint.js.map +1 -0
- package/dist/adapters/charts/plots.d.ts +39 -0
- package/dist/adapters/charts/plots.d.ts.map +1 -0
- package/dist/adapters/charts/plots.js +117 -0
- package/dist/adapters/charts/plots.js.map +1 -0
- package/dist/adapters/charts/produced.d.ts +57 -0
- package/dist/adapters/charts/produced.d.ts.map +1 -0
- package/dist/adapters/charts/produced.js +11 -0
- package/dist/adapters/charts/produced.js.map +1 -0
- package/dist/adapters/charts/requests.d.ts +114 -0
- package/dist/adapters/charts/requests.d.ts.map +1 -0
- package/dist/adapters/charts/requests.js +277 -0
- package/dist/adapters/charts/requests.js.map +1 -0
- package/dist/adapters/charts/run.d.ts +147 -0
- package/dist/adapters/charts/run.d.ts.map +1 -0
- package/dist/adapters/charts/run.js +148 -0
- package/dist/adapters/charts/run.js.map +1 -0
- package/dist/adapters/charts/settings.d.ts +78 -0
- package/dist/adapters/charts/settings.d.ts.map +1 -0
- package/dist/adapters/charts/settings.js +225 -0
- package/dist/adapters/charts/settings.js.map +1 -0
- package/dist/adapters/charts/surfaces.d.ts +204 -0
- package/dist/adapters/charts/surfaces.d.ts.map +1 -0
- package/dist/adapters/charts/surfaces.js +2 -0
- package/dist/adapters/charts/surfaces.js.map +1 -0
- package/dist/adapters/charts/tables.d.ts +65 -0
- package/dist/adapters/charts/tables.d.ts.map +1 -0
- package/dist/adapters/charts/tables.js +84 -0
- package/dist/adapters/charts/tables.js.map +1 -0
- package/dist/core/catalogue/catalogue.generated.d.ts +98 -10
- package/dist/core/catalogue/catalogue.generated.d.ts.map +1 -1
- package/dist/core/catalogue/catalogue.generated.js +17 -9
- package/dist/core/catalogue/catalogue.generated.js.map +1 -1
- package/dist/core/catalogue/values.generated.d.ts +25 -0
- package/dist/core/catalogue/values.generated.d.ts.map +1 -1
- package/dist/core/check/arguments.d.ts +41 -0
- package/dist/core/check/arguments.d.ts.map +1 -0
- package/dist/core/check/arguments.js +84 -0
- package/dist/core/check/arguments.js.map +1 -0
- package/dist/core/check/call-sites.d.ts +22 -0
- package/dist/core/check/call-sites.d.ts.map +1 -0
- package/dist/core/check/call-sites.js +329 -0
- package/dist/core/check/call-sites.js.map +1 -0
- package/dist/core/check/call-warmup.d.ts +37 -0
- package/dist/core/check/call-warmup.d.ts.map +1 -0
- package/dist/core/check/call-warmup.js +97 -0
- package/dist/core/check/call-warmup.js.map +1 -0
- package/dist/core/check/calls.d.ts +33 -0
- package/dist/core/check/calls.d.ts.map +1 -0
- package/dist/core/check/calls.js +348 -0
- package/dist/core/check/calls.js.map +1 -0
- package/dist/core/check/check.d.ts +23 -0
- package/dist/core/check/check.d.ts.map +1 -0
- package/dist/core/check/check.js +163 -0
- package/dist/core/check/check.js.map +1 -0
- package/dist/core/check/checked.d.ts +198 -0
- package/dist/core/check/checked.d.ts.map +1 -0
- package/dist/core/check/checked.js +19 -0
- package/dist/core/check/checked.js.map +1 -0
- package/dist/core/check/checker.d.ts +182 -0
- package/dist/core/check/checker.d.ts.map +1 -0
- package/dist/core/check/checker.js +280 -0
- package/dist/core/check/checker.js.map +1 -0
- package/dist/core/check/conditional.d.ts +35 -0
- package/dist/core/check/conditional.d.ts.map +1 -0
- package/dist/core/check/conditional.js +100 -0
- package/dist/core/check/conditional.js.map +1 -0
- package/dist/core/check/constant.d.ts +47 -0
- package/dist/core/check/constant.d.ts.map +1 -0
- package/dist/core/check/constant.js +101 -0
- package/dist/core/check/constant.js.map +1 -0
- package/dist/core/check/declaration.d.ts +33 -0
- package/dist/core/check/declaration.d.ts.map +1 -0
- package/dist/core/check/declaration.js +181 -0
- package/dist/core/check/declaration.js.map +1 -0
- package/dist/core/check/expressions.d.ts +36 -0
- package/dist/core/check/expressions.d.ts.map +1 -0
- package/dist/core/check/expressions.js +398 -0
- package/dist/core/check/expressions.js.map +1 -0
- package/dist/core/check/functions.d.ts +31 -0
- package/dist/core/check/functions.d.ts.map +1 -0
- package/dist/core/check/functions.js +238 -0
- package/dist/core/check/functions.js.map +1 -0
- package/dist/core/check/handles.d.ts +48 -0
- package/dist/core/check/handles.d.ts.map +1 -0
- package/dist/core/check/handles.js +43 -0
- package/dist/core/check/handles.js.map +1 -0
- package/dist/core/check/index.d.ts +30 -0
- package/dist/core/check/index.d.ts.map +1 -0
- package/dist/core/check/index.js +26 -0
- package/dist/core/check/index.js.map +1 -0
- package/dist/core/check/library-bars.d.ts +7 -0
- package/dist/core/check/library-bars.d.ts.map +1 -0
- package/dist/core/check/library-bars.js +181 -0
- package/dist/core/check/library-bars.js.map +1 -0
- package/dist/core/check/library-orders.d.ts +5 -0
- package/dist/core/check/library-orders.d.ts.map +1 -0
- package/dist/core/check/library-orders.js +250 -0
- package/dist/core/check/library-orders.js.map +1 -0
- package/dist/core/check/library-output.d.ts +7 -0
- package/dist/core/check/library-output.d.ts.map +1 -0
- package/dist/core/check/library-output.js +195 -0
- package/dist/core/check/library-output.js.map +1 -0
- package/dist/core/check/library-series.d.ts +3 -0
- package/dist/core/check/library-series.d.ts.map +1 -0
- package/dist/core/check/library-series.js +415 -0
- package/dist/core/check/library-series.js.map +1 -0
- package/dist/core/check/library.d.ts +204 -0
- package/dist/core/check/library.d.ts.map +1 -0
- package/dist/core/check/library.js +198 -0
- package/dist/core/check/library.js.map +1 -0
- package/dist/core/check/literals.d.ts +19 -0
- package/dist/core/check/literals.d.ts.map +1 -0
- package/dist/core/check/literals.js +22 -0
- package/dist/core/check/literals.js.map +1 -0
- package/dist/core/check/outputs.d.ts +31 -0
- package/dist/core/check/outputs.d.ts.map +1 -0
- package/dist/core/check/outputs.js +113 -0
- package/dist/core/check/outputs.js.map +1 -0
- package/dist/core/check/statements.d.ts +25 -0
- package/dist/core/check/statements.d.ts.map +1 -0
- package/dist/core/check/statements.js +377 -0
- package/dist/core/check/statements.js.map +1 -0
- package/dist/core/check/suggest.d.ts +25 -0
- package/dist/core/check/suggest.d.ts.map +1 -0
- package/dist/core/check/suggest.js +61 -0
- package/dist/core/check/suggest.js.map +1 -0
- package/dist/core/check/surface.d.ts +38 -0
- package/dist/core/check/surface.d.ts.map +1 -0
- package/dist/core/check/surface.js +100 -0
- package/dist/core/check/surface.js.map +1 -0
- package/dist/core/check/tags.d.ts +4 -0
- package/dist/core/check/tags.d.ts.map +1 -0
- package/dist/core/check/tags.js +54 -0
- package/dist/core/check/tags.js.map +1 -0
- package/dist/core/check/types.d.ts +153 -0
- package/dist/core/check/types.d.ts.map +1 -0
- package/dist/core/check/types.js +221 -0
- package/dist/core/check/types.js.map +1 -0
- package/dist/core/check/warmup.d.ts +73 -0
- package/dist/core/check/warmup.d.ts.map +1 -0
- package/dist/core/check/warmup.js +62 -0
- package/dist/core/check/warmup.js.map +1 -0
- package/dist/core/diagnostics/collector.d.ts +12 -0
- package/dist/core/diagnostics/collector.d.ts.map +1 -1
- package/dist/core/diagnostics/collector.js +27 -1
- package/dist/core/diagnostics/collector.js.map +1 -1
- package/dist/core/emit/calls.d.ts +38 -0
- package/dist/core/emit/calls.d.ts.map +1 -0
- package/dist/core/emit/calls.js +347 -0
- package/dist/core/emit/calls.js.map +1 -0
- package/dist/core/emit/canonical.d.ts +39 -0
- package/dist/core/emit/canonical.d.ts.map +1 -0
- package/dist/core/emit/canonical.js +71 -0
- package/dist/core/emit/canonical.js.map +1 -0
- package/dist/core/emit/channels.d.ts +28 -0
- package/dist/core/emit/channels.d.ts.map +1 -0
- package/dist/core/emit/channels.js +110 -0
- package/dist/core/emit/channels.js.map +1 -0
- package/dist/core/emit/code.d.ts +75 -0
- package/dist/core/emit/code.d.ts.map +1 -0
- package/dist/core/emit/code.js +104 -0
- package/dist/core/emit/code.js.map +1 -0
- package/dist/core/emit/colours.d.ts +35 -0
- package/dist/core/emit/colours.d.ts.map +1 -0
- package/dist/core/emit/colours.js +50 -0
- package/dist/core/emit/colours.js.map +1 -0
- package/dist/core/emit/context.d.ts +271 -0
- package/dist/core/emit/context.d.ts.map +1 -0
- package/dist/core/emit/context.js +358 -0
- package/dist/core/emit/context.js.map +1 -0
- package/dist/core/emit/defaults.d.ts +45 -0
- package/dist/core/emit/defaults.d.ts.map +1 -0
- package/dist/core/emit/defaults.js +116 -0
- package/dist/core/emit/defaults.js.map +1 -0
- package/dist/core/emit/emit.d.ts +13 -0
- package/dist/core/emit/emit.d.ts.map +1 -0
- package/dist/core/emit/emit.js +281 -0
- package/dist/core/emit/emit.js.map +1 -0
- package/dist/core/emit/events.d.ts +21 -0
- package/dist/core/emit/events.d.ts.map +1 -0
- package/dist/core/emit/events.js +112 -0
- package/dist/core/emit/events.js.map +1 -0
- package/dist/core/emit/expressions.d.ts +23 -0
- package/dist/core/emit/expressions.d.ts.map +1 -0
- package/dist/core/emit/expressions.js +253 -0
- package/dist/core/emit/expressions.js.map +1 -0
- package/dist/core/emit/functions.d.ts +30 -0
- package/dist/core/emit/functions.d.ts.map +1 -0
- package/dist/core/emit/functions.js +171 -0
- package/dist/core/emit/functions.js.map +1 -0
- package/dist/core/emit/gaps.d.ts +34 -0
- package/dist/core/emit/gaps.d.ts.map +1 -0
- package/dist/core/emit/gaps.js +16 -0
- package/dist/core/emit/gaps.js.map +1 -0
- package/dist/core/emit/index.d.ts +29 -0
- package/dist/core/emit/index.d.ts.map +1 -0
- package/dist/core/emit/index.js +23 -0
- package/dist/core/emit/index.js.map +1 -0
- package/dist/core/emit/inputs.d.ts +47 -0
- package/dist/core/emit/inputs.d.ts.map +1 -0
- package/dist/core/emit/inputs.js +150 -0
- package/dist/core/emit/inputs.js.map +1 -0
- package/dist/core/emit/layout.d.ts +73 -0
- package/dist/core/emit/layout.d.ts.map +1 -0
- package/dist/core/emit/layout.js +126 -0
- package/dist/core/emit/layout.js.map +1 -0
- package/dist/core/emit/meta.d.ts +14 -0
- package/dist/core/emit/meta.d.ts.map +1 -0
- package/dist/core/emit/meta.js +68 -0
- package/dist/core/emit/meta.js.map +1 -0
- package/dist/core/emit/opcodes.d.ts +28 -0
- package/dist/core/emit/opcodes.d.ts.map +1 -0
- package/dist/core/emit/opcodes.js +137 -0
- package/dist/core/emit/opcodes.js.map +1 -0
- package/dist/core/emit/outputs.d.ts +67 -0
- package/dist/core/emit/outputs.d.ts.map +1 -0
- package/dist/core/emit/outputs.js +293 -0
- package/dist/core/emit/outputs.js.map +1 -0
- package/dist/core/emit/pool.d.ts +33 -0
- package/dist/core/emit/pool.d.ts.map +1 -0
- package/dist/core/emit/pool.js +79 -0
- package/dist/core/emit/pool.js.map +1 -0
- package/dist/core/emit/program.d.ts +333 -0
- package/dist/core/emit/program.d.ts.map +1 -0
- package/dist/core/emit/program.js +15 -0
- package/dist/core/emit/program.js.map +1 -0
- package/dist/core/emit/registers.d.ts +35 -0
- package/dist/core/emit/registers.d.ts.map +1 -0
- package/dist/core/emit/registers.js +170 -0
- package/dist/core/emit/registers.js.map +1 -0
- package/dist/core/emit/request-scope.d.ts +36 -0
- package/dist/core/emit/request-scope.d.ts.map +1 -0
- package/dist/core/emit/request-scope.js +41 -0
- package/dist/core/emit/request-scope.js.map +1 -0
- package/dist/core/emit/requests.d.ts +69 -0
- package/dist/core/emit/requests.d.ts.map +1 -0
- package/dist/core/emit/requests.js +230 -0
- package/dist/core/emit/requests.js.map +1 -0
- package/dist/core/emit/requires.d.ts +4 -0
- package/dist/core/emit/requires.d.ts.map +1 -0
- package/dist/core/emit/requires.js +71 -0
- package/dist/core/emit/requires.js.map +1 -0
- package/dist/core/emit/sha256.d.ts +24 -0
- package/dist/core/emit/sha256.d.ts.map +1 -0
- package/dist/core/emit/sha256.js +109 -0
- package/dist/core/emit/sha256.js.map +1 -0
- package/dist/core/emit/statements.d.ts +20 -0
- package/dist/core/emit/statements.d.ts.map +1 -0
- package/dist/core/emit/statements.js +393 -0
- package/dist/core/emit/statements.js.map +1 -0
- package/dist/core/emit/values.d.ts +80 -0
- package/dist/core/emit/values.d.ts.map +1 -0
- package/dist/core/emit/values.js +242 -0
- package/dist/core/emit/values.js.map +1 -0
- package/dist/core/engine/alerts.d.ts +66 -0
- package/dist/core/engine/alerts.d.ts.map +1 -0
- package/dist/core/engine/alerts.js +119 -0
- package/dist/core/engine/alerts.js.map +1 -0
- package/dist/core/engine/arithmetic.d.ts +82 -0
- package/dist/core/engine/arithmetic.d.ts.map +1 -0
- package/dist/core/engine/arithmetic.js +141 -0
- package/dist/core/engine/arithmetic.js.map +1 -0
- package/dist/core/engine/bars.d.ts +95 -0
- package/dist/core/engine/bars.d.ts.map +1 -0
- package/dist/core/engine/bars.js +133 -0
- package/dist/core/engine/bars.js.map +1 -0
- package/dist/core/engine/budget.d.ts +162 -0
- package/dist/core/engine/budget.d.ts.map +1 -0
- package/dist/core/engine/budget.js +188 -0
- package/dist/core/engine/budget.js.map +1 -0
- package/dist/core/engine/channels.d.ts +106 -0
- package/dist/core/engine/channels.d.ts.map +1 -0
- package/dist/core/engine/channels.js +99 -0
- package/dist/core/engine/channels.js.map +1 -0
- package/dist/core/engine/drawings.d.ts +64 -0
- package/dist/core/engine/drawings.d.ts.map +1 -0
- package/dist/core/engine/drawings.js +67 -0
- package/dist/core/engine/drawings.js.map +1 -0
- package/dist/core/engine/engine.d.ts +140 -0
- package/dist/core/engine/engine.d.ts.map +1 -0
- package/dist/core/engine/engine.js +405 -0
- package/dist/core/engine/engine.js.map +1 -0
- package/dist/core/engine/errors.d.ts +64 -0
- package/dist/core/engine/errors.d.ts.map +1 -0
- package/dist/core/engine/errors.js +63 -0
- package/dist/core/engine/errors.js.map +1 -0
- package/dist/core/engine/frames.d.ts +48 -0
- package/dist/core/engine/frames.d.ts.map +1 -0
- package/dist/core/engine/frames.js +41 -0
- package/dist/core/engine/frames.js.map +1 -0
- package/dist/core/engine/grids.d.ts +25 -0
- package/dist/core/engine/grids.d.ts.map +1 -0
- package/dist/core/engine/grids.js +77 -0
- package/dist/core/engine/grids.js.map +1 -0
- package/dist/core/engine/guard.d.ts +4 -0
- package/dist/core/engine/guard.d.ts.map +1 -0
- package/dist/core/engine/guard.js +46 -0
- package/dist/core/engine/guard.js.map +1 -0
- package/dist/core/engine/host.d.ts +219 -0
- package/dist/core/engine/host.d.ts.map +1 -0
- package/dist/core/engine/host.js +38 -0
- package/dist/core/engine/host.js.map +1 -0
- package/dist/core/engine/index.d.ts +49 -0
- package/dist/core/engine/index.d.ts.map +1 -0
- package/dist/core/engine/index.js +33 -0
- package/dist/core/engine/index.js.map +1 -0
- package/dist/core/engine/inputs.d.ts +77 -0
- package/dist/core/engine/inputs.d.ts.map +1 -0
- package/dist/core/engine/inputs.js +205 -0
- package/dist/core/engine/inputs.js.map +1 -0
- package/dist/core/engine/ledger/call.d.ts +63 -0
- package/dist/core/engine/ledger/call.d.ts.map +1 -0
- package/dist/core/engine/ledger/call.js +136 -0
- package/dist/core/engine/ledger/call.js.map +1 -0
- package/dist/core/engine/ledger/closable.d.ts +155 -0
- package/dist/core/engine/ledger/closable.d.ts.map +1 -0
- package/dist/core/engine/ledger/closable.js +173 -0
- package/dist/core/engine/ledger/closable.js.map +1 -0
- package/dist/core/engine/ledger/holdings.d.ts +194 -0
- package/dist/core/engine/ledger/holdings.d.ts.map +1 -0
- package/dist/core/engine/ledger/holdings.js +237 -0
- package/dist/core/engine/ledger/holdings.js.map +1 -0
- package/dist/core/engine/ledger/index.d.ts +19 -0
- package/dist/core/engine/ledger/index.d.ts.map +1 -0
- package/dist/core/engine/ledger/index.js +2 -0
- package/dist/core/engine/ledger/index.js.map +1 -0
- package/dist/core/engine/ledger/intent.d.ts +106 -0
- package/dist/core/engine/ledger/intent.d.ts.map +1 -0
- package/dist/core/engine/ledger/intent.js +21 -0
- package/dist/core/engine/ledger/intent.js.map +1 -0
- package/dist/core/engine/ledger/ledger.d.ts +143 -0
- package/dist/core/engine/ledger/ledger.d.ts.map +1 -0
- package/dist/core/engine/ledger/ledger.js +237 -0
- package/dist/core/engine/ledger/ledger.js.map +1 -0
- package/dist/core/engine/ledger/place.d.ts +75 -0
- package/dist/core/engine/ledger/place.d.ts.map +1 -0
- package/dist/core/engine/ledger/place.js +174 -0
- package/dist/core/engine/ledger/place.js.map +1 -0
- package/dist/core/engine/ledger/positions.d.ts +68 -0
- package/dist/core/engine/ledger/positions.d.ts.map +1 -0
- package/dist/core/engine/ledger/positions.js +114 -0
- package/dist/core/engine/ledger/positions.js.map +1 -0
- package/dist/core/engine/ledger/refuse.d.ts +43 -0
- package/dist/core/engine/ledger/refuse.d.ts.map +1 -0
- package/dist/core/engine/ledger/refuse.js +329 -0
- package/dist/core/engine/ledger/refuse.js.map +1 -0
- package/dist/core/engine/ledger/row.d.ts +176 -0
- package/dist/core/engine/ledger/row.d.ts.map +1 -0
- package/dist/core/engine/ledger/row.js +169 -0
- package/dist/core/engine/ledger/row.js.map +1 -0
- package/dist/core/engine/ledger/sizing.d.ts +142 -0
- package/dist/core/engine/ledger/sizing.d.ts.map +1 -0
- package/dist/core/engine/ledger/sizing.js +223 -0
- package/dist/core/engine/ledger/sizing.js.map +1 -0
- package/dist/core/engine/library/arrays.d.ts +14 -0
- package/dist/core/engine/library/arrays.d.ts.map +1 -0
- package/dist/core/engine/library/arrays.js +285 -0
- package/dist/core/engine/library/arrays.js.map +1 -0
- package/dist/core/engine/library/averages.d.ts +9 -0
- package/dist/core/engine/library/averages.d.ts.map +1 -0
- package/dist/core/engine/library/averages.js +41 -0
- package/dist/core/engine/library/averages.js.map +1 -0
- package/dist/core/engine/library/binding.d.ts +230 -0
- package/dist/core/engine/library/binding.d.ts.map +1 -0
- package/dist/core/engine/library/binding.js +109 -0
- package/dist/core/engine/library/binding.js.map +1 -0
- package/dist/core/engine/library/chart.d.ts +3 -0
- package/dist/core/engine/library/chart.d.ts.map +1 -0
- package/dist/core/engine/library/chart.js +83 -0
- package/dist/core/engine/library/chart.js.map +1 -0
- package/dist/core/engine/library/colours.d.ts +26 -0
- package/dist/core/engine/library/colours.d.ts.map +1 -0
- package/dist/core/engine/library/colours.js +81 -0
- package/dist/core/engine/library/colours.js.map +1 -0
- package/dist/core/engine/library/dates.d.ts +3 -0
- package/dist/core/engine/library/dates.d.ts.map +1 -0
- package/dist/core/engine/library/dates.js +75 -0
- package/dist/core/engine/library/dates.js.map +1 -0
- package/dist/core/engine/library/index.d.ts +13 -0
- package/dist/core/engine/library/index.d.ts.map +1 -0
- package/dist/core/engine/library/index.js +86 -0
- package/dist/core/engine/library/index.js.map +1 -0
- package/dist/core/engine/library/maths.d.ts +3 -0
- package/dist/core/engine/library/maths.d.ts.map +1 -0
- package/dist/core/engine/library/maths.js +89 -0
- package/dist/core/engine/library/maths.js.map +1 -0
- package/dist/core/engine/library/objects.d.ts +3 -0
- package/dist/core/engine/library/objects.d.ts.map +1 -0
- package/dist/core/engine/library/objects.js +199 -0
- package/dist/core/engine/library/objects.js.map +1 -0
- package/dist/core/engine/library/oscillators.d.ts +3 -0
- package/dist/core/engine/library/oscillators.d.ts.map +1 -0
- package/dist/core/engine/library/oscillators.js +29 -0
- package/dist/core/engine/library/oscillators.js.map +1 -0
- package/dist/core/engine/library/ranges.d.ts +3 -0
- package/dist/core/engine/library/ranges.d.ts.map +1 -0
- package/dist/core/engine/library/ranges.js +23 -0
- package/dist/core/engine/library/ranges.js.map +1 -0
- package/dist/core/engine/library/series.d.ts +3 -0
- package/dist/core/engine/library/series.d.ts.map +1 -0
- package/dist/core/engine/library/series.js +46 -0
- package/dist/core/engine/library/series.js.map +1 -0
- package/dist/core/engine/library/state.d.ts +35 -0
- package/dist/core/engine/library/state.d.ts.map +1 -0
- package/dist/core/engine/library/state.js +19 -0
- package/dist/core/engine/library/state.js.map +1 -0
- package/dist/core/engine/library/studies.d.ts +3 -0
- package/dist/core/engine/library/studies.d.ts.map +1 -0
- package/dist/core/engine/library/studies.js +35 -0
- package/dist/core/engine/library/studies.js.map +1 -0
- package/dist/core/engine/library/text.d.ts +6 -0
- package/dist/core/engine/library/text.d.ts.map +1 -0
- package/dist/core/engine/library/text.js +280 -0
- package/dist/core/engine/library/text.js.map +1 -0
- package/dist/core/engine/library/trend.d.ts +3 -0
- package/dist/core/engine/library/trend.d.ts.map +1 -0
- package/dist/core/engine/library/trend.js +29 -0
- package/dist/core/engine/library/trend.js.map +1 -0
- package/dist/core/engine/library/volume.d.ts +3 -0
- package/dist/core/engine/library/volume.d.ts.map +1 -0
- package/dist/core/engine/library/volume.js +51 -0
- package/dist/core/engine/library/volume.js.map +1 -0
- package/dist/core/engine/load.d.ts +45 -0
- package/dist/core/engine/load.d.ts.map +1 -0
- package/dist/core/engine/load.js +60 -0
- package/dist/core/engine/load.js.map +1 -0
- package/dist/core/engine/machine.d.ts +107 -0
- package/dist/core/engine/machine.d.ts.map +1 -0
- package/dist/core/engine/machine.js +337 -0
- package/dist/core/engine/machine.js.map +1 -0
- package/dist/core/engine/memory.d.ts +60 -0
- package/dist/core/engine/memory.d.ts.map +1 -0
- package/dist/core/engine/memory.js +92 -0
- package/dist/core/engine/memory.js.map +1 -0
- package/dist/core/engine/operations.d.ts +62 -0
- package/dist/core/engine/operations.d.ts.map +1 -0
- package/dist/core/engine/operations.js +149 -0
- package/dist/core/engine/operations.js.map +1 -0
- package/dist/core/engine/orders.d.ts +56 -0
- package/dist/core/engine/orders.d.ts.map +1 -0
- package/dist/core/engine/orders.js +83 -0
- package/dist/core/engine/orders.js.map +1 -0
- package/dist/core/engine/registers.d.ts +50 -0
- package/dist/core/engine/registers.d.ts.map +1 -0
- package/dist/core/engine/registers.js +85 -0
- package/dist/core/engine/registers.js.map +1 -0
- package/dist/core/engine/request-body.d.ts +138 -0
- package/dist/core/engine/request-body.d.ts.map +1 -0
- package/dist/core/engine/request-body.js +227 -0
- package/dist/core/engine/request-body.js.map +1 -0
- package/dist/core/engine/request-plan.d.ts +79 -0
- package/dist/core/engine/request-plan.d.ts.map +1 -0
- package/dist/core/engine/request-plan.js +228 -0
- package/dist/core/engine/request-plan.js.map +1 -0
- package/dist/core/engine/requests.d.ts +105 -0
- package/dist/core/engine/requests.d.ts.map +1 -0
- package/dist/core/engine/requests.js +260 -0
- package/dist/core/engine/requests.js.map +1 -0
- package/dist/core/engine/results.d.ts +40 -0
- package/dist/core/engine/results.d.ts.map +1 -0
- package/dist/core/engine/results.js +2 -0
- package/dist/core/engine/results.js.map +1 -0
- package/dist/core/engine/series.d.ts +61 -0
- package/dist/core/engine/series.d.ts.map +1 -0
- package/dist/core/engine/series.js +41 -0
- package/dist/core/engine/series.js.map +1 -0
- package/dist/core/engine/session/hours.d.ts +49 -0
- package/dist/core/engine/session/hours.d.ts.map +1 -0
- package/dist/core/engine/session/hours.js +31 -0
- package/dist/core/engine/session/hours.js.map +1 -0
- package/dist/core/engine/session/index.d.ts +17 -0
- package/dist/core/engine/session/index.d.ts.map +1 -0
- package/dist/core/engine/session/index.js +3 -0
- package/dist/core/engine/session/index.js.map +1 -0
- package/dist/core/engine/session/record.d.ts +56 -0
- package/dist/core/engine/session/record.d.ts.map +1 -0
- package/dist/core/engine/session/record.js +165 -0
- package/dist/core/engine/session/record.js.map +1 -0
- package/dist/core/engine/session/spec.d.ts +19 -0
- package/dist/core/engine/session/spec.d.ts.map +1 -0
- package/dist/core/engine/session/spec.js +31 -0
- package/dist/core/engine/session/spec.js.map +1 -0
- package/dist/core/engine/timeframe.d.ts +59 -0
- package/dist/core/engine/timeframe.d.ts.map +1 -0
- package/dist/core/engine/timeframe.js +140 -0
- package/dist/core/engine/timeframe.js.map +1 -0
- package/dist/core/engine/types.d.ts +15 -0
- package/dist/core/engine/types.d.ts.map +1 -0
- package/dist/core/engine/types.js +2 -0
- package/dist/core/engine/types.js.map +1 -0
- package/dist/core/engine/values/heap.d.ts +134 -0
- package/dist/core/engine/values/heap.d.ts.map +1 -0
- package/dist/core/engine/values/heap.js +230 -0
- package/dist/core/engine/values/heap.js.map +1 -0
- package/dist/core/engine/values/index.d.ts +13 -0
- package/dist/core/engine/values/index.d.ts.map +1 -0
- package/dist/core/engine/values/index.js +3 -0
- package/dist/core/engine/values/index.js.map +1 -0
- package/dist/core/engine/values/value.d.ts +82 -0
- package/dist/core/engine/values/value.d.ts.map +1 -0
- package/dist/core/engine/values/value.js +134 -0
- package/dist/core/engine/values/value.js.map +1 -0
- package/dist/core/engine/verify-budgets.d.ts +35 -0
- package/dist/core/engine/verify-budgets.d.ts.map +1 -0
- package/dist/core/engine/verify-budgets.js +172 -0
- package/dist/core/engine/verify-budgets.js.map +1 -0
- package/dist/core/engine/verify-code.d.ts +32 -0
- package/dist/core/engine/verify-code.d.ts.map +1 -0
- package/dist/core/engine/verify-code.js +278 -0
- package/dist/core/engine/verify-code.js.map +1 -0
- package/dist/core/engine/verify-requests.d.ts +44 -0
- package/dist/core/engine/verify-requests.d.ts.map +1 -0
- package/dist/core/engine/verify-requests.js +220 -0
- package/dist/core/engine/verify-requests.js.map +1 -0
- package/dist/core/engine/verify-shape.d.ts +46 -0
- package/dist/core/engine/verify-shape.d.ts.map +1 -0
- package/dist/core/engine/verify-shape.js +147 -0
- package/dist/core/engine/verify-shape.js.map +1 -0
- package/dist/core/engine/verify-tables.d.ts +19 -0
- package/dist/core/engine/verify-tables.d.ts.map +1 -0
- package/dist/core/engine/verify-tables.js +171 -0
- package/dist/core/engine/verify-tables.js.map +1 -0
- package/dist/core/engine/verify.d.ts +19 -0
- package/dist/core/engine/verify.d.ts.map +1 -0
- package/dist/core/engine/verify.js +309 -0
- package/dist/core/engine/verify.js.map +1 -0
- package/dist/core/index.d.ts +62 -6
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +49 -6
- package/dist/core/index.js.map +1 -1
- package/dist/core/parse/expressions.js +1 -1
- package/dist/core/parse/expressions.js.map +1 -1
- package/dist/core/parse/names.d.ts +7 -1
- package/dist/core/parse/names.d.ts.map +1 -1
- package/dist/core/parse/names.js +28 -2
- package/dist/core/parse/names.js.map +1 -1
- package/dist/core/stdlib/averages/exponential.d.ts +51 -0
- package/dist/core/stdlib/averages/exponential.d.ts.map +1 -0
- package/dist/core/stdlib/averages/exponential.js +72 -0
- package/dist/core/stdlib/averages/exponential.js.map +1 -0
- package/dist/core/stdlib/averages/index.d.ts +7 -0
- package/dist/core/stdlib/averages/index.d.ts.map +1 -0
- package/dist/core/stdlib/averages/index.js +5 -0
- package/dist/core/stdlib/averages/index.js.map +1 -0
- package/dist/core/stdlib/averages/select.d.ts +35 -0
- package/dist/core/stdlib/averages/select.d.ts.map +1 -0
- package/dist/core/stdlib/averages/select.js +43 -0
- package/dist/core/stdlib/averages/select.js.map +1 -0
- package/dist/core/stdlib/averages/shaped.d.ts +61 -0
- package/dist/core/stdlib/averages/shaped.d.ts.map +1 -0
- package/dist/core/stdlib/averages/shaped.js +126 -0
- package/dist/core/stdlib/averages/shaped.js.map +1 -0
- package/dist/core/stdlib/averages/simple.d.ts +58 -0
- package/dist/core/stdlib/averages/simple.d.ts.map +1 -0
- package/dist/core/stdlib/averages/simple.js +92 -0
- package/dist/core/stdlib/averages/simple.js.map +1 -0
- package/dist/core/stdlib/calendar/civil.d.ts +56 -0
- package/dist/core/stdlib/calendar/civil.d.ts.map +1 -0
- package/dist/core/stdlib/calendar/civil.js +70 -0
- package/dist/core/stdlib/calendar/civil.js.map +1 -0
- package/dist/core/stdlib/calendar/fields.d.ts +36 -0
- package/dist/core/stdlib/calendar/fields.d.ts.map +1 -0
- package/dist/core/stdlib/calendar/fields.js +93 -0
- package/dist/core/stdlib/calendar/fields.js.map +1 -0
- package/dist/core/stdlib/calendar/format.d.ts +19 -0
- package/dist/core/stdlib/calendar/format.d.ts.map +1 -0
- package/dist/core/stdlib/calendar/format.js +51 -0
- package/dist/core/stdlib/calendar/format.js.map +1 -0
- package/dist/core/stdlib/calendar/index.d.ts +7 -0
- package/dist/core/stdlib/calendar/index.d.ts.map +1 -0
- package/dist/core/stdlib/calendar/index.js +5 -0
- package/dist/core/stdlib/calendar/index.js.map +1 -0
- package/dist/core/stdlib/calendar/zone.d.ts +53 -0
- package/dist/core/stdlib/calendar/zone.d.ts.map +1 -0
- package/dist/core/stdlib/calendar/zone.js +138 -0
- package/dist/core/stdlib/calendar/zone.js.map +1 -0
- package/dist/core/stdlib/index.d.ts +57 -0
- package/dist/core/stdlib/index.d.ts.map +1 -0
- package/dist/core/stdlib/index.js +51 -0
- package/dist/core/stdlib/index.js.map +1 -0
- package/dist/core/stdlib/maths/arithmetic.d.ts +38 -0
- package/dist/core/stdlib/maths/arithmetic.d.ts.map +1 -0
- package/dist/core/stdlib/maths/arithmetic.js +66 -0
- package/dist/core/stdlib/maths/arithmetic.js.map +1 -0
- package/dist/core/stdlib/maths/elementary.d.ts +65 -0
- package/dist/core/stdlib/maths/elementary.d.ts.map +1 -0
- package/dist/core/stdlib/maths/elementary.js +93 -0
- package/dist/core/stdlib/maths/elementary.js.map +1 -0
- package/dist/core/stdlib/maths/index.d.ts +4 -0
- package/dist/core/stdlib/maths/index.d.ts.map +1 -0
- package/dist/core/stdlib/maths/index.js +4 -0
- package/dist/core/stdlib/maths/index.js.map +1 -0
- package/dist/core/stdlib/maths/rounding.d.ts +43 -0
- package/dist/core/stdlib/maths/rounding.d.ts.map +1 -0
- package/dist/core/stdlib/maths/rounding.js +62 -0
- package/dist/core/stdlib/maths/rounding.js.map +1 -0
- package/dist/core/stdlib/momentum/convergence.d.ts +36 -0
- package/dist/core/stdlib/momentum/convergence.d.ts.map +1 -0
- package/dist/core/stdlib/momentum/convergence.js +48 -0
- package/dist/core/stdlib/momentum/convergence.js.map +1 -0
- package/dist/core/stdlib/momentum/index.d.ts +6 -0
- package/dist/core/stdlib/momentum/index.d.ts.map +1 -0
- package/dist/core/stdlib/momentum/index.js +6 -0
- package/dist/core/stdlib/momentum/index.js.map +1 -0
- package/dist/core/stdlib/momentum/pressure.d.ts +43 -0
- package/dist/core/stdlib/momentum/pressure.d.ts.map +1 -0
- package/dist/core/stdlib/momentum/pressure.js +103 -0
- package/dist/core/stdlib/momentum/pressure.js.map +1 -0
- package/dist/core/stdlib/momentum/rates.d.ts +74 -0
- package/dist/core/stdlib/momentum/rates.d.ts.map +1 -0
- package/dist/core/stdlib/momentum/rates.js +134 -0
- package/dist/core/stdlib/momentum/rates.js.map +1 -0
- package/dist/core/stdlib/momentum/rsi.d.ts +21 -0
- package/dist/core/stdlib/momentum/rsi.d.ts.map +1 -0
- package/dist/core/stdlib/momentum/rsi.js +30 -0
- package/dist/core/stdlib/momentum/rsi.js.map +1 -0
- package/dist/core/stdlib/momentum/stochastic.d.ts +44 -0
- package/dist/core/stdlib/momentum/stochastic.d.ts.map +1 -0
- package/dist/core/stdlib/momentum/stochastic.js +97 -0
- package/dist/core/stdlib/momentum/stochastic.js.map +1 -0
- package/dist/core/stdlib/series/changes.d.ts +59 -0
- package/dist/core/stdlib/series/changes.d.ts.map +1 -0
- package/dist/core/stdlib/series/changes.js +129 -0
- package/dist/core/stdlib/series/changes.js.map +1 -0
- package/dist/core/stdlib/series/conditions.d.ts +34 -0
- package/dist/core/stdlib/series/conditions.d.ts.map +1 -0
- package/dist/core/stdlib/series/conditions.js +52 -0
- package/dist/core/stdlib/series/conditions.js.map +1 -0
- package/dist/core/stdlib/series/extremes.d.ts +29 -0
- package/dist/core/stdlib/series/extremes.d.ts.map +1 -0
- package/dist/core/stdlib/series/extremes.js +62 -0
- package/dist/core/stdlib/series/extremes.js.map +1 -0
- package/dist/core/stdlib/series/index.d.ts +9 -0
- package/dist/core/stdlib/series/index.d.ts.map +1 -0
- package/dist/core/stdlib/series/index.js +7 -0
- package/dist/core/stdlib/series/index.js.map +1 -0
- package/dist/core/stdlib/series/pivots.d.ts +25 -0
- package/dist/core/stdlib/series/pivots.d.ts.map +1 -0
- package/dist/core/stdlib/series/pivots.js +42 -0
- package/dist/core/stdlib/series/pivots.js.map +1 -0
- package/dist/core/stdlib/series/statistics.d.ts +64 -0
- package/dist/core/stdlib/series/statistics.d.ts.map +1 -0
- package/dist/core/stdlib/series/statistics.js +148 -0
- package/dist/core/stdlib/series/statistics.js.map +1 -0
- package/dist/core/stdlib/series/totals.d.ts +68 -0
- package/dist/core/stdlib/series/totals.d.ts.map +1 -0
- package/dist/core/stdlib/series/totals.js +115 -0
- package/dist/core/stdlib/series/totals.js.map +1 -0
- package/dist/core/stdlib/trend/directional.d.ts +69 -0
- package/dist/core/stdlib/trend/directional.d.ts.map +1 -0
- package/dist/core/stdlib/trend/directional.js +151 -0
- package/dist/core/stdlib/trend/directional.js.map +1 -0
- package/dist/core/stdlib/trend/index.d.ts +4 -0
- package/dist/core/stdlib/trend/index.d.ts.map +1 -0
- package/dist/core/stdlib/trend/index.js +4 -0
- package/dist/core/stdlib/trend/index.js.map +1 -0
- package/dist/core/stdlib/trend/psar.d.ts +33 -0
- package/dist/core/stdlib/trend/psar.d.ts.map +1 -0
- package/dist/core/stdlib/trend/psar.js +86 -0
- package/dist/core/stdlib/trend/psar.js.map +1 -0
- package/dist/core/stdlib/trend/supertrend.d.ts +30 -0
- package/dist/core/stdlib/trend/supertrend.d.ts.map +1 -0
- package/dist/core/stdlib/trend/supertrend.js +65 -0
- package/dist/core/stdlib/trend/supertrend.js.map +1 -0
- package/dist/core/stdlib/values/bar.d.ts +39 -0
- package/dist/core/stdlib/values/bar.d.ts.map +1 -0
- package/dist/core/stdlib/values/bar.js +33 -0
- package/dist/core/stdlib/values/bar.js.map +1 -0
- package/dist/core/stdlib/values/index.d.ts +11 -0
- package/dist/core/stdlib/values/index.d.ts.map +1 -0
- package/dist/core/stdlib/values/index.js +6 -0
- package/dist/core/stdlib/values/index.js.map +1 -0
- package/dist/core/stdlib/values/lookback.d.ts +83 -0
- package/dist/core/stdlib/values/lookback.d.ts.map +1 -0
- package/dist/core/stdlib/values/lookback.js +134 -0
- package/dist/core/stdlib/values/lookback.js.map +1 -0
- package/dist/core/stdlib/values/region.d.ts +55 -0
- package/dist/core/stdlib/values/region.d.ts.map +1 -0
- package/dist/core/stdlib/values/region.js +73 -0
- package/dist/core/stdlib/values/region.js.map +1 -0
- package/dist/core/stdlib/values/tail.d.ts +44 -0
- package/dist/core/stdlib/values/tail.d.ts.map +1 -0
- package/dist/core/stdlib/values/tail.js +23 -0
- package/dist/core/stdlib/values/tail.js.map +1 -0
- package/dist/core/stdlib/values/value.d.ts +64 -0
- package/dist/core/stdlib/values/value.d.ts.map +1 -0
- package/dist/core/stdlib/values/value.js +61 -0
- package/dist/core/stdlib/values/value.js.map +1 -0
- package/dist/core/stdlib/volatility/bands.d.ts +50 -0
- package/dist/core/stdlib/volatility/bands.d.ts.map +1 -0
- package/dist/core/stdlib/volatility/bands.js +101 -0
- package/dist/core/stdlib/volatility/bands.js.map +1 -0
- package/dist/core/stdlib/volatility/deviation.d.ts +43 -0
- package/dist/core/stdlib/volatility/deviation.d.ts.map +1 -0
- package/dist/core/stdlib/volatility/deviation.js +75 -0
- package/dist/core/stdlib/volatility/deviation.js.map +1 -0
- package/dist/core/stdlib/volatility/index.d.ts +6 -0
- package/dist/core/stdlib/volatility/index.d.ts.map +1 -0
- package/dist/core/stdlib/volatility/index.js +5 -0
- package/dist/core/stdlib/volatility/index.js.map +1 -0
- package/dist/core/stdlib/volatility/measures.d.ts +48 -0
- package/dist/core/stdlib/volatility/measures.d.ts.map +1 -0
- package/dist/core/stdlib/volatility/measures.js +73 -0
- package/dist/core/stdlib/volatility/measures.js.map +1 -0
- package/dist/core/stdlib/volatility/range.d.ts +69 -0
- package/dist/core/stdlib/volatility/range.d.ts.map +1 -0
- package/dist/core/stdlib/volatility/range.js +86 -0
- package/dist/core/stdlib/volatility/range.js.map +1 -0
- package/dist/core/stdlib/volume/accumulation.d.ts +61 -0
- package/dist/core/stdlib/volume/accumulation.d.ts.map +1 -0
- package/dist/core/stdlib/volume/accumulation.js +127 -0
- package/dist/core/stdlib/volume/accumulation.js.map +1 -0
- package/dist/core/stdlib/volume/flow.d.ts +60 -0
- package/dist/core/stdlib/volume/flow.d.ts.map +1 -0
- package/dist/core/stdlib/volume/flow.js +125 -0
- package/dist/core/stdlib/volume/flow.js.map +1 -0
- package/dist/core/stdlib/volume/index.d.ts +5 -0
- package/dist/core/stdlib/volume/index.d.ts.map +1 -0
- package/dist/core/stdlib/volume/index.js +4 -0
- package/dist/core/stdlib/volume/index.js.map +1 -0
- package/dist/core/stdlib/volume/weighted.d.ts +52 -0
- package/dist/core/stdlib/volume/weighted.d.ts.map +1 -0
- package/dist/core/stdlib/volume/weighted.js +64 -0
- package/dist/core/stdlib/volume/weighted.js.map +1 -0
- package/dist/core/version/index.d.ts +2 -0
- package/dist/core/version/index.d.ts.map +1 -0
- package/dist/core/version/index.js +2 -0
- package/dist/core/version/index.js.map +1 -0
- package/dist/core/version/version.generated.d.ts +10 -0
- package/dist/core/version/version.generated.d.ts.map +1 -0
- package/dist/core/version/version.generated.js +14 -0
- package/dist/core/version/version.generated.js.map +1 -0
- package/package.json +88 -52
- package/spec/errors.json +3403 -3204
- package/src/adapters/charts/alerts.ts +116 -0
- package/src/adapters/charts/bars.ts +63 -0
- package/src/adapters/charts/candles.ts +137 -0
- package/src/adapters/charts/colours.ts +113 -0
- package/src/adapters/charts/columns.ts +99 -0
- package/src/adapters/charts/contract.ts +320 -0
- package/src/adapters/charts/descriptor.ts +199 -0
- package/src/adapters/charts/drawings.ts +213 -0
- package/src/adapters/charts/errors.ts +45 -0
- package/src/adapters/charts/fields.ts +74 -0
- package/src/adapters/charts/fills.ts +71 -0
- package/src/adapters/charts/index.ts +78 -0
- package/src/adapters/charts/levels.ts +92 -0
- package/src/adapters/charts/markers.ts +119 -0
- package/src/adapters/charts/paint.ts +101 -0
- package/src/adapters/charts/plots.ts +185 -0
- package/src/adapters/charts/produced.ts +68 -0
- package/src/adapters/charts/requests.ts +357 -0
- package/src/adapters/charts/run.ts +327 -0
- package/src/adapters/charts/settings.ts +273 -0
- package/src/adapters/charts/surfaces.ts +238 -0
- package/src/adapters/charts/tables.ts +155 -0
- package/src/core/catalogue/catalogue.generated.ts +17 -9
- package/src/core/catalogue/values.generated.ts +8 -0
- package/src/core/check/arguments.ts +126 -0
- package/src/core/check/call-sites.ts +385 -0
- package/src/core/check/call-warmup.ts +121 -0
- package/src/core/check/calls.ts +412 -0
- package/src/core/check/check.ts +183 -0
- package/src/core/check/checked.ts +228 -0
- package/src/core/check/checker.ts +393 -0
- package/src/core/check/conditional.ts +143 -0
- package/src/core/check/constant.ts +127 -0
- package/src/core/check/declaration.ts +230 -0
- package/src/core/check/expressions.ts +471 -0
- package/src/core/check/functions.ts +283 -0
- package/src/core/check/handles.ts +75 -0
- package/src/core/check/index.ts +67 -0
- package/src/core/check/library-bars.ts +194 -0
- package/src/core/check/library-orders.ts +290 -0
- package/src/core/check/library-output.ts +241 -0
- package/src/core/check/library-series.ts +457 -0
- package/src/core/check/library.ts +374 -0
- package/src/core/check/literals.ts +35 -0
- package/src/core/check/outputs.ts +152 -0
- package/src/core/check/statements.ts +465 -0
- package/src/core/check/suggest.ts +63 -0
- package/src/core/check/surface.ts +115 -0
- package/src/core/check/tags.ts +94 -0
- package/src/core/check/types.ts +260 -0
- package/src/core/check/warmup.ts +100 -0
- package/src/core/diagnostics/collector.ts +27 -1
- package/src/core/emit/calls.ts +415 -0
- package/src/core/emit/canonical.ts +81 -0
- package/src/core/emit/channels.ts +144 -0
- package/src/core/emit/code.ts +155 -0
- package/src/core/emit/colours.ts +75 -0
- package/src/core/emit/context.ts +461 -0
- package/src/core/emit/defaults.ts +150 -0
- package/src/core/emit/emit.ts +313 -0
- package/src/core/emit/events.ts +141 -0
- package/src/core/emit/expressions.ts +292 -0
- package/src/core/emit/functions.ts +195 -0
- package/src/core/emit/gaps.ts +44 -0
- package/src/core/emit/index.ts +74 -0
- package/src/core/emit/inputs.ts +179 -0
- package/src/core/emit/layout.ts +165 -0
- package/src/core/emit/meta.ts +104 -0
- package/src/core/emit/opcodes.ts +160 -0
- package/src/core/emit/outputs.ts +357 -0
- package/src/core/emit/pool.ts +102 -0
- package/src/core/emit/program.ts +385 -0
- package/src/core/emit/registers.ts +179 -0
- package/src/core/emit/request-scope.ts +52 -0
- package/src/core/emit/requests.ts +258 -0
- package/src/core/emit/requires.ts +91 -0
- package/src/core/emit/sha256.ts +119 -0
- package/src/core/emit/statements.ts +438 -0
- package/src/core/emit/values.ts +284 -0
- package/src/core/engine/alerts.ts +152 -0
- package/src/core/engine/arithmetic.ts +165 -0
- package/src/core/engine/bars.ts +224 -0
- package/src/core/engine/budget.ts +284 -0
- package/src/core/engine/channels.ts +171 -0
- package/src/core/engine/drawings.ts +127 -0
- package/src/core/engine/engine.ts +498 -0
- package/src/core/engine/errors.ts +100 -0
- package/src/core/engine/frames.ts +85 -0
- package/src/core/engine/grids.ts +98 -0
- package/src/core/engine/guard.ts +71 -0
- package/src/core/engine/host.ts +251 -0
- package/src/core/engine/index.ts +93 -0
- package/src/core/engine/inputs.ts +263 -0
- package/src/core/engine/ledger/call.ts +218 -0
- package/src/core/engine/ledger/closable.ts +269 -0
- package/src/core/engine/ledger/holdings.ts +354 -0
- package/src/core/engine/ledger/index.ts +28 -0
- package/src/core/engine/ledger/intent.ts +112 -0
- package/src/core/engine/ledger/ledger.ts +314 -0
- package/src/core/engine/ledger/place.ts +277 -0
- package/src/core/engine/ledger/positions.ts +123 -0
- package/src/core/engine/ledger/refuse.ts +378 -0
- package/src/core/engine/ledger/row.ts +318 -0
- package/src/core/engine/ledger/sizing.ts +292 -0
- package/src/core/engine/library/arrays.ts +316 -0
- package/src/core/engine/library/averages.ts +97 -0
- package/src/core/engine/library/binding.ts +325 -0
- package/src/core/engine/library/chart.ts +115 -0
- package/src/core/engine/library/colours.ts +111 -0
- package/src/core/engine/library/dates.ts +109 -0
- package/src/core/engine/library/index.ts +103 -0
- package/src/core/engine/library/maths.ts +134 -0
- package/src/core/engine/library/objects.ts +265 -0
- package/src/core/engine/library/oscillators.ts +124 -0
- package/src/core/engine/library/ranges.ts +51 -0
- package/src/core/engine/library/series.ts +236 -0
- package/src/core/engine/library/state.ts +47 -0
- package/src/core/engine/library/studies.ts +150 -0
- package/src/core/engine/library/text.ts +303 -0
- package/src/core/engine/library/trend.ts +79 -0
- package/src/core/engine/library/volume.ts +101 -0
- package/src/core/engine/load.ts +104 -0
- package/src/core/engine/machine.ts +446 -0
- package/src/core/engine/memory.ts +129 -0
- package/src/core/engine/operations.ts +171 -0
- package/src/core/engine/orders.ts +121 -0
- package/src/core/engine/registers.ts +104 -0
- package/src/core/engine/request-body.ts +328 -0
- package/src/core/engine/request-plan.ts +270 -0
- package/src/core/engine/requests.ts +382 -0
- package/src/core/engine/results.ts +41 -0
- package/src/core/engine/series.ts +82 -0
- package/src/core/engine/session/hours.ts +86 -0
- package/src/core/engine/session/index.ts +17 -0
- package/src/core/engine/session/record.ts +191 -0
- package/src/core/engine/session/spec.ts +45 -0
- package/src/core/engine/timeframe.ts +161 -0
- package/src/core/engine/types.ts +47 -0
- package/src/core/engine/values/heap.ts +295 -0
- package/src/core/engine/values/index.ts +34 -0
- package/src/core/engine/values/value.ts +158 -0
- package/src/core/engine/verify-budgets.ts +202 -0
- package/src/core/engine/verify-code.ts +332 -0
- package/src/core/engine/verify-requests.ts +255 -0
- package/src/core/engine/verify-shape.ts +164 -0
- package/src/core/engine/verify-tables.ts +176 -0
- package/src/core/engine/verify.ts +341 -0
- package/src/core/index.ts +129 -6
- package/src/core/parse/expressions.ts +1 -1
- package/src/core/parse/functions.ts +109 -109
- package/src/core/parse/names.ts +29 -2
- package/src/core/parse/switches.ts +105 -105
- package/src/core/stdlib/averages/exponential.ts +119 -0
- package/src/core/stdlib/averages/index.ts +45 -0
- package/src/core/stdlib/averages/select.ts +71 -0
- package/src/core/stdlib/averages/shaped.ts +161 -0
- package/src/core/stdlib/averages/simple.ts +139 -0
- package/src/core/stdlib/calendar/civil.ts +89 -0
- package/src/core/stdlib/calendar/fields.ts +124 -0
- package/src/core/stdlib/calendar/format.ts +71 -0
- package/src/core/stdlib/calendar/index.ts +15 -0
- package/src/core/stdlib/calendar/zone.ts +161 -0
- package/src/core/stdlib/index.ts +400 -0
- package/src/core/stdlib/maths/arithmetic.ts +74 -0
- package/src/core/stdlib/maths/elementary.ts +124 -0
- package/src/core/stdlib/maths/index.ts +43 -0
- package/src/core/stdlib/maths/rounding.ts +78 -0
- package/src/core/stdlib/momentum/convergence.ts +82 -0
- package/src/core/stdlib/momentum/index.ts +47 -0
- package/src/core/stdlib/momentum/pressure.ts +141 -0
- package/src/core/stdlib/momentum/rates.ts +188 -0
- package/src/core/stdlib/momentum/rsi.ts +49 -0
- package/src/core/stdlib/momentum/stochastic.ts +147 -0
- package/src/core/stdlib/series/changes.ts +177 -0
- package/src/core/stdlib/series/conditions.ts +74 -0
- package/src/core/stdlib/series/extremes.ts +92 -0
- package/src/core/stdlib/series/index.ts +83 -0
- package/src/core/stdlib/series/pivots.ts +63 -0
- package/src/core/stdlib/series/statistics.ts +207 -0
- package/src/core/stdlib/series/totals.ts +164 -0
- package/src/core/stdlib/trend/directional.ts +196 -0
- package/src/core/stdlib/trend/index.ts +13 -0
- package/src/core/stdlib/trend/psar.ts +131 -0
- package/src/core/stdlib/trend/supertrend.ts +100 -0
- package/src/core/stdlib/values/bar.ts +54 -0
- package/src/core/stdlib/values/index.ts +14 -0
- package/src/core/stdlib/values/lookback.ts +198 -0
- package/src/core/stdlib/values/region.ts +86 -0
- package/src/core/stdlib/values/tail.ts +58 -0
- package/src/core/stdlib/values/value.ts +82 -0
- package/src/core/stdlib/volatility/bands.ts +178 -0
- package/src/core/stdlib/volatility/deviation.ts +111 -0
- package/src/core/stdlib/volatility/index.ts +48 -0
- package/src/core/stdlib/volatility/measures.ts +96 -0
- package/src/core/stdlib/volatility/range.ts +143 -0
- package/src/core/stdlib/volume/accumulation.ts +152 -0
- package/src/core/stdlib/volume/flow.ts +173 -0
- package/src/core/stdlib/volume/index.ts +43 -0
- package/src/core/stdlib/volume/weighted.ts +101 -0
- package/src/core/version/index.ts +1 -0
- package/src/core/version/version.generated.ts +15 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"results.d.ts","sourceRoot":"","sources":["../../../src/core/engine/results.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE/C,8CAA8C;AAC9C,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,2EAA2E;IAC3E,QAAQ,CAAC,OAAO,EAAE,SAAS,KAAK,EAAE,CAAC;IACnC,4EAA4E;IAC5E,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,SAAS,YAAY,EAAE,CAAC;IAC1C;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,SAAS,YAAY,EAAE,CAAC;IACzC,+EAA+E;IAC/E,QAAQ,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,CAAC;IACxC,sDAAsD;IACtD,QAAQ,CAAC,UAAU,EAAE,UAAU,GAAG,SAAS,CAAC;CAC7C;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE,SAAS,SAAS,EAAE,CAAC;IACpC,QAAQ,CAAC,UAAU,EAAE,UAAU,GAAG,SAAS,CAAC;CAC7C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"results.js","sourceRoot":"","sources":["../../../src/core/engine/results.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The two things the engine checks about the bars it is handed,
|
|
3
|
+
* `host-interface.md` 3.5 and conformance item 1.
|
|
4
|
+
*
|
|
5
|
+
* Everything else about a series the engine takes exactly as stated: it does
|
|
6
|
+
* not adjust, round, resample, deduplicate or reorder what it is given (3.2),
|
|
7
|
+
* because each of those is a decision with a market consequence and the party
|
|
8
|
+
* that knows the market makes it. These two are not decisions. They are the
|
|
9
|
+
* cases where the engine cannot compute anything at all and would otherwise
|
|
10
|
+
* compute something anyway.
|
|
11
|
+
*
|
|
12
|
+
* **No bars is not an empty chart, it is an unanswerable question.** The script
|
|
13
|
+
* is the body of the per-bar loop, so a loop over nothing draws nothing, and a
|
|
14
|
+
* pane with nothing in it looks exactly like a study that ran and had nothing
|
|
15
|
+
* to say. One of those is worth a sentence to the user and the other is not,
|
|
16
|
+
* and only the engine can tell them apart.
|
|
17
|
+
*
|
|
18
|
+
* **A repeated or a reversed timestamp is worse, because it computes.** The
|
|
19
|
+
* history operator, warmup and every session test are defined against a time
|
|
20
|
+
* that strictly increases (3.2). Hand over a swapped pair or the same bar twice
|
|
21
|
+
* and none of them means what it says, every number downstream is derived from
|
|
22
|
+
* a history that never happened, and nothing on the chart marks which ones. The
|
|
23
|
+
* wrongness enters at the boundary, which is the one place it cannot be
|
|
24
|
+
* attributed to anything later.
|
|
25
|
+
*
|
|
26
|
+
* **What it costs: one comparison per bar handed over, and no allocation.** The
|
|
27
|
+
* check is on the hand-over rather than on the execution, so a bar that moves
|
|
28
|
+
* and is executed a hundred times is compared once per hand-over rather than
|
|
29
|
+
* once per execution, and a series that is handed over once is walked once. On
|
|
30
|
+
* fifty thousand bars that is fifty thousand comparisons of two numbers against
|
|
31
|
+
* a full compute of the same fifty thousand bars, which is the relationship
|
|
32
|
+
* that makes an honest check of the whole series affordable: it is paid at the
|
|
33
|
+
* load and never again.
|
|
34
|
+
*/
|
|
35
|
+
import type { Diagnostic } from '../diagnostics/index.js';
|
|
36
|
+
import type { HostBar } from './bars.js';
|
|
37
|
+
import type { Instrument } from './host.js';
|
|
38
|
+
/**
|
|
39
|
+
* A run over nothing, OS6010.
|
|
40
|
+
*
|
|
41
|
+
* It names the instrument and the interval because the fix is to choose a pair
|
|
42
|
+
* that has history, and a sentence that does not say which pair was empty
|
|
43
|
+
* sends the reader back to the chart to work it out.
|
|
44
|
+
*/
|
|
45
|
+
export declare function noBars(instrument: Instrument | undefined): Diagnostic;
|
|
46
|
+
/**
|
|
47
|
+
* A bar whose time does not follow the one before it, OS6011.
|
|
48
|
+
*
|
|
49
|
+
* The first such bar and not a count of them, because the fix is the same
|
|
50
|
+
* whether the feed sent one duplicate or a thousand, and the first one is the
|
|
51
|
+
* only one whose position tells the host where its own ordering went wrong.
|
|
52
|
+
*
|
|
53
|
+
* `previous` is the bar already handed over, or nothing for the first bar of a
|
|
54
|
+
* run, which follows nothing and is therefore always in order. A time the host
|
|
55
|
+
* did not state is not compared: the absent value is what `barField` gives a
|
|
56
|
+
* script for it (3.1), and the catalogue has no code for a bar dated nothing,
|
|
57
|
+
* so inventing this one for it would be a refusal the specification does not
|
|
58
|
+
* describe.
|
|
59
|
+
*/
|
|
60
|
+
export declare function outOfOrder(bar: HostBar, previous: HostBar | undefined, index: number): Diagnostic | undefined;
|
|
61
|
+
//# sourceMappingURL=series.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"series.d.ts","sourceRoot":"","sources":["../../../src/core/engine/series.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAM5C;;;;;;GAMG;AACH,wBAAgB,MAAM,CAAC,UAAU,EAAE,UAAU,GAAG,SAAS,GAAG,UAAU,CAKrE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,UAAU,CACxB,GAAG,EAAE,OAAO,EACZ,QAAQ,EAAE,OAAO,GAAG,SAAS,EAC7B,KAAK,EAAE,MAAM,GACZ,UAAU,GAAG,SAAS,CAMxB"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { NO_POSITION, failure } from './errors.js';
|
|
2
|
+
/** The spelling a reason uses for a fact the record does not hold. */
|
|
3
|
+
const UNNAMED_INSTRUMENT = 'the chart\'s instrument';
|
|
4
|
+
const UNNAMED_INTERVAL = 'the chart\'s interval';
|
|
5
|
+
/**
|
|
6
|
+
* A run over nothing, OS6010.
|
|
7
|
+
*
|
|
8
|
+
* It names the instrument and the interval because the fix is to choose a pair
|
|
9
|
+
* that has history, and a sentence that does not say which pair was empty
|
|
10
|
+
* sends the reader back to the chart to work it out.
|
|
11
|
+
*/
|
|
12
|
+
export function noBars(instrument) {
|
|
13
|
+
return failure('OS6010', NO_POSITION, {
|
|
14
|
+
symbol: instrument?.symbol ?? UNNAMED_INSTRUMENT,
|
|
15
|
+
timeframe: instrument?.interval ?? UNNAMED_INTERVAL,
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* A bar whose time does not follow the one before it, OS6011.
|
|
20
|
+
*
|
|
21
|
+
* The first such bar and not a count of them, because the fix is the same
|
|
22
|
+
* whether the feed sent one duplicate or a thousand, and the first one is the
|
|
23
|
+
* only one whose position tells the host where its own ordering went wrong.
|
|
24
|
+
*
|
|
25
|
+
* `previous` is the bar already handed over, or nothing for the first bar of a
|
|
26
|
+
* run, which follows nothing and is therefore always in order. A time the host
|
|
27
|
+
* did not state is not compared: the absent value is what `barField` gives a
|
|
28
|
+
* script for it (3.1), and the catalogue has no code for a bar dated nothing,
|
|
29
|
+
* so inventing this one for it would be a refusal the specification does not
|
|
30
|
+
* describe.
|
|
31
|
+
*/
|
|
32
|
+
export function outOfOrder(bar, previous, index) {
|
|
33
|
+
const time = bar.time;
|
|
34
|
+
const before = previous?.time;
|
|
35
|
+
if (typeof time !== 'number' || typeof before !== 'number')
|
|
36
|
+
return undefined;
|
|
37
|
+
if (time > before)
|
|
38
|
+
return undefined;
|
|
39
|
+
return failure('OS6011', NO_POSITION, { index, time, previous: index - 1 });
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=series.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"series.js","sourceRoot":"","sources":["../../../src/core/engine/series.ts"],"names":[],"mappings":"AAoCA,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGnD,sEAAsE;AACtE,MAAM,kBAAkB,GAAG,yBAAyB,CAAC;AACrD,MAAM,gBAAgB,GAAG,uBAAuB,CAAC;AAEjD;;;;;;GAMG;AACH,MAAM,UAAU,MAAM,CAAC,UAAkC;IACvD,OAAO,OAAO,CAAC,QAAQ,EAAE,WAAW,EAAE;QACpC,MAAM,EAAE,UAAU,EAAE,MAAM,IAAI,kBAAkB;QAChD,SAAS,EAAE,UAAU,EAAE,QAAQ,IAAI,gBAAgB;KACpD,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,UAAU,CACxB,GAAY,EACZ,QAA6B,EAC7B,KAAa;IAEb,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;IACtB,MAAM,MAAM,GAAG,QAAQ,EAAE,IAAI,CAAC;IAC9B,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAC7E,IAAI,IAAI,GAAG,MAAM;QAAE,OAAO,SAAS,CAAC;IACpC,OAAO,OAAO,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC;AAC9E,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A range of wall clock hours, and where one reading sits inside it.
|
|
3
|
+
*
|
|
4
|
+
* Two different things in this repository are a range of hours: the
|
|
5
|
+
* instrument's own trading session, which a host states in its instrument
|
|
6
|
+
* record (`host-interface.md` 4.3), and the range a script writes for
|
|
7
|
+
* `session.isIn` (`stdlib.md` 12.5). They are spelled differently and they mean
|
|
8
|
+
* different things, but the arithmetic is one arithmetic, and it is here so
|
|
9
|
+
* that it is one rule rather than two that can drift.
|
|
10
|
+
*
|
|
11
|
+
* **The open is inclusive and the close is exclusive**, so two ranges written
|
|
12
|
+
* back to back cover every minute once and no minute twice. A range whose start
|
|
13
|
+
* and end are the same minute holds nothing, which is what writing a zero length
|
|
14
|
+
* range says.
|
|
15
|
+
*
|
|
16
|
+
* **A range whose end is before its start crosses midnight and is read that
|
|
17
|
+
* way**, which is what an overnight session needs. The day list then names the
|
|
18
|
+
* day the range opened on rather than the day the reading falls on, because a
|
|
19
|
+
* session that opens on Friday evening and closes on Saturday morning is a
|
|
20
|
+
* Friday session: reading the list against the reading's own day would drop
|
|
21
|
+
* half of every overnight session and keep the wrong half.
|
|
22
|
+
*
|
|
23
|
+
* **A session is named by the day it opened on**, which is what tells two
|
|
24
|
+
* readings in one session from two readings in two. Naming it by an instant
|
|
25
|
+
* would be wrong across a seasonal clock change, where a wall clock hour inside
|
|
26
|
+
* a session is not an hour of elapsed time.
|
|
27
|
+
*/
|
|
28
|
+
import type { Civil } from '../../stdlib/index.js';
|
|
29
|
+
/** Hours as minutes from midnight, and the days they open on. */
|
|
30
|
+
export interface Hours {
|
|
31
|
+
readonly from: number;
|
|
32
|
+
/** Minutes from midnight at the close, which may be at 24:00. */
|
|
33
|
+
readonly to: number;
|
|
34
|
+
/** The days it opens on, Monday as 1, or nothing for every day. */
|
|
35
|
+
readonly days: readonly number[] | null;
|
|
36
|
+
}
|
|
37
|
+
/** Where one reading sits in a range of hours. */
|
|
38
|
+
export interface Standing {
|
|
39
|
+
readonly inside: boolean;
|
|
40
|
+
/** Minutes since the hours opened, zero on the minute they opened. */
|
|
41
|
+
readonly elapsed: number;
|
|
42
|
+
/** Minutes until they are scheduled to close. */
|
|
43
|
+
readonly remaining: number;
|
|
44
|
+
/** The day they opened on, which is the name of this one session. */
|
|
45
|
+
readonly openingDay: number;
|
|
46
|
+
}
|
|
47
|
+
/** Where a wall clock reading sits in a range of hours, or outside every one. */
|
|
48
|
+
export declare function standingIn(hours: Hours, at: Civil): Standing;
|
|
49
|
+
//# sourceMappingURL=hours.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hours.d.ts","sourceRoot":"","sources":["../../../../src/core/engine/session/hours.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAMnD,iEAAiE;AACjE,MAAM,WAAW,KAAK;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,iEAAiE;IACjE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,mEAAmE;IACnE,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAC;CACzC;AAED,kDAAkD;AAClD,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,sEAAsE;IACtE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,iDAAiD;IACjD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,qEAAqE;IACrE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAID,iFAAiF;AACjF,wBAAgB,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,GAAG,QAAQ,CAmB5D"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { dayNumber, weekdayOfDay } from '../../stdlib/index.js';
|
|
2
|
+
/** Minutes in a day, so the wrap is named rather than written as a number. */
|
|
3
|
+
const DAY = 1440;
|
|
4
|
+
const OUTSIDE = { inside: false, elapsed: 0, remaining: 0, openingDay: 0 };
|
|
5
|
+
/** Where a wall clock reading sits in a range of hours, or outside every one. */
|
|
6
|
+
export function standingIn(hours, at) {
|
|
7
|
+
const minutes = at.hour * 60 + at.minute + at.second / 60;
|
|
8
|
+
const today = dayNumber(at.year, at.month, at.day);
|
|
9
|
+
if (hours.to > hours.from) {
|
|
10
|
+
if (minutes < hours.from || minutes >= hours.to)
|
|
11
|
+
return OUTSIDE;
|
|
12
|
+
return held(hours, today, minutes - hours.from, hours.to - minutes);
|
|
13
|
+
}
|
|
14
|
+
if (hours.to === hours.from)
|
|
15
|
+
return OUTSIDE;
|
|
16
|
+
// Crossing midnight: the evening part belongs to today's session and the
|
|
17
|
+
// morning part to yesterday's, which is the day the list is read against.
|
|
18
|
+
if (minutes >= hours.from) {
|
|
19
|
+
return held(hours, today, minutes - hours.from, DAY - minutes + hours.to);
|
|
20
|
+
}
|
|
21
|
+
if (minutes < hours.to) {
|
|
22
|
+
return held(hours, today - 1, DAY - hours.from + minutes, hours.to - minutes);
|
|
23
|
+
}
|
|
24
|
+
return OUTSIDE;
|
|
25
|
+
}
|
|
26
|
+
function held(hours, openingDay, elapsed, remaining) {
|
|
27
|
+
if (hours.days !== null && !hours.days.includes(weekdayOfDay(openingDay)))
|
|
28
|
+
return OUTSIDE;
|
|
29
|
+
return { inside: true, elapsed, remaining, openingDay };
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=hours.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hours.js","sourceRoot":"","sources":["../../../../src/core/engine/session/hours.ts"],"names":[],"mappings":"AA4BA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAEhE,8EAA8E;AAC9E,MAAM,GAAG,GAAG,IAAI,CAAC;AAsBjB,MAAM,OAAO,GAAa,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;AAErF,iFAAiF;AACjF,MAAM,UAAU,UAAU,CAAC,KAAY,EAAE,EAAS;IAChD,MAAM,OAAO,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC;IAC1D,MAAM,KAAK,GAAG,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;IAEnD,IAAI,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QAC1B,IAAI,OAAO,GAAG,KAAK,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,CAAC,EAAE;YAAE,OAAO,OAAO,CAAC;QAChE,OAAO,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC;IACtE,CAAC;IACD,IAAI,KAAK,CAAC,EAAE,KAAK,KAAK,CAAC,IAAI;QAAE,OAAO,OAAO,CAAC;IAE5C,yEAAyE;IACzE,0EAA0E;IAC1E,IAAI,OAAO,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;IAC5E,CAAC;IACD,IAAI,OAAO,GAAG,KAAK,CAAC,EAAE,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,EAAE,GAAG,GAAG,KAAK,CAAC,IAAI,GAAG,OAAO,EAAE,KAAK,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC;IAChF,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,IAAI,CACX,KAAY,EACZ,UAAkB,EAClB,OAAe,EACf,SAAiB;IAEjB,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;QAAE,OAAO,OAAO,CAAC;IAC1F,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC;AAC1D,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sessions: the instrument's own trading hours, and the ones a script writes.
|
|
3
|
+
*
|
|
4
|
+
* One module because they are one arithmetic. The instrument's hours come from
|
|
5
|
+
* the host's record (`host-interface.md` 4.3) and produce the per-bar facts of
|
|
6
|
+
* `stdlib.md` 12.4; the script's are the spec string of 12.5 and produce one
|
|
7
|
+
* test. Both read the same hours the same way, and keeping them behind one door
|
|
8
|
+
* is what stops a script's overnight range and an instrument's overnight
|
|
9
|
+
* session coming to disagree about which day a session belongs to.
|
|
10
|
+
*
|
|
11
|
+
* The hours themselves are behind the door rather than on it. Two spellings
|
|
12
|
+
* reach them, and a third caller reading them raw would be a third spelling.
|
|
13
|
+
*/
|
|
14
|
+
export type { SessionFacts, SessionHours, SessionReader } from './record.js';
|
|
15
|
+
export { NO_SESSION, recordProblem, sessionReader } from './record.js';
|
|
16
|
+
export { sessionHolds } from './spec.js';
|
|
17
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/engine/session/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC7E,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEvE,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/engine/session/index.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEvE,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/** The instrument's trading session, as `host-interface.md` 4.3 prints it. */
|
|
2
|
+
export interface SessionHours {
|
|
3
|
+
/** A wall clock time, `"HH:MM"`, read in the instrument's timezone. */
|
|
4
|
+
readonly start: string;
|
|
5
|
+
/** The same, where `"24:00"` is midnight at the end of the day. */
|
|
6
|
+
readonly end: string;
|
|
7
|
+
/** Monday as 1 through Sunday as 7, or nothing for every day. */
|
|
8
|
+
readonly days?: readonly number[];
|
|
9
|
+
}
|
|
10
|
+
/** What a bar's session comes to, absent where the record cannot say. */
|
|
11
|
+
export interface SessionFacts {
|
|
12
|
+
readonly isFirstBar: boolean | null;
|
|
13
|
+
readonly isLastBar: boolean | null;
|
|
14
|
+
}
|
|
15
|
+
/** No session stated, so neither fact has an answer. */
|
|
16
|
+
export declare const NO_SESSION: SessionFacts;
|
|
17
|
+
/**
|
|
18
|
+
* What the record is missing before any session fact can be read from it.
|
|
19
|
+
*
|
|
20
|
+
* `host-interface.md` 4.1 marks every fact here optional and 4.3 says what a
|
|
21
|
+
* script sees when the session is one of them: absence, which a script can test.
|
|
22
|
+
* That is the answer for a host that schedules no session, and it is not the
|
|
23
|
+
* answer for the three records below, each of which is a host that believes it
|
|
24
|
+
* stated one:
|
|
25
|
+
*
|
|
26
|
+
* - **A session and no timezone.** `start` and `end` are wall clock, so a
|
|
27
|
+
* window with no zone to read it in is not a window. Nothing about the record
|
|
28
|
+
* says which hours were meant, and every session study on that host draws
|
|
29
|
+
* nothing.
|
|
30
|
+
* - **A session whose clock times are not `"HH:MM"`.** `"9:00"` is the spelling
|
|
31
|
+
* a host writes first and the one the record does not take.
|
|
32
|
+
* - **Days outside one to seven.** Monday is 1 (`stdlib.md` 12.2), so a host
|
|
33
|
+
* numbering Sunday as 0 states a week the instrument never opens in.
|
|
34
|
+
*
|
|
35
|
+
* Each of the three is reported at load rather than answered with absence,
|
|
36
|
+
* because absence there is indistinguishable from the honest case and the honest
|
|
37
|
+
* case is the one a reader will assume. This decides nothing about what a bare
|
|
38
|
+
* read of an instrument fact returns, which is issue 0002 and is open: a record
|
|
39
|
+
* the host contradicts itself in is a different question from a fact it did not
|
|
40
|
+
* state.
|
|
41
|
+
*/
|
|
42
|
+
export declare function recordProblem(stated: SessionHours | undefined, zone: string | null): string | undefined;
|
|
43
|
+
/** Reads one run's session facts, one bar at a time. */
|
|
44
|
+
export interface SessionReader {
|
|
45
|
+
/** This bar's facts, given the bar before it, or nothing before it. */
|
|
46
|
+
factsAt(time: number | null, previousTime: number | null): SessionFacts;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* The reader for one run.
|
|
50
|
+
*
|
|
51
|
+
* Built once, because the instrument record is read once at load and is
|
|
52
|
+
* constant for the whole run (`host-interface.md` 4.4). A fact that changed
|
|
53
|
+
* mid-run would make the first bars of a chart disagree with the rest of it.
|
|
54
|
+
*/
|
|
55
|
+
export declare function sessionReader(stated: SessionHours | undefined, zone: string | null, barMinutes: number | null): SessionReader;
|
|
56
|
+
//# sourceMappingURL=record.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record.d.ts","sourceRoot":"","sources":["../../../../src/core/engine/session/record.ts"],"names":[],"mappings":"AA0CA,8EAA8E;AAC9E,MAAM,WAAW,YAAY;IAC3B,uEAAuE;IACvE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,mEAAmE;IACnE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,iEAAiE;IACjE,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC;AAED,yEAAyE;AACzE,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,UAAU,EAAE,OAAO,GAAG,IAAI,CAAC;IACpC,QAAQ,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CAAC;CACpC;AAED,wDAAwD;AACxD,eAAO,MAAM,UAAU,EAAE,YAAoD,CAAC;AA6B9E;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,YAAY,GAAG,SAAS,EAChC,IAAI,EAAE,MAAM,GAAG,IAAI,GAClB,MAAM,GAAG,SAAS,CAapB;AAED,wDAAwD;AACxD,MAAM,WAAW,aAAa;IAC5B,uEAAuE;IACvE,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI,GAAG,YAAY,CAAC;CACzE;AAID;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,YAAY,GAAG,SAAS,EAChC,IAAI,EAAE,MAAM,GAAG,IAAI,EACnB,UAAU,EAAE,MAAM,GAAG,IAAI,GACxB,aAAa,CAwCf"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The per-bar session facts, derived from the instrument record.
|
|
3
|
+
*
|
|
4
|
+
* **The session is a range of hours in the instrument record and nothing else**
|
|
5
|
+
* (`host-interface.md` 4.3). A host states `start`, `end` and the days it opens
|
|
6
|
+
* on, once, at load; the per-bar facts follow from those hours, the bar's own
|
|
7
|
+
* time and the instrument's timezone. The host is never asked whether a session
|
|
8
|
+
* begins on a bar, because `language.md` 7.2 fixes the facts a host states
|
|
9
|
+
* about an execution at four and `host-interface.md` 6.1 says an engine must
|
|
10
|
+
* not ask a host for one of the rest. Two engines built from those pages
|
|
11
|
+
* therefore anchor a session study on the same bar, which is the whole reason
|
|
12
|
+
* the line between stated and derived is drawn where it is.
|
|
13
|
+
*
|
|
14
|
+
* **`isFirstBar` is the first bar delivered inside the hours.** A venue that
|
|
15
|
+
* opened late still has a first bar, and a study anchored to the session has to
|
|
16
|
+
* start on it; a rule that waited for the scheduled open would anchor nothing
|
|
17
|
+
* at all on a day trading began a minute late.
|
|
18
|
+
*
|
|
19
|
+
* **`isLastBar` is the last bar of the schedule**, which is the fact that earns
|
|
20
|
+
* the field its place: it is true even when trading stopped early, so a
|
|
21
|
+
* strategy that must be flat by the close acts on it rather than on the
|
|
22
|
+
* appearance of a new bar, which arrives too late. That is a bar slot measured
|
|
23
|
+
* against the scheduled close, so it needs the interval, and a host that states
|
|
24
|
+
* none leaves it absent rather than answered by the bar spacing, which the
|
|
25
|
+
* specification does not promise is uniform.
|
|
26
|
+
*
|
|
27
|
+
* **Absence, never a guess.** A host that states no session leaves both facts
|
|
28
|
+
* absent, which is what 4.1's record says a script sees: absent, and the per-bar
|
|
29
|
+
* session facts absent with it. Absence is a value a script can test, and a
|
|
30
|
+
* guessed session start would anchor every session study in this language to a
|
|
31
|
+
* minute nobody chose.
|
|
32
|
+
*
|
|
33
|
+
* **A record that contradicts itself is refused instead**, at load, by
|
|
34
|
+
* `recordProblem` below. A session with no zone to read its wall clock in, or
|
|
35
|
+
* one spelled in a form the record does not take, is a host that believes it
|
|
36
|
+
* stated a session, and answering that with the same absence an honest record
|
|
37
|
+
* gives is how a host loses every session study and is told nothing.
|
|
38
|
+
*/
|
|
39
|
+
import { fieldsIn } from '../../stdlib/index.js';
|
|
40
|
+
import { standingIn } from './hours.js';
|
|
41
|
+
/** No session stated, so neither fact has an answer. */
|
|
42
|
+
export const NO_SESSION = { isFirstBar: null, isLastBar: null };
|
|
43
|
+
/** The bar falls in no session, which is an answer rather than an absence. */
|
|
44
|
+
const BETWEEN = { isFirstBar: false, isLastBar: false };
|
|
45
|
+
/** `"HH:MM"`, where `"24:00"` is midnight at the end of the day. */
|
|
46
|
+
const CLOCK = /^(\d{2}):(\d{2})$/;
|
|
47
|
+
function clockMinutes(text) {
|
|
48
|
+
if (typeof text !== 'string')
|
|
49
|
+
return null;
|
|
50
|
+
const parts = CLOCK.exec(text);
|
|
51
|
+
if (parts === null)
|
|
52
|
+
return null;
|
|
53
|
+
const hour = Number(parts[1]);
|
|
54
|
+
const minute = Number(parts[2]);
|
|
55
|
+
if (hour > 24 || minute > 59)
|
|
56
|
+
return null;
|
|
57
|
+
if (hour === 24 && minute !== 0)
|
|
58
|
+
return null;
|
|
59
|
+
return hour * 60 + minute;
|
|
60
|
+
}
|
|
61
|
+
/** The record's session as hours, or nothing when the host stated none. */
|
|
62
|
+
function hoursOf(stated) {
|
|
63
|
+
if (stated === undefined || stated === null)
|
|
64
|
+
return null;
|
|
65
|
+
const from = clockMinutes(stated.start);
|
|
66
|
+
const to = clockMinutes(stated.end);
|
|
67
|
+
if (from === null || to === null)
|
|
68
|
+
return null;
|
|
69
|
+
const listed = stated.days;
|
|
70
|
+
return { from, to, days: Array.isArray(listed) ? [...listed] : null };
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* What the record is missing before any session fact can be read from it.
|
|
74
|
+
*
|
|
75
|
+
* `host-interface.md` 4.1 marks every fact here optional and 4.3 says what a
|
|
76
|
+
* script sees when the session is one of them: absence, which a script can test.
|
|
77
|
+
* That is the answer for a host that schedules no session, and it is not the
|
|
78
|
+
* answer for the three records below, each of which is a host that believes it
|
|
79
|
+
* stated one:
|
|
80
|
+
*
|
|
81
|
+
* - **A session and no timezone.** `start` and `end` are wall clock, so a
|
|
82
|
+
* window with no zone to read it in is not a window. Nothing about the record
|
|
83
|
+
* says which hours were meant, and every session study on that host draws
|
|
84
|
+
* nothing.
|
|
85
|
+
* - **A session whose clock times are not `"HH:MM"`.** `"9:00"` is the spelling
|
|
86
|
+
* a host writes first and the one the record does not take.
|
|
87
|
+
* - **Days outside one to seven.** Monday is 1 (`stdlib.md` 12.2), so a host
|
|
88
|
+
* numbering Sunday as 0 states a week the instrument never opens in.
|
|
89
|
+
*
|
|
90
|
+
* Each of the three is reported at load rather than answered with absence,
|
|
91
|
+
* because absence there is indistinguishable from the honest case and the honest
|
|
92
|
+
* case is the one a reader will assume. This decides nothing about what a bare
|
|
93
|
+
* read of an instrument fact returns, which is issue 0002 and is open: a record
|
|
94
|
+
* the host contradicts itself in is a different question from a fact it did not
|
|
95
|
+
* state.
|
|
96
|
+
*/
|
|
97
|
+
export function recordProblem(stated, zone) {
|
|
98
|
+
if (zone !== null && fieldsIn(0, zone) === null)
|
|
99
|
+
return 'a timezone the calendar can read';
|
|
100
|
+
if (stated === undefined || stated === null)
|
|
101
|
+
return undefined;
|
|
102
|
+
if (zone === null)
|
|
103
|
+
return 'a timezone, which the session it states is read in';
|
|
104
|
+
if (hoursOf(stated) === null)
|
|
105
|
+
return 'a session whose start and end are spelled HH:MM';
|
|
106
|
+
const days = stated.days;
|
|
107
|
+
if (days === undefined || days === null)
|
|
108
|
+
return undefined;
|
|
109
|
+
const numbered = (one) => typeof one === 'number' && Number.isInteger(one) && one >= 1 && one <= 7;
|
|
110
|
+
if (days.length === 0 || !days.every(numbered)) {
|
|
111
|
+
return 'session days numbered 1 to 7, where Monday is 1';
|
|
112
|
+
}
|
|
113
|
+
return undefined;
|
|
114
|
+
}
|
|
115
|
+
const NOTHING = { factsAt: () => NO_SESSION };
|
|
116
|
+
/**
|
|
117
|
+
* The reader for one run.
|
|
118
|
+
*
|
|
119
|
+
* Built once, because the instrument record is read once at load and is
|
|
120
|
+
* constant for the whole run (`host-interface.md` 4.4). A fact that changed
|
|
121
|
+
* mid-run would make the first bars of a chart disagree with the rest of it.
|
|
122
|
+
*/
|
|
123
|
+
export function sessionReader(stated, zone, barMinutes) {
|
|
124
|
+
const hours = hoursOf(stated);
|
|
125
|
+
if (hours === null || zone === null)
|
|
126
|
+
return NOTHING;
|
|
127
|
+
// The bar before this one was this bar last time, so its reading is kept
|
|
128
|
+
// rather than read twice. Memoisation and nothing else: the answer for an
|
|
129
|
+
// instant is the same answer every time, and clearing it between two bars
|
|
130
|
+
// would change how long a chart took and nothing else.
|
|
131
|
+
let priorTime = null;
|
|
132
|
+
let priorReading = null;
|
|
133
|
+
const readingAt = (time) => {
|
|
134
|
+
if (time === null || !Number.isFinite(time))
|
|
135
|
+
return null;
|
|
136
|
+
if (time === priorTime)
|
|
137
|
+
return priorReading;
|
|
138
|
+
const civil = fieldsIn(time, zone);
|
|
139
|
+
return civil === null ? null : standingIn(hours, civil);
|
|
140
|
+
};
|
|
141
|
+
return {
|
|
142
|
+
factsAt(time, previousTime) {
|
|
143
|
+
const here = readingAt(time);
|
|
144
|
+
// Read before the slot is written over, so the bar before this one is the
|
|
145
|
+
// reading this bar's own call left behind.
|
|
146
|
+
const before = here !== null && here.inside ? readingAt(previousTime) : null;
|
|
147
|
+
priorTime = time;
|
|
148
|
+
priorReading = here;
|
|
149
|
+
if (here === null)
|
|
150
|
+
return NO_SESSION;
|
|
151
|
+
if (!here.inside)
|
|
152
|
+
return BETWEEN;
|
|
153
|
+
// A bar with nothing before it inside the same session is the first of
|
|
154
|
+
// it, which includes the oldest bar of a chart that opens mid-session: a
|
|
155
|
+
// study anchored to the session has to start somewhere, and the left edge
|
|
156
|
+
// of the data is the only honest place.
|
|
157
|
+
const opened = before === null || !before.inside || before.openingDay !== here.openingDay;
|
|
158
|
+
return {
|
|
159
|
+
isFirstBar: opened,
|
|
160
|
+
isLastBar: barMinutes === null ? null : here.remaining <= barMinutes,
|
|
161
|
+
};
|
|
162
|
+
},
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
//# sourceMappingURL=record.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record.js","sourceRoot":"","sources":["../../../../src/core/engine/session/record.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAmBxC,wDAAwD;AACxD,MAAM,CAAC,MAAM,UAAU,GAAiB,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AAE9E,8EAA8E;AAC9E,MAAM,OAAO,GAAiB,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AAEtE,oEAAoE;AACpE,MAAM,KAAK,GAAG,mBAAmB,CAAC;AAElC,SAAS,YAAY,CAAC,IAAa;IACjC,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC1C,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAChC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9B,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAChC,IAAI,IAAI,GAAG,EAAE,IAAI,MAAM,GAAG,EAAE;QAAE,OAAO,IAAI,CAAC;IAC1C,IAAI,IAAI,KAAK,EAAE,IAAI,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7C,OAAO,IAAI,GAAG,EAAE,GAAG,MAAM,CAAC;AAC5B,CAAC;AAED,2EAA2E;AAC3E,SAAS,OAAO,CAAC,MAAgC;IAC/C,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACzD,MAAM,IAAI,GAAG,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACxC,MAAM,EAAE,GAAG,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACpC,IAAI,IAAI,KAAK,IAAI,IAAI,EAAE,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC9C,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC;IAC3B,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AACxE,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,UAAU,aAAa,CAC3B,MAAgC,EAChC,IAAmB;IAEnB,IAAI,IAAI,KAAK,IAAI,IAAI,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,IAAI;QAAE,OAAO,kCAAkC,CAAC;IAC3F,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IAC9D,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,oDAAoD,CAAC;IAC/E,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI;QAAE,OAAO,iDAAiD,CAAC;IACvF,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;IACzB,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IAC1D,MAAM,QAAQ,GAAG,CAAC,GAAY,EAAW,EAAE,CACzC,OAAO,GAAG,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;IAC3E,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC/C,OAAO,iDAAiD,CAAC;IAC3D,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAQD,MAAM,OAAO,GAAkB,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;AAE7D;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAC3B,MAAgC,EAChC,IAAmB,EACnB,UAAyB;IAEzB,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9B,IAAI,KAAK,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,OAAO,CAAC;IAEpD,yEAAyE;IACzE,0EAA0E;IAC1E,0EAA0E;IAC1E,uDAAuD;IACvD,IAAI,SAAS,GAAkB,IAAI,CAAC;IACpC,IAAI,YAAY,GAAoB,IAAI,CAAC;IAEzC,MAAM,SAAS,GAAG,CAAC,IAAmB,EAAmB,EAAE;QACzD,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QACzD,IAAI,IAAI,KAAK,SAAS;YAAE,OAAO,YAAY,CAAC;QAC5C,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACnC,OAAO,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC1D,CAAC,CAAC;IAEF,OAAO;QACL,OAAO,CAAC,IAAmB,EAAE,YAA2B;YACtD,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;YAC7B,0EAA0E;YAC1E,2CAA2C;YAC3C,MAAM,MAAM,GAAG,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAC7E,SAAS,GAAG,IAAI,CAAC;YACjB,YAAY,GAAG,IAAI,CAAC;YACpB,IAAI,IAAI,KAAK,IAAI;gBAAE,OAAO,UAAU,CAAC;YACrC,IAAI,CAAC,IAAI,CAAC,MAAM;gBAAE,OAAO,OAAO,CAAC;YACjC,uEAAuE;YACvE,yEAAyE;YACzE,0EAA0E;YAC1E,wCAAwC;YACxC,MAAM,MAAM,GACV,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,UAAU,KAAK,IAAI,CAAC,UAAU,CAAC;YAC7E,OAAO;gBACL,UAAU,EAAE,MAAM;gBAClB,SAAS,EAAE,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,UAAU;aACrE,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `session.isIn(spec, zone)`: the session range spec of `stdlib.md` 12.5.
|
|
3
|
+
*
|
|
4
|
+
* The spec is a string a script writes: `"0915-1530"`, with an optional day
|
|
5
|
+
* list after a colon, `"0915-1530:12345"`. Days number Monday as 1 through
|
|
6
|
+
* Sunday as 7, matching `date.dayOfWeek`. This file is the spelling and nothing
|
|
7
|
+
* else: what the hours then mean is `hours.ts`, which the instrument's own
|
|
8
|
+
* session reads through as well, so a script's range and an instrument's
|
|
9
|
+
* session cannot come to differ about midnight or about a day list.
|
|
10
|
+
*
|
|
11
|
+
* A malformed spec is OS3008 at compile time when it is a literal. A computed
|
|
12
|
+
* one that is malformed is absence here rather than a refusal: the alternative
|
|
13
|
+
* would stop a chart on a string the script built on one bar out of forty
|
|
14
|
+
* thousand, and absence is a value a script can test.
|
|
15
|
+
*/
|
|
16
|
+
import type { Civil } from '../../stdlib/index.js';
|
|
17
|
+
/** Whether a bar's wall clock reading falls inside the hours a spec names. */
|
|
18
|
+
export declare function sessionHolds(spec: string | null, at: Civil | null): boolean | null;
|
|
19
|
+
//# sourceMappingURL=spec.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spec.d.ts","sourceRoot":"","sources":["../../../../src/core/engine/session/spec.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAuBnD,8EAA8E;AAC9E,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,EAAE,EAAE,KAAK,GAAG,IAAI,GAAG,OAAO,GAAG,IAAI,CAKlF"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { standingIn } from './hours.js';
|
|
2
|
+
/** `HHMM-HHMM` with an optional `:` and a run of day digits. */
|
|
3
|
+
const SPEC = /^(\d{2})(\d{2})-(\d{2})(\d{2})(?::([1-7]{1,7}))?$/;
|
|
4
|
+
function parse(spec) {
|
|
5
|
+
const parts = SPEC.exec(spec);
|
|
6
|
+
if (parts === null)
|
|
7
|
+
return null;
|
|
8
|
+
const fromHour = Number(parts[1]);
|
|
9
|
+
const fromMinute = Number(parts[2]);
|
|
10
|
+
const toHour = Number(parts[3]);
|
|
11
|
+
const toMinute = Number(parts[4]);
|
|
12
|
+
// "2400" is midnight at the end of the day, and it is the one hour past 23
|
|
13
|
+
// the spec allows.
|
|
14
|
+
if (fromHour > 23 || fromMinute > 59 || toMinute > 59)
|
|
15
|
+
return null;
|
|
16
|
+
if (toHour > 24 || (toHour === 24 && toMinute !== 0))
|
|
17
|
+
return null;
|
|
18
|
+
const listed = parts[5];
|
|
19
|
+
const days = listed === undefined ? null : [...listed].map((one) => Number(one));
|
|
20
|
+
return { from: fromHour * 60 + fromMinute, to: toHour * 60 + toMinute, days };
|
|
21
|
+
}
|
|
22
|
+
/** Whether a bar's wall clock reading falls inside the hours a spec names. */
|
|
23
|
+
export function sessionHolds(spec, at) {
|
|
24
|
+
if (spec === null || at === null)
|
|
25
|
+
return null;
|
|
26
|
+
const hours = parse(spec);
|
|
27
|
+
if (hours === null)
|
|
28
|
+
return null;
|
|
29
|
+
return standingIn(hours, at).inside;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spec.js","sourceRoot":"","sources":["../../../../src/core/engine/session/spec.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAGxC,gEAAgE;AAChE,MAAM,IAAI,GAAG,mDAAmD,CAAC;AAEjE,SAAS,KAAK,CAAC,IAAY;IACzB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9B,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAChC,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAClC,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACpC,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAChC,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAClC,2EAA2E;IAC3E,mBAAmB;IACnB,IAAI,QAAQ,GAAG,EAAE,IAAI,UAAU,GAAG,EAAE,IAAI,QAAQ,GAAG,EAAE;QAAE,OAAO,IAAI,CAAC;IACnE,IAAI,MAAM,GAAG,EAAE,IAAI,CAAC,MAAM,KAAK,EAAE,IAAI,QAAQ,KAAK,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAClE,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACxB,MAAM,IAAI,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IACjF,OAAO,EAAE,IAAI,EAAE,QAAQ,GAAG,EAAE,GAAG,UAAU,EAAE,EAAE,EAAE,MAAM,GAAG,EAAE,GAAG,QAAQ,EAAE,IAAI,EAAE,CAAC;AAChF,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,YAAY,CAAC,IAAmB,EAAE,EAAgB;IAChE,IAAI,IAAI,KAAK,IAAI,IAAI,EAAE,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC9C,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1B,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAChC,OAAO,UAAU,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC;AACtC,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
export type TimeframeUnit = 'm' | 'h' | 'D' | 'W' | 'M';
|
|
2
|
+
export interface Timeframe {
|
|
3
|
+
readonly count: number;
|
|
4
|
+
readonly unit: TimeframeUnit;
|
|
5
|
+
/** The string as it was written, for a diagnostic that has to name it. */
|
|
6
|
+
readonly text: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function parseTimeframe(text: string): Timeframe | undefined;
|
|
9
|
+
/** Whether this timeframe is folded by counting rather than by the calendar. */
|
|
10
|
+
export declare function isIntraday(timeframe: Timeframe): boolean;
|
|
11
|
+
/** Minutes one bar covers, for an intraday timeframe only. */
|
|
12
|
+
export declare function minutesOf(timeframe: Timeframe): number | undefined;
|
|
13
|
+
/**
|
|
14
|
+
* One timeframe's length in minutes, with a month treated as thirty days.
|
|
15
|
+
*
|
|
16
|
+
* Two uses and neither of them folds anything: ordering two timeframes, which
|
|
17
|
+
* is "is the request finer than the chart" and therefore OS6002, and sizing the
|
|
18
|
+
* range of history a host is asked to fetch, which is a floor. A month is not a
|
|
19
|
+
* fixed number of minutes, and where a bucket actually begins is the calendar's
|
|
20
|
+
* job below.
|
|
21
|
+
*/
|
|
22
|
+
export declare function nominalMinutes(timeframe: Timeframe): number;
|
|
23
|
+
/**
|
|
24
|
+
* Minutes one bar of a chart's own interval covers, or nothing where the host
|
|
25
|
+
* stated no interval this engine can read.
|
|
26
|
+
*
|
|
27
|
+
* A month is counted at its nominal length here, which is the answer the
|
|
28
|
+
* session facts need and not a claim about a calendar: any bar of a day or more
|
|
29
|
+
* spans a whole session whatever the exact figure, so every number past the
|
|
30
|
+
* length of a session gives those facts the same answer.
|
|
31
|
+
*/
|
|
32
|
+
export declare function barMinutesOf(interval: string | undefined): number | null;
|
|
33
|
+
/**
|
|
34
|
+
* The bucket an instant falls in, or nothing when no key can be worked out.
|
|
35
|
+
*
|
|
36
|
+
* Nothing comes back for a calendar unit with no zone, and for an instant that
|
|
37
|
+
* is not a finite number. Both leave the read absent rather than folded into a
|
|
38
|
+
* bucket the engine invented.
|
|
39
|
+
*/
|
|
40
|
+
export declare function bucketKeyOf(instant: number, timeframe: Timeframe, zone: string | null): number | undefined;
|
|
41
|
+
/** Why a requested timeframe cannot be folded onto the chart's, if it cannot. */
|
|
42
|
+
export type FoldRefusal = {
|
|
43
|
+
readonly code: 'OS6002';
|
|
44
|
+
} | {
|
|
45
|
+
readonly code: 'OS6015';
|
|
46
|
+
readonly suggestion: string;
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* Whether the chart's bars can be folded into the requested ones.
|
|
50
|
+
*
|
|
51
|
+
* Two refusals and no third. A request finer than the chart is OS6002, because
|
|
52
|
+
* folding cannot invent bars that were never loaded, and an intraday request
|
|
53
|
+
* that is not a whole multiple of the chart's is OS6015, because an intraday
|
|
54
|
+
* bucket is counted rather than dated and a bucket boundary that fell inside a
|
|
55
|
+
* chart bar would put part of one bar in two requested bars. A day, week or
|
|
56
|
+
* month request is dated, so the multiple rule does not apply to it.
|
|
57
|
+
*/
|
|
58
|
+
export declare function foldRefusal(requested: Timeframe, chart: Timeframe): FoldRefusal | undefined;
|
|
59
|
+
//# sourceMappingURL=timeframe.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeframe.d.ts","sourceRoot":"","sources":["../../../src/core/engine/timeframe.ts"],"names":[],"mappings":"AAoCA,MAAM,MAAM,aAAa,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAExD,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,0EAA0E;IAC1E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAgBD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAMlE;AAED,gFAAgF;AAChF,wBAAgB,UAAU,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAExD;AAED,8DAA8D;AAC9D,wBAAgB,SAAS,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS,CAElE;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,CAE3D;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAIxE;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CACzB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,MAAM,GAAG,IAAI,GAClB,MAAM,GAAG,SAAS,CAiBpB;AAED,iFAAiF;AACjF,MAAM,MAAM,WAAW,GACnB;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,GAC3B;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC;AAE7D;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CACzB,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,SAAS,GACf,WAAW,GAAG,SAAS,CAOzB"}
|