openalgo-script 0.1.0-alpha.1 → 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 +1200 -0
- package/README.md +49 -28
- 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 +61 -6
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +48 -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/version.generated.d.ts +2 -2
- package/dist/core/version/version.generated.d.ts.map +1 -1
- package/dist/core/version/version.generated.js +2 -2
- package/dist/core/version/version.generated.js.map +1 -1
- package/package.json +38 -14
- package/spec/errors.json +382 -183
- 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 +128 -6
- package/src/core/parse/expressions.ts +1 -1
- package/src/core/parse/names.ts +29 -2
- 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/version.generated.ts +2 -2
|
@@ -0,0 +1,332 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Checks 2 to 7 of `compiled-program.md` 3.5, over one instruction list.
|
|
3
|
+
*
|
|
4
|
+
* Verification is not optional and not a debug mode. An engine that skips it
|
|
5
|
+
* can be handed a malformed list and will read past the end of an array or jump
|
|
6
|
+
* into the middle of an expression, and the failure will look like a wrong
|
|
7
|
+
* number rather than a broken program. What these five checks buy is stated in
|
|
8
|
+
* the specification and is worth restating here, because it is what the engine
|
|
9
|
+
* is then allowed to assume and therefore not to test: a verified program
|
|
10
|
+
* cannot underflow the stack, cannot jump out of bounds, cannot address a slot
|
|
11
|
+
* that does not exist and cannot loop without charging the budget.
|
|
12
|
+
*
|
|
13
|
+
* Check 6 is the one that looks small and is not. The target of every backward
|
|
14
|
+
* jump must be a `TICK`, so no cycle in the control flow graph can run without
|
|
15
|
+
* charging the loop budget, and the whole of that guarantee is checkable by
|
|
16
|
+
* looking at one instruction rather than by analysing the graph.
|
|
17
|
+
*/
|
|
18
|
+
import { depthChange, isOpcode, operandCount, targetPositions } from '../emit/index.js';
|
|
19
|
+
import type { Opcode } from '../emit/index.js';
|
|
20
|
+
import type { Instruction } from './types.js';
|
|
21
|
+
import { atInstruction } from './errors.js';
|
|
22
|
+
import type { ShapeCheck } from './verify-shape.js';
|
|
23
|
+
|
|
24
|
+
export interface ListLimits {
|
|
25
|
+
readonly slots: number;
|
|
26
|
+
readonly cells: number;
|
|
27
|
+
readonly states: number;
|
|
28
|
+
readonly registers: number;
|
|
29
|
+
readonly channels: number;
|
|
30
|
+
readonly libFunctions: number;
|
|
31
|
+
readonly callSites: number;
|
|
32
|
+
readonly loops: number;
|
|
33
|
+
readonly consts: number;
|
|
34
|
+
readonly series: number;
|
|
35
|
+
argcOf(site: number): number;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/** Which table each opcode's operands index, by position. */
|
|
39
|
+
const OPERAND_TABLES: Partial<Record<Opcode, readonly (keyof ListLimits | 'target' | 'count')[]>> =
|
|
40
|
+
{
|
|
41
|
+
CONST: ['consts'],
|
|
42
|
+
LOAD: ['slots'],
|
|
43
|
+
STORE: ['slots'],
|
|
44
|
+
CELL_INIT: ['cells', 'target'],
|
|
45
|
+
LOADC: ['cells'],
|
|
46
|
+
STOREC: ['cells'],
|
|
47
|
+
SLOAD: ['registers'],
|
|
48
|
+
SSTORE: ['registers'],
|
|
49
|
+
HIST: ['registers'],
|
|
50
|
+
HISTP: ['series'],
|
|
51
|
+
AND_SHORT: ['target'],
|
|
52
|
+
OR_SHORT: ['target'],
|
|
53
|
+
JUMP: ['target'],
|
|
54
|
+
JUMP_FALSE: ['target'],
|
|
55
|
+
TICK: ['loops'],
|
|
56
|
+
FOR_INIT: ['loops', 'slots', 'slots', 'slots', 'target'],
|
|
57
|
+
FOR_NEXT: ['loops', 'slots', 'slots', 'slots', 'target'],
|
|
58
|
+
ARRAY: ['count'],
|
|
59
|
+
CALL_LIB: ['libFunctions', 'count', 'states'],
|
|
60
|
+
CALL_FN: ['callSites'],
|
|
61
|
+
EMIT: ['channels'],
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
const TABLE_NAMES: Readonly<Record<string, string>> = {
|
|
65
|
+
slots: 'the frame',
|
|
66
|
+
cells: 'cells',
|
|
67
|
+
states: 'states',
|
|
68
|
+
registers: 'series',
|
|
69
|
+
channels: 'channels',
|
|
70
|
+
libFunctions: 'lib.functions',
|
|
71
|
+
callSites: 'callSites',
|
|
72
|
+
loops: 'loops',
|
|
73
|
+
consts: 'consts',
|
|
74
|
+
series: "the call site's series bindings",
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Walks one instruction list.
|
|
79
|
+
*
|
|
80
|
+
* `terminator` is `HALT` for the bar's own code and `RET` for a function body,
|
|
81
|
+
* which is check 4, and the depth at it must be zero, which is check 5.
|
|
82
|
+
*/
|
|
83
|
+
export function checkList(
|
|
84
|
+
shape: ShapeCheck,
|
|
85
|
+
list: string,
|
|
86
|
+
code: readonly Instruction[],
|
|
87
|
+
limits: ListLimits,
|
|
88
|
+
terminator: 'HALT' | 'RET',
|
|
89
|
+
): boolean {
|
|
90
|
+
if (code.length === 0) return shape.fail(list, 'an instruction list cannot be empty');
|
|
91
|
+
|
|
92
|
+
// Check 2, and every operand in range.
|
|
93
|
+
for (let i = 0; i < code.length; i += 1) {
|
|
94
|
+
const instruction = code[i];
|
|
95
|
+
const where = atInstruction(list, i);
|
|
96
|
+
if (!shape.array(instruction, where)) return false;
|
|
97
|
+
const opcode = instruction[0];
|
|
98
|
+
if (typeof opcode !== 'string' || !isOpcode(opcode)) {
|
|
99
|
+
return shape.fail(where, `${String(opcode)} is not an opcode this engine implements`);
|
|
100
|
+
}
|
|
101
|
+
const operands = instruction.slice(1);
|
|
102
|
+
if (operands.length !== operandCount(opcode)) {
|
|
103
|
+
return shape.fail(
|
|
104
|
+
where,
|
|
105
|
+
`${opcode} takes ${operandCount(opcode)} operands and carries ${operands.length}`,
|
|
106
|
+
);
|
|
107
|
+
}
|
|
108
|
+
const tables = OPERAND_TABLES[opcode] ?? [];
|
|
109
|
+
for (let k = 0; k < operands.length; k += 1) {
|
|
110
|
+
const operand = operands[k];
|
|
111
|
+
if (!shape.whole(operand, `${where} operand ${k}`)) return false;
|
|
112
|
+
const table = tables[k];
|
|
113
|
+
if (table === undefined || table === 'count') {
|
|
114
|
+
if ((operand as number) < 0) {
|
|
115
|
+
return shape.fail(`${where} operand ${k}`, 'a count cannot be negative');
|
|
116
|
+
}
|
|
117
|
+
continue;
|
|
118
|
+
}
|
|
119
|
+
if (table === 'target') {
|
|
120
|
+
// Check 3. A target past the terminator is out of the list.
|
|
121
|
+
if ((operand as number) < 0 || (operand as number) >= code.length) {
|
|
122
|
+
return shape.fail(where, `the jump target ${operand} is outside a list of ${code.length}`);
|
|
123
|
+
}
|
|
124
|
+
continue;
|
|
125
|
+
}
|
|
126
|
+
// A `CALL_LIB` with no state carries -1 rather than an index.
|
|
127
|
+
if (opcode === 'CALL_LIB' && table === 'states' && operand === -1) continue;
|
|
128
|
+
// A series binding a call site left unbound is -1 and no `HISTP` may reach it.
|
|
129
|
+
const size = limits[table];
|
|
130
|
+
if (typeof size !== 'number') continue;
|
|
131
|
+
if ((operand as number) < 0 || (operand as number) >= size) {
|
|
132
|
+
return shape.fail(
|
|
133
|
+
`${where} operand ${k}`,
|
|
134
|
+
`${operand} is outside ${TABLE_NAMES[table] ?? table}, which holds ${size}`,
|
|
135
|
+
);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
// Check 6: the target of a backward jump is a `TICK`.
|
|
140
|
+
for (const position of targetPositions(opcode)) {
|
|
141
|
+
const target = operands[position];
|
|
142
|
+
if (typeof target !== 'number' || target > i) continue;
|
|
143
|
+
const landing = code[target];
|
|
144
|
+
if (!Array.isArray(landing) || landing[0] !== 'TICK') {
|
|
145
|
+
return shape.fail(
|
|
146
|
+
where,
|
|
147
|
+
`it jumps back to instruction ${target}, which is not a TICK, so the loop would ` +
|
|
148
|
+
'run without charging the budget',
|
|
149
|
+
);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
// Check 4.
|
|
155
|
+
const last = code[code.length - 1];
|
|
156
|
+
if (!Array.isArray(last) || last[0] !== terminator) {
|
|
157
|
+
return shape.fail(
|
|
158
|
+
atInstruction(list, code.length - 1),
|
|
159
|
+
`the last instruction of this list must be ${terminator}`,
|
|
160
|
+
);
|
|
161
|
+
}
|
|
162
|
+
for (let i = 0; i < code.length - 1; i += 1) {
|
|
163
|
+
const opcode = code[i]?.[0];
|
|
164
|
+
if (opcode === 'HALT') {
|
|
165
|
+
return shape.fail(atInstruction(list, i), 'HALT is only ever the last instruction');
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
return checkDepths(shape, list, code, limits, terminator);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* Check 5: the stack depth agrees on every path, never goes below zero, and is
|
|
174
|
+
* zero at the terminator.
|
|
175
|
+
*
|
|
176
|
+
* A disagreement at a join is a corrupt program, not a program with an unusual
|
|
177
|
+
* shape: every instruction has a fixed effect, so two paths reaching one
|
|
178
|
+
* instruction with different depths means one of them was built wrong.
|
|
179
|
+
*/
|
|
180
|
+
function checkDepths(
|
|
181
|
+
shape: ShapeCheck,
|
|
182
|
+
list: string,
|
|
183
|
+
code: readonly Instruction[],
|
|
184
|
+
limits: ListLimits,
|
|
185
|
+
terminator: 'HALT' | 'RET',
|
|
186
|
+
): boolean {
|
|
187
|
+
const depths: (number | undefined)[] = new Array<number | undefined>(code.length).fill(undefined);
|
|
188
|
+
const pending: number[] = [0];
|
|
189
|
+
depths[0] = 0;
|
|
190
|
+
|
|
191
|
+
const reach = (index: number, depth: number, from: number): boolean => {
|
|
192
|
+
if (depth < 0) {
|
|
193
|
+
return shape.fail(atInstruction(list, from), 'it takes the stack below zero');
|
|
194
|
+
}
|
|
195
|
+
const known = depths[index];
|
|
196
|
+
if (known === undefined) {
|
|
197
|
+
depths[index] = depth;
|
|
198
|
+
pending.push(index);
|
|
199
|
+
return true;
|
|
200
|
+
}
|
|
201
|
+
if (known !== depth) {
|
|
202
|
+
return shape.fail(
|
|
203
|
+
atInstruction(list, index),
|
|
204
|
+
`two paths reach it with the stack ${known} and ${depth} deep`,
|
|
205
|
+
);
|
|
206
|
+
}
|
|
207
|
+
return true;
|
|
208
|
+
};
|
|
209
|
+
|
|
210
|
+
while (pending.length > 0) {
|
|
211
|
+
const index = pending.pop();
|
|
212
|
+
if (index === undefined) continue;
|
|
213
|
+
const instruction = code[index];
|
|
214
|
+
const depth = depths[index];
|
|
215
|
+
if (instruction === undefined || depth === undefined) continue;
|
|
216
|
+
const opcode = instruction[0] as Opcode;
|
|
217
|
+
const operands = instruction.slice(1) as number[];
|
|
218
|
+
const after = depth + depthChange(opcode, operands, (site) => limits.argcOf(site));
|
|
219
|
+
if (opcode === terminator) {
|
|
220
|
+
if (after !== 0) {
|
|
221
|
+
return shape.fail(
|
|
222
|
+
atInstruction(list, index),
|
|
223
|
+
`the stack is ${after} deep at ${terminator} and must be empty`,
|
|
224
|
+
);
|
|
225
|
+
}
|
|
226
|
+
continue;
|
|
227
|
+
}
|
|
228
|
+
for (const position of targetPositions(opcode)) {
|
|
229
|
+
const target = operands[position];
|
|
230
|
+
if (typeof target === 'number' && !reach(target, after, index)) return false;
|
|
231
|
+
}
|
|
232
|
+
if (opcode !== 'JUMP' && opcode !== 'RET' && opcode !== 'HALT') {
|
|
233
|
+
if (!reach(index + 1, after, index)) return false;
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
return true;
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
/**
|
|
241
|
+
* Check 7: every channel declared `once` is written exactly once on every path
|
|
242
|
+
* from instruction 0 to `HALT`.
|
|
243
|
+
*
|
|
244
|
+
* That is how a plot column is guaranteed a value, or an explicit absence, for
|
|
245
|
+
* every bar. The counts are capped at two, because "more than once" is the whole
|
|
246
|
+
* of what the check needs to know and a loop would otherwise never settle.
|
|
247
|
+
*/
|
|
248
|
+
export function checkOnce(
|
|
249
|
+
shape: ShapeCheck,
|
|
250
|
+
code: readonly Instruction[],
|
|
251
|
+
once: readonly boolean[],
|
|
252
|
+
): boolean {
|
|
253
|
+
const channels = once.length;
|
|
254
|
+
if (channels === 0) return true;
|
|
255
|
+
const cap = 2;
|
|
256
|
+
const least: (number[] | undefined)[] = new Array<number[] | undefined>(code.length).fill(
|
|
257
|
+
undefined,
|
|
258
|
+
);
|
|
259
|
+
const most: (number[] | undefined)[] = new Array<number[] | undefined>(code.length).fill(
|
|
260
|
+
undefined,
|
|
261
|
+
);
|
|
262
|
+
const pending: number[] = [0];
|
|
263
|
+
least[0] = new Array<number>(channels).fill(0);
|
|
264
|
+
most[0] = new Array<number>(channels).fill(0);
|
|
265
|
+
|
|
266
|
+
const merge = (index: number, low: readonly number[], high: readonly number[]): void => {
|
|
267
|
+
if (index < 0 || index >= code.length) return;
|
|
268
|
+
const knownLow = least[index];
|
|
269
|
+
const knownHigh = most[index];
|
|
270
|
+
if (knownLow === undefined || knownHigh === undefined) {
|
|
271
|
+
least[index] = [...low];
|
|
272
|
+
most[index] = [...high];
|
|
273
|
+
pending.push(index);
|
|
274
|
+
return;
|
|
275
|
+
}
|
|
276
|
+
let changed = false;
|
|
277
|
+
for (let c = 0; c < channels; c += 1) {
|
|
278
|
+
const lower = Math.min(knownLow[c] ?? 0, low[c] ?? 0);
|
|
279
|
+
const upper = Math.min(cap, Math.max(knownHigh[c] ?? 0, high[c] ?? 0));
|
|
280
|
+
if (lower !== knownLow[c]) {
|
|
281
|
+
knownLow[c] = lower;
|
|
282
|
+
changed = true;
|
|
283
|
+
}
|
|
284
|
+
if (upper !== knownHigh[c]) {
|
|
285
|
+
knownHigh[c] = upper;
|
|
286
|
+
changed = true;
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
if (changed) pending.push(index);
|
|
290
|
+
};
|
|
291
|
+
|
|
292
|
+
let end = -1;
|
|
293
|
+
while (pending.length > 0) {
|
|
294
|
+
const index = pending.pop();
|
|
295
|
+
if (index === undefined) continue;
|
|
296
|
+
const instruction = code[index];
|
|
297
|
+
const low = least[index];
|
|
298
|
+
const high = most[index];
|
|
299
|
+
if (instruction === undefined || low === undefined || high === undefined) continue;
|
|
300
|
+
const opcode = instruction[0];
|
|
301
|
+
if (opcode === 'HALT') {
|
|
302
|
+
end = index;
|
|
303
|
+
continue;
|
|
304
|
+
}
|
|
305
|
+
const nextLow = [...low];
|
|
306
|
+
const nextHigh = [...high];
|
|
307
|
+
if (opcode === 'EMIT') {
|
|
308
|
+
const channel = instruction[1] ?? 0;
|
|
309
|
+
nextLow[channel] = Math.min(cap, (nextLow[channel] ?? 0) + 1);
|
|
310
|
+
nextHigh[channel] = Math.min(cap, (nextHigh[channel] ?? 0) + 1);
|
|
311
|
+
}
|
|
312
|
+
for (const position of targetPositions(opcode as Opcode)) {
|
|
313
|
+
const target = instruction[position + 1];
|
|
314
|
+
if (typeof target === 'number') merge(target, nextLow, nextHigh);
|
|
315
|
+
}
|
|
316
|
+
if (opcode !== 'JUMP' && opcode !== 'RET') merge(index + 1, nextLow, nextHigh);
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
if (end < 0) return shape.fail('code', 'no path reaches HALT');
|
|
320
|
+
const low = least[end] ?? [];
|
|
321
|
+
const high = most[end] ?? [];
|
|
322
|
+
for (let c = 0; c < channels; c += 1) {
|
|
323
|
+
if (!once[c]) continue;
|
|
324
|
+
if (low[c] !== 1 || high[c] !== 1) {
|
|
325
|
+
return shape.fail(
|
|
326
|
+
`channels[${c}]`,
|
|
327
|
+
`it is declared once and is written ${low[c] ?? 0} to ${high[c] ?? 0} times on a path to HALT`,
|
|
328
|
+
);
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
return true;
|
|
332
|
+
}
|
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Check 1 of `compiled-program.md` 3.5 over `requests` and the bodies inside
|
|
3
|
+
* it.
|
|
4
|
+
*
|
|
5
|
+
* A read's body holds the tables a program holds for the machine of section 3,
|
|
6
|
+
* counted from zero, so it needs the same walk the program's own tables get and
|
|
7
|
+
* for the same reason: every later step indexes into them, and an index out of
|
|
8
|
+
* range that is not caught here is read past the end of an array during a bar.
|
|
9
|
+
*
|
|
10
|
+
* **A body that was not walked is the hole the whole verification exists to
|
|
11
|
+
* close.** It is reached by the same interpreter, with the same instruction
|
|
12
|
+
* list, over another instrument's history. Verifying the program and not the
|
|
13
|
+
* expression it carries would leave exactly the failure 3.5 is written to
|
|
14
|
+
* prevent, one level down where nobody would look for it.
|
|
15
|
+
*/
|
|
16
|
+
import type { ShapeCheck } from './verify-shape.js';
|
|
17
|
+
|
|
18
|
+
const READS = ['timeframe', 'symbol'] as const;
|
|
19
|
+
const MODES = ['confirmed', 'developing', 'lookahead'] as const;
|
|
20
|
+
const CHART_FACTS = ['symbol', 'exchange', 'interval'] as const;
|
|
21
|
+
|
|
22
|
+
/** The tables a machine indexes, wherever they sit in the program. */
|
|
23
|
+
export interface MachineTables {
|
|
24
|
+
readonly series: readonly unknown[];
|
|
25
|
+
readonly cells: readonly unknown[];
|
|
26
|
+
readonly states: readonly unknown[];
|
|
27
|
+
readonly functions: readonly unknown[];
|
|
28
|
+
readonly callSites: readonly unknown[];
|
|
29
|
+
readonly loops: readonly unknown[];
|
|
30
|
+
readonly slots: number;
|
|
31
|
+
readonly libFunctions: number;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// The five the format declares (compiled-program.md section 2, series[].kind).
|
|
35
|
+
// A verifier that listed only the kinds an engine happens to execute would
|
|
36
|
+
// refuse a well-formed program with a message blaming the compiler that wrote
|
|
37
|
+
// it, and would pre-empt the capability refusal that exists to say which
|
|
38
|
+
// feature is missing. Verification answers "is this a valid program", and the
|
|
39
|
+
// capability check answers "can I run it".
|
|
40
|
+
const REGISTER_KINDS = ['bar', 'computed', 'argument', 'request', 'input'] as const;
|
|
41
|
+
const CELL_KINDS = ['var', 'live'] as const;
|
|
42
|
+
const LOOP_KINDS = ['for', 'forIn', 'while'] as const;
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Every table one machine indexes, and every index into one of them.
|
|
46
|
+
*
|
|
47
|
+
* Shared by the program and by every request body rather than written twice,
|
|
48
|
+
* because two copies of this walk would be two places for a table to gain a
|
|
49
|
+
* field and only one of them to learn about it.
|
|
50
|
+
*/
|
|
51
|
+
export function checkMachineTables(
|
|
52
|
+
shape: ShapeCheck,
|
|
53
|
+
prefix: string,
|
|
54
|
+
tables: MachineTables,
|
|
55
|
+
): boolean {
|
|
56
|
+
for (let i = 0; i < tables.series.length; i += 1) {
|
|
57
|
+
const register = tables.series[i];
|
|
58
|
+
const path = `${prefix}series[${i}]`;
|
|
59
|
+
if (!shape.object(register, path)) return false;
|
|
60
|
+
if (register['id'] !== i) return shape.fail(`${path}.id`, 'a register id is its position');
|
|
61
|
+
if (!shape.one(register['kind'], `${path}.kind`, REGISTER_KINDS)) return false;
|
|
62
|
+
if (register['kind'] === 'bar' && !shape.string(register['field'], `${path}.field`)) {
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
for (let i = 0; i < tables.cells.length; i += 1) {
|
|
68
|
+
const cell = tables.cells[i];
|
|
69
|
+
const path = `${prefix}cells[${i}]`;
|
|
70
|
+
if (!shape.object(cell, path)) return false;
|
|
71
|
+
if (!shape.one(cell['kind'], `${path}.kind`, CELL_KINDS)) return false;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
for (let i = 0; i < tables.states.length; i += 1) {
|
|
75
|
+
const state = tables.states[i];
|
|
76
|
+
const path = `${prefix}states[${i}]`;
|
|
77
|
+
if (!shape.object(state, path)) return false;
|
|
78
|
+
if (!shape.index(state['fn'], `${path}.fn`, tables.libFunctions, 'lib.functions')) return false;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
for (let i = 0; i < tables.functions.length; i += 1) {
|
|
82
|
+
const one = tables.functions[i];
|
|
83
|
+
const path = `${prefix}functions[${i}]`;
|
|
84
|
+
if (!shape.object(one, path)) return false;
|
|
85
|
+
if (!shape.string(one['name'], `${path}.name`)) return false;
|
|
86
|
+
if (!shape.whole(one['params'], `${path}.params`)) return false;
|
|
87
|
+
if (!shape.whole(one['slots'], `${path}.slots`)) return false;
|
|
88
|
+
if (!shape.array(one['code'], `${path}.code`)) return false;
|
|
89
|
+
if (Number(one['params']) > Number(one['slots'])) {
|
|
90
|
+
return shape.fail(`${path}.slots`, 'a frame cannot be smaller than its parameter list');
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
for (let i = 0; i < tables.callSites.length; i += 1) {
|
|
95
|
+
const site = tables.callSites[i];
|
|
96
|
+
const path = `${prefix}callSites[${i}]`;
|
|
97
|
+
if (!shape.object(site, path)) return false;
|
|
98
|
+
if (!shape.index(site['fn'], `${path}.fn`, tables.functions.length, 'functions')) return false;
|
|
99
|
+
if (!shape.whole(site['argc'], `${path}.argc`)) return false;
|
|
100
|
+
if (!shape.whole(site['cellBase'], `${path}.cellBase`)) return false;
|
|
101
|
+
if (!shape.whole(site['stateBase'], `${path}.stateBase`)) return false;
|
|
102
|
+
if (!shape.array(site['series'], `${path}.series`)) return false;
|
|
103
|
+
const target = tables.functions[Number(site['fn'])] as Readonly<Record<string, unknown>>;
|
|
104
|
+
if (site['argc'] !== target['params']) {
|
|
105
|
+
return shape.fail(`${path}.argc`, "a site passes exactly the function's parameter count");
|
|
106
|
+
}
|
|
107
|
+
for (let k = 0; k < site['series'].length; k += 1) {
|
|
108
|
+
const bound = site['series'][k];
|
|
109
|
+
if (bound === -1) continue;
|
|
110
|
+
if (!shape.index(bound, `${path}.series[${k}]`, tables.series.length, 'series')) return false;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
for (let i = 0; i < tables.loops.length; i += 1) {
|
|
115
|
+
const loop = tables.loops[i];
|
|
116
|
+
const path = `${prefix}loops[${i}]`;
|
|
117
|
+
if (!shape.object(loop, path)) return false;
|
|
118
|
+
if (!shape.one(loop['kind'], `${path}.kind`, LOOP_KINDS)) return false;
|
|
119
|
+
if (!shape.whole(loop['line'], `${path}.line`)) return false;
|
|
120
|
+
if (!shape.whole(loop['col'], `${path}.col`)) return false;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
return true;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* `requests` and every body inside it, 2.16.
|
|
128
|
+
*
|
|
129
|
+
* `series` is the register of the **enclosing** machine that the read's value
|
|
130
|
+
* lands in, so it is checked against the table the caller passes; everything
|
|
131
|
+
* inside `body` is the body's own and is checked against the body's.
|
|
132
|
+
*/
|
|
133
|
+
export function checkRequests(
|
|
134
|
+
shape: ShapeCheck,
|
|
135
|
+
prefix: string,
|
|
136
|
+
requests: readonly unknown[],
|
|
137
|
+
registers: number,
|
|
138
|
+
libFunctions: number,
|
|
139
|
+
keys: ReadonlySet<string>,
|
|
140
|
+
): boolean {
|
|
141
|
+
const seen = new Set<number>();
|
|
142
|
+
return walk(shape, prefix, requests, registers, libFunctions, keys, seen);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
function walk(
|
|
146
|
+
shape: ShapeCheck,
|
|
147
|
+
prefix: string,
|
|
148
|
+
requests: readonly unknown[],
|
|
149
|
+
registers: number,
|
|
150
|
+
libFunctions: number,
|
|
151
|
+
keys: ReadonlySet<string>,
|
|
152
|
+
seen: Set<number>,
|
|
153
|
+
): boolean {
|
|
154
|
+
for (let i = 0; i < requests.length; i += 1) {
|
|
155
|
+
const request = requests[i];
|
|
156
|
+
const path = `${prefix}requests[${i}]`;
|
|
157
|
+
if (!shape.object(request, path)) return false;
|
|
158
|
+
if (!shape.whole(request['id'], `${path}.id`)) return false;
|
|
159
|
+
// The id is this read's handle and is what `req.isReady` is handed, so two
|
|
160
|
+
// reads sharing one would answer each other's question.
|
|
161
|
+
if (seen.has(request['id'])) {
|
|
162
|
+
return shape.fail(`${path}.id`, `${request['id']} is already another read's handle`);
|
|
163
|
+
}
|
|
164
|
+
seen.add(request['id']);
|
|
165
|
+
if (!shape.one(request['read'], `${path}.read`, READS)) return false;
|
|
166
|
+
if (!shape.one(request['mode'], `${path}.mode`, MODES)) return false;
|
|
167
|
+
if (!shape.index(request['series'], `${path}.series`, registers, 'series')) return false;
|
|
168
|
+
if (request['warmup'] !== null && !shape.whole(request['warmup'], `${path}.warmup`)) {
|
|
169
|
+
return false;
|
|
170
|
+
}
|
|
171
|
+
for (const field of ['symbol', 'exchange', 'timeframe']) {
|
|
172
|
+
if (!checkIdentity(shape, request[field], `${path}.${field}`, keys)) return false;
|
|
173
|
+
}
|
|
174
|
+
if (!checkBody(shape, `${path}.body.`, request['body'], libFunctions, keys, seen)) return false;
|
|
175
|
+
}
|
|
176
|
+
return true;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
function checkBody(
|
|
180
|
+
shape: ShapeCheck,
|
|
181
|
+
prefix: string,
|
|
182
|
+
raw: unknown,
|
|
183
|
+
libFunctions: number,
|
|
184
|
+
keys: ReadonlySet<string>,
|
|
185
|
+
seen: Set<number>,
|
|
186
|
+
): boolean {
|
|
187
|
+
const at = prefix.slice(0, -1);
|
|
188
|
+
if (!shape.object(raw, at)) return false;
|
|
189
|
+
for (const name of ['inputs', 'series', 'cells', 'states', 'functions', 'callSites', 'loops',
|
|
190
|
+
'requests', 'code', 'pos', 'fnPos']) {
|
|
191
|
+
if (!shape.array(raw[name], `${prefix}${name}`)) return false;
|
|
192
|
+
}
|
|
193
|
+
if (!shape.object(raw['frame'], `${prefix}frame`)) return false;
|
|
194
|
+
if (!shape.whole(raw['frame']['slots'], `${prefix}frame.slots`)) return false;
|
|
195
|
+
|
|
196
|
+
const series = raw['series'] as readonly unknown[];
|
|
197
|
+
if (!checkMachineTables(shape, prefix, {
|
|
198
|
+
series,
|
|
199
|
+
cells: raw['cells'] as readonly unknown[],
|
|
200
|
+
states: raw['states'] as readonly unknown[],
|
|
201
|
+
functions: raw['functions'] as readonly unknown[],
|
|
202
|
+
callSites: raw['callSites'] as readonly unknown[],
|
|
203
|
+
loops: raw['loops'] as readonly unknown[],
|
|
204
|
+
slots: Number(raw['frame']['slots']),
|
|
205
|
+
libFunctions,
|
|
206
|
+
})) {
|
|
207
|
+
return false;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
const inputs = raw['inputs'] as readonly unknown[];
|
|
211
|
+
for (let i = 0; i < inputs.length; i += 1) {
|
|
212
|
+
const input = inputs[i];
|
|
213
|
+
const path = `${prefix}inputs[${i}]`;
|
|
214
|
+
if (!shape.object(input, path)) return false;
|
|
215
|
+
if (!shape.string(input['input'], `${path}.input`)) return false;
|
|
216
|
+
if (!keys.has(input['input'])) {
|
|
217
|
+
return shape.fail(path, `it names the input ${input['input']}, which inputs[] does not declare`);
|
|
218
|
+
}
|
|
219
|
+
if (!shape.index(input['series'], `${path}.series`, series.length, 'the body\'s series')) {
|
|
220
|
+
return false;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
return walk(shape, prefix, raw['requests'] as readonly unknown[], series.length, libFunctions,
|
|
225
|
+
keys, seen);
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
/**
|
|
229
|
+
* One of the three forms a request's identity field takes, 2.16.
|
|
230
|
+
*
|
|
231
|
+
* A value, the setting that supplies it, or one of the three chart facts that
|
|
232
|
+
* identify a chart rather than describe it. The rest of the `chart` namespace
|
|
233
|
+
* describes the chart, and a request built from one of those would name nothing.
|
|
234
|
+
*/
|
|
235
|
+
function checkIdentity(
|
|
236
|
+
shape: ShapeCheck,
|
|
237
|
+
value: unknown,
|
|
238
|
+
path: string,
|
|
239
|
+
keys: ReadonlySet<string>,
|
|
240
|
+
): boolean {
|
|
241
|
+
if (value === null || typeof value === 'string') return true;
|
|
242
|
+
if (!shape.object(value, path)) return false;
|
|
243
|
+
const named = value['input'];
|
|
244
|
+
if (named !== undefined) {
|
|
245
|
+
if (!shape.string(named, `${path}.input`)) return false;
|
|
246
|
+
if (!keys.has(named)) {
|
|
247
|
+
return shape.fail(path, `it names the input ${named}, which inputs[] does not declare`);
|
|
248
|
+
}
|
|
249
|
+
return true;
|
|
250
|
+
}
|
|
251
|
+
if (value['chart'] === undefined) {
|
|
252
|
+
return shape.fail(path, 'an object here names an input or a chart fact');
|
|
253
|
+
}
|
|
254
|
+
return shape.one(value['chart'], `${path}.chart`, CHART_FACTS);
|
|
255
|
+
}
|