@invinite-org/chartlang-runtime 1.0.2 → 1.1.1
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 +101 -0
- package/README.md +10 -2
- package/dist/buildComputeContext.js.map +1 -1
- package/dist/createScriptRunner.d.ts +55 -4
- package/dist/createScriptRunner.d.ts.map +1 -1
- package/dist/createScriptRunner.js +103 -35
- package/dist/createScriptRunner.js.map +1 -1
- package/dist/dep/DepOutputStore.d.ts +92 -0
- package/dist/dep/DepOutputStore.d.ts.map +1 -0
- package/dist/dep/DepOutputStore.js +0 -0
- package/dist/dep/DepOutputStore.js.map +1 -0
- package/dist/dep/DepRunner.d.ts +146 -0
- package/dist/dep/DepRunner.d.ts.map +1 -0
- package/dist/dep/DepRunner.js +243 -0
- package/dist/dep/DepRunner.js.map +1 -0
- package/dist/dep/depOutput.d.ts +50 -0
- package/dist/dep/depOutput.d.ts.map +1 -0
- package/dist/dep/depOutput.js +92 -0
- package/dist/dep/depOutput.js.map +1 -0
- package/dist/dep/emissionFilter.d.ts +70 -0
- package/dist/dep/emissionFilter.d.ts.map +1 -0
- package/dist/dep/emissionFilter.js +105 -0
- package/dist/dep/emissionFilter.js.map +1 -0
- package/dist/dep/index.d.ts +8 -0
- package/dist/dep/index.d.ts.map +1 -0
- package/dist/dep/index.js +7 -0
- package/dist/dep/index.js.map +1 -0
- package/dist/emit/alert.js.map +1 -1
- package/dist/emit/alertConditionEmission.js.map +1 -1
- package/dist/emit/applyPlotOverride.d.ts +24 -0
- package/dist/emit/applyPlotOverride.d.ts.map +1 -0
- package/dist/emit/applyPlotOverride.js +48 -0
- package/dist/emit/applyPlotOverride.js.map +1 -0
- package/dist/emit/draw/annotations/arrow.js +1 -1
- package/dist/emit/draw/annotations/arrow.js.map +1 -1
- package/dist/emit/draw/annotations/arrowMarkDown.js +1 -1
- package/dist/emit/draw/annotations/arrowMarkDown.js.map +1 -1
- package/dist/emit/draw/annotations/arrowMarkUp.js +1 -1
- package/dist/emit/draw/annotations/arrowMarkUp.js.map +1 -1
- package/dist/emit/draw/annotations/arrowMarker.js +1 -1
- package/dist/emit/draw/annotations/arrowMarker.js.map +1 -1
- package/dist/emit/draw/annotations/text.js +1 -1
- package/dist/emit/draw/annotations/text.js.map +1 -1
- package/dist/emit/draw/boxes/circle.js +1 -1
- package/dist/emit/draw/boxes/circle.js.map +1 -1
- package/dist/emit/draw/boxes/ellipse.d.ts +1 -1
- package/dist/emit/draw/boxes/ellipse.js +1 -1
- package/dist/emit/draw/boxes/ellipse.js.map +1 -1
- package/dist/emit/draw/boxes/marker.js +1 -1
- package/dist/emit/draw/boxes/marker.js.map +1 -1
- package/dist/emit/draw/boxes/path.d.ts +1 -1
- package/dist/emit/draw/boxes/path.js +1 -1
- package/dist/emit/draw/boxes/path.js.map +1 -1
- package/dist/emit/draw/boxes/polyline.d.ts +1 -1
- package/dist/emit/draw/boxes/polyline.js +1 -1
- package/dist/emit/draw/boxes/polyline.js.map +1 -1
- package/dist/emit/draw/boxes/rectangle.js +1 -1
- package/dist/emit/draw/boxes/rectangle.js.map +1 -1
- package/dist/emit/draw/boxes/rotatedRectangle.js +1 -1
- package/dist/emit/draw/boxes/rotatedRectangle.js.map +1 -1
- package/dist/emit/draw/boxes/triangle.d.ts +1 -1
- package/dist/emit/draw/boxes/triangle.js +1 -1
- package/dist/emit/draw/boxes/triangle.js.map +1 -1
- package/dist/emit/draw/channels/disjointChannel.js +1 -1
- package/dist/emit/draw/channels/disjointChannel.js.map +1 -1
- package/dist/emit/draw/channels/flatTopBottom.d.ts +1 -2
- package/dist/emit/draw/channels/flatTopBottom.d.ts.map +1 -1
- package/dist/emit/draw/channels/flatTopBottom.js +1 -1
- package/dist/emit/draw/channels/flatTopBottom.js.map +1 -1
- package/dist/emit/draw/channels/regressionTrend.d.ts +3 -4
- package/dist/emit/draw/channels/regressionTrend.d.ts.map +1 -1
- package/dist/emit/draw/channels/regressionTrend.js +1 -1
- package/dist/emit/draw/channels/regressionTrend.js.map +1 -1
- package/dist/emit/draw/channels/trendChannel.js +1 -1
- package/dist/emit/draw/channels/trendChannel.js.map +1 -1
- package/dist/emit/draw/containers/frame.d.ts +1 -1
- package/dist/emit/draw/containers/frame.js +2 -2
- package/dist/emit/draw/containers/frame.js.map +1 -1
- package/dist/emit/draw/containers/group.d.ts +1 -2
- package/dist/emit/draw/containers/group.d.ts.map +1 -1
- package/dist/emit/draw/containers/group.js +2 -2
- package/dist/emit/draw/containers/group.js.map +1 -1
- package/dist/emit/draw/curves/arc.js +1 -1
- package/dist/emit/draw/curves/arc.js.map +1 -1
- package/dist/emit/draw/curves/brush.js +1 -1
- package/dist/emit/draw/curves/brush.js.map +1 -1
- package/dist/emit/draw/curves/curve.js +1 -1
- package/dist/emit/draw/curves/curve.js.map +1 -1
- package/dist/emit/draw/curves/doubleCurve.js +1 -1
- package/dist/emit/draw/curves/doubleCurve.js.map +1 -1
- package/dist/emit/draw/curves/highlighter.js +1 -1
- package/dist/emit/draw/curves/highlighter.js.map +1 -1
- package/dist/emit/draw/curves/pen.js +1 -1
- package/dist/emit/draw/curves/pen.js.map +1 -1
- package/dist/emit/draw/cycles/cyclicLines.js +1 -1
- package/dist/emit/draw/cycles/cyclicLines.js.map +1 -1
- package/dist/emit/draw/cycles/sineLine.js +1 -1
- package/dist/emit/draw/cycles/sineLine.js.map +1 -1
- package/dist/emit/draw/cycles/timeCycles.js +1 -1
- package/dist/emit/draw/cycles/timeCycles.js.map +1 -1
- package/dist/emit/draw/elliott/elliottCorrectionWave.js +1 -1
- package/dist/emit/draw/elliott/elliottCorrectionWave.js.map +1 -1
- package/dist/emit/draw/elliott/elliottDoubleCombo.js +1 -1
- package/dist/emit/draw/elliott/elliottDoubleCombo.js.map +1 -1
- package/dist/emit/draw/elliott/elliottImpulseWave.js +1 -1
- package/dist/emit/draw/elliott/elliottImpulseWave.js.map +1 -1
- package/dist/emit/draw/elliott/elliottTriangleWave.js +1 -1
- package/dist/emit/draw/elliott/elliottTriangleWave.js.map +1 -1
- package/dist/emit/draw/elliott/elliottTripleCombo.js +1 -1
- package/dist/emit/draw/elliott/elliottTripleCombo.js.map +1 -1
- package/dist/emit/draw/fibA/fibChannel.js +1 -1
- package/dist/emit/draw/fibA/fibChannel.js.map +1 -1
- package/dist/emit/draw/fibA/fibRetracement.js +1 -1
- package/dist/emit/draw/fibA/fibRetracement.js.map +1 -1
- package/dist/emit/draw/fibA/fibTimeZone.d.ts +1 -2
- package/dist/emit/draw/fibA/fibTimeZone.d.ts.map +1 -1
- package/dist/emit/draw/fibA/fibTimeZone.js +1 -1
- package/dist/emit/draw/fibA/fibTimeZone.js.map +1 -1
- package/dist/emit/draw/fibA/fibTrendExtension.js +1 -1
- package/dist/emit/draw/fibA/fibTrendExtension.js.map +1 -1
- package/dist/emit/draw/fibA/fibWedge.js +1 -1
- package/dist/emit/draw/fibA/fibWedge.js.map +1 -1
- package/dist/emit/draw/fibB/fibCircles.d.ts +1 -2
- package/dist/emit/draw/fibB/fibCircles.d.ts.map +1 -1
- package/dist/emit/draw/fibB/fibCircles.js +1 -1
- package/dist/emit/draw/fibB/fibCircles.js.map +1 -1
- package/dist/emit/draw/fibB/fibSpeedArcs.js +1 -1
- package/dist/emit/draw/fibB/fibSpeedArcs.js.map +1 -1
- package/dist/emit/draw/fibB/fibSpeedFan.js +1 -1
- package/dist/emit/draw/fibB/fibSpeedFan.js.map +1 -1
- package/dist/emit/draw/fibB/fibSpiral.d.ts +1 -2
- package/dist/emit/draw/fibB/fibSpiral.d.ts.map +1 -1
- package/dist/emit/draw/fibB/fibSpiral.js +1 -1
- package/dist/emit/draw/fibB/fibSpiral.js.map +1 -1
- package/dist/emit/draw/fibB/fibTrendTime.d.ts +1 -2
- package/dist/emit/draw/fibB/fibTrendTime.d.ts.map +1 -1
- package/dist/emit/draw/fibB/fibTrendTime.js +1 -1
- package/dist/emit/draw/fibB/fibTrendTime.js.map +1 -1
- package/dist/emit/draw/gann/gannBox.js +1 -1
- package/dist/emit/draw/gann/gannBox.js.map +1 -1
- package/dist/emit/draw/gann/gannFan.js +1 -1
- package/dist/emit/draw/gann/gannFan.js.map +1 -1
- package/dist/emit/draw/gann/gannSquare.js +1 -1
- package/dist/emit/draw/gann/gannSquare.js.map +1 -1
- package/dist/emit/draw/gann/gannSquareFixed.js +1 -1
- package/dist/emit/draw/gann/gannSquareFixed.js.map +1 -1
- package/dist/emit/draw/handle.d.ts +2 -2
- package/dist/emit/draw/handle.js +2 -2
- package/dist/emit/draw/handle.js.map +1 -1
- package/dist/emit/draw/index.js.map +1 -1
- package/dist/emit/draw/lines/crossLine.js +1 -1
- package/dist/emit/draw/lines/crossLine.js.map +1 -1
- package/dist/emit/draw/lines/horizontalLine.d.ts +1 -1
- package/dist/emit/draw/lines/horizontalLine.js +1 -1
- package/dist/emit/draw/lines/horizontalLine.js.map +1 -1
- package/dist/emit/draw/lines/horizontalRay.js +1 -1
- package/dist/emit/draw/lines/horizontalRay.js.map +1 -1
- package/dist/emit/draw/lines/line.d.ts +1 -1
- package/dist/emit/draw/lines/line.d.ts.map +1 -1
- package/dist/emit/draw/lines/line.js +2 -3
- package/dist/emit/draw/lines/line.js.map +1 -1
- package/dist/emit/draw/lines/trendAngle.js +1 -1
- package/dist/emit/draw/lines/trendAngle.js.map +1 -1
- package/dist/emit/draw/lines/verticalLine.js +1 -1
- package/dist/emit/draw/lines/verticalLine.js.map +1 -1
- package/dist/emit/draw/namespace.d.ts +1 -1
- package/dist/emit/draw/namespace.js +1 -1
- package/dist/emit/draw/namespace.js.map +1 -1
- package/dist/emit/draw/patterns/abcdPattern.js +1 -1
- package/dist/emit/draw/patterns/abcdPattern.js.map +1 -1
- package/dist/emit/draw/patterns/cypherPattern.d.ts +1 -2
- package/dist/emit/draw/patterns/cypherPattern.d.ts.map +1 -1
- package/dist/emit/draw/patterns/cypherPattern.js +1 -1
- package/dist/emit/draw/patterns/cypherPattern.js.map +1 -1
- package/dist/emit/draw/patterns/headAndShoulders.js +1 -1
- package/dist/emit/draw/patterns/headAndShoulders.js.map +1 -1
- package/dist/emit/draw/patterns/threeDrivesPattern.js +1 -1
- package/dist/emit/draw/patterns/threeDrivesPattern.js.map +1 -1
- package/dist/emit/draw/patterns/trianglePattern.d.ts +1 -1
- package/dist/emit/draw/patterns/trianglePattern.js +1 -1
- package/dist/emit/draw/patterns/trianglePattern.js.map +1 -1
- package/dist/emit/draw/patterns/xabcdPattern.js +1 -1
- package/dist/emit/draw/patterns/xabcdPattern.js.map +1 -1
- package/dist/emit/draw/pitchforks/pitchfan.js +1 -1
- package/dist/emit/draw/pitchforks/pitchfan.js.map +1 -1
- package/dist/emit/draw/pitchforks/pitchfork.d.ts +1 -1
- package/dist/emit/draw/pitchforks/pitchfork.js +2 -2
- package/dist/emit/draw/pitchforks/pitchfork.js.map +1 -1
- package/dist/emit/draw/pushDrawing.js.map +1 -1
- package/dist/emit/draw/subIdAllocator.d.ts +1 -1
- package/dist/emit/draw/subIdAllocator.js +1 -1
- package/dist/emit/draw/subIdAllocator.js.map +1 -1
- package/dist/emit/draw/table/table.d.ts +1 -1
- package/dist/emit/draw/table/table.js.map +1 -1
- package/dist/emit/emissionsQueue.js.map +1 -1
- package/dist/emit/hash.js.map +1 -1
- package/dist/emit/hline.d.ts +6 -4
- package/dist/emit/hline.d.ts.map +1 -1
- package/dist/emit/hline.js +5 -2
- package/dist/emit/hline.js.map +1 -1
- package/dist/emit/index.d.ts +2 -1
- package/dist/emit/index.d.ts.map +1 -1
- package/dist/emit/index.js +2 -1
- package/dist/emit/index.js.map +1 -1
- package/dist/emit/logEmission.js.map +1 -1
- package/dist/emit/paneResolver.d.ts +52 -11
- package/dist/emit/paneResolver.d.ts.map +1 -1
- package/dist/emit/paneResolver.js +69 -26
- package/dist/emit/paneResolver.js.map +1 -1
- package/dist/emit/plot.d.ts.map +1 -1
- package/dist/emit/plot.js +2 -1
- package/dist/emit/plot.js.map +1 -1
- package/dist/emit/runtimeError.js.map +1 -1
- package/dist/execution/dispose.d.ts.map +1 -1
- package/dist/execution/dispose.js +7 -0
- package/dist/execution/dispose.js.map +1 -1
- package/dist/execution/drain.js.map +1 -1
- package/dist/execution/index.js.map +1 -1
- package/dist/execution/onBarClose.d.ts +9 -13
- package/dist/execution/onBarClose.d.ts.map +1 -1
- package/dist/execution/onBarClose.js +28 -59
- package/dist/execution/onBarClose.js.map +1 -1
- package/dist/execution/onBarTick.d.ts +4 -10
- package/dist/execution/onBarTick.d.ts.map +1 -1
- package/dist/execution/onBarTick.js +24 -57
- package/dist/execution/onBarTick.js.map +1 -1
- package/dist/execution/onHistory.js.map +1 -1
- package/dist/execution/runComputeStep.d.ts +68 -0
- package/dist/execution/runComputeStep.d.ts.map +1 -0
- package/dist/execution/runComputeStep.js +96 -0
- package/dist/execution/runComputeStep.js.map +1 -0
- package/dist/execution/secondaryStream.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/inputs/index.js.map +1 -1
- package/dist/inputs/resolveInputs.js.map +1 -1
- package/dist/internal.d.ts +12 -0
- package/dist/internal.d.ts.map +1 -0
- package/dist/internal.js +14 -0
- package/dist/internal.js.map +1 -0
- package/dist/persistentStateStore.js.map +1 -1
- package/dist/persistentStateStore.runtime.d.ts +18 -4
- package/dist/persistentStateStore.runtime.d.ts.map +1 -1
- package/dist/persistentStateStore.runtime.js +111 -18
- package/dist/persistentStateStore.runtime.js.map +1 -1
- package/dist/persistentStateStore.validate.d.ts +11 -1
- package/dist/persistentStateStore.validate.d.ts.map +1 -1
- package/dist/persistentStateStore.validate.js +32 -3
- package/dist/persistentStateStore.validate.js.map +1 -1
- package/dist/primitives.js.map +1 -1
- package/dist/request/alignHtfSeriesCache.js.map +1 -1
- package/dist/request/alignHtfSeriesToLtf.d.ts +2 -2
- package/dist/request/alignHtfSeriesToLtf.js +2 -2
- package/dist/request/alignHtfSeriesToLtf.js.map +1 -1
- package/dist/request/bucketLtfBarsByMainContainment.js.map +1 -1
- package/dist/request/bucketLtfBarsCache.js.map +1 -1
- package/dist/request/index.js.map +1 -1
- package/dist/request/lowerTf.js.map +1 -1
- package/dist/request/pushOnce.js.map +1 -1
- package/dist/request/requestNamespace.js.map +1 -1
- package/dist/request/security.js.map +1 -1
- package/dist/request/streamBars.js.map +1 -1
- package/dist/ringBuffer.d.ts +2 -2
- package/dist/ringBuffer.js +1 -1
- package/dist/ringBuffer.js.map +1 -1
- package/dist/runtimeContext.d.ts +65 -7
- package/dist/runtimeContext.d.ts.map +1 -1
- package/dist/runtimeContext.js.map +1 -1
- package/dist/seriesView.d.ts +1 -1
- package/dist/seriesView.js +1 -1
- package/dist/seriesView.js.map +1 -1
- package/dist/state/index.js.map +1 -1
- package/dist/state/lifecycle.js.map +1 -1
- package/dist/state/stateNamespace.d.ts.map +1 -1
- package/dist/state/stateNamespace.js +13 -2
- package/dist/state/stateNamespace.js.map +1 -1
- package/dist/state/stateSlot.js.map +1 -1
- package/dist/stateStore.d.ts +7 -4
- package/dist/stateStore.d.ts.map +1 -1
- package/dist/stateStore.js.map +1 -1
- package/dist/streamState.d.ts +1 -1
- package/dist/streamState.js +1 -1
- package/dist/streamState.js.map +1 -1
- package/dist/ta/adl.js +2 -2
- package/dist/ta/adl.js.map +1 -1
- package/dist/ta/adr.d.ts +3 -3
- package/dist/ta/adr.js +5 -5
- package/dist/ta/adr.js.map +1 -1
- package/dist/ta/adx.d.ts +1 -1
- package/dist/ta/adx.js +3 -3
- package/dist/ta/adx.js.map +1 -1
- package/dist/ta/alma.d.ts +3 -3
- package/dist/ta/alma.js +5 -5
- package/dist/ta/alma.js.map +1 -1
- package/dist/ta/anchoredVolumeProfile.js.map +1 -1
- package/dist/ta/anchoredVwap.d.ts +1 -1
- package/dist/ta/anchoredVwap.js +3 -3
- package/dist/ta/anchoredVwap.js.map +1 -1
- package/dist/ta/ao.js +2 -2
- package/dist/ta/ao.js.map +1 -1
- package/dist/ta/aroon.js +2 -2
- package/dist/ta/aroon.js.map +1 -1
- package/dist/ta/aroonOsc.js +2 -2
- package/dist/ta/aroonOsc.js.map +1 -1
- package/dist/ta/atr.d.ts +1 -1
- package/dist/ta/atr.js +3 -3
- package/dist/ta/atr.js.map +1 -1
- package/dist/ta/barssince.js +1 -1
- package/dist/ta/barssince.js.map +1 -1
- package/dist/ta/bb.d.ts +1 -1
- package/dist/ta/bb.js +3 -3
- package/dist/ta/bb.js.map +1 -1
- package/dist/ta/bbPercentB.js +2 -2
- package/dist/ta/bbPercentB.js.map +1 -1
- package/dist/ta/bbw.js +2 -2
- package/dist/ta/bbw.js.map +1 -1
- package/dist/ta/bop.js +2 -2
- package/dist/ta/bop.js.map +1 -1
- package/dist/ta/cci.js +2 -2
- package/dist/ta/cci.js.map +1 -1
- package/dist/ta/chaikinOsc.d.ts +1 -1
- package/dist/ta/chaikinOsc.js +3 -3
- package/dist/ta/chaikinOsc.js.map +1 -1
- package/dist/ta/chandeKrollStop.d.ts +1 -1
- package/dist/ta/chandeKrollStop.js +3 -3
- package/dist/ta/chandeKrollStop.js.map +1 -1
- package/dist/ta/chandelier.d.ts +1 -1
- package/dist/ta/chandelier.js +3 -3
- package/dist/ta/chandelier.js.map +1 -1
- package/dist/ta/change.js +1 -1
- package/dist/ta/change.js.map +1 -1
- package/dist/ta/chop.js +2 -2
- package/dist/ta/chop.js.map +1 -1
- package/dist/ta/cmf.js +2 -2
- package/dist/ta/cmf.js.map +1 -1
- package/dist/ta/cmo.js +2 -2
- package/dist/ta/cmo.js.map +1 -1
- package/dist/ta/connorsRsi.d.ts +1 -1
- package/dist/ta/connorsRsi.js +3 -3
- package/dist/ta/connorsRsi.js.map +1 -1
- package/dist/ta/coppock.js +2 -2
- package/dist/ta/coppock.js.map +1 -1
- package/dist/ta/crossover.d.ts +1 -1
- package/dist/ta/crossover.js +2 -2
- package/dist/ta/crossover.js.map +1 -1
- package/dist/ta/crossunder.d.ts +1 -1
- package/dist/ta/crossunder.js +2 -2
- package/dist/ta/crossunder.js.map +1 -1
- package/dist/ta/dema.js +2 -2
- package/dist/ta/dema.js.map +1 -1
- package/dist/ta/dmi.d.ts +1 -1
- package/dist/ta/dmi.js +3 -3
- package/dist/ta/dmi.js.map +1 -1
- package/dist/ta/donchian.js +2 -2
- package/dist/ta/donchian.js.map +1 -1
- package/dist/ta/dpo.js +2 -2
- package/dist/ta/dpo.js.map +1 -1
- package/dist/ta/ema.d.ts +1 -1
- package/dist/ta/ema.js +3 -3
- package/dist/ta/ema.js.map +1 -1
- package/dist/ta/envelope.js +2 -2
- package/dist/ta/envelope.js.map +1 -1
- package/dist/ta/eom.d.ts +1 -1
- package/dist/ta/eom.js +3 -3
- package/dist/ta/eom.js.map +1 -1
- package/dist/ta/fisher.js +2 -2
- package/dist/ta/fisher.js.map +1 -1
- package/dist/ta/fixedRangeVolumeProfile.js.map +1 -1
- package/dist/ta/highest.js +1 -1
- package/dist/ta/highest.js.map +1 -1
- package/dist/ta/historicalVolatility.d.ts +1 -1
- package/dist/ta/historicalVolatility.js +3 -3
- package/dist/ta/historicalVolatility.js.map +1 -1
- package/dist/ta/hma.js +2 -2
- package/dist/ta/hma.js.map +1 -1
- package/dist/ta/ichimoku.d.ts +1 -1
- package/dist/ta/ichimoku.js +3 -3
- package/dist/ta/ichimoku.js.map +1 -1
- package/dist/ta/index.js.map +1 -1
- package/dist/ta/kama.js +2 -2
- package/dist/ta/kama.js.map +1 -1
- package/dist/ta/keltner.js +2 -2
- package/dist/ta/keltner.js.map +1 -1
- package/dist/ta/klinger.js +2 -2
- package/dist/ta/klinger.js.map +1 -1
- package/dist/ta/kst.js +2 -2
- package/dist/ta/kst.js.map +1 -1
- package/dist/ta/lib/adxFromDi.js +2 -2
- package/dist/ta/lib/adxFromDi.js.map +1 -1
- package/dist/ta/lib/applyOffset.js +2 -2
- package/dist/ta/lib/applyOffset.js.map +1 -1
- package/dist/ta/lib/computeMa.js +2 -2
- package/dist/ta/lib/computeMa.js.map +1 -1
- package/dist/ta/lib/computeMaOfFloat64.js +2 -2
- package/dist/ta/lib/computeMaOfFloat64.js.map +1 -1
- package/dist/ta/lib/directionalState.js +2 -2
- package/dist/ta/lib/directionalState.js.map +1 -1
- package/dist/ta/lib/donchianMid.js +2 -2
- package/dist/ta/lib/donchianMid.js.map +1 -1
- package/dist/ta/lib/emaFloat64.js +2 -2
- package/dist/ta/lib/emaFloat64.js.map +1 -1
- package/dist/ta/lib/linearRegression.js +2 -2
- package/dist/ta/lib/linearRegression.js.map +1 -1
- package/dist/ta/lib/maTypes.js.map +1 -1
- package/dist/ta/lib/pearson.js +2 -2
- package/dist/ta/lib/pearson.js.map +1 -1
- package/dist/ta/lib/pickCandleSource.js +2 -2
- package/dist/ta/lib/pickCandleSource.js.map +1 -1
- package/dist/ta/lib/readSourceField.js +2 -2
- package/dist/ta/lib/readSourceField.js.map +1 -1
- package/dist/ta/lib/rollingStddev.js +2 -2
- package/dist/ta/lib/rollingStddev.js.map +1 -1
- package/dist/ta/lib/smaFloat64.js +2 -2
- package/dist/ta/lib/smaFloat64.js.map +1 -1
- package/dist/ta/lib/smmaFloat64.js +2 -2
- package/dist/ta/lib/smmaFloat64.js.map +1 -1
- package/dist/ta/lib/sourceValue.js.map +1 -1
- package/dist/ta/lib/trSeries.js +2 -2
- package/dist/ta/lib/trSeries.js.map +1 -1
- package/dist/ta/lib/volume-profile/bucketEdges.js.map +1 -1
- package/dist/ta/lib/volume-profile/bucketizeVolume.js.map +1 -1
- package/dist/ta/lib/volume-profile/developingSeries.js.map +1 -1
- package/dist/ta/lib/volume-profile/index.js.map +1 -1
- package/dist/ta/lib/volume-profile/intercept.js.map +1 -1
- package/dist/ta/lib/volume-profile/scaffold.js.map +1 -1
- package/dist/ta/lib/volume-profile/tooHeavy.js.map +1 -1
- package/dist/ta/lib/volume-profile/types.js.map +1 -1
- package/dist/ta/lib/volume-profile/valueArea.js.map +1 -1
- package/dist/ta/lib/volume-profile/volumeProfileShared.js.map +1 -1
- package/dist/ta/lib/vwmaFloat64.js +2 -2
- package/dist/ta/lib/vwmaFloat64.js.map +1 -1
- package/dist/ta/lib/wilderDirectional.js +2 -2
- package/dist/ta/lib/wilderDirectional.js.map +1 -1
- package/dist/ta/lib/wilderSmoothing.js +2 -2
- package/dist/ta/lib/wilderSmoothing.js.map +1 -1
- package/dist/ta/lib/wmaFloat64.js +2 -2
- package/dist/ta/lib/wmaFloat64.js.map +1 -1
- package/dist/ta/lowest.js +1 -1
- package/dist/ta/lowest.js.map +1 -1
- package/dist/ta/lsma.js +2 -2
- package/dist/ta/lsma.js.map +1 -1
- package/dist/ta/maRibbon.js +2 -2
- package/dist/ta/maRibbon.js.map +1 -1
- package/dist/ta/macd.d.ts +1 -1
- package/dist/ta/macd.js +4 -4
- package/dist/ta/macd.js.map +1 -1
- package/dist/ta/massIndex.d.ts +1 -1
- package/dist/ta/massIndex.js +3 -3
- package/dist/ta/massIndex.js.map +1 -1
- package/dist/ta/mcginley.js +2 -2
- package/dist/ta/mcginley.js.map +1 -1
- package/dist/ta/median.js +2 -2
- package/dist/ta/median.js.map +1 -1
- package/dist/ta/mfi.d.ts +1 -1
- package/dist/ta/mfi.js +3 -3
- package/dist/ta/mfi.js.map +1 -1
- package/dist/ta/momentum.js +2 -2
- package/dist/ta/momentum.js.map +1 -1
- package/dist/ta/netVolume.d.ts +1 -1
- package/dist/ta/netVolume.js +3 -3
- package/dist/ta/netVolume.js.map +1 -1
- package/dist/ta/nvi.d.ts +1 -1
- package/dist/ta/nvi.js +3 -3
- package/dist/ta/nvi.js.map +1 -1
- package/dist/ta/nz.js +1 -1
- package/dist/ta/nz.js.map +1 -1
- package/dist/ta/obv.js +2 -2
- package/dist/ta/obv.js.map +1 -1
- package/dist/ta/persistence.js.map +1 -1
- package/dist/ta/pivotsHighLow.js +2 -2
- package/dist/ta/pivotsHighLow.js.map +1 -1
- package/dist/ta/pivotsStandard.d.ts +1 -1
- package/dist/ta/pivotsStandard.js +3 -3
- package/dist/ta/pivotsStandard.js.map +1 -1
- package/dist/ta/pmo.js +2 -2
- package/dist/ta/pmo.js.map +1 -1
- package/dist/ta/ppo.d.ts +1 -1
- package/dist/ta/ppo.js +3 -3
- package/dist/ta/ppo.js.map +1 -1
- package/dist/ta/psar.js +2 -2
- package/dist/ta/psar.js.map +1 -1
- package/dist/ta/pvi.d.ts +1 -1
- package/dist/ta/pvi.js +3 -3
- package/dist/ta/pvi.js.map +1 -1
- package/dist/ta/pvo.d.ts +1 -1
- package/dist/ta/pvo.js +3 -3
- package/dist/ta/pvo.js.map +1 -1
- package/dist/ta/pvt.d.ts +1 -1
- package/dist/ta/pvt.js +3 -3
- package/dist/ta/pvt.js.map +1 -1
- package/dist/ta/registry.js.map +1 -1
- package/dist/ta/roc.js +2 -2
- package/dist/ta/roc.js.map +1 -1
- package/dist/ta/rsi.d.ts +1 -1
- package/dist/ta/rsi.js +3 -3
- package/dist/ta/rsi.js.map +1 -1
- package/dist/ta/rvgi.js +2 -2
- package/dist/ta/rvgi.js.map +1 -1
- package/dist/ta/rvi.d.ts +1 -1
- package/dist/ta/rvi.js +3 -3
- package/dist/ta/rvi.js.map +1 -1
- package/dist/ta/sessionVolumeProfile.js.map +1 -1
- package/dist/ta/sma.d.ts +1 -1
- package/dist/ta/sma.js +3 -3
- package/dist/ta/sma.js.map +1 -1
- package/dist/ta/smi.js +2 -2
- package/dist/ta/smi.js.map +1 -1
- package/dist/ta/smma.js +2 -2
- package/dist/ta/smma.js.map +1 -1
- package/dist/ta/stdev.d.ts +1 -1
- package/dist/ta/stdev.js +3 -3
- package/dist/ta/stdev.js.map +1 -1
- package/dist/ta/stoch.js +2 -2
- package/dist/ta/stoch.js.map +1 -1
- package/dist/ta/stochRsi.js +2 -2
- package/dist/ta/stochRsi.js.map +1 -1
- package/dist/ta/supertrend.d.ts +1 -1
- package/dist/ta/supertrend.js +3 -3
- package/dist/ta/supertrend.js.map +1 -1
- package/dist/ta/tema.js +2 -2
- package/dist/ta/tema.js.map +1 -1
- package/dist/ta/trendStrengthIndex.d.ts +2 -2
- package/dist/ta/trendStrengthIndex.js +4 -4
- package/dist/ta/trendStrengthIndex.js.map +1 -1
- package/dist/ta/trix.d.ts +1 -1
- package/dist/ta/trix.js +3 -3
- package/dist/ta/trix.js.map +1 -1
- package/dist/ta/tsi.js +2 -2
- package/dist/ta/tsi.js.map +1 -1
- package/dist/ta/ulcerIndex.js +2 -2
- package/dist/ta/ulcerIndex.js.map +1 -1
- package/dist/ta/ultimateOsc.js +2 -2
- package/dist/ta/ultimateOsc.js.map +1 -1
- package/dist/ta/valuewhen.js +1 -1
- package/dist/ta/valuewhen.js.map +1 -1
- package/dist/ta/visibleRangeVolumeProfile.d.ts +2 -2
- package/dist/ta/visibleRangeVolumeProfile.js +2 -2
- package/dist/ta/visibleRangeVolumeProfile.js.map +1 -1
- package/dist/ta/vol.js +2 -2
- package/dist/ta/vol.js.map +1 -1
- package/dist/ta/volatilityStop.d.ts +1 -1
- package/dist/ta/volatilityStop.js +3 -3
- package/dist/ta/volatilityStop.js.map +1 -1
- package/dist/ta/vortex.d.ts +1 -1
- package/dist/ta/vortex.js +3 -3
- package/dist/ta/vortex.js.map +1 -1
- package/dist/ta/vwap.d.ts +3 -3
- package/dist/ta/vwap.js +5 -5
- package/dist/ta/vwap.js.map +1 -1
- package/dist/ta/vwma.js +2 -2
- package/dist/ta/vwma.js.map +1 -1
- package/dist/ta/williamsFractal.js +2 -2
- package/dist/ta/williamsFractal.js.map +1 -1
- package/dist/ta/williamsR.js +2 -2
- package/dist/ta/williamsR.js.map +1 -1
- package/dist/ta/wma.js +2 -2
- package/dist/ta/wma.js.map +1 -1
- package/dist/ta/zigZag.js +2 -2
- package/dist/ta/zigZag.js.map +1 -1
- package/dist/views/barstateView.js.map +1 -1
- package/dist/views/index.js.map +1 -1
- package/dist/views/refreshRuntimeViews.js.map +1 -1
- package/dist/views/symInfoView.js.map +1 -1
- package/dist/views/timeframeView.js.map +1 -1
- package/package.json +7 -3
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import type { RunnerState } from "../createScriptRunner.js";
|
|
2
|
+
import { type EventKind } from "../views/index.js";
|
|
3
|
+
/**
|
|
4
|
+
* Outcome of a single compute step. `ok` means the script's `compute`
|
|
5
|
+
* returned normally; `halt` means `runtime.error(...)` was thrown (the
|
|
6
|
+
* compute body deliberately aborted the bar). Non-halt throws propagate
|
|
7
|
+
* out of {@link runComputeStep} unchanged.
|
|
8
|
+
*
|
|
9
|
+
* @since 0.7
|
|
10
|
+
* @stable
|
|
11
|
+
* @example
|
|
12
|
+
* const r: RunComputeStepOutcome = { kind: "ok" };
|
|
13
|
+
* void r;
|
|
14
|
+
*/
|
|
15
|
+
export type RunComputeStepOutcome = Readonly<{
|
|
16
|
+
kind: "ok";
|
|
17
|
+
}> | Readonly<{
|
|
18
|
+
kind: "halt";
|
|
19
|
+
readonly message: string;
|
|
20
|
+
}>;
|
|
21
|
+
/**
|
|
22
|
+
* Configuration for {@link runComputeStep}. `eventKind` reaches the
|
|
23
|
+
* runtime views so `barstate.*` picks up the right snapshot; `isTick`
|
|
24
|
+
* discriminates the close-vs-tick state-slot lifecycle.
|
|
25
|
+
*
|
|
26
|
+
* @since 0.7
|
|
27
|
+
* @stable
|
|
28
|
+
* @example
|
|
29
|
+
* const args = { state, eventKind: "close" as const, isTick: false };
|
|
30
|
+
* void args;
|
|
31
|
+
*/
|
|
32
|
+
export type RunComputeStepArgs = Readonly<{
|
|
33
|
+
readonly state: RunnerState;
|
|
34
|
+
readonly eventKind: EventKind;
|
|
35
|
+
readonly isTick: boolean;
|
|
36
|
+
}>;
|
|
37
|
+
/**
|
|
38
|
+
* Reset the per-bar emission queues on a runner before its compute
|
|
39
|
+
* runs. Exported for the dep / sibling step driver — single-script
|
|
40
|
+
* callers go through {@link runComputeStep} which calls this
|
|
41
|
+
* internally.
|
|
42
|
+
*
|
|
43
|
+
* @since 0.7
|
|
44
|
+
* @stable
|
|
45
|
+
* @example
|
|
46
|
+
* // resetBarEmissions(state);
|
|
47
|
+
*/
|
|
48
|
+
export declare function resetBarEmissions(state: RunnerState): void;
|
|
49
|
+
/**
|
|
50
|
+
* Run the inner compute body of `state.compute` — set
|
|
51
|
+
* `ACTIVE_RUNTIME_CONTEXT`, reset sub-id counters, optionally reset
|
|
52
|
+
* tentative state slots, refresh views, invoke `compute`, commit /
|
|
53
|
+
* flush state slots on close. Does NOT reset the per-bar emission
|
|
54
|
+
* queues; callers do that exactly once via {@link resetBarEmissions}.
|
|
55
|
+
*
|
|
56
|
+
* `runtime.error(...)` halts clear the runner's visual emissions and
|
|
57
|
+
* push a `runtime-error-thrown` diagnostic, matching the Phase-1
|
|
58
|
+
* single-script behaviour byte-for-byte. Non-halt throws propagate
|
|
59
|
+
* out unchanged.
|
|
60
|
+
*
|
|
61
|
+
* @since 0.7
|
|
62
|
+
* @stable
|
|
63
|
+
* @example
|
|
64
|
+
* // const outcome = await runComputeBody({ state, eventKind: "close", isTick: false });
|
|
65
|
+
* // void outcome;
|
|
66
|
+
*/
|
|
67
|
+
export declare function runComputeBody(args: RunComputeStepArgs): Promise<RunComputeStepOutcome>;
|
|
68
|
+
//# sourceMappingURL=runComputeStep.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runComputeStep.d.ts","sourceRoot":"","sources":["../../src/execution/runComputeStep.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAK5D,OAAO,EAAE,KAAK,SAAS,EAAuB,MAAM,mBAAmB,CAAC;AAExE;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,qBAAqB,GAC3B,QAAQ,CAAC;IAAE,IAAI,EAAE,IAAI,CAAA;CAAE,CAAC,GACxB,QAAQ,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAE3D;;;;;;;;;;GAUG;AACH,MAAM,MAAM,kBAAkB,GAAG,QAAQ,CAAC;IACtC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC5B,CAAC,CAAC;AAEH;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAa1D;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAuC7F"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
// Copyright (c) 2026 Invinite. Licensed under the MIT License.
|
|
2
|
+
// See the LICENSE file in the repo root for full license text.
|
|
3
|
+
import { buildComputeContext } from "../buildComputeContext.js";
|
|
4
|
+
import { resetSubIdCounters } from "../emit/draw/index.js";
|
|
5
|
+
import { isRuntimeErrorHalt, pushDiagnostic } from "../emit/index.js";
|
|
6
|
+
import { ACTIVE_RUNTIME_CONTEXT } from "../runtimeContext.js";
|
|
7
|
+
import { commitStateSlots, flushStateSlots, resetTentativeStateSlots } from "../state/index.js";
|
|
8
|
+
import { refreshRuntimeViews } from "../views/index.js";
|
|
9
|
+
/**
|
|
10
|
+
* Reset the per-bar emission queues on a runner before its compute
|
|
11
|
+
* runs. Exported for the dep / sibling step driver — single-script
|
|
12
|
+
* callers go through {@link runComputeStep} which calls this
|
|
13
|
+
* internally.
|
|
14
|
+
*
|
|
15
|
+
* @since 0.7
|
|
16
|
+
* @stable
|
|
17
|
+
* @example
|
|
18
|
+
* // resetBarEmissions(state);
|
|
19
|
+
*/
|
|
20
|
+
export function resetBarEmissions(state) {
|
|
21
|
+
state.emissions.plots = [];
|
|
22
|
+
state.emissions.drawings = [];
|
|
23
|
+
state.emissions.alerts = [];
|
|
24
|
+
state.emissions.alertConditions = [];
|
|
25
|
+
state.emissions.logs = [];
|
|
26
|
+
state.emissions.diagnostics = [];
|
|
27
|
+
state.emissions.fromBar = state.barIndex;
|
|
28
|
+
state.emissions.toBar = state.barIndex;
|
|
29
|
+
state.runtimeContext.requestSecurityAlignments.clear();
|
|
30
|
+
state.runtimeContext.requestSecurityAscendingBars.clear();
|
|
31
|
+
state.runtimeContext.logBudget = 0;
|
|
32
|
+
state.runtimeContext.logBudgetExceededDiagnosed = false;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Run the inner compute body of `state.compute` — set
|
|
36
|
+
* `ACTIVE_RUNTIME_CONTEXT`, reset sub-id counters, optionally reset
|
|
37
|
+
* tentative state slots, refresh views, invoke `compute`, commit /
|
|
38
|
+
* flush state slots on close. Does NOT reset the per-bar emission
|
|
39
|
+
* queues; callers do that exactly once via {@link resetBarEmissions}.
|
|
40
|
+
*
|
|
41
|
+
* `runtime.error(...)` halts clear the runner's visual emissions and
|
|
42
|
+
* push a `runtime-error-thrown` diagnostic, matching the Phase-1
|
|
43
|
+
* single-script behaviour byte-for-byte. Non-halt throws propagate
|
|
44
|
+
* out unchanged.
|
|
45
|
+
*
|
|
46
|
+
* @since 0.7
|
|
47
|
+
* @stable
|
|
48
|
+
* @example
|
|
49
|
+
* // const outcome = await runComputeBody({ state, eventKind: "close", isTick: false });
|
|
50
|
+
* // void outcome;
|
|
51
|
+
*/
|
|
52
|
+
export async function runComputeBody(args) {
|
|
53
|
+
const { state, eventKind, isTick } = args;
|
|
54
|
+
ACTIVE_RUNTIME_CONTEXT.current = state.runtimeContext;
|
|
55
|
+
state.runtimeContext.isTick = isTick;
|
|
56
|
+
let outcome = { kind: "ok" };
|
|
57
|
+
try {
|
|
58
|
+
resetSubIdCounters(state.runtimeContext);
|
|
59
|
+
if (isTick) {
|
|
60
|
+
resetTentativeStateSlots(state.runtimeContext);
|
|
61
|
+
}
|
|
62
|
+
refreshRuntimeViews(state, eventKind);
|
|
63
|
+
try {
|
|
64
|
+
await Promise.resolve(state.compute(buildComputeContext(state)));
|
|
65
|
+
if (!isTick) {
|
|
66
|
+
commitStateSlots(state.runtimeContext);
|
|
67
|
+
flushStateSlots(state.runtimeContext);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
catch (err) {
|
|
71
|
+
if (!isRuntimeErrorHalt(err))
|
|
72
|
+
throw err;
|
|
73
|
+
state.emissions.plots = [];
|
|
74
|
+
state.emissions.drawings = [];
|
|
75
|
+
state.emissions.alerts = [];
|
|
76
|
+
state.emissions.alertConditions = [];
|
|
77
|
+
state.emissions.logs = [];
|
|
78
|
+
pushDiagnostic(state.emissions, {
|
|
79
|
+
kind: "diagnostic",
|
|
80
|
+
severity: "error",
|
|
81
|
+
code: "runtime-error-thrown",
|
|
82
|
+
message: err.message,
|
|
83
|
+
slotId: null,
|
|
84
|
+
bar: state.barIndex,
|
|
85
|
+
});
|
|
86
|
+
outcome = { kind: "halt", message: err.message };
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
finally {
|
|
90
|
+
if (isTick)
|
|
91
|
+
state.runtimeContext.isTick = false;
|
|
92
|
+
ACTIVE_RUNTIME_CONTEXT.current = null;
|
|
93
|
+
}
|
|
94
|
+
return outcome;
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=runComputeStep.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runComputeStep.js","sourceRoot":"","sources":["../../src/execution/runComputeStep.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) 2026 Invinite. Licensed under the MIT License.\n// See the LICENSE file in the repo root for full license text.\n\nimport { buildComputeContext } from \"../buildComputeContext.js\";\nimport type { RunnerState } from \"../createScriptRunner.js\";\nimport { resetSubIdCounters } from \"../emit/draw/index.js\";\nimport { isRuntimeErrorHalt, pushDiagnostic } from \"../emit/index.js\";\nimport { ACTIVE_RUNTIME_CONTEXT } from \"../runtimeContext.js\";\nimport { commitStateSlots, flushStateSlots, resetTentativeStateSlots } from \"../state/index.js\";\nimport { type EventKind, refreshRuntimeViews } from \"../views/index.js\";\n\n/**\n * Outcome of a single compute step. `ok` means the script's `compute`\n * returned normally; `halt` means `runtime.error(...)` was thrown (the\n * compute body deliberately aborted the bar). Non-halt throws propagate\n * out of {@link runComputeStep} unchanged.\n *\n * @since 0.7\n * @stable\n * @example\n * const r: RunComputeStepOutcome = { kind: \"ok\" };\n * void r;\n */\nexport type RunComputeStepOutcome =\n | Readonly<{ kind: \"ok\" }>\n | Readonly<{ kind: \"halt\"; readonly message: string }>;\n\n/**\n * Configuration for {@link runComputeStep}. `eventKind` reaches the\n * runtime views so `barstate.*` picks up the right snapshot; `isTick`\n * discriminates the close-vs-tick state-slot lifecycle.\n *\n * @since 0.7\n * @stable\n * @example\n * const args = { state, eventKind: \"close\" as const, isTick: false };\n * void args;\n */\nexport type RunComputeStepArgs = Readonly<{\n readonly state: RunnerState;\n readonly eventKind: EventKind;\n readonly isTick: boolean;\n}>;\n\n/**\n * Reset the per-bar emission queues on a runner before its compute\n * runs. Exported for the dep / sibling step driver — single-script\n * callers go through {@link runComputeStep} which calls this\n * internally.\n *\n * @since 0.7\n * @stable\n * @example\n * // resetBarEmissions(state);\n */\nexport function resetBarEmissions(state: RunnerState): void {\n state.emissions.plots = [];\n state.emissions.drawings = [];\n state.emissions.alerts = [];\n state.emissions.alertConditions = [];\n state.emissions.logs = [];\n state.emissions.diagnostics = [];\n state.emissions.fromBar = state.barIndex;\n state.emissions.toBar = state.barIndex;\n state.runtimeContext.requestSecurityAlignments.clear();\n state.runtimeContext.requestSecurityAscendingBars.clear();\n state.runtimeContext.logBudget = 0;\n state.runtimeContext.logBudgetExceededDiagnosed = false;\n}\n\n/**\n * Run the inner compute body of `state.compute` — set\n * `ACTIVE_RUNTIME_CONTEXT`, reset sub-id counters, optionally reset\n * tentative state slots, refresh views, invoke `compute`, commit /\n * flush state slots on close. Does NOT reset the per-bar emission\n * queues; callers do that exactly once via {@link resetBarEmissions}.\n *\n * `runtime.error(...)` halts clear the runner's visual emissions and\n * push a `runtime-error-thrown` diagnostic, matching the Phase-1\n * single-script behaviour byte-for-byte. Non-halt throws propagate\n * out unchanged.\n *\n * @since 0.7\n * @stable\n * @example\n * // const outcome = await runComputeBody({ state, eventKind: \"close\", isTick: false });\n * // void outcome;\n */\nexport async function runComputeBody(args: RunComputeStepArgs): Promise<RunComputeStepOutcome> {\n const { state, eventKind, isTick } = args;\n ACTIVE_RUNTIME_CONTEXT.current = state.runtimeContext;\n state.runtimeContext.isTick = isTick;\n let outcome: RunComputeStepOutcome = { kind: \"ok\" };\n try {\n resetSubIdCounters(state.runtimeContext);\n if (isTick) {\n resetTentativeStateSlots(state.runtimeContext);\n }\n refreshRuntimeViews(state, eventKind);\n try {\n await Promise.resolve(state.compute(buildComputeContext(state)));\n if (!isTick) {\n commitStateSlots(state.runtimeContext);\n flushStateSlots(state.runtimeContext);\n }\n } catch (err) {\n if (!isRuntimeErrorHalt(err)) throw err;\n state.emissions.plots = [];\n state.emissions.drawings = [];\n state.emissions.alerts = [];\n state.emissions.alertConditions = [];\n state.emissions.logs = [];\n pushDiagnostic(state.emissions, {\n kind: \"diagnostic\",\n severity: \"error\",\n code: \"runtime-error-thrown\",\n message: err.message,\n slotId: null,\n bar: state.barIndex,\n });\n outcome = { kind: \"halt\", message: err.message };\n }\n } finally {\n if (isTick) state.runtimeContext.isTick = false;\n ACTIVE_RUNTIME_CONTEXT.current = null;\n }\n return outcome;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"secondaryStream.js","sourceRoot":"","sources":["../../src/execution/secondaryStream.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAI/D,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAoB,MAAM,mBAAmB,CAAC;AAE3F;;;;;;;;;GASG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAmB,EAAE,MAAW;IAC/D,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACtC,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAmB,EAAE,MAAW;IACjE,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACtC,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAmB,EAAE,IAAwB;IAChF,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACrB,iBAAiB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACnC,CAAC;AACL,CAAC"}
|
|
1
|
+
{"version":3,"file":"secondaryStream.js","sourceRoot":"","sources":["../../src/execution/secondaryStream.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAI/D,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAoB,MAAM,mBAAmB,CAAC;AAE3F;;;;;;;;;GASG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAmB,EAAE,MAAW;IAC/D,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACtC,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAmB,EAAE,MAAW;IACjE,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACtC,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAmB,EAAE,IAAwB;IAChF,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACrB,iBAAiB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACnC,CAAC;AACL,CAAC","sourcesContent":["// Copyright (c) 2026 Invinite. Licensed under the MIT License.\n// See the LICENSE file in the repo root for full license text.\n\nimport type { Bar } from \"@invinite-org/chartlang-core\";\n\nimport { appendBarToStream, replaceStreamHead, type StreamState } from \"../streamState.js\";\n\n/**\n * Append a finalised candle to a secondary stream without running compute.\n *\n * @since 0.5\n * @internal\n * @example\n * // appendSecondaryBar(stream, bar);\n * const appended = true;\n * void appended;\n */\nexport function appendSecondaryBar(stream: StreamState, rawBar: Bar): void {\n appendBarToStream(stream, rawBar);\n}\n\n/**\n * Replace the current secondary stream head with an intra-bar update.\n *\n * @since 0.5\n * @internal\n * @example\n * // replaceSecondaryHead(stream, bar);\n * const replaced = true;\n * void replaced;\n */\nexport function replaceSecondaryHead(stream: StreamState, rawBar: Bar): void {\n replaceStreamHead(stream, rawBar);\n}\n\n/**\n * Append a history batch to a secondary stream in source order.\n *\n * @since 0.5\n * @internal\n * @example\n * // appendSecondaryHistory(stream, []);\n * const appended = true;\n * void appended;\n */\nexport function appendSecondaryHistory(stream: StreamState, bars: ReadonlyArray<Bar>): void {\n for (const bar of bars) {\n appendBarToStream(stream, bar);\n }\n}\n"]}
|
package/dist/index.d.ts
CHANGED
|
@@ -16,10 +16,12 @@ export type { AdapterSymInfo, BarStateInputs, EventKind, RuntimeViews } from "./
|
|
|
16
16
|
export { ACTIVE_RUNTIME_CONTEXT } from "./runtimeContext.js";
|
|
17
17
|
export { createScriptRunner } from "./createScriptRunner.js";
|
|
18
18
|
export type { CreateScriptRunnerArgs, ScriptRunner } from "./createScriptRunner.js";
|
|
19
|
-
export { alert, draw, hline, plot, pushDrawing } from "./emit/index.js";
|
|
19
|
+
export { alert, applyPlotOverride, draw, hline, plot, pushDrawing } from "./emit/index.js";
|
|
20
20
|
export { TA_REGISTRY, ta } from "./ta/index.js";
|
|
21
21
|
export { maRibbonOutputKeys } from "./ta/index.js";
|
|
22
22
|
export type { RuntimeTaNamespace, ScalarOrSeries } from "./ta/index.js";
|
|
23
23
|
export { linearRegression } from "./ta/lib/linearRegression.js";
|
|
24
24
|
export type { LinearRegressionFrame } from "./ta/lib/linearRegression.js";
|
|
25
|
+
export type { CreateDepRunnerArgs, DepOutputDeclaration, DepOutputStore, DepRunner, DepRunnerLike, SiblingRunner, SiblingRunnerLike, } from "./dep/index.js";
|
|
26
|
+
export { applyDepEmissionPolicy, createDepOutputStore, createDepRunner, createSiblingRunner, runDepStep, runSiblingStep, } from "./dep/index.js";
|
|
25
27
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAChE,YAAY,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxE,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,YAAY,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EAAE,4BAA4B,EAAE,MAAM,2BAA2B,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACjF,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC/E,YAAY,EAAE,WAAW,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC/F,OAAO,EACH,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,iBAAiB,GACpB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChG,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,YAAY,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACpF,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAChE,YAAY,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxE,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,YAAY,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EAAE,4BAA4B,EAAE,MAAM,2BAA2B,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACjF,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC/E,YAAY,EAAE,WAAW,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC/F,OAAO,EACH,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,iBAAiB,GACpB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChG,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,YAAY,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACpF,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC3F,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,YAAY,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAOxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,YAAY,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAE1E,YAAY,EACR,mBAAmB,EACnB,oBAAoB,EACpB,cAAc,EACd,SAAS,EACT,aAAa,EACb,aAAa,EACb,iBAAiB,GACpB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACH,sBAAsB,EACtB,oBAAoB,EACpB,eAAe,EACf,mBAAmB,EACnB,UAAU,EACV,cAAc,GACjB,MAAM,gBAAgB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -11,7 +11,7 @@ export { buildRequestNamespace, makeNanSecurityBar } from "./request/index.js";
|
|
|
11
11
|
export { createRuntimeViews, makeBarStateView, makeSymInfoView, makeTimeframeView, } from "./views/index.js";
|
|
12
12
|
export { ACTIVE_RUNTIME_CONTEXT } from "./runtimeContext.js";
|
|
13
13
|
export { createScriptRunner } from "./createScriptRunner.js";
|
|
14
|
-
export { alert, draw, hline, plot, pushDrawing } from "./emit/index.js";
|
|
14
|
+
export { alert, applyPlotOverride, draw, hline, plot, pushDrawing } from "./emit/index.js";
|
|
15
15
|
export { TA_REGISTRY, ta } from "./ta/index.js";
|
|
16
16
|
export { maRibbonOutputKeys } from "./ta/index.js";
|
|
17
17
|
// Public re-export added in Phase 3 Task 10 so consumer adapters that
|
|
@@ -21,4 +21,5 @@ export { maRibbonOutputKeys } from "./ta/index.js";
|
|
|
21
21
|
// pass `length === source.length` for a single-window fit over the
|
|
22
22
|
// bar range; the line value at the last index is the end-of-range fit.
|
|
23
23
|
export { linearRegression } from "./ta/lib/linearRegression.js";
|
|
24
|
+
export { applyDepEmissionPolicy, createDepOutputStore, createDepRunner, createSiblingRunner, runDepStep, runSiblingStep, } from "./dep/index.js";
|
|
24
25
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAE/D,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAEhE,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAExE,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD,OAAO,EAAE,4BAA4B,EAAE,MAAM,2BAA2B,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACjF,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAE/E,OAAO,EACH,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,iBAAiB,GACpB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE7D,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAE/D,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAEhE,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAExE,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD,OAAO,EAAE,4BAA4B,EAAE,MAAM,2BAA2B,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACjF,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAE/E,OAAO,EACH,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,iBAAiB,GACpB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE7D,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC3F,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAEnD,sEAAsE;AACtE,gEAAgE;AAChE,uDAAuD;AACvD,oEAAoE;AACpE,mEAAmE;AACnE,uEAAuE;AACvE,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAYhE,OAAO,EACH,sBAAsB,EACtB,oBAAoB,EACpB,eAAe,EACf,mBAAmB,EACnB,UAAU,EACV,cAAc,GACjB,MAAM,gBAAgB,CAAC","sourcesContent":["// Copyright (c) 2026 Invinite. Licensed under the MIT License.\n// See the LICENSE file in the repo root for full license text.\n\nexport { Float64RingBuffer, RingBuffer } from \"./ringBuffer.js\";\nexport type { RingBufferLike } from \"./ringBuffer.js\";\nexport { makeSeriesView, makeShiftedSeriesView } from \"./seriesView.js\";\nexport type { BarView, OhlcvBuffers, StreamState } from \"./streamState.js\";\nexport { createStreamState } from \"./streamState.js\";\nexport type { StateStore } from \"./stateStore.js\";\nexport { inMemoryStateStore } from \"./stateStore.js\";\nexport type { PersistentStateStore } from \"./persistentStateStore.js\";\nexport { inMemoryPersistentStateStore } from \"./persistentStateStore.js\";\nexport { asMutableSlot, buildStateNamespace, StateSlot } from \"./state/index.js\";\nexport { resolveInputs } from \"./inputs/index.js\";\nexport { buildRequestNamespace, makeNanSecurityBar } from \"./request/index.js\";\nexport type { DrawingSlot, MutableRunnerEmissions, RuntimeContext } from \"./runtimeContext.js\";\nexport {\n createRuntimeViews,\n makeBarStateView,\n makeSymInfoView,\n makeTimeframeView,\n} from \"./views/index.js\";\nexport type { AdapterSymInfo, BarStateInputs, EventKind, RuntimeViews } from \"./views/index.js\";\nexport { ACTIVE_RUNTIME_CONTEXT } from \"./runtimeContext.js\";\nexport { createScriptRunner } from \"./createScriptRunner.js\";\nexport type { CreateScriptRunnerArgs, ScriptRunner } from \"./createScriptRunner.js\";\nexport { alert, applyPlotOverride, draw, hline, plot, pushDrawing } from \"./emit/index.js\";\nexport { TA_REGISTRY, ta } from \"./ta/index.js\";\nexport { maRibbonOutputKeys } from \"./ta/index.js\";\nexport type { RuntimeTaNamespace, ScalarOrSeries } from \"./ta/index.js\";\n// Public re-export added in Phase 3 Task 10 so consumer adapters that\n// render `draw.regressionTrend` can compute the OLS fit without\n// duplicating math. The Phase-2 helper signature stays\n// `(source: Float64Array, length: number): LinearRegressionFrame` —\n// pass `length === source.length` for a single-window fit over the\n// bar range; the line value at the last index is the end-of-range fit.\nexport { linearRegression } from \"./ta/lib/linearRegression.js\";\nexport type { LinearRegressionFrame } from \"./ta/lib/linearRegression.js\";\n// Indicator-composition surface (Phase 7).\nexport type {\n CreateDepRunnerArgs,\n DepOutputDeclaration,\n DepOutputStore,\n DepRunner,\n DepRunnerLike,\n SiblingRunner,\n SiblingRunnerLike,\n} from \"./dep/index.js\";\nexport {\n applyDepEmissionPolicy,\n createDepOutputStore,\n createDepRunner,\n createSiblingRunner,\n runDepStep,\n runSiblingStep,\n} from \"./dep/index.js\";\n"]}
|
package/dist/inputs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/inputs/index.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAE/D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/inputs/index.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAE/D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC","sourcesContent":["// Copyright (c) 2026 Invinite. Licensed under the MIT License.\n// See the LICENSE file in the repo root for full license text.\n\nexport { resolveInputs } from \"./resolveInputs.js\";\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolveInputs.js","sourceRoot":"","sources":["../../src/inputs/resolveInputs.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"resolveInputs.js","sourceRoot":"","sources":["../../src/inputs/resolveInputs.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) 2026 Invinite. Licensed under the MIT License.\n// See the LICENSE file in the repo root for full license text.\n\nimport type { InputDescriptor, ScriptManifest } from \"@invinite-org/chartlang-core\";\n\nimport type { RuntimeContext } from \"../runtimeContext.js\";\n\nconst SOURCE_FIELDS = new Set<string>([\n \"open\",\n \"high\",\n \"low\",\n \"close\",\n \"hl2\",\n \"hlc3\",\n \"ohlc4\",\n \"hlcc4\",\n]);\n\n/**\n * Resolve the script's effective `inputs` bag from manifest defaults plus\n * optional adapter-supplied overrides. Type-incompatible overrides fall back\n * to the descriptor default and emit `input-coercion-failed` once per\n * mount/key.\n *\n * @since 0.4\n * @stable\n * @example\n * // import { resolveInputs } from \"@invinite-org/chartlang-runtime\";\n * // const inputs = resolveInputs(manifest, { length: 20 }, ctx);\n * const fn: typeof resolveInputs = resolveInputs;\n * void fn;\n */\nexport function resolveInputs(\n manifest: ScriptManifest,\n overrides: Readonly<Record<string, unknown>>,\n ctx: RuntimeContext,\n): Readonly<Record<string, unknown>> {\n const out: Record<string, unknown> = {};\n for (const [key, descriptor] of Object.entries(manifest.inputs)) {\n const fallback = defaultValueFor(descriptor);\n if (!Object.hasOwn(overrides, key) || overrides[key] === undefined) {\n out[key] = fallback;\n continue;\n }\n const override = overrides[key];\n if (matchesDescriptor(descriptor, override)) {\n out[key] = override;\n continue;\n }\n pushInputDiagnostic(ctx, key, descriptor.kind, override);\n out[key] = fallback;\n }\n return Object.freeze(out);\n}\n\nfunction defaultValueFor(descriptor: InputDescriptor<unknown>): unknown {\n if (\"defaultValue\" in descriptor) return descriptor.defaultValue;\n return undefined;\n}\n\nfunction matchesDescriptor(descriptor: InputDescriptor<unknown>, value: unknown): boolean {\n switch (descriptor.kind) {\n case \"int\":\n return typeof value === \"number\" && Number.isInteger(value);\n case \"float\":\n case \"time\":\n case \"price\":\n return typeof value === \"number\" && Number.isFinite(value);\n case \"bool\":\n return typeof value === \"boolean\";\n case \"string\":\n case \"color\":\n case \"symbol\":\n case \"interval\":\n return typeof value === \"string\";\n case \"enum\":\n return typeof value === \"string\" && descriptor.options.includes(value);\n case \"source\":\n return typeof value === \"string\" && SOURCE_FIELDS.has(value);\n case \"external-series\":\n return value !== null && typeof value === \"object\";\n }\n}\n\nfunction pushInputDiagnostic(\n ctx: RuntimeContext,\n key: string,\n expected: string,\n value: unknown,\n): void {\n if (ctx.diagnosedInputKeys.has(key)) return;\n ctx.diagnosedInputKeys.add(key);\n ctx.emissions.diagnostics.push({\n kind: \"diagnostic\",\n severity: \"warning\",\n code: \"input-coercion-failed\",\n message: `input \"${key}\" expected ${expected}, got ${describeValue(value)}`,\n slotId: key,\n bar: null,\n });\n}\n\nfunction describeValue(value: unknown): string {\n if (value === null) return \"null\";\n if (typeof value === \"number\" && Number.isNaN(value)) return \"NaN\";\n return typeof value;\n}\n"]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Internal runtime entrypoint consumed by compiler-emitted bundles.
|
|
3
|
+
* NOT a script-author surface — user `.chart.ts` files cannot import
|
|
4
|
+
* from this module; the compiler's `extractDependencyGraph` rewrites
|
|
5
|
+
* every `<binding>.output("title")` call into the runtime helper
|
|
6
|
+
* exposed here.
|
|
7
|
+
*
|
|
8
|
+
* @since 0.7
|
|
9
|
+
* @stable
|
|
10
|
+
*/
|
|
11
|
+
export { DEP_OUTPUT_GLOBAL_KEY, __chartlang_depOutput, installDepOutputGlobal, } from "./dep/depOutput.js";
|
|
12
|
+
//# sourceMappingURL=internal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../src/internal.ts"],"names":[],"mappings":"AAGA;;;;;;;;;GASG;AAEH,OAAO,EACH,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,GACzB,MAAM,oBAAoB,CAAC"}
|
package/dist/internal.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// Copyright (c) 2026 Invinite. Licensed under the MIT License.
|
|
2
|
+
// See the LICENSE file in the repo root for full license text.
|
|
3
|
+
/**
|
|
4
|
+
* Internal runtime entrypoint consumed by compiler-emitted bundles.
|
|
5
|
+
* NOT a script-author surface — user `.chart.ts` files cannot import
|
|
6
|
+
* from this module; the compiler's `extractDependencyGraph` rewrites
|
|
7
|
+
* every `<binding>.output("title")` call into the runtime helper
|
|
8
|
+
* exposed here.
|
|
9
|
+
*
|
|
10
|
+
* @since 0.7
|
|
11
|
+
* @stable
|
|
12
|
+
*/
|
|
13
|
+
export { DEP_OUTPUT_GLOBAL_KEY, __chartlang_depOutput, installDepOutputGlobal, } from "./dep/depOutput.js";
|
|
14
|
+
//# sourceMappingURL=internal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"internal.js","sourceRoot":"","sources":["../src/internal.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AAE/D;;;;;;;;;GASG;AAEH,OAAO,EACH,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,GACzB,MAAM,oBAAoB,CAAC","sourcesContent":["// Copyright (c) 2026 Invinite. Licensed under the MIT License.\n// See the LICENSE file in the repo root for full license text.\n\n/**\n * Internal runtime entrypoint consumed by compiler-emitted bundles.\n * NOT a script-author surface — user `.chart.ts` files cannot import\n * from this module; the compiler's `extractDependencyGraph` rewrites\n * every `<binding>.output(\"title\")` call into the runtime helper\n * exposed here.\n *\n * @since 0.7\n * @stable\n */\n\nexport {\n DEP_OUTPUT_GLOBAL_KEY,\n __chartlang_depOutput,\n installDepOutputGlobal,\n} from \"./dep/depOutput.js\";\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"persistentStateStore.js","sourceRoot":"","sources":["../src/persistentStateStore.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AA4B/D;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,4BAA4B,CACxC,IAAsC;IAEtC,IAAI,OAAO,GAAyB,IAAI,CAAC;IACzC,OAAO,MAAM,CAAC,MAAM,CAAC;QACjB,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,KAAK,CAAC,IAAI;YACN,OAAO,OAAO,CAAC;QACnB,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,QAAuB;YAC9B,OAAO,GAAG,QAAQ,CAAC;QACvB,CAAC;QACD,KAAK,CAAC,KAAK;YACP,OAAO,GAAG,IAAI,CAAC;QACnB,CAAC;KACJ,CAAC,CAAC;AACP,CAAC"}
|
|
1
|
+
{"version":3,"file":"persistentStateStore.js","sourceRoot":"","sources":["../src/persistentStateStore.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,+DAA+D;AA4B/D;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,4BAA4B,CACxC,IAAsC;IAEtC,IAAI,OAAO,GAAyB,IAAI,CAAC;IACzC,OAAO,MAAM,CAAC,MAAM,CAAC;QACjB,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,KAAK,CAAC,IAAI;YACN,OAAO,OAAO,CAAC;QACnB,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,QAAuB;YAC9B,OAAO,GAAG,QAAQ,CAAC;QACvB,CAAC;QACD,KAAK,CAAC,KAAK;YACP,OAAO,GAAG,IAAI,CAAC;QACnB,CAAC;KACJ,CAAC,CAAC;AACP,CAAC","sourcesContent":["// Copyright (c) 2026 Invinite. Licensed under the MIT License.\n// See the LICENSE file in the repo root for full license text.\n\nimport type { StateSnapshot, StateStoreKey } from \"@invinite-org/chartlang-core\";\n\n/**\n * Cross-mount snapshot store per PLAN §6.9. Sits beside the Phase-1\n * slot `StateStore`: primitives still read/write slot state through\n * the slot store; the persistent store captures and restores the\n * whole snapshot on mount/dispose boundaries.\n *\n * Implementations include {@link inMemoryPersistentStateStore} for\n * tests, `idbStateStore` for browsers, and caller-supplied stores for\n * servers.\n *\n * @since 0.5\n * @stable\n * @example\n * // import type { PersistentStateStore }\n * // from \"@invinite-org/chartlang-runtime\";\n * // const store: PersistentStateStore = inMemoryPersistentStateStore({ key });\n */\nexport type PersistentStateStore = {\n readonly key: StateStoreKey;\n load(): Promise<StateSnapshot | null>;\n save(snapshot: StateSnapshot): Promise<void>;\n clear(): Promise<void>;\n};\n\n/**\n * In-process persistent store with one last-write-wins snapshot.\n *\n * @since 0.5\n * @stable\n * @example\n * // import { inMemoryPersistentStateStore }\n * // from \"@invinite-org/chartlang-runtime\";\n * // const store = inMemoryPersistentStateStore({ key });\n * // await store.save(snapshot);\n * // await store.load(); // snapshot\n */\nexport function inMemoryPersistentStateStore(\n opts: Readonly<{ key: StateStoreKey }>,\n): PersistentStateStore {\n let current: StateSnapshot | null = null;\n return Object.freeze({\n key: opts.key,\n async load(): Promise<StateSnapshot | null> {\n return current;\n },\n async save(snapshot: StateSnapshot): Promise<void> {\n current = snapshot;\n },\n async clear(): Promise<void> {\n current = null;\n },\n });\n}\n"]}
|
|
@@ -11,9 +11,14 @@ import type { RunnerState } from "./createScriptRunner.js";
|
|
|
11
11
|
*/
|
|
12
12
|
export declare const PERSISTENCE_INTERVAL_MS = 60000;
|
|
13
13
|
/**
|
|
14
|
-
* Capture the runner's current stream
|
|
14
|
+
* Capture the runner's current stream + per-runner state-slot snapshot.
|
|
15
15
|
*
|
|
16
|
-
*
|
|
16
|
+
* Returns the structured shape carrying `primary.slots`, optional
|
|
17
|
+
* `siblings[exportName].slots`, and optional `dependencies[localId].slots`.
|
|
18
|
+
* TA slots live in `primary.slots` because the bundle's deps and siblings
|
|
19
|
+
* share the primary's `mainStream` (Task-4 invariant).
|
|
20
|
+
*
|
|
21
|
+
* @since 0.5 — widened to per-runner sections in 0.7.
|
|
17
22
|
* @internal
|
|
18
23
|
* @example
|
|
19
24
|
* // const snapshot = captureStateSnapshot(state, Date.now());
|
|
@@ -22,9 +27,18 @@ export declare const PERSISTENCE_INTERVAL_MS = 60000;
|
|
|
22
27
|
*/
|
|
23
28
|
export declare function captureStateSnapshot(state: RunnerState, savedAt: number): StateSnapshot | null;
|
|
24
29
|
/**
|
|
25
|
-
* Restore a validated snapshot into the runner's stream
|
|
30
|
+
* Restore a validated snapshot into the runner's stream + slot stores.
|
|
26
31
|
*
|
|
27
|
-
*
|
|
32
|
+
* Walks every per-runner section: `primary.slots` rehydrates the
|
|
33
|
+
* primary's `state.*` slots (and TA slots on the shared mainStream);
|
|
34
|
+
* `siblings[exportName].slots` and `dependencies[localId].slots`
|
|
35
|
+
* rehydrate each matching sub-runner. Snapshot sections whose id is not
|
|
36
|
+
* declared by the current bundle are skipped with a
|
|
37
|
+
* `state-snapshot-malformed` diagnostic.
|
|
38
|
+
*
|
|
39
|
+
* Legacy flat-shape snapshots (pre-0.7) restore into the primary only.
|
|
40
|
+
*
|
|
41
|
+
* @since 0.5 — widened to per-runner sections in 0.7.
|
|
28
42
|
* @internal
|
|
29
43
|
* @example
|
|
30
44
|
* // restoreStateSnapshot(state, snapshot);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"persistentStateStore.runtime.d.ts","sourceRoot":"","sources":["../src/persistentStateStore.runtime.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"persistentStateStore.runtime.d.ts","sourceRoot":"","sources":["../src/persistentStateStore.runtime.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAGR,aAAa,EAEhB,MAAM,8BAA8B,CAAC;AAEtC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAO3D;;;;;;;;GAQG;AACH,eAAO,MAAM,uBAAuB,QAAS,CAAC;AAoD9C;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAe9F;AAyED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI,CAuBtF;AA2BD;;;;;;;;;GASG;AACH,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CA8B7F;AAED;;;;;;;;;GASG;AACH,wBAAsB,sBAAsB,CACxC,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC,CAKf"}
|
|
@@ -29,10 +29,44 @@ function captureStreams(state) {
|
|
|
29
29
|
}
|
|
30
30
|
return Object.freeze(streams);
|
|
31
31
|
}
|
|
32
|
+
function primarySectionSlots(state) {
|
|
33
|
+
return Object.freeze({
|
|
34
|
+
...serialiseStateSlots(state.runtimeContext),
|
|
35
|
+
...serialiseTaSlots(state.mainStream),
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
function runnerSection(ctx) {
|
|
39
|
+
return Object.freeze({
|
|
40
|
+
slots: Object.freeze({ ...serialiseStateSlots(ctx) }),
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
function captureSiblings(state) {
|
|
44
|
+
if (state.siblingRunners.length === 0)
|
|
45
|
+
return undefined;
|
|
46
|
+
const out = {};
|
|
47
|
+
for (const sibling of state.siblingRunners) {
|
|
48
|
+
out[sibling.exportName] = runnerSection(sibling.state.runtimeContext);
|
|
49
|
+
}
|
|
50
|
+
return Object.freeze(out);
|
|
51
|
+
}
|
|
52
|
+
function captureDependencies(state) {
|
|
53
|
+
if (state.depRunners.length === 0)
|
|
54
|
+
return undefined;
|
|
55
|
+
const out = {};
|
|
56
|
+
for (const dep of state.depRunners) {
|
|
57
|
+
out[dep.localId] = runnerSection(dep.state.runtimeContext);
|
|
58
|
+
}
|
|
59
|
+
return Object.freeze(out);
|
|
60
|
+
}
|
|
32
61
|
/**
|
|
33
|
-
* Capture the runner's current stream
|
|
62
|
+
* Capture the runner's current stream + per-runner state-slot snapshot.
|
|
34
63
|
*
|
|
35
|
-
*
|
|
64
|
+
* Returns the structured shape carrying `primary.slots`, optional
|
|
65
|
+
* `siblings[exportName].slots`, and optional `dependencies[localId].slots`.
|
|
66
|
+
* TA slots live in `primary.slots` because the bundle's deps and siblings
|
|
67
|
+
* share the primary's `mainStream` (Task-4 invariant).
|
|
68
|
+
*
|
|
69
|
+
* @since 0.5 — widened to per-runner sections in 0.7.
|
|
36
70
|
* @internal
|
|
37
71
|
* @example
|
|
38
72
|
* // const snapshot = captureStateSnapshot(state, Date.now());
|
|
@@ -41,16 +75,16 @@ function captureStreams(state) {
|
|
|
41
75
|
*/
|
|
42
76
|
export function captureStateSnapshot(state, savedAt) {
|
|
43
77
|
const streams = captureStreams(state);
|
|
44
|
-
const
|
|
45
|
-
|
|
46
|
-
...serialiseTaSlots(state.mainStream),
|
|
47
|
-
};
|
|
78
|
+
const siblings = captureSiblings(state);
|
|
79
|
+
const dependencies = captureDependencies(state);
|
|
48
80
|
const candidate = {
|
|
49
81
|
lastBarTime: state.mainStream.bar.time,
|
|
50
82
|
streams,
|
|
51
|
-
slots: Object.freeze(slots),
|
|
52
83
|
savedAt,
|
|
53
84
|
snapshotVersion: 1,
|
|
85
|
+
primary: { slots: primarySectionSlots(state) },
|
|
86
|
+
...(siblings === undefined ? {} : { siblings }),
|
|
87
|
+
...(dependencies === undefined ? {} : { dependencies }),
|
|
54
88
|
};
|
|
55
89
|
if (!validateSnapshot(candidate))
|
|
56
90
|
return null;
|
|
@@ -67,10 +101,60 @@ function resolveMainStreamSnapshot(snapshot, mainInterval) {
|
|
|
67
101
|
const fallback = firstStreamKey(snapshot);
|
|
68
102
|
return fallback === null ? undefined : snapshot.streams[fallback];
|
|
69
103
|
}
|
|
104
|
+
function nonTaSlots(slots) {
|
|
105
|
+
const out = {};
|
|
106
|
+
for (const [slotKey, value] of Object.entries(slots)) {
|
|
107
|
+
if (!isTaSlotSnapshotKey(slotKey)) {
|
|
108
|
+
out[slotKey] = value;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
return out;
|
|
112
|
+
}
|
|
113
|
+
function pushMalformedSection(state, message) {
|
|
114
|
+
pushDiagnostic(state.emissions, {
|
|
115
|
+
kind: "diagnostic",
|
|
116
|
+
severity: "warning",
|
|
117
|
+
code: "state-snapshot-malformed",
|
|
118
|
+
message,
|
|
119
|
+
slotId: null,
|
|
120
|
+
bar: state.barIndex,
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
function restoreSiblingSections(state, siblings) {
|
|
124
|
+
const lookup = new Map(state.siblingRunners.map((sib) => [sib.exportName, sib]));
|
|
125
|
+
for (const [exportName, section] of Object.entries(siblings)) {
|
|
126
|
+
const sibling = lookup.get(exportName);
|
|
127
|
+
if (sibling === undefined) {
|
|
128
|
+
pushMalformedSection(state, `persistent state snapshot referenced unknown sibling "${exportName}"`);
|
|
129
|
+
continue;
|
|
130
|
+
}
|
|
131
|
+
restoreStateSlots(sibling.state.runtimeContext, section.slots);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
function restoreDependencySections(state, dependencies) {
|
|
135
|
+
const lookup = new Map(state.depRunners.map((dep) => [dep.localId, dep]));
|
|
136
|
+
for (const [localId, section] of Object.entries(dependencies)) {
|
|
137
|
+
const dep = lookup.get(localId);
|
|
138
|
+
if (dep === undefined) {
|
|
139
|
+
pushMalformedSection(state, `persistent state snapshot referenced unknown dependency "${localId}"`);
|
|
140
|
+
continue;
|
|
141
|
+
}
|
|
142
|
+
restoreStateSlots(dep.state.runtimeContext, section.slots);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
70
145
|
/**
|
|
71
|
-
* Restore a validated snapshot into the runner's stream
|
|
146
|
+
* Restore a validated snapshot into the runner's stream + slot stores.
|
|
72
147
|
*
|
|
73
|
-
*
|
|
148
|
+
* Walks every per-runner section: `primary.slots` rehydrates the
|
|
149
|
+
* primary's `state.*` slots (and TA slots on the shared mainStream);
|
|
150
|
+
* `siblings[exportName].slots` and `dependencies[localId].slots`
|
|
151
|
+
* rehydrate each matching sub-runner. Snapshot sections whose id is not
|
|
152
|
+
* declared by the current bundle are skipped with a
|
|
153
|
+
* `state-snapshot-malformed` diagnostic.
|
|
154
|
+
*
|
|
155
|
+
* Legacy flat-shape snapshots (pre-0.7) restore into the primary only.
|
|
156
|
+
*
|
|
157
|
+
* @since 0.5 — widened to per-runner sections in 0.7.
|
|
74
158
|
* @internal
|
|
75
159
|
* @example
|
|
76
160
|
* // restoreStateSnapshot(state, snapshot);
|
|
@@ -89,16 +173,25 @@ export function restoreStateSnapshot(state, snapshot) {
|
|
|
89
173
|
secondary.restoreFromSnapshot(secondarySnapshot);
|
|
90
174
|
}
|
|
91
175
|
}
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
176
|
+
const primarySlots = primarySlotsOf(snapshot);
|
|
177
|
+
restoreTaSlots(state.mainStream, primarySlots);
|
|
178
|
+
restoreStateSlots(state.runtimeContext, nonTaSlots(primarySlots));
|
|
179
|
+
if (snapshot.siblings !== undefined) {
|
|
180
|
+
restoreSiblingSections(state, snapshot.siblings);
|
|
181
|
+
}
|
|
182
|
+
if (snapshot.dependencies !== undefined) {
|
|
183
|
+
restoreDependencySections(state, snapshot.dependencies);
|
|
100
184
|
}
|
|
101
|
-
|
|
185
|
+
}
|
|
186
|
+
const EMPTY_SLOTS = Object.freeze({});
|
|
187
|
+
function primarySlotsOf(snapshot) {
|
|
188
|
+
const view = snapshot;
|
|
189
|
+
if (view.primary !== undefined)
|
|
190
|
+
return view.primary.slots;
|
|
191
|
+
/* c8 ignore next 2 — validateSnapshot guarantees one of primary/slots is present. */
|
|
192
|
+
if (view.slots === undefined)
|
|
193
|
+
return EMPTY_SLOTS;
|
|
194
|
+
return view.slots;
|
|
102
195
|
}
|
|
103
196
|
/**
|
|
104
197
|
* Save one snapshot and convert malformed/save failures into diagnostics.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"persistentStateStore.runtime.js","sourceRoot":"","sources":["../src/persistentStateStore.runtime.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"persistentStateStore.runtime.js","sourceRoot":"","sources":["../src/persistentStateStore.runtime.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) 2026 Invinite. Licensed under the MIT License.\n// See the LICENSE file in the repo root for full license text.\n\nimport type {\n JsonValue,\n RunnerSnapshot,\n StateSnapshot,\n StreamSnapshot,\n} from \"@invinite-org/chartlang-core\";\n\nimport type { RunnerState } from \"./createScriptRunner.js\";\nimport { pushDiagnostic } from \"./emit/index.js\";\nimport { validateSnapshot } from \"./persistentStateStore.validate.js\";\nimport type { RuntimeContext } from \"./runtimeContext.js\";\nimport { restoreStateSlots, serialiseStateSlots } from \"./state/index.js\";\nimport { isTaSlotSnapshotKey, restoreTaSlots, serialiseTaSlots } from \"./ta/persistence.js\";\n\n/**\n * Default PLAN §6.9 write cadence for persistent snapshots.\n *\n * @since 0.5\n * @internal\n * @example\n * const stale = Date.now() - PERSISTENCE_INTERVAL_MS;\n * void stale;\n */\nexport const PERSISTENCE_INTERVAL_MS = 60_000;\n\nfunction firstStreamKey(snapshot: StateSnapshot): string | null {\n const entries = Object.entries(snapshot.streams);\n const first = entries[0];\n return first === undefined ? null : first[0];\n}\n\nfunction captureStreams(state: RunnerState): Readonly<Record<string, StreamSnapshot>> {\n const main = state.mainStream.serialiseSnapshot();\n const streams: Record<string, StreamSnapshot> = {\n [main.interval === \"\" ? \"main\" : main.interval]: main,\n };\n for (const [key, stream] of state.runtimeContext.secondaryStreams) {\n streams[key] = stream.serialiseSnapshot();\n }\n return Object.freeze(streams);\n}\n\nfunction primarySectionSlots(state: RunnerState): Readonly<Record<string, JsonValue>> {\n return Object.freeze({\n ...serialiseStateSlots(state.runtimeContext),\n ...serialiseTaSlots(state.mainStream),\n } as Record<string, JsonValue>);\n}\n\nfunction runnerSection(ctx: RuntimeContext): RunnerSnapshot {\n return Object.freeze({\n slots: Object.freeze({ ...serialiseStateSlots(ctx) } as Record<string, JsonValue>),\n });\n}\n\nfunction captureSiblings(state: RunnerState): Readonly<Record<string, RunnerSnapshot>> | undefined {\n if (state.siblingRunners.length === 0) return undefined;\n const out: Record<string, RunnerSnapshot> = {};\n for (const sibling of state.siblingRunners) {\n out[sibling.exportName] = runnerSection(sibling.state.runtimeContext);\n }\n return Object.freeze(out);\n}\n\nfunction captureDependencies(\n state: RunnerState,\n): Readonly<Record<string, RunnerSnapshot>> | undefined {\n if (state.depRunners.length === 0) return undefined;\n const out: Record<string, RunnerSnapshot> = {};\n for (const dep of state.depRunners) {\n out[dep.localId] = runnerSection(dep.state.runtimeContext);\n }\n return Object.freeze(out);\n}\n\n/**\n * Capture the runner's current stream + per-runner state-slot snapshot.\n *\n * Returns the structured shape carrying `primary.slots`, optional\n * `siblings[exportName].slots`, and optional `dependencies[localId].slots`.\n * TA slots live in `primary.slots` because the bundle's deps and siblings\n * share the primary's `mainStream` (Task-4 invariant).\n *\n * @since 0.5 — widened to per-runner sections in 0.7.\n * @internal\n * @example\n * // const snapshot = captureStateSnapshot(state, Date.now());\n * const captured = true;\n * void captured;\n */\nexport function captureStateSnapshot(state: RunnerState, savedAt: number): StateSnapshot | null {\n const streams = captureStreams(state);\n const siblings = captureSiblings(state);\n const dependencies = captureDependencies(state);\n const candidate: StateSnapshot = {\n lastBarTime: state.mainStream.bar.time,\n streams,\n savedAt,\n snapshotVersion: 1,\n primary: { slots: primarySectionSlots(state) },\n ...(siblings === undefined ? {} : { siblings }),\n ...(dependencies === undefined ? {} : { dependencies }),\n };\n if (!validateSnapshot(candidate)) return null;\n return candidate;\n}\n\n// Phase-1 mounts have `bar.interval === \"\"` until the first bar lands; in that\n// window the snapshot is keyed by whatever captureStreams used (\"main\" or the\n// explicit interval). Fall back to the snapshot's first-entered stream so warm\n// restart still finds the buffer.\nfunction resolveMainStreamSnapshot(\n snapshot: StateSnapshot,\n mainInterval: string,\n): StreamSnapshot | undefined {\n const direct = mainInterval === \"\" ? undefined : snapshot.streams[mainInterval];\n if (direct !== undefined) return direct;\n const fallback = firstStreamKey(snapshot);\n return fallback === null ? undefined : snapshot.streams[fallback];\n}\n\nfunction nonTaSlots(slots: Readonly<Record<string, JsonValue>>): Record<string, unknown> {\n const out: Record<string, unknown> = {};\n for (const [slotKey, value] of Object.entries(slots)) {\n if (!isTaSlotSnapshotKey(slotKey)) {\n out[slotKey] = value;\n }\n }\n return out;\n}\n\nfunction pushMalformedSection(state: RunnerState, message: string): void {\n pushDiagnostic(state.emissions, {\n kind: \"diagnostic\",\n severity: \"warning\",\n code: \"state-snapshot-malformed\",\n message,\n slotId: null,\n bar: state.barIndex,\n });\n}\n\nfunction restoreSiblingSections(\n state: RunnerState,\n siblings: Readonly<Record<string, RunnerSnapshot>>,\n): void {\n const lookup = new Map(state.siblingRunners.map((sib) => [sib.exportName, sib]));\n for (const [exportName, section] of Object.entries(siblings)) {\n const sibling = lookup.get(exportName);\n if (sibling === undefined) {\n pushMalformedSection(\n state,\n `persistent state snapshot referenced unknown sibling \"${exportName}\"`,\n );\n continue;\n }\n restoreStateSlots(sibling.state.runtimeContext, section.slots);\n }\n}\n\nfunction restoreDependencySections(\n state: RunnerState,\n dependencies: Readonly<Record<string, RunnerSnapshot>>,\n): void {\n const lookup = new Map(state.depRunners.map((dep) => [dep.localId, dep]));\n for (const [localId, section] of Object.entries(dependencies)) {\n const dep = lookup.get(localId);\n if (dep === undefined) {\n pushMalformedSection(\n state,\n `persistent state snapshot referenced unknown dependency \"${localId}\"`,\n );\n continue;\n }\n restoreStateSlots(dep.state.runtimeContext, section.slots);\n }\n}\n\n/**\n * Restore a validated snapshot into the runner's stream + slot stores.\n *\n * Walks every per-runner section: `primary.slots` rehydrates the\n * primary's `state.*` slots (and TA slots on the shared mainStream);\n * `siblings[exportName].slots` and `dependencies[localId].slots`\n * rehydrate each matching sub-runner. Snapshot sections whose id is not\n * declared by the current bundle are skipped with a\n * `state-snapshot-malformed` diagnostic.\n *\n * Legacy flat-shape snapshots (pre-0.7) restore into the primary only.\n *\n * @since 0.5 — widened to per-runner sections in 0.7.\n * @internal\n * @example\n * // restoreStateSnapshot(state, snapshot);\n * const restored = true;\n * void restored;\n */\nexport function restoreStateSnapshot(state: RunnerState, snapshot: StateSnapshot): void {\n const stream = resolveMainStreamSnapshot(snapshot, state.mainStream.bar.interval);\n if (stream !== undefined) {\n state.mainStream.restoreFromSnapshot(stream);\n state.barIndex = Math.max(state.barIndex, stream.filled);\n }\n for (const [secondaryKey, secondary] of state.runtimeContext.secondaryStreams) {\n const secondarySnapshot = snapshot.streams[secondaryKey];\n if (secondarySnapshot !== undefined) {\n secondary.restoreFromSnapshot(secondarySnapshot);\n }\n }\n\n const primarySlots = primarySlotsOf(snapshot);\n restoreTaSlots(state.mainStream, primarySlots);\n restoreStateSlots(state.runtimeContext, nonTaSlots(primarySlots));\n\n if (snapshot.siblings !== undefined) {\n restoreSiblingSections(state, snapshot.siblings);\n }\n if (snapshot.dependencies !== undefined) {\n restoreDependencySections(state, snapshot.dependencies);\n }\n}\n\n/**\n * Resolve the primary runner's slot map from either the structured shape\n * (`snapshot.primary.slots`) or the legacy flat shape (`snapshot.slots`).\n * The validator accepts both but the strict `StateSnapshot` type only\n * mirrors the structured shape; the dual shape is read through this\n * legacy-aware view. {@link validateSnapshot} guarantees at least one of\n * the two shapes is present so we never fall through.\n *\n * @internal\n */\ntype LegacySnapshotView = Readonly<{\n readonly primary?: RunnerSnapshot;\n readonly slots?: Readonly<Record<string, JsonValue>>;\n}>;\n\nconst EMPTY_SLOTS: Readonly<Record<string, JsonValue>> = Object.freeze({});\n\nfunction primarySlotsOf(snapshot: StateSnapshot): Readonly<Record<string, JsonValue>> {\n const view = snapshot as LegacySnapshotView;\n if (view.primary !== undefined) return view.primary.slots;\n /* c8 ignore next 2 — validateSnapshot guarantees one of primary/slots is present. */\n if (view.slots === undefined) return EMPTY_SLOTS;\n return view.slots;\n}\n\n/**\n * Save one snapshot and convert malformed/save failures into diagnostics.\n *\n * @since 0.5\n * @internal\n * @example\n * // await saveStateSnapshot(state, Date.now());\n * const saved = true;\n * void saved;\n */\nexport async function saveStateSnapshot(state: RunnerState, savedAt: number): Promise<boolean> {\n const store = state.runtimeContext.persistentStateStore;\n if (store === undefined) return false;\n const snapshot = captureStateSnapshot(state, savedAt);\n if (snapshot === null) {\n pushDiagnostic(state.emissions, {\n kind: \"diagnostic\",\n severity: \"warning\",\n code: \"state-snapshot-malformed\",\n message: \"persistent state snapshot was not JSON-clean\",\n slotId: null,\n bar: state.barIndex,\n });\n return false;\n }\n try {\n await store.save(snapshot);\n state.runtimeContext.lastPersistTime = savedAt;\n return true;\n } catch (err) {\n pushDiagnostic(state.emissions, {\n kind: \"diagnostic\",\n severity: \"warning\",\n code: \"state-snapshot-save-failed\",\n message: err instanceof Error ? err.message : String(err),\n slotId: null,\n bar: state.barIndex,\n });\n return false;\n }\n}\n\n/**\n * Save when the configured PLAN §6.9 wall-clock cadence is stale.\n *\n * @since 0.5\n * @internal\n * @example\n * // await maybeSaveStateSnapshot(state, Date.now(), 60_000);\n * const maybe = true;\n * void maybe;\n */\nexport async function maybeSaveStateSnapshot(\n state: RunnerState,\n savedAt: number,\n intervalMs: number,\n): Promise<void> {\n if (state.runtimeContext.persistentStateStore === undefined) return;\n if (savedAt - state.runtimeContext.lastPersistTime >= intervalMs) {\n await saveStateSnapshot(state, savedAt);\n }\n}\n"]}
|
|
@@ -2,7 +2,17 @@ import type { StateSnapshot } from "@invinite-org/chartlang-core";
|
|
|
2
2
|
/**
|
|
3
3
|
* Validate a PLAN §6.9 persistent state snapshot before restore/save.
|
|
4
4
|
*
|
|
5
|
-
*
|
|
5
|
+
* Accepts two shapes:
|
|
6
|
+
*
|
|
7
|
+
* - **Legacy flat shape** (pre-0.7): `slots: Record<string, JsonValue>`
|
|
8
|
+
* carries every primary-runner slot — both `state.*` and `ta.*`. Loaded
|
|
9
|
+
* into the primary runner; dep / sibling sections default to absent.
|
|
10
|
+
* - **Structured shape** (0.7+): `primary.slots` is required.
|
|
11
|
+
* `siblings[exportName].slots` and `dependencies[localId].slots`
|
|
12
|
+
* are optional; each section is independently restored into its
|
|
13
|
+
* matching runner.
|
|
14
|
+
*
|
|
15
|
+
* @since 0.5 — widened in 0.7 to accept structured per-runner sections.
|
|
6
16
|
* @internal
|
|
7
17
|
* @stable
|
|
8
18
|
* @example
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"persistentStateStore.validate.d.ts","sourceRoot":"","sources":["../src/persistentStateStore.validate.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAa,aAAa,EAAkB,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"persistentStateStore.validate.d.ts","sourceRoot":"","sources":["../src/persistentStateStore.validate.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAa,aAAa,EAAkB,MAAM,8BAA8B,CAAC;AAkD7F;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,aAAa,CAiBrE"}
|