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,295 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The object heap: arrays, grids and drawing objects, `compiled-program.md`
|
|
3
|
+
* 3.2.
|
|
4
|
+
*
|
|
5
|
+
* Everything here exists to serve one requirement, section 6.2's: after a
|
|
6
|
+
* restore, two cells that held the same array still hold the same array, and a
|
|
7
|
+
* `push` through one is visible through the other. A heap addressed by integer
|
|
8
|
+
* gives that for nothing, because a restore puts integers back and the graph
|
|
9
|
+
* was never taken apart.
|
|
10
|
+
*
|
|
11
|
+
* **Rollback is an undo journal rather than a copy.** Section 6.2 permits a
|
|
12
|
+
* full copy, copy on write, an undo journal or nothing at all, and requires the
|
|
13
|
+
* semantics rather than the representation. A full copy of the heap at every
|
|
14
|
+
* bar is quadratic in a study that keeps a drawing object per bar, which is a
|
|
15
|
+
* study people write, so the journal takes a copy of an object the first time a
|
|
16
|
+
* bar touches it and of nothing else. A bar that changes nothing costs nothing.
|
|
17
|
+
*
|
|
18
|
+
* **What nothing can reach is dropped at a checkpoint.** A study that builds an
|
|
19
|
+
* array every bar and keeps none of them would otherwise grow for as long as
|
|
20
|
+
* the chart is open, and refusing it at a ceiling would be the wrong answer:
|
|
21
|
+
* the objects are rubbish, not a program asking for too much. The sweep runs
|
|
22
|
+
* only once the heap has grown past what the last one found live, so its cost
|
|
23
|
+
* is spread over the allocations that made it necessary.
|
|
24
|
+
*/
|
|
25
|
+
import type { Value } from './value.js';
|
|
26
|
+
import { isRef, reference } from './value.js';
|
|
27
|
+
|
|
28
|
+
/** The kinds of object a reference can point at. */
|
|
29
|
+
export type ObjectKind = 'array' | 'table' | 'line' | 'label' | 'box' | 'polyline';
|
|
30
|
+
|
|
31
|
+
/** One cell a script wrote into a grid during this bar. */
|
|
32
|
+
export interface GridCell {
|
|
33
|
+
readonly row: number;
|
|
34
|
+
readonly col: number;
|
|
35
|
+
readonly text: Value;
|
|
36
|
+
readonly textColor: Value;
|
|
37
|
+
readonly bgColor: Value;
|
|
38
|
+
readonly align: Value;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export interface ArrayObject {
|
|
42
|
+
readonly kind: 'array';
|
|
43
|
+
items: Value[];
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export interface TableObject {
|
|
47
|
+
readonly kind: 'table';
|
|
48
|
+
readonly rows: number;
|
|
49
|
+
readonly cols: number;
|
|
50
|
+
/**
|
|
51
|
+
* The cells written this bar, in write order.
|
|
52
|
+
*
|
|
53
|
+
* Not in a checkpoint and not rolled back: step 3 of every execution empties
|
|
54
|
+
* the buffers, so a re-executed bar rebuilds them from nothing.
|
|
55
|
+
*/
|
|
56
|
+
cells: GridCell[];
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export interface DrawingObject {
|
|
60
|
+
readonly kind: 'line' | 'label' | 'box' | 'polyline';
|
|
61
|
+
props: Record<string, Value>;
|
|
62
|
+
deleted: boolean;
|
|
63
|
+
/** The bar it was deleted on, for OS4005's message. */
|
|
64
|
+
deletedAt: number;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export type HeapObject = ArrayObject | TableObject | DrawingObject;
|
|
68
|
+
|
|
69
|
+
export function isDrawing(object: HeapObject): object is DrawingObject {
|
|
70
|
+
return object.kind !== 'array' && object.kind !== 'table';
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
function copyObject(object: HeapObject): HeapObject {
|
|
74
|
+
if (object.kind === 'array') return { kind: 'array', items: [...object.items] };
|
|
75
|
+
if (object.kind === 'table') {
|
|
76
|
+
return { kind: 'table', rows: object.rows, cols: object.cols, cells: [...object.cells] };
|
|
77
|
+
}
|
|
78
|
+
return {
|
|
79
|
+
kind: object.kind,
|
|
80
|
+
props: { ...object.props },
|
|
81
|
+
deleted: object.deleted,
|
|
82
|
+
deletedAt: object.deletedAt,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/** What a caller must offer the sweep: every value a live root holds. */
|
|
87
|
+
export type RootWalk = (visit: (value: Value) => void) => void;
|
|
88
|
+
|
|
89
|
+
export class Heap {
|
|
90
|
+
private readonly objects: (HeapObject | undefined)[] = [];
|
|
91
|
+
private readonly free: number[] = [];
|
|
92
|
+
/** Drawing object ids in creation order, which is the order a host draws them. */
|
|
93
|
+
private drawingIds: number[] = [];
|
|
94
|
+
/** A copy of each object taken before the first change this bar made to it. */
|
|
95
|
+
private readonly taken = new Map<number, HeapObject>();
|
|
96
|
+
/** Ids allocated during this bar, oldest first. */
|
|
97
|
+
private created: number[] = [];
|
|
98
|
+
/** The drawing roster's length when this bar began. */
|
|
99
|
+
private drawingsAtBarStart = 0;
|
|
100
|
+
private liveAtSweep = 0;
|
|
101
|
+
private sinceSweep = 0;
|
|
102
|
+
private elements = 0;
|
|
103
|
+
/**
|
|
104
|
+
* Drawing objects created and not yet deleted, kept as a running count.
|
|
105
|
+
*
|
|
106
|
+
* Counted rather than measured because two things ask for it on the hot
|
|
107
|
+
* path: `draw.count()` on every bar and the object ceiling on every
|
|
108
|
+
* creation. Walking the roster for each would make a study that holds ten
|
|
109
|
+
* thousand objects quadratic in the number it holds, which is the study the
|
|
110
|
+
* ceiling exists for. The count is adjusted by the same journal that undoes
|
|
111
|
+
* everything else, so a rolled back creation is a rolled back count.
|
|
112
|
+
*/
|
|
113
|
+
private drawingsLive = 0;
|
|
114
|
+
|
|
115
|
+
/** Objects alive right now, which is what a heap ceiling counts. */
|
|
116
|
+
liveCount(): number {
|
|
117
|
+
return this.objects.length - this.free.length;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/** Drawing objects the script has created and not deleted. */
|
|
121
|
+
drawingCount(): number {
|
|
122
|
+
return this.drawingsLive;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/** Total array elements held. */
|
|
126
|
+
elementCount(): number {
|
|
127
|
+
return this.elements;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
get(id: number): HeapObject | undefined {
|
|
131
|
+
return this.objects[id];
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/** The object a reference names, or nothing when the value is not one. */
|
|
135
|
+
deref(value: Value): HeapObject | undefined {
|
|
136
|
+
return isRef(value) ? this.objects[value.id] : undefined;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
allocate(object: HeapObject): number {
|
|
140
|
+
const reused = this.free.pop();
|
|
141
|
+
const id = reused ?? this.objects.length;
|
|
142
|
+
this.objects[id] = object;
|
|
143
|
+
this.created.push(id);
|
|
144
|
+
this.sinceSweep += 1;
|
|
145
|
+
if (object.kind === 'array') this.elements += object.items.length;
|
|
146
|
+
if (isDrawing(object)) {
|
|
147
|
+
this.drawingIds.push(id);
|
|
148
|
+
this.drawingsLive += 1;
|
|
149
|
+
}
|
|
150
|
+
return id;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* Delete one drawing object, which is the only thing that ends its life.
|
|
155
|
+
*
|
|
156
|
+
* Here rather than in the library call so that the roster, the count and the
|
|
157
|
+
* journal cannot disagree: a caller that set the flag itself would leave the
|
|
158
|
+
* count saying one thing and the objects another, and the first symptom
|
|
159
|
+
* would be a ceiling refusing a script that had deleted everything.
|
|
160
|
+
*
|
|
161
|
+
* Deleting twice does nothing and is not an error. The script asked for the
|
|
162
|
+
* object to be gone and it is gone; only a change to a deleted object is
|
|
163
|
+
* OS4005.
|
|
164
|
+
*/
|
|
165
|
+
deleteDrawing(id: number, bar: number): void {
|
|
166
|
+
const object = this.objects[id];
|
|
167
|
+
if (object === undefined || !isDrawing(object) || object.deleted) return;
|
|
168
|
+
this.touch(id);
|
|
169
|
+
object.deleted = true;
|
|
170
|
+
object.deletedAt = bar;
|
|
171
|
+
this.drawingsLive -= 1;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* Announce a change to an object before making it.
|
|
176
|
+
*
|
|
177
|
+
* The copy is taken once per bar per object: the journal only has to restore
|
|
178
|
+
* the state the bar started in, so the second change to the same object has
|
|
179
|
+
* nothing to record.
|
|
180
|
+
*/
|
|
181
|
+
touch(id: number): void {
|
|
182
|
+
if (this.taken.has(id)) return;
|
|
183
|
+
const object = this.objects[id];
|
|
184
|
+
if (object === undefined) return;
|
|
185
|
+
this.taken.set(id, copyObject(object));
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
/** Called after an array's length changes, so the ceiling sees it. */
|
|
189
|
+
countElements(delta: number): void {
|
|
190
|
+
this.elements += delta;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
/** The drawing objects a host should see, in creation order. */
|
|
194
|
+
drawings(): readonly { readonly id: number; readonly object: DrawingObject }[] {
|
|
195
|
+
const out: { id: number; object: DrawingObject }[] = [];
|
|
196
|
+
for (const id of this.drawingIds) {
|
|
197
|
+
const object = this.objects[id];
|
|
198
|
+
if (object === undefined || !isDrawing(object) || object.deleted) continue;
|
|
199
|
+
out.push({ id, object });
|
|
200
|
+
}
|
|
201
|
+
return out;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
/** Undo every change this bar made, which is section 6.3 for the heap. */
|
|
205
|
+
rollback(): void {
|
|
206
|
+
for (const [id, object] of this.taken) {
|
|
207
|
+
const current = this.objects[id];
|
|
208
|
+
if (current !== undefined && current.kind === 'array' && object.kind === 'array') {
|
|
209
|
+
this.elements += object.items.length - current.items.length;
|
|
210
|
+
}
|
|
211
|
+
// A deletion this bar made is undone with everything else, so the object
|
|
212
|
+
// comes back and the count comes back with it.
|
|
213
|
+
if (current !== undefined && isDrawing(current) && isDrawing(object)) {
|
|
214
|
+
this.drawingsLive += (object.deleted ? 0 : 1) - (current.deleted ? 0 : 1);
|
|
215
|
+
}
|
|
216
|
+
this.objects[id] = object;
|
|
217
|
+
}
|
|
218
|
+
this.taken.clear();
|
|
219
|
+
for (let i = this.created.length - 1; i >= 0; i -= 1) {
|
|
220
|
+
const id = this.created[i];
|
|
221
|
+
if (id === undefined) continue;
|
|
222
|
+
const object = this.objects[id];
|
|
223
|
+
if (object !== undefined && object.kind === 'array') this.elements -= object.items.length;
|
|
224
|
+
// An object created and then deleted on the same bar was counted out of
|
|
225
|
+
// the roster by the deletion, so only a live one is counted out here.
|
|
226
|
+
if (object !== undefined && isDrawing(object) && !object.deleted) this.drawingsLive -= 1;
|
|
227
|
+
this.objects[id] = undefined;
|
|
228
|
+
this.free.push(id);
|
|
229
|
+
this.sinceSweep -= 1;
|
|
230
|
+
}
|
|
231
|
+
this.created = [];
|
|
232
|
+
this.drawingIds.length = this.drawingsAtBarStart;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
/** Accept every change this bar made. The journal starts again empty. */
|
|
236
|
+
commit(): void {
|
|
237
|
+
this.taken.clear();
|
|
238
|
+
this.created = [];
|
|
239
|
+
this.drawingsAtBarStart = this.drawingIds.length;
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
/** Drop what nothing can reach. Only at a checkpoint, and only when it pays. */
|
|
243
|
+
sweep(roots: RootWalk): void {
|
|
244
|
+
if (this.sinceSweep < this.liveAtSweep + 256) return;
|
|
245
|
+
const live = new Set<number>();
|
|
246
|
+
const pending: number[] = [];
|
|
247
|
+
|
|
248
|
+
const visit = (value: Value): void => {
|
|
249
|
+
if (!isRef(value) || live.has(value.id)) return;
|
|
250
|
+
if (this.objects[value.id] === undefined) return;
|
|
251
|
+
live.add(value.id);
|
|
252
|
+
pending.push(value.id);
|
|
253
|
+
};
|
|
254
|
+
|
|
255
|
+
roots(visit);
|
|
256
|
+
// Every drawing object that has not been deleted is a root of its own: the
|
|
257
|
+
// surface holds it, so a script that draws a box and keeps no name for it
|
|
258
|
+
// still gets a box.
|
|
259
|
+
for (const id of this.drawingIds) {
|
|
260
|
+
const object = this.objects[id];
|
|
261
|
+
if (object !== undefined && isDrawing(object) && !object.deleted) visit(reference(id));
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
while (pending.length > 0) {
|
|
265
|
+
const id = pending.pop();
|
|
266
|
+
if (id === undefined) continue;
|
|
267
|
+
const object = this.objects[id];
|
|
268
|
+
if (object === undefined) continue;
|
|
269
|
+
if (object.kind === 'array') for (const item of object.items) visit(item);
|
|
270
|
+
else if (object.kind === 'table') {
|
|
271
|
+
for (const cell of object.cells) {
|
|
272
|
+
visit(cell.text);
|
|
273
|
+
visit(cell.textColor);
|
|
274
|
+
visit(cell.bgColor);
|
|
275
|
+
}
|
|
276
|
+
} else for (const key of Object.keys(object.props)) visit(object.props[key] ?? null);
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
for (let id = 0; id < this.objects.length; id += 1) {
|
|
280
|
+
const object = this.objects[id];
|
|
281
|
+
if (object === undefined || live.has(id)) continue;
|
|
282
|
+
if (object.kind === 'array') this.elements -= object.items.length;
|
|
283
|
+
// A drawing that has not been deleted is a root of its own, so this
|
|
284
|
+
// subtracts nothing in practice. It is written because the day the roots
|
|
285
|
+
// change is the day a silently wrong count would start.
|
|
286
|
+
if (isDrawing(object) && !object.deleted) this.drawingsLive -= 1;
|
|
287
|
+
this.objects[id] = undefined;
|
|
288
|
+
this.free.push(id);
|
|
289
|
+
}
|
|
290
|
+
this.drawingIds = this.drawingIds.filter((id) => live.has(id));
|
|
291
|
+
this.drawingsAtBarStart = this.drawingIds.length;
|
|
292
|
+
this.liveAtSweep = live.size;
|
|
293
|
+
this.sinceSweep = 0;
|
|
294
|
+
}
|
|
295
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What a running program holds: the six values of `compiled-program.md` 3.1
|
|
3
|
+
* and the heap the sixth one points into.
|
|
4
|
+
*
|
|
5
|
+
* Separate from the engine's own module because the library needs both and the
|
|
6
|
+
* engine needs both, and a value model that lived inside either one would make
|
|
7
|
+
* the other import it through a door it has no business going through.
|
|
8
|
+
*/
|
|
9
|
+
export type { ColourValue, Reference, Value } from './value.js';
|
|
10
|
+
export {
|
|
11
|
+
ABSENT,
|
|
12
|
+
colour,
|
|
13
|
+
isAbsent,
|
|
14
|
+
isBool,
|
|
15
|
+
isColour,
|
|
16
|
+
isNumber,
|
|
17
|
+
isRef,
|
|
18
|
+
isString,
|
|
19
|
+
numberValue,
|
|
20
|
+
reference,
|
|
21
|
+
tagOf,
|
|
22
|
+
valuesEqual,
|
|
23
|
+
} from './value.js';
|
|
24
|
+
|
|
25
|
+
export type {
|
|
26
|
+
ArrayObject,
|
|
27
|
+
DrawingObject,
|
|
28
|
+
GridCell,
|
|
29
|
+
HeapObject,
|
|
30
|
+
ObjectKind,
|
|
31
|
+
RootWalk,
|
|
32
|
+
TableObject,
|
|
33
|
+
} from './heap.js';
|
|
34
|
+
export { Heap, isDrawing } from './heap.js';
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The six values a running program can hold, `compiled-program.md` 3.1.
|
|
3
|
+
*
|
|
4
|
+
* Absence is `null`, a number is a number, a boolean is a boolean and a string
|
|
5
|
+
* is a string, so four of the six tags are the ones the host language already
|
|
6
|
+
* carries and cost nothing to test. The two that have no native tag, a colour
|
|
7
|
+
* and a reference, are objects carrying a `tag` field, so `typeof` answers the
|
|
8
|
+
* question for every value in one step and no value can be mistaken for
|
|
9
|
+
* another.
|
|
10
|
+
*
|
|
11
|
+
* **Absence is never a number.** Section 3.4 is explicit that a not-a-number
|
|
12
|
+
* sentinel would make absence propagate through arithmetic by accident, which
|
|
13
|
+
* is the right answer for four operators and the wrong one for six, and would
|
|
14
|
+
* turn `isNone` into a floating point comparison. `null` has none of those
|
|
15
|
+
* properties, and the two rules the arithmetic actually needs, absence in
|
|
16
|
+
* gives absence out and a non-finite result becomes absent, are then written
|
|
17
|
+
* once each rather than hidden inside a representation.
|
|
18
|
+
*
|
|
19
|
+
* **A reference is an integer into the heap, not a pointer to an object.**
|
|
20
|
+
* That choice is what makes section 6.2's hardest requirement free: a
|
|
21
|
+
* checkpoint copies the heap table, every reference in a restored cell is the
|
|
22
|
+
* same integer it was, and two cells that shared an array still share it. A
|
|
23
|
+
* representation that put the object itself in the cell would have to work out
|
|
24
|
+
* which cells pointed at the same object and rebuild the graph, and a restore
|
|
25
|
+
* that deep copied each cell separately would silently turn one array into two.
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
/** Red, green and blue as whole numbers 0 to 255, alpha as a number 0 to 1. */
|
|
29
|
+
export interface ColourValue {
|
|
30
|
+
readonly tag: 'color';
|
|
31
|
+
readonly r: number;
|
|
32
|
+
readonly g: number;
|
|
33
|
+
readonly b: number;
|
|
34
|
+
readonly a: number;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/** A handle into the object heap. Opaque to a script, and equal only to itself. */
|
|
38
|
+
export interface Reference {
|
|
39
|
+
readonly tag: 'ref';
|
|
40
|
+
readonly id: number;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/** A value on the machine. */
|
|
44
|
+
export type Value = null | number | boolean | string | ColourValue | Reference;
|
|
45
|
+
|
|
46
|
+
/** Absence, the value a script writes `none`. */
|
|
47
|
+
export const ABSENT = null;
|
|
48
|
+
|
|
49
|
+
export function isAbsent(value: Value): value is null {
|
|
50
|
+
return value === null;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export function isNumber(value: Value): value is number {
|
|
54
|
+
return typeof value === 'number';
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export function isBool(value: Value): value is boolean {
|
|
58
|
+
return typeof value === 'boolean';
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export function isString(value: Value): value is string {
|
|
62
|
+
return typeof value === 'string';
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export function isColour(value: Value): value is ColourValue {
|
|
66
|
+
return typeof value === 'object' && value !== null && value.tag === 'color';
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
export function isRef(value: Value): value is Reference {
|
|
70
|
+
return typeof value === 'object' && value !== null && value.tag === 'ref';
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export function reference(id: number): Reference {
|
|
74
|
+
return { tag: 'ref', id };
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* A number made safe to store, by the two rules of section 3.1 that hold at
|
|
79
|
+
* every arithmetic result and every store.
|
|
80
|
+
*
|
|
81
|
+
* A result with no finite value is absent, checked here rather than at the end
|
|
82
|
+
* of an expression so that `(1e308 * 10) / 10` is absent rather than depending
|
|
83
|
+
* on where an engine happens to round. Negative zero becomes positive zero, so
|
|
84
|
+
* nothing downstream can observe the sign of a zero and two engines cannot
|
|
85
|
+
* differ over a minus in front of one.
|
|
86
|
+
*/
|
|
87
|
+
export function numberValue(x: number): Value {
|
|
88
|
+
if (!Number.isFinite(x)) return ABSENT;
|
|
89
|
+
return x === 0 ? 0 : x;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/** The name of a value's tag, for a diagnostic that has to say what it found. */
|
|
93
|
+
export function tagOf(value: Value): string {
|
|
94
|
+
if (value === null) return 'none';
|
|
95
|
+
switch (typeof value) {
|
|
96
|
+
case 'number':
|
|
97
|
+
return 'number';
|
|
98
|
+
case 'boolean':
|
|
99
|
+
return 'bool';
|
|
100
|
+
case 'string':
|
|
101
|
+
return 'string';
|
|
102
|
+
default:
|
|
103
|
+
return value.tag === 'color' ? 'color' : 'reference';
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Whole channels, and an alpha held to its range.
|
|
109
|
+
*
|
|
110
|
+
* `stdlib.md` 11.2 requires every call that computes a colour to round red,
|
|
111
|
+
* green and blue with the language's own rounding, halves away from zero,
|
|
112
|
+
* before it returns, so that the value model's invariant holds of every colour
|
|
113
|
+
* and not only of a literal.
|
|
114
|
+
*/
|
|
115
|
+
export function colour(r: number, g: number, b: number, a: number): ColourValue {
|
|
116
|
+
return {
|
|
117
|
+
tag: 'color',
|
|
118
|
+
r: channel(r),
|
|
119
|
+
g: channel(g),
|
|
120
|
+
b: channel(b),
|
|
121
|
+
a: a < 0 ? 0 : a > 1 ? 1 : a === 0 ? 0 : a,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
function channel(x: number): number {
|
|
126
|
+
if (!Number.isFinite(x)) return 0;
|
|
127
|
+
const rounded = halfAway(x);
|
|
128
|
+
return rounded < 0 ? 0 : rounded > 255 ? 255 : rounded;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/** The language's rounding, halves away from zero, `stdlib.md` 8.1. */
|
|
132
|
+
function halfAway(x: number): number {
|
|
133
|
+
const below = Math.floor(x);
|
|
134
|
+
const fraction = x - below;
|
|
135
|
+
if (fraction > 0.5) return below + 1;
|
|
136
|
+
if (fraction < 0.5) return below;
|
|
137
|
+
return x > 0 ? below + 1 : below;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Whether two values are equal under `EQ`, which is total: it always answers.
|
|
142
|
+
*
|
|
143
|
+
* Absent equals absent and nothing else. Two colours are equal when all four
|
|
144
|
+
* channels match. Two references are equal when they are the same object,
|
|
145
|
+
* which is `language.md` 9.3 and the reason `arrayEqual` exists in the library
|
|
146
|
+
* for comparing contents.
|
|
147
|
+
*/
|
|
148
|
+
export function valuesEqual(a: Value, b: Value): boolean {
|
|
149
|
+
if (a === null || b === null) return a === b;
|
|
150
|
+
if (typeof a === 'number' || typeof a === 'boolean' || typeof a === 'string') {
|
|
151
|
+
return a === b;
|
|
152
|
+
}
|
|
153
|
+
if (typeof b !== 'object' || b === null) return false;
|
|
154
|
+
if (a.tag === 'color') {
|
|
155
|
+
return b.tag === 'color' && a.r === b.r && a.g === b.g && a.b === b.b && a.a === b.a;
|
|
156
|
+
}
|
|
157
|
+
return b.tag === 'ref' && a.id === b.id;
|
|
158
|
+
}
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The budgets a host is willing to spend, `compiled-program.md` 2.4 and 9.4 step
|
|
3
|
+
* 7.
|
|
4
|
+
*
|
|
5
|
+
* Separate from `verify.ts` because it answers a different question. Verification
|
|
6
|
+
* asks whether this is a valid program, which every engine answers the same way
|
|
7
|
+
* because the specification says how. These ask whether this host will run it,
|
|
8
|
+
* and two hosts may honestly differ: a ceiling here is a configuration, not a
|
|
9
|
+
* property of the language.
|
|
10
|
+
*
|
|
11
|
+
* **None of them silently caps anything.** 2.4 is explicit: a host refuses at
|
|
12
|
+
* load, naming the limit and the value it allows. A program that quietly gets a
|
|
13
|
+
* smaller budget than it asked for produces a wrong number instead of a message,
|
|
14
|
+
* and nothing on the chart would say which number.
|
|
15
|
+
*
|
|
16
|
+
* The walks below read tables that verification has not reached yet, because the
|
|
17
|
+
* budget refusals are step 7 of 9.4 and verification is step 8. Reading them
|
|
18
|
+
* defensively is what keeps the specification's order from turning a malformed
|
|
19
|
+
* program into a thrown error rather than the OS6018 step 8 is about to report,
|
|
20
|
+
* naming the instruction.
|
|
21
|
+
*/
|
|
22
|
+
import type { Diagnostic } from '../diagnostics/index.js';
|
|
23
|
+
import type { EngineLimits } from './budget.js';
|
|
24
|
+
import { NO_POSITION, failure } from './errors.js';
|
|
25
|
+
import type { CompiledProgram, Instruction, Request } from './types.js';
|
|
26
|
+
|
|
27
|
+
/** Each ceiling in turn, stopping at the first the program is over. */
|
|
28
|
+
export function checkBudgets(
|
|
29
|
+
program: CompiledProgram,
|
|
30
|
+
limits: EngineLimits,
|
|
31
|
+
): Diagnostic | undefined {
|
|
32
|
+
if (limits.loops !== null && program.limits.loops > limits.loops) {
|
|
33
|
+
return failure('OS5003', NO_POSITION, {
|
|
34
|
+
option: 'loops',
|
|
35
|
+
max: limits.loops,
|
|
36
|
+
found: program.limits.loops,
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
const history = program.limits.history;
|
|
40
|
+
if (limits.history !== null && history !== null && history > limits.history) {
|
|
41
|
+
return failure('OS5003', NO_POSITION, {
|
|
42
|
+
option: 'history',
|
|
43
|
+
max: limits.history,
|
|
44
|
+
found: history,
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
if (limits.instructions !== null) {
|
|
48
|
+
let found = 0;
|
|
49
|
+
for (const code of allCode(program)) found += code.length;
|
|
50
|
+
if (found > limits.instructions) {
|
|
51
|
+
return failure('OS5009', NO_POSITION, { found, max: limits.instructions });
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
if (limits.states !== null && program.states.length > limits.states) {
|
|
55
|
+
const [first, second] = busiestPair(program);
|
|
56
|
+
return failure('OS5004', NO_POSITION, {
|
|
57
|
+
found: program.states.length,
|
|
58
|
+
max: limits.states,
|
|
59
|
+
first,
|
|
60
|
+
second,
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
if (limits.requests !== null) {
|
|
64
|
+
// `host-interface.md` 5.2: the ceiling is the host's and it is stated at
|
|
65
|
+
// load, because the whole set of reads is known then. A nested read is one
|
|
66
|
+
// of them: it is a second series the host keeps in step with the chart.
|
|
67
|
+
const found = countRequests(program.requests);
|
|
68
|
+
if (found > limits.requests) {
|
|
69
|
+
return failure('OS5006', NO_POSITION, { found, max: limits.requests });
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
const depth = callDepth(program);
|
|
73
|
+
if (depth > limits.frames) {
|
|
74
|
+
return failure('OS5005', NO_POSITION, {
|
|
75
|
+
construct: 'a call',
|
|
76
|
+
found: depth,
|
|
77
|
+
max: limits.frames,
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
return undefined;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/** Every read the file makes, the ones written inside another included. */
|
|
84
|
+
function countRequests(requests: readonly Request[]): number {
|
|
85
|
+
let found = 0;
|
|
86
|
+
for (const one of requests) found += 1 + countRequests(one.body.requests);
|
|
87
|
+
return found;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* The opcode of one element of an instruction list, or nothing when it is not
|
|
92
|
+
* an instruction at all.
|
|
93
|
+
*
|
|
94
|
+
* The budget refusals are step 7 of 9.4 and verification is step 8, so the two
|
|
95
|
+
* walks below read lists that nothing has yet proved are instruction lists.
|
|
96
|
+
* Reading them defensively is what keeps the specification's order from turning
|
|
97
|
+
* a malformed program into a thrown error rather than the OS6018 step 8 is
|
|
98
|
+
* about to report, naming the instruction.
|
|
99
|
+
*/
|
|
100
|
+
function opcodeOf(instruction: Instruction): string | undefined {
|
|
101
|
+
return Array.isArray(instruction) ? instruction[0] : undefined;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* The two functions whose nesting produced the most call paths.
|
|
106
|
+
*
|
|
107
|
+
* OS5004's message names them because the number of paths grows
|
|
108
|
+
* multiplicatively where several functions each call the next more than once,
|
|
109
|
+
* and a reader who is told only the total has nowhere to start. The pair with
|
|
110
|
+
* the most call sites between them is where the multiplication happened.
|
|
111
|
+
*/
|
|
112
|
+
function busiestPair(program: CompiledProgram): readonly [string, string] {
|
|
113
|
+
const counts = new Map<string, number>();
|
|
114
|
+
const lists: readonly (readonly [string, readonly Instruction[]])[] = [
|
|
115
|
+
['the top level', program.code],
|
|
116
|
+
...program.functions.map(
|
|
117
|
+
(one) => [one.name, one.code] as readonly [string, readonly Instruction[]],
|
|
118
|
+
),
|
|
119
|
+
];
|
|
120
|
+
for (const [caller, code] of lists) {
|
|
121
|
+
for (const instruction of code) {
|
|
122
|
+
if (opcodeOf(instruction) !== 'CALL_FN') continue;
|
|
123
|
+
const site = program.callSites[instruction[1] as number];
|
|
124
|
+
const callee = site === undefined ? undefined : program.functions[site.fn]?.name;
|
|
125
|
+
if (callee === undefined) continue;
|
|
126
|
+
const key = `${caller}\u0000${callee}`;
|
|
127
|
+
counts.set(key, (counts.get(key) ?? 0) + 1);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
let best: readonly [string, string] = ['the top level', 'the functions it calls'];
|
|
131
|
+
let most = 0;
|
|
132
|
+
// Sorted before the walk, so the answer does not depend on a map's order.
|
|
133
|
+
for (const key of [...counts.keys()].sort()) {
|
|
134
|
+
const count = counts.get(key) ?? 0;
|
|
135
|
+
if (count <= most) continue;
|
|
136
|
+
const [caller, callee] = key.split('\u0000');
|
|
137
|
+
best = [caller ?? '', callee ?? ''];
|
|
138
|
+
most = count;
|
|
139
|
+
}
|
|
140
|
+
return best;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* The deepest chain of call sites, which is the deepest the frame stack goes.
|
|
145
|
+
*
|
|
146
|
+
* Recursion is an error in the language, so the call graph is acyclic and the
|
|
147
|
+
* walk terminates; the visited set is a guard against a program that was
|
|
148
|
+
* written by something other than this compiler, and it stops rather than
|
|
149
|
+
* looping forever.
|
|
150
|
+
*/
|
|
151
|
+
function callDepth(program: CompiledProgram): number {
|
|
152
|
+
const bodies = program.functions.map((one) => one.code);
|
|
153
|
+
const sitesIn = (code: readonly Instruction[]): number[] =>
|
|
154
|
+
code.flatMap((one) =>
|
|
155
|
+
opcodeOf(one) === 'CALL_FN' && typeof one[1] === 'number' ? [one[1]] : [],
|
|
156
|
+
);
|
|
157
|
+
|
|
158
|
+
const known = new Map<number, number>();
|
|
159
|
+
const walking = new Set<number>();
|
|
160
|
+
const depthOf = (site: number): number => {
|
|
161
|
+
const cached = known.get(site);
|
|
162
|
+
if (cached !== undefined) return cached;
|
|
163
|
+
if (walking.has(site)) return 1;
|
|
164
|
+
walking.add(site);
|
|
165
|
+
const fn = program.callSites[site]?.fn;
|
|
166
|
+
const body = fn === undefined ? undefined : bodies[fn];
|
|
167
|
+
let deepest = 0;
|
|
168
|
+
for (const inner of body === undefined ? [] : sitesIn(body)) {
|
|
169
|
+
deepest = Math.max(deepest, depthOf(inner));
|
|
170
|
+
}
|
|
171
|
+
walking.delete(site);
|
|
172
|
+
known.set(site, deepest + 1);
|
|
173
|
+
return deepest + 1;
|
|
174
|
+
};
|
|
175
|
+
|
|
176
|
+
let deepest = 0;
|
|
177
|
+
for (const site of sitesIn(program.code)) deepest = Math.max(deepest, depthOf(site));
|
|
178
|
+
return deepest + 1;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
/**
|
|
182
|
+
* Every instruction list in the program, the bodies of its reads included.
|
|
183
|
+
*
|
|
184
|
+
* A read's expression is part of the program: an engine that cannot run an
|
|
185
|
+
* `ELEM` cannot run one inside a read either, and a budget or a tag worked out
|
|
186
|
+
* from the bar's list alone would say otherwise.
|
|
187
|
+
*/
|
|
188
|
+
export function allCode(program: CompiledProgram): (readonly Instruction[])[] {
|
|
189
|
+
const lists: (readonly Instruction[])[] = [
|
|
190
|
+
program.code,
|
|
191
|
+
...program.functions.map((one) => one.code),
|
|
192
|
+
];
|
|
193
|
+
const walk = (requests: readonly Request[]): void => {
|
|
194
|
+
for (const request of requests) {
|
|
195
|
+
lists.push(request.body.code);
|
|
196
|
+
for (const one of request.body.functions) lists.push(one.code);
|
|
197
|
+
walk(request.body.requests);
|
|
198
|
+
}
|
|
199
|
+
};
|
|
200
|
+
walk(program.requests);
|
|
201
|
+
return lists;
|
|
202
|
+
}
|