@msb235/blits 0.14.0 → 0.15.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 +198 -0
- package/README.md +3 -3
- package/dist/ahead.d.ts +26 -0
- package/dist/ahead.js +264 -0
- package/dist/around.d.ts +11 -0
- package/dist/around.js +32 -0
- package/dist/bare.js +37 -14
- package/dist/blank.d.ts +10 -0
- package/dist/blank.js +26 -0
- package/dist/blend.d.ts +2 -1
- package/dist/blend.js +1 -6
- package/dist/bound.d.ts +70 -0
- package/dist/bound.js +351 -0
- package/dist/chain.d.ts +2 -1
- package/dist/chain.js +7 -5
- package/dist/changes.d.ts +24 -0
- package/dist/changes.js +189 -0
- package/dist/channels.d.ts +39 -13
- package/dist/channels.js +14 -5
- package/dist/color.d.ts +12 -10
- package/dist/color.js +25 -25
- package/dist/columns.d.ts +2 -1
- package/dist/columns.js +62 -38
- package/dist/contribution.d.ts +30 -0
- package/dist/contribution.js +374 -0
- package/dist/copyout.d.ts +10 -0
- package/dist/copyout.js +69 -24
- package/dist/crowd.d.ts +16 -6
- package/dist/crowd.js +20 -11
- package/dist/cue.d.ts +8 -1
- package/dist/cue.js +39 -13
- package/dist/cut.d.ts +8 -0
- package/dist/cut.js +4 -0
- package/dist/delay.d.ts +3 -0
- package/dist/delay.js +7 -0
- package/dist/drop.d.ts +9 -0
- package/dist/drop.js +84 -0
- package/dist/due.d.ts +24 -5
- package/dist/due.js +114 -34
- package/dist/easing.d.ts +6 -4
- package/dist/easing.js +7 -3
- package/dist/everyone.d.ts +8 -2
- package/dist/everyone.js +33 -3
- package/dist/fade.d.ts +2 -1
- package/dist/fade.js +2 -1
- package/dist/fill.d.ts +3 -2
- package/dist/fill.js +52 -20
- package/dist/fit.d.ts +44 -26
- package/dist/fit.js +10 -9
- package/dist/fold.d.ts +4 -37
- package/dist/fold.js +5 -513
- package/dist/gather.d.ts +12 -7
- package/dist/gather.js +179 -44
- package/dist/gone.js +2 -2
- package/dist/grid.d.ts +47 -0
- package/dist/grid.js +247 -0
- package/dist/handle.d.ts +2 -0
- package/dist/handle.js +14 -8
- package/dist/held.d.ts +2 -1
- package/dist/held.js +2 -1
- package/dist/history.d.ts +6 -5
- package/dist/history.js +7 -9
- package/dist/hosts.js +9 -15
- package/dist/index.d.ts +5 -4
- package/dist/keyfill.d.ts +1 -1
- package/dist/keyfill.js +5 -3
- package/dist/keyrows.d.ts +12 -0
- package/dist/keyrows.js +99 -12
- package/dist/lane.d.ts +38 -11
- package/dist/lane.js +46 -11
- package/dist/lanes.d.ts +30 -12
- package/dist/lanes.js +56 -36
- package/dist/leavings.d.ts +2 -2
- package/dist/leavings.js +1 -1
- package/dist/lives.d.ts +47 -0
- package/dist/lives.js +180 -0
- package/dist/meet.d.ts +2 -2
- package/dist/meet.js +95 -7
- package/dist/mixer.d.ts +56 -37
- package/dist/mixer.js +57 -171
- package/dist/motion.d.ts +14 -118
- package/dist/motion.js +16 -8
- package/dist/motions.d.ts +62 -155
- package/dist/motions.js +56 -370
- package/dist/moved.d.ts +1 -1
- package/dist/moved.js +16 -7
- package/dist/named.d.ts +6 -2
- package/dist/named.js +49 -3
- package/dist/numbers.d.ts +7 -0
- package/dist/numbers.js +33 -0
- package/dist/owed.d.ts +2 -0
- package/dist/owed.js +4 -0
- package/dist/pack.d.ts +2 -1
- package/dist/pack.js +2 -3
- package/dist/patch.d.ts +7 -3
- package/dist/patch.js +6 -2
- package/dist/places.d.ts +53 -0
- package/dist/places.js +171 -0
- package/dist/plot.d.ts +12 -0
- package/dist/plot.js +52 -0
- package/dist/project.d.ts +4 -4
- package/dist/project.js +9 -212
- package/dist/pull.js +22 -9
- package/dist/qualify.js +93 -31
- package/dist/reading.d.ts +6 -0
- package/dist/reading.js +5 -0
- package/dist/record.d.ts +5 -1
- package/dist/record.js +3 -2
- package/dist/relink.d.ts +1 -1
- package/dist/renumber.d.ts +10 -0
- package/dist/renumber.js +75 -0
- package/dist/restored.d.ts +2 -2
- package/dist/restored.js +1 -1
- package/dist/rests.d.ts +9 -0
- package/dist/rests.js +76 -0
- package/dist/revive.d.ts +3 -2
- package/dist/revive.js +2 -2
- package/dist/{locus.d.ts → role.d.ts} +10 -9
- package/dist/{locus.js → role.js} +3 -3
- package/dist/roles.d.ts +10 -0
- package/dist/roles.js +158 -0
- package/dist/roster.js +3 -3
- package/dist/rotation.d.ts +1 -1
- package/dist/rotation.js +1 -1
- package/dist/rows.js +28 -20
- package/dist/sample.d.ts +2 -2
- package/dist/sample.js +33 -7
- package/dist/seat.d.ts +17 -0
- package/dist/seat.js +25 -0
- package/dist/seek.js +5 -5
- package/dist/setting.d.ts +27 -0
- package/dist/setting.js +55 -0
- package/dist/shared.d.ts +1 -1
- package/dist/shared.js +1 -1
- package/dist/signals.d.ts +64 -32
- package/dist/signals.js +20 -18
- package/dist/stack.d.ts +5 -5
- package/dist/stack.js +5 -5
- package/dist/standing.d.ts +2 -1
- package/dist/standing.js +3 -2
- package/dist/store.d.ts +9 -0
- package/dist/store.js +24 -0
- package/dist/strays.d.ts +2 -1
- package/dist/strays.js +23 -15
- package/dist/stretch.d.ts +112 -0
- package/dist/stretch.js +9 -0
- package/dist/subject.d.ts +142 -0
- package/dist/subject.js +1 -0
- package/dist/tape.d.ts +9 -5
- package/dist/tape.js +5 -1
- package/dist/then.d.ts +9 -0
- package/dist/then.js +57 -0
- package/dist/ticker.d.ts +4 -4
- package/dist/trace.d.ts +4 -0
- package/dist/trace.js +255 -0
- package/dist/transport.d.ts +0 -8
- package/dist/transport.js +0 -4
- package/dist/turns.d.ts +4 -3
- package/dist/turns.js +4 -3
- package/dist/types/arc.d.ts +12 -11
- package/dist/types/channel.d.ts +12 -8
- package/dist/types/history.d.ts +35 -19
- package/dist/types/mix.d.ts +237 -163
- package/dist/types/motion.d.ts +151 -0
- package/dist/types/motion.js +1 -0
- package/dist/types/patch.d.ts +67 -34
- package/dist/types/place.d.ts +51 -36
- package/dist/types/trace.d.ts +51 -0
- package/dist/types/trace.js +1 -0
- package/dist/types/transport.d.ts +20 -18
- package/dist/types/voice.d.ts +144 -73
- package/dist/types/watch.d.ts +88 -40
- package/dist/types.d.ts +2 -0
- package/dist/unreached.d.ts +2 -0
- package/dist/unreached.js +7 -0
- package/dist/voice.d.ts +10 -143
- package/dist/voice.js +37 -82
- package/dist/warn.d.ts +2 -0
- package/dist/warn.js +1 -1
- package/dist/watch.d.ts +2 -2
- package/dist/watch.js +5 -3
- package/dist/wave.d.ts +4 -3
- package/dist/wave.js +3 -2
- package/dist/weigh.d.ts +7 -1
- package/dist/weigh.js +27 -0
- package/docs/schema.html +223 -34
- package/package.json +2 -2
package/dist/meet.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
import { open, shut } from './everyone.js';
|
|
2
|
+
import { seatOf } from './seat.js';
|
|
1
3
|
/**
|
|
2
4
|
* Whether the lanes a probe of the subject at `slot` just met (`met`) can be folded on the general
|
|
3
|
-
* path after the lanes' values: none is in a
|
|
5
|
+
* path after the lanes' values: none is in a role or a crowd, the subject owes none already this
|
|
4
6
|
* fill, and each comes after every other laned voice in voice order, so folding it last folds in
|
|
5
7
|
* the general path's order.
|
|
6
8
|
*/
|
|
@@ -88,19 +90,105 @@ export function meet(lanes, slot, subject, head, lane) {
|
|
|
88
90
|
// after every other laned voice, the general path folds just those onto the lanes' values;
|
|
89
91
|
// otherwise it reads the general path all frame.
|
|
90
92
|
const o = slot * 6 /* Per.SLOT */;
|
|
91
|
-
if (lane && lanes.per[o + 2 /* Per.IDLE */] === 0
|
|
92
|
-
|
|
93
|
-
|
|
93
|
+
if (lane && lanes.per[o + 2 /* Per.IDLE */] === 0) {
|
|
94
|
+
const again = foldsAgain(lanes, slot);
|
|
95
|
+
if (again || owable(lanes, slot)) {
|
|
96
|
+
if (!foldNow(lanes, slot, subject, again))
|
|
97
|
+
lanes.owed.owe(slot, lanes.met, lanes.metN);
|
|
98
|
+
return true;
|
|
99
|
+
}
|
|
94
100
|
}
|
|
95
101
|
lanes.per[o + 0 /* Per.FILLED */] = lanes.fills;
|
|
96
102
|
return false;
|
|
97
103
|
}
|
|
104
|
+
/**
|
|
105
|
+
* Whether the subject at `slot` met the lanes the last subject `foldNow` folded met, in the same
|
|
106
|
+
* fill: `owable` and `foldNow`'s own checks then answer as they did for that one.
|
|
107
|
+
*/
|
|
108
|
+
function foldsAgain(lanes, slot) {
|
|
109
|
+
if (lanes.foldsFill !== lanes.fills || lanes.metCrowd || lanes.owes(slot))
|
|
110
|
+
return false;
|
|
111
|
+
const folds = lanes.folds;
|
|
112
|
+
const n = lanes.metN;
|
|
113
|
+
if (folds.length !== n)
|
|
114
|
+
return false;
|
|
115
|
+
for (let i = 0; i < n; i++)
|
|
116
|
+
if (folds[i] !== lanes.met[i])
|
|
117
|
+
return false;
|
|
118
|
+
return true;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Folds the lanes a probe of the subject at `slot` just met onto the lanes' values, making each
|
|
122
|
+
* one's first call or read for the subject as the general path would for this probe, where every
|
|
123
|
+
* one is a stateless fn or keys voice that ran this fill; false, leaving them owed, where any is
|
|
124
|
+
* not. The fold is last in voice order, as `owable` found, so it folds as the general path would
|
|
125
|
+
* after the fill.
|
|
126
|
+
*/
|
|
127
|
+
function foldNow(lanes, slot, subject, again) {
|
|
128
|
+
if (lanes.filling)
|
|
129
|
+
return false;
|
|
130
|
+
// What `unread` answers, which `one` asks before this probe's own stamp is written.
|
|
131
|
+
const lately = lanes.lately;
|
|
132
|
+
const o = slot * 6 /* Per.SLOT */;
|
|
133
|
+
if (lately >= 0 &&
|
|
134
|
+
!(lanes.per[o + 3 /* Per.LANE_PROBE */] > lately ||
|
|
135
|
+
lanes.per[o + 4 /* Per.GENERAL_PROBE */] > lately))
|
|
136
|
+
return false;
|
|
137
|
+
const met = lanes.met;
|
|
138
|
+
const n = lanes.metN;
|
|
139
|
+
for (let i = 0; i < n && !again; i++) {
|
|
140
|
+
const lane = lanes.byId.get(met[i]);
|
|
141
|
+
const v = lane.voice;
|
|
142
|
+
if (lane.ran !== lanes.fills ||
|
|
143
|
+
lane.motion !== undefined ||
|
|
144
|
+
v.keeping ||
|
|
145
|
+
typeof v.spec.weight === 'function' ||
|
|
146
|
+
(v.sharing && v.everyone === null))
|
|
147
|
+
return false;
|
|
148
|
+
}
|
|
149
|
+
if (!again) {
|
|
150
|
+
lanes.folds = met.slice(0, n);
|
|
151
|
+
lanes.foldsFill = lanes.fills;
|
|
152
|
+
}
|
|
153
|
+
// The subject is at hand: `call` would look it up again by its number.
|
|
154
|
+
if (lanes.subjects[slot] === undefined) {
|
|
155
|
+
lanes.subjects[slot] = subject;
|
|
156
|
+
lanes.holding = true;
|
|
157
|
+
}
|
|
158
|
+
lanes.meeting = true;
|
|
159
|
+
try {
|
|
160
|
+
for (let i = 0; i < n; i++) {
|
|
161
|
+
const lane = lanes.byId.get(met[i]);
|
|
162
|
+
const v = lane.voice;
|
|
163
|
+
const p = lane.positionOf(slot);
|
|
164
|
+
if (!v.sharing) {
|
|
165
|
+
lanes.one(lane, p, slot);
|
|
166
|
+
continue;
|
|
167
|
+
}
|
|
168
|
+
const rec = v.everyone;
|
|
169
|
+
open(v, rec, slot);
|
|
170
|
+
lanes.one(lane, p, slot);
|
|
171
|
+
// Its patch just made kept state, and the record is now that subject's own.
|
|
172
|
+
if (!v.keeping)
|
|
173
|
+
shut(v, rec, slot, lanes.cap);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
finally {
|
|
177
|
+
lanes.meeting = false;
|
|
178
|
+
}
|
|
179
|
+
// A patch that just made kept state takes its voice off its lane: check the next subject again.
|
|
180
|
+
for (let i = 0; i < n; i++)
|
|
181
|
+
if (lanes.byId.get(met[i]).voice.keeping)
|
|
182
|
+
lanes.foldsFill = -1;
|
|
183
|
+
return true;
|
|
184
|
+
}
|
|
98
185
|
/** Places a crowd voice's row on the subject a probe met, as `Lane.add` adds a position. */
|
|
99
186
|
function place(lanes, voice, slot, subject, from, head) {
|
|
100
|
-
const
|
|
101
|
-
|
|
102
|
-
if (c === undefined || p === undefined)
|
|
187
|
+
const s = seatOf(lanes, voice);
|
|
188
|
+
if (s === null)
|
|
103
189
|
return false;
|
|
190
|
+
const c = s.crowd;
|
|
191
|
+
const p = s.row;
|
|
104
192
|
const h = p * c.stride;
|
|
105
193
|
const flags = c.hot[h + 0 /* Hot.FLAGS */];
|
|
106
194
|
if (c.hot[h + 6 /* Hot.EPOCH */] <= from || (flags & 16 /* Flag.PLACED */) !== 0)
|
package/dist/mixer.d.ts
CHANGED
|
@@ -1,31 +1,40 @@
|
|
|
1
1
|
import { type Arc } from './arcs.js';
|
|
2
|
+
import { around } from './around.js';
|
|
2
3
|
import { blended, laneRead, shareKept } from './blend.js';
|
|
3
4
|
import type { Book } from './book.js';
|
|
4
5
|
import { aims, chain, linkable, relink } from './chain.js';
|
|
5
6
|
import { type LerpInto } from './channels.js';
|
|
6
7
|
import type { Column } from './columns.js';
|
|
8
|
+
import { baseFor, contribution, isRest, keyed, read, slopeFor, tick } from './contribution.js';
|
|
7
9
|
import { DepartedIndex } from './departed.js';
|
|
8
|
-
import
|
|
10
|
+
import { drop, forgetIn, recordDrop, releaseIn } from './drop.js';
|
|
11
|
+
import { DueQueue } from './due.js';
|
|
9
12
|
import { parting } from './fade.js';
|
|
10
|
-
import { apply,
|
|
13
|
+
import { apply, clamp, fold, foldDetour, folded, foldSharers, foldWith, type Key, linked, owedBy, passes, shared } from './fold.js';
|
|
11
14
|
import { GoneIndex } from './gone.js';
|
|
12
15
|
import type { HandleHost } from './handle.js';
|
|
13
16
|
import { held, shownOf, sinceOf, unreachedOf } from './held.js';
|
|
14
17
|
import { Lanes } from './lanes.js';
|
|
15
|
-
import {
|
|
16
|
-
import type { MotionOwner, Motions } from './motions.js';
|
|
18
|
+
import type { Motions } from './motions.js';
|
|
17
19
|
import type { Pace } from './pace.js';
|
|
18
20
|
import { Keys } from './paging.js';
|
|
21
|
+
import type { Places } from './places.js';
|
|
22
|
+
import { moved, place, plot, put } from './plot.js';
|
|
19
23
|
import { keep } from './pull.js';
|
|
20
24
|
import { Steps } from './relink.js';
|
|
25
|
+
import { atRest, restful, rests, restsKey, restsLaned, still } from './rests.js';
|
|
21
26
|
import { Outs } from './revive.js';
|
|
27
|
+
import { foldRole, type RoleScratch } from './role.js';
|
|
28
|
+
import { foldRoles } from './roles.js';
|
|
22
29
|
import { ScoreIndex } from './scored.js';
|
|
23
30
|
import { Fitting } from './spans.js';
|
|
24
31
|
import { Store } from './store.js';
|
|
32
|
+
import type { MotionOwner } from './stretch.js';
|
|
33
|
+
import type { Subject } from './subject.js';
|
|
25
34
|
import { type Announced, Transport } from './transport.js';
|
|
26
|
-
import type { ArcHandle, ArcSpec, BlendMember, Booker, BookOptions, Channel, Columns, Engine, Handle, Kit, Marked, Mix, MixOptions, OwnerSpec, Patch, Projection, Sent, Signal, SpanHandle, SpanSpec, Tape, VoiceSpec } from './types.js';
|
|
27
|
-
import { type
|
|
28
|
-
import { base, capped, fadeOf, horizonFor, ownedBy, ownerBase, prime, weigh, weighOwned } from './weigh.js';
|
|
35
|
+
import type { ArcHandle, ArcSpec, BlendMember, Booker, BookOptions, Channel, Columns, Engine, Handle, Kit, Marked, Mix, MixOptions, OwnerSpec, Patch, Projection, Sent, Signal, SpanHandle, SpanSpec, Tape, Trace, TraceOptions, VoiceSpec } from './types.js';
|
|
36
|
+
import { type Voice } from './voice.js';
|
|
37
|
+
import { base, capped, fadeOf, horizonFor, ownedBy, ownerBase, prime, primeLaned, weigh, weighOwned } from './weigh.js';
|
|
29
38
|
/**
|
|
30
39
|
* What a mix takes where its options say nothing. Not exported from the package: the suite turns
|
|
31
40
|
* `lanes` off to run every test on the general path, which is what makes each one an equivalence check.
|
|
@@ -67,7 +76,7 @@ export declare class Mixer<I, O> implements Mix<I, O> {
|
|
|
67
76
|
fields: Record<string, unknown>;
|
|
68
77
|
} | undefined;
|
|
69
78
|
/** Each subject's last two poses and when they were probed, for `from: 'current'`. */
|
|
70
|
-
|
|
79
|
+
lastPoses: Store<I, {
|
|
71
80
|
pose: O;
|
|
72
81
|
at: number;
|
|
73
82
|
prev: O | undefined;
|
|
@@ -91,7 +100,7 @@ export declare class Mixer<I, O> implements Mix<I, O> {
|
|
|
91
100
|
/** The pose `pull` folds a subject into where it cannot read straight from the lanes. */
|
|
92
101
|
scratch: O | undefined;
|
|
93
102
|
/** Live voices by the earliest mix time `moveTo` would change each, a binary heap. */
|
|
94
|
-
due:
|
|
103
|
+
due: DueQueue<I, O>;
|
|
95
104
|
/** Voices retired since `moveTo` last pruned them, in the order they retired. */
|
|
96
105
|
retired: Voice<I, O>[];
|
|
97
106
|
/** Visit every voice each sync, as before the due queue; for tests that compare the two. */
|
|
@@ -135,6 +144,8 @@ export declare class Mixer<I, O> implements Mix<I, O> {
|
|
|
135
144
|
*/
|
|
136
145
|
chains: Store<I, Subject<unknown>>;
|
|
137
146
|
version: number;
|
|
147
|
+
/** The positions `plot` gave, which a voice's `within` reads: see `bound.ts`. */
|
|
148
|
+
places: Places<I> | null;
|
|
138
149
|
/** What `prime` reads its clock, voice time and pass from: see `Primed`. */
|
|
139
150
|
readonly primed: Float64Array<ArrayBuffer>;
|
|
140
151
|
readonly steps: Steps<Voice<I, O>, I>;
|
|
@@ -166,8 +177,10 @@ export declare class Mixer<I, O> implements Mix<I, O> {
|
|
|
166
177
|
unshared: boolean;
|
|
167
178
|
/** 0 where a fold is a walk of the chain: see `detour` in `everyone.ts`. */
|
|
168
179
|
detours: number;
|
|
169
|
-
/** How many voices in the list carry a
|
|
170
|
-
|
|
180
|
+
/** How many voices in the list carry a role; with none, a fold allocates nothing. */
|
|
181
|
+
roleVoices: number;
|
|
182
|
+
/** The tags the mix's options declare roles. */
|
|
183
|
+
readonly roleTags: readonly string[] | undefined;
|
|
171
184
|
/** What every motion patch it plays asks for its voice's time, holding this mix weakly. */
|
|
172
185
|
owner: MotionOwner | null;
|
|
173
186
|
/** How many voices in the list are anchored, so a sync with none skips placing them. */
|
|
@@ -191,9 +204,9 @@ export declare class Mixer<I, O> implements Mix<I, O> {
|
|
|
191
204
|
readonly lerpsInto: (LerpInto | undefined)[];
|
|
192
205
|
/** By slot, a stock scalar channel's arithmetic, which a fold applies without calling the channel. */
|
|
193
206
|
readonly scalars: ('sum' | 'mul' | 'max' | undefined)[];
|
|
194
|
-
/** What a fold with a
|
|
195
|
-
readonly
|
|
196
|
-
|
|
207
|
+
/** What a fold with a role in play gathers into, one per depth of folds under way. */
|
|
208
|
+
readonly roleScratch: RoleScratch<I, O>[];
|
|
209
|
+
roleDepth: number;
|
|
197
210
|
readonly slotOf: Map<string, number>;
|
|
198
211
|
lanes: Lanes<I, O> | null;
|
|
199
212
|
handles: HandleHost<I, O> | null;
|
|
@@ -209,6 +222,7 @@ export declare class Mixer<I, O> implements Mix<I, O> {
|
|
|
209
222
|
keys: Keys | null;
|
|
210
223
|
/** With a history store, the voices it paged out whose handles are still held; null without one. */
|
|
211
224
|
outs: Outs | null;
|
|
225
|
+
readonly pose: () => O;
|
|
212
226
|
constructor(kit: Kit<O>, opts: MixOptions,
|
|
213
227
|
/** The lanes an entry was built with; null in one that leaves them out. */
|
|
214
228
|
lanesOf: typeof Lanes | null);
|
|
@@ -237,7 +251,7 @@ export declare class Mixer<I, O> implements Mix<I, O> {
|
|
|
237
251
|
off: number;
|
|
238
252
|
};
|
|
239
253
|
cue(spec: VoiceSpec<I, O>): Handle<I>;
|
|
240
|
-
blend(members: readonly (Patch<I, O, unknown> | BlendMember<I, O>)[], by: Signal<I>, spec?: Omit<VoiceSpec<I, O>, 'patch' | 'weight' | 'locus'>): Handle<I>[];
|
|
254
|
+
blend(members: readonly (Patch<I, O, unknown> | BlendMember<I, O>)[], by: Signal<I>, spec?: Omit<VoiceSpec<I, O>, 'patch' | 'weight' | 'role' | 'locus' | 'within'>): Handle<I>[];
|
|
241
255
|
owns(spec: OwnerSpec<I>): Handle<I>;
|
|
242
256
|
span(spec: SpanSpec<I>): SpanHandle<I>;
|
|
243
257
|
arc(spec: ArcSpec<I, O>): ArcHandle<I>;
|
|
@@ -252,6 +266,7 @@ export declare class Mixer<I, O> implements Mix<I, O> {
|
|
|
252
266
|
project(at: number | {
|
|
253
267
|
readonly frame: number;
|
|
254
268
|
}): Projection<I, O>;
|
|
269
|
+
trace(from: number, to: number, opts?: TraceOptions): Trace<I, O>;
|
|
255
270
|
announce(name: string, opts?: {
|
|
256
271
|
at?: number;
|
|
257
272
|
score?: string;
|
|
@@ -260,27 +275,17 @@ export declare class Mixer<I, O> implements Mix<I, O> {
|
|
|
260
275
|
/** Throws for a mix taken off its transport. */
|
|
261
276
|
attached(): void;
|
|
262
277
|
marks(from: number, to: number): Marked[];
|
|
263
|
-
atRest(subject: I): boolean;
|
|
264
|
-
rests(pose: O): boolean;
|
|
265
278
|
rebase(): void;
|
|
266
279
|
voices(tag?: string): Handle<I>[];
|
|
267
280
|
get live(): boolean;
|
|
268
281
|
get inert(): boolean;
|
|
269
|
-
private restful;
|
|
270
282
|
get rate(): number;
|
|
271
283
|
set rate(r: number);
|
|
272
284
|
ramp(rate: number, over: number): void;
|
|
273
|
-
/** Whether a voice will change no pose from `now` on, short of a change made to it. */
|
|
274
|
-
still(voice: Voice<I, O>, now: number): boolean;
|
|
275
285
|
close(): void;
|
|
276
286
|
mute(opts?: {
|
|
277
287
|
over?: number;
|
|
278
288
|
}): void;
|
|
279
|
-
drop(subject: I): void;
|
|
280
|
-
/** Lets `voice` go of a dropped subject. Methods rather than closures, so a drop makes neither. */
|
|
281
|
-
private forgetIn;
|
|
282
|
-
private releaseIn;
|
|
283
|
-
private recordDrop;
|
|
284
289
|
touch(subject?: I): void;
|
|
285
290
|
drain<E = unknown>(tag?: string): Sent<I, E>[];
|
|
286
291
|
/** Voices whose stop 0 is mid-computation, so a fold for one cannot re-enter itself. */
|
|
@@ -292,15 +297,13 @@ export declare class Mixer<I, O> implements Mix<I, O> {
|
|
|
292
297
|
*/
|
|
293
298
|
restStamps: Store<I, number> | null;
|
|
294
299
|
/** What a probe's record of rest is good for: moved by a new frame, version, relink, or stir. */
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
+
restsEpoch: number;
|
|
301
|
+
restsFrame: number;
|
|
302
|
+
restsVersion: number;
|
|
303
|
+
restsRelinks: number;
|
|
304
|
+
restsStirs: number;
|
|
300
305
|
/** The pose `atRest` folds into where no probe this frame answers. */
|
|
301
|
-
|
|
302
|
-
private restsLaned;
|
|
303
|
-
private restsKey;
|
|
306
|
+
restScratch: O | undefined;
|
|
304
307
|
}
|
|
305
308
|
declare const methods: {
|
|
306
309
|
fold: typeof fold;
|
|
@@ -308,7 +311,7 @@ declare const methods: {
|
|
|
308
311
|
linked: typeof linked;
|
|
309
312
|
foldWith: typeof foldWith;
|
|
310
313
|
owedBy: typeof owedBy;
|
|
311
|
-
|
|
314
|
+
foldRoles: typeof foldRoles;
|
|
312
315
|
foldDetour: typeof foldDetour;
|
|
313
316
|
foldSharers: typeof foldSharers;
|
|
314
317
|
shared: typeof shared;
|
|
@@ -323,6 +326,7 @@ declare const methods: {
|
|
|
323
326
|
baseFor: typeof baseFor;
|
|
324
327
|
slopeFor: typeof slopeFor;
|
|
325
328
|
prime: typeof prime;
|
|
329
|
+
primeLaned: typeof primeLaned;
|
|
326
330
|
capped: typeof capped;
|
|
327
331
|
horizonFor: typeof horizonFor;
|
|
328
332
|
weigh: typeof weigh;
|
|
@@ -344,7 +348,22 @@ declare const methods: {
|
|
|
344
348
|
sinceOf: typeof sinceOf;
|
|
345
349
|
shownOf: typeof shownOf;
|
|
346
350
|
keep: typeof keep;
|
|
347
|
-
|
|
351
|
+
foldRole: typeof foldRole;
|
|
352
|
+
atRest: typeof atRest;
|
|
353
|
+
rests: typeof rests;
|
|
354
|
+
restful: typeof restful;
|
|
355
|
+
still: typeof still;
|
|
356
|
+
restsLaned: typeof restsLaned;
|
|
357
|
+
restsKey: typeof restsKey;
|
|
358
|
+
plot: typeof plot;
|
|
359
|
+
place: typeof place;
|
|
360
|
+
moved: typeof moved;
|
|
361
|
+
put: typeof put;
|
|
362
|
+
around: typeof around;
|
|
363
|
+
drop: typeof drop;
|
|
364
|
+
forgetIn: typeof forgetIn;
|
|
365
|
+
releaseIn: typeof releaseIn;
|
|
366
|
+
recordDrop: typeof recordDrop;
|
|
348
367
|
};
|
|
349
368
|
type Methods = typeof methods;
|
|
350
369
|
export interface Mixer<I, O> extends Methods {
|
|
@@ -352,13 +371,13 @@ export interface Mixer<I, O> extends Methods {
|
|
|
352
371
|
/** Makes a mix the host asked for, with the registry's history where it names none, and lists it there. */
|
|
353
372
|
export declare function made<I, O, H>(kit: Kit<O>, opts: MixOptions<H>, lanes: typeof Lanes | null): Mix<I, O, H>;
|
|
354
373
|
/**
|
|
355
|
-
* The
|
|
374
|
+
* The engine that ships, running every form on the CPU. It probes per subject on demand.
|
|
356
375
|
*
|
|
357
376
|
* @category engine
|
|
358
377
|
*/
|
|
359
378
|
export declare const mixer: Engine;
|
|
360
379
|
/**
|
|
361
|
-
* Makes a mix over a kit
|
|
380
|
+
* Makes a mix over a kit. It runs on the engine the options name, or the stock one.
|
|
362
381
|
*
|
|
363
382
|
* @category mix
|
|
364
383
|
*/
|