@czap/core 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +19 -0
- package/dist/addressed-digest.d.ts +15 -0
- package/dist/addressed-digest.d.ts.map +1 -0
- package/dist/addressed-digest.js +35 -0
- package/dist/addressed-digest.js.map +1 -0
- package/dist/animation.d.ts +46 -0
- package/dist/animation.d.ts.map +1 -0
- package/dist/animation.js +70 -0
- package/dist/animation.js.map +1 -0
- package/dist/assembly.d.ts +25 -0
- package/dist/assembly.d.ts.map +1 -0
- package/dist/assembly.js +58 -0
- package/dist/assembly.js.map +1 -0
- package/dist/av-bridge.d.ts +74 -0
- package/dist/av-bridge.d.ts.map +1 -0
- package/dist/av-bridge.js +107 -0
- package/dist/av-bridge.js.map +1 -0
- package/dist/av-renderer.d.ts +56 -0
- package/dist/av-renderer.d.ts.map +1 -0
- package/dist/av-renderer.js +65 -0
- package/dist/av-renderer.js.map +1 -0
- package/dist/blend.d.ts +61 -0
- package/dist/blend.d.ts.map +1 -0
- package/dist/blend.js +100 -0
- package/dist/blend.js.map +1 -0
- package/dist/boundary.d.ts +154 -0
- package/dist/boundary.d.ts.map +1 -0
- package/dist/boundary.js +269 -0
- package/dist/boundary.js.map +1 -0
- package/dist/brands.d.ts +63 -0
- package/dist/brands.d.ts.map +1 -0
- package/dist/brands.js +31 -0
- package/dist/brands.js.map +1 -0
- package/dist/caps.d.ts +49 -0
- package/dist/caps.d.ts.map +1 -0
- package/dist/caps.js +73 -0
- package/dist/caps.js.map +1 -0
- package/dist/capsule.d.ts +77 -0
- package/dist/capsule.d.ts.map +1 -0
- package/dist/capsule.js +18 -0
- package/dist/capsule.js.map +1 -0
- package/dist/capsules/boundary-evaluate.d.ts +28 -0
- package/dist/capsules/boundary-evaluate.d.ts.map +1 -0
- package/dist/capsules/boundary-evaluate.js +117 -0
- package/dist/capsules/boundary-evaluate.js.map +1 -0
- package/dist/capsules/canonical-cbor.d.ts +13 -0
- package/dist/capsules/canonical-cbor.d.ts.map +1 -0
- package/dist/capsules/canonical-cbor.js +60 -0
- package/dist/capsules/canonical-cbor.js.map +1 -0
- package/dist/capsules/token-buffer.d.ts +24 -0
- package/dist/capsules/token-buffer.d.ts.map +1 -0
- package/dist/capsules/token-buffer.js +53 -0
- package/dist/capsules/token-buffer.js.map +1 -0
- package/dist/capture.d.ts +40 -0
- package/dist/capture.d.ts.map +1 -0
- package/dist/capture.js +10 -0
- package/dist/capture.js.map +1 -0
- package/dist/cbor.d.ts +33 -0
- package/dist/cbor.d.ts.map +1 -0
- package/dist/cbor.js +179 -0
- package/dist/cbor.js.map +1 -0
- package/dist/cell.d.ts +53 -0
- package/dist/cell.d.ts.map +1 -0
- package/dist/cell.js +83 -0
- package/dist/cell.js.map +1 -0
- package/dist/codec.d.ts +30 -0
- package/dist/codec.d.ts.map +1 -0
- package/dist/codec.js +25 -0
- package/dist/codec.js.map +1 -0
- package/dist/component.d.ts +52 -0
- package/dist/component.d.ts.map +1 -0
- package/dist/component.js +44 -0
- package/dist/component.js.map +1 -0
- package/dist/composable.d.ts +76 -0
- package/dist/composable.d.ts.map +1 -0
- package/dist/composable.js +221 -0
- package/dist/composable.js.map +1 -0
- package/dist/compositor-pool.d.ts +74 -0
- package/dist/compositor-pool.d.ts.map +1 -0
- package/dist/compositor-pool.js +119 -0
- package/dist/compositor-pool.js.map +1 -0
- package/dist/compositor.d.ts +90 -0
- package/dist/compositor.d.ts.map +1 -0
- package/dist/compositor.js +278 -0
- package/dist/compositor.js.map +1 -0
- package/dist/config.d.ts +72 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +97 -0
- package/dist/config.js.map +1 -0
- package/dist/dag.d.ts +251 -0
- package/dist/dag.d.ts.map +1 -0
- package/dist/dag.js +450 -0
- package/dist/dag.js.map +1 -0
- package/dist/defaults.d.ts +45 -0
- package/dist/defaults.d.ts.map +1 -0
- package/dist/defaults.js +45 -0
- package/dist/defaults.js.map +1 -0
- package/dist/derived.d.ts +34 -0
- package/dist/derived.d.ts.map +1 -0
- package/dist/derived.js +101 -0
- package/dist/derived.js.map +1 -0
- package/dist/diagnostics.d.ts +77 -0
- package/dist/diagnostics.d.ts.map +1 -0
- package/dist/diagnostics.js +122 -0
- package/dist/diagnostics.js.map +1 -0
- package/dist/dirty.d.ts +55 -0
- package/dist/dirty.d.ts.map +1 -0
- package/dist/dirty.js +80 -0
- package/dist/dirty.js.map +1 -0
- package/dist/easing.d.ts +55 -0
- package/dist/easing.d.ts.map +1 -0
- package/dist/easing.js +291 -0
- package/dist/easing.js.map +1 -0
- package/dist/ecs.d.ts +105 -0
- package/dist/ecs.d.ts.map +1 -0
- package/dist/ecs.js +245 -0
- package/dist/ecs.js.map +1 -0
- package/dist/fnv.d.ts +14 -0
- package/dist/fnv.d.ts.map +1 -0
- package/dist/fnv.js +28 -0
- package/dist/fnv.js.map +1 -0
- package/dist/frame-budget.d.ts +73 -0
- package/dist/frame-budget.d.ts.map +1 -0
- package/dist/frame-budget.js +114 -0
- package/dist/frame-budget.js.map +1 -0
- package/dist/gen-frame.d.ts +102 -0
- package/dist/gen-frame.d.ts.map +1 -0
- package/dist/gen-frame.js +121 -0
- package/dist/gen-frame.js.map +1 -0
- package/dist/harness/arbitrary-from-schema.d.ts +28 -0
- package/dist/harness/arbitrary-from-schema.d.ts.map +1 -0
- package/dist/harness/arbitrary-from-schema.js +262 -0
- package/dist/harness/arbitrary-from-schema.js.map +1 -0
- package/dist/harness/cached-projection.d.ts +19 -0
- package/dist/harness/cached-projection.d.ts.map +1 -0
- package/dist/harness/cached-projection.js +39 -0
- package/dist/harness/cached-projection.js.map +1 -0
- package/dist/harness/index.d.ts +16 -0
- package/dist/harness/index.d.ts.map +1 -0
- package/dist/harness/index.js +15 -0
- package/dist/harness/index.js.map +1 -0
- package/dist/harness/policy-gate.d.ts +18 -0
- package/dist/harness/policy-gate.d.ts.map +1 -0
- package/dist/harness/policy-gate.js +46 -0
- package/dist/harness/policy-gate.js.map +1 -0
- package/dist/harness/pure-transform.d.ts +42 -0
- package/dist/harness/pure-transform.d.ts.map +1 -0
- package/dist/harness/pure-transform.js +76 -0
- package/dist/harness/pure-transform.js.map +1 -0
- package/dist/harness/receipted-mutation.d.ts +23 -0
- package/dist/harness/receipted-mutation.d.ts.map +1 -0
- package/dist/harness/receipted-mutation.js +52 -0
- package/dist/harness/receipted-mutation.js.map +1 -0
- package/dist/harness/scene-composition.d.ts +19 -0
- package/dist/harness/scene-composition.d.ts.map +1 -0
- package/dist/harness/scene-composition.js +47 -0
- package/dist/harness/scene-composition.js.map +1 -0
- package/dist/harness/site-adapter.d.ts +18 -0
- package/dist/harness/site-adapter.d.ts.map +1 -0
- package/dist/harness/site-adapter.js +38 -0
- package/dist/harness/site-adapter.js.map +1 -0
- package/dist/harness/state-machine.d.ts +19 -0
- package/dist/harness/state-machine.d.ts.map +1 -0
- package/dist/harness/state-machine.js +44 -0
- package/dist/harness/state-machine.js.map +1 -0
- package/dist/hlc.d.ts +99 -0
- package/dist/hlc.d.ts.map +1 -0
- package/dist/hlc.js +219 -0
- package/dist/hlc.js.map +1 -0
- package/dist/index.d.ts +104 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +137 -0
- package/dist/index.js.map +1 -0
- package/dist/interpolate.d.ts +14 -0
- package/dist/interpolate.d.ts.map +1 -0
- package/dist/interpolate.js +31 -0
- package/dist/interpolate.js.map +1 -0
- package/dist/live-cell.d.ts +46 -0
- package/dist/live-cell.d.ts.map +1 -0
- package/dist/live-cell.js +154 -0
- package/dist/live-cell.js.map +1 -0
- package/dist/op.d.ts +58 -0
- package/dist/op.d.ts.map +1 -0
- package/dist/op.js +171 -0
- package/dist/op.js.map +1 -0
- package/dist/plan.d.ts +195 -0
- package/dist/plan.d.ts.map +1 -0
- package/dist/plan.js +211 -0
- package/dist/plan.js.map +1 -0
- package/dist/protocol.d.ts +33 -0
- package/dist/protocol.d.ts.map +1 -0
- package/dist/protocol.js +10 -0
- package/dist/protocol.js.map +1 -0
- package/dist/quantizer-types.d.ts +28 -0
- package/dist/quantizer-types.d.ts.map +1 -0
- package/dist/quantizer-types.js +9 -0
- package/dist/quantizer-types.js.map +1 -0
- package/dist/receipt.d.ts +294 -0
- package/dist/receipt.d.ts.map +1 -0
- package/dist/receipt.js +352 -0
- package/dist/receipt.js.map +1 -0
- package/dist/runtime-coordinator.d.ts +75 -0
- package/dist/runtime-coordinator.d.ts.map +1 -0
- package/dist/runtime-coordinator.js +149 -0
- package/dist/runtime-coordinator.js.map +1 -0
- package/dist/scheduler.d.ts +58 -0
- package/dist/scheduler.d.ts.map +1 -0
- package/dist/scheduler.js +109 -0
- package/dist/scheduler.js.map +1 -0
- package/dist/ship-capsule.d.ts +54 -0
- package/dist/ship-capsule.d.ts.map +1 -0
- package/dist/ship-capsule.js +142 -0
- package/dist/ship-capsule.js.map +1 -0
- package/dist/ship-manifest.d.ts +45 -0
- package/dist/ship-manifest.d.ts.map +1 -0
- package/dist/ship-manifest.js +175 -0
- package/dist/ship-manifest.js.map +1 -0
- package/dist/signal.d.ts +149 -0
- package/dist/signal.d.ts.map +1 -0
- package/dist/signal.js +277 -0
- package/dist/signal.js.map +1 -0
- package/dist/speculative.d.ts +67 -0
- package/dist/speculative.d.ts.map +1 -0
- package/dist/speculative.js +139 -0
- package/dist/speculative.js.map +1 -0
- package/dist/store.d.ts +39 -0
- package/dist/store.d.ts.map +1 -0
- package/dist/store.js +42 -0
- package/dist/store.js.map +1 -0
- package/dist/style.d.ts +119 -0
- package/dist/style.d.ts.map +1 -0
- package/dist/style.js +168 -0
- package/dist/style.js.map +1 -0
- package/dist/testing.d.ts +14 -0
- package/dist/testing.d.ts.map +1 -0
- package/dist/testing.js +14 -0
- package/dist/testing.js.map +1 -0
- package/dist/theme.d.ts +78 -0
- package/dist/theme.d.ts.map +1 -0
- package/dist/theme.js +109 -0
- package/dist/theme.js.map +1 -0
- package/dist/timeline.d.ts +45 -0
- package/dist/timeline.d.ts.map +1 -0
- package/dist/timeline.js +101 -0
- package/dist/timeline.js.map +1 -0
- package/dist/token-buffer.d.ts +43 -0
- package/dist/token-buffer.d.ts.map +1 -0
- package/dist/token-buffer.js +112 -0
- package/dist/token-buffer.js.map +1 -0
- package/dist/token.d.ts +107 -0
- package/dist/token.d.ts.map +1 -0
- package/dist/token.js +143 -0
- package/dist/token.js.map +1 -0
- package/dist/tuple.d.ts +16 -0
- package/dist/tuple.d.ts.map +1 -0
- package/dist/tuple.js +16 -0
- package/dist/tuple.js.map +1 -0
- package/dist/type-utils.d.ts +41 -0
- package/dist/type-utils.d.ts.map +1 -0
- package/dist/type-utils.js +10 -0
- package/dist/type-utils.js.map +1 -0
- package/dist/typed-ref.d.ts +50 -0
- package/dist/typed-ref.d.ts.map +1 -0
- package/dist/typed-ref.js +59 -0
- package/dist/typed-ref.js.map +1 -0
- package/dist/ui-quality.d.ts +50 -0
- package/dist/ui-quality.d.ts.map +1 -0
- package/dist/ui-quality.js +64 -0
- package/dist/ui-quality.js.map +1 -0
- package/dist/validation-error.d.ts +25 -0
- package/dist/validation-error.d.ts.map +1 -0
- package/dist/validation-error.js +32 -0
- package/dist/validation-error.js.map +1 -0
- package/dist/vector-clock.d.ts +46 -0
- package/dist/vector-clock.d.ts.map +1 -0
- package/dist/vector-clock.js +91 -0
- package/dist/vector-clock.js.map +1 -0
- package/dist/video.d.ts +62 -0
- package/dist/video.d.ts.map +1 -0
- package/dist/video.js +59 -0
- package/dist/video.js.map +1 -0
- package/dist/wasm-dispatch.d.ts +52 -0
- package/dist/wasm-dispatch.d.ts.map +1 -0
- package/dist/wasm-dispatch.js +204 -0
- package/dist/wasm-dispatch.js.map +1 -0
- package/dist/wasm-fallback.d.ts +19 -0
- package/dist/wasm-fallback.d.ts.map +1 -0
- package/dist/wasm-fallback.js +93 -0
- package/dist/wasm-fallback.js.map +1 -0
- package/dist/wire.d.ts +49 -0
- package/dist/wire.d.ts.map +1 -0
- package/dist/wire.js +201 -0
- package/dist/wire.js.map +1 -0
- package/dist/zap.d.ts +42 -0
- package/dist/zap.d.ts.map +1 -0
- package/dist/zap.js +172 -0
- package/dist/zap.js.map +1 -0
- package/package.json +71 -0
- package/src/addressed-digest.ts +48 -0
- package/src/animation.ts +103 -0
- package/src/assembly.ts +76 -0
- package/src/av-bridge.ts +161 -0
- package/src/av-renderer.ts +118 -0
- package/src/blend.ts +135 -0
- package/src/boundary.ts +363 -0
- package/src/brands.ts +86 -0
- package/src/caps.ts +100 -0
- package/src/capsule.ts +95 -0
- package/src/capsules/boundary-evaluate.ts +128 -0
- package/src/capsules/canonical-cbor.ts +60 -0
- package/src/capsules/token-buffer.ts +57 -0
- package/src/capture.ts +48 -0
- package/src/cbor.ts +199 -0
- package/src/cell.ts +130 -0
- package/src/codec.ts +39 -0
- package/src/component.ts +102 -0
- package/src/composable.ts +328 -0
- package/src/compositor-pool.ts +162 -0
- package/src/compositor.ts +387 -0
- package/src/config.ts +157 -0
- package/src/dag.ts +527 -0
- package/src/defaults.ts +60 -0
- package/src/derived.ts +164 -0
- package/src/diagnostics.ts +186 -0
- package/src/dirty.ts +101 -0
- package/src/easing.ts +334 -0
- package/src/ecs.ts +382 -0
- package/src/fnv.ts +31 -0
- package/src/frame-budget.ts +149 -0
- package/src/gen-frame.ts +229 -0
- package/src/harness/arbitrary-from-schema.ts +270 -0
- package/src/harness/cached-projection.ts +46 -0
- package/src/harness/index.ts +16 -0
- package/src/harness/policy-gate.ts +51 -0
- package/src/harness/pure-transform.ts +121 -0
- package/src/harness/receipted-mutation.ts +59 -0
- package/src/harness/scene-composition.ts +54 -0
- package/src/harness/site-adapter.ts +43 -0
- package/src/harness/state-machine.ts +49 -0
- package/src/hlc.ts +238 -0
- package/src/index.ts +274 -0
- package/src/interpolate.ts +37 -0
- package/src/live-cell.ts +199 -0
- package/src/op.ts +233 -0
- package/src/plan.ts +317 -0
- package/src/protocol.ts +49 -0
- package/src/quantizer-types.ts +29 -0
- package/src/receipt.ts +444 -0
- package/src/runtime-coordinator.ts +230 -0
- package/src/scheduler.ts +161 -0
- package/src/ship-capsule.ts +191 -0
- package/src/signal.ts +345 -0
- package/src/speculative.ts +186 -0
- package/src/store.ts +77 -0
- package/src/style.ts +249 -0
- package/src/testing.ts +14 -0
- package/src/theme.ts +153 -0
- package/src/timeline.ts +146 -0
- package/src/token-buffer.ts +151 -0
- package/src/token.ts +197 -0
- package/src/tuple.ts +19 -0
- package/src/type-utils.ts +48 -0
- package/src/typed-ref.ts +79 -0
- package/src/ui-quality.ts +105 -0
- package/src/validation-error.ts +34 -0
- package/src/vector-clock.ts +111 -0
- package/src/video.ts +106 -0
- package/src/wasm-dispatch.ts +300 -0
- package/src/wasm-fallback.ts +102 -0
- package/src/wire.ts +274 -0
- package/src/zap.ts +241 -0
package/dist/hlc.js
ADDED
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* HLC -- Hybrid Logical Clock.
|
|
3
|
+
*
|
|
4
|
+
* Pure functions + Effect-based managed clock.
|
|
5
|
+
*
|
|
6
|
+
* @module
|
|
7
|
+
*/
|
|
8
|
+
import { Ref } from 'effect';
|
|
9
|
+
/**
|
|
10
|
+
* Create a new HLC timestamp initialized to zero for the given node.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```ts
|
|
14
|
+
* const hlc = HLC.create('node-1');
|
|
15
|
+
* // hlc === { wall_ms: 0, counter: 0, node_id: 'node-1' }
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
const _create = (nodeId) => ({
|
|
19
|
+
wall_ms: 0,
|
|
20
|
+
counter: 0,
|
|
21
|
+
node_id: nodeId,
|
|
22
|
+
});
|
|
23
|
+
/**
|
|
24
|
+
* Compare two HLC timestamps. Returns -1, 0, or 1.
|
|
25
|
+
*
|
|
26
|
+
* Compares wall_ms first, then counter, then node_id lexicographically.
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* ```ts
|
|
30
|
+
* const a = HLC.create('node-1');
|
|
31
|
+
* const b = HLC.increment(a, 1000);
|
|
32
|
+
* const cmp = HLC.compare(a, b);
|
|
33
|
+
* // cmp === -1 (a is before b)
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
export const compare = (a, b) => {
|
|
37
|
+
if (a.wall_ms < b.wall_ms)
|
|
38
|
+
return -1;
|
|
39
|
+
if (a.wall_ms > b.wall_ms)
|
|
40
|
+
return 1;
|
|
41
|
+
if (a.counter < b.counter)
|
|
42
|
+
return -1;
|
|
43
|
+
if (a.counter > b.counter)
|
|
44
|
+
return 1;
|
|
45
|
+
if (a.node_id < b.node_id)
|
|
46
|
+
return -1;
|
|
47
|
+
if (a.node_id > b.node_id)
|
|
48
|
+
return 1;
|
|
49
|
+
return 0;
|
|
50
|
+
};
|
|
51
|
+
// 16-bit counter — supports 65535 events per ms before overflow
|
|
52
|
+
const MAX_COUNTER = 0xffff;
|
|
53
|
+
/**
|
|
54
|
+
* Increment an HLC for a local event.
|
|
55
|
+
*
|
|
56
|
+
* Advances wall_ms to max(current, now) and bumps the counter if the wall
|
|
57
|
+
* time didn't advance. Throws on counter overflow (`> 0xFFFF`).
|
|
58
|
+
*
|
|
59
|
+
* @example
|
|
60
|
+
* ```ts
|
|
61
|
+
* const hlc0 = HLC.create('node-1');
|
|
62
|
+
* const hlc1 = HLC.increment(hlc0, Date.now());
|
|
63
|
+
* // hlc1.wall_ms >= hlc0.wall_ms
|
|
64
|
+
* ```
|
|
65
|
+
*/
|
|
66
|
+
const _increment = (hlc, now = 0) => {
|
|
67
|
+
const newWallMs = Math.max(hlc.wall_ms, now);
|
|
68
|
+
if (newWallMs === hlc.wall_ms) {
|
|
69
|
+
const next = hlc.counter + 1;
|
|
70
|
+
if (next > MAX_COUNTER)
|
|
71
|
+
throw new Error(`HLC counter overflow: exceeded ${MAX_COUNTER} (>65535 events in 1ms — consider batching or increasing clock resolution)`);
|
|
72
|
+
return { wall_ms: newWallMs, counter: next, node_id: hlc.node_id };
|
|
73
|
+
}
|
|
74
|
+
return { wall_ms: newWallMs, counter: 0, node_id: hlc.node_id };
|
|
75
|
+
};
|
|
76
|
+
/**
|
|
77
|
+
* Merge a local HLC with a remote HLC on message receive.
|
|
78
|
+
*
|
|
79
|
+
* Takes the max of local, remote, and now for wall_ms, then adjusts the
|
|
80
|
+
* counter accordingly. Preserves the local node_id.
|
|
81
|
+
*
|
|
82
|
+
* Lamport causality: if wall clocks agree, increment the higher counter to preserve
|
|
83
|
+
* happened-before ordering. Reset counter only when wall clock advances (new causal epoch).
|
|
84
|
+
*
|
|
85
|
+
* @example
|
|
86
|
+
* ```ts
|
|
87
|
+
* const local = HLC.increment(HLC.create('A'), 1000);
|
|
88
|
+
* const remote = HLC.increment(HLC.create('B'), 2000);
|
|
89
|
+
* const merged = HLC.merge(local, remote, 1500);
|
|
90
|
+
* // merged.wall_ms === 2000, merged.node_id === 'A'
|
|
91
|
+
* ```
|
|
92
|
+
*/
|
|
93
|
+
const _merge = (local, remote, now = 0) => {
|
|
94
|
+
const newWallMs = Math.max(local.wall_ms, remote.wall_ms, now);
|
|
95
|
+
let newCounter;
|
|
96
|
+
if (newWallMs === local.wall_ms && newWallMs === remote.wall_ms) {
|
|
97
|
+
newCounter = Math.max(local.counter, remote.counter) + 1;
|
|
98
|
+
}
|
|
99
|
+
else if (newWallMs === local.wall_ms) {
|
|
100
|
+
newCounter = local.counter + 1;
|
|
101
|
+
}
|
|
102
|
+
else if (newWallMs === remote.wall_ms) {
|
|
103
|
+
newCounter = remote.counter + 1;
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
newCounter = 0;
|
|
107
|
+
}
|
|
108
|
+
if (newCounter > MAX_COUNTER)
|
|
109
|
+
throw new Error(`HLC counter overflow: exceeded ${MAX_COUNTER} (>65535 events in 1ms — consider batching or increasing clock resolution)`);
|
|
110
|
+
return { wall_ms: newWallMs, counter: newCounter, node_id: local.node_id };
|
|
111
|
+
};
|
|
112
|
+
/**
|
|
113
|
+
* Encode an HLC timestamp to a colon-separated hex string.
|
|
114
|
+
*
|
|
115
|
+
* Format: `{wall_ms_hex_12}:{counter_hex_4}:{node_id}`
|
|
116
|
+
*
|
|
117
|
+
* @example
|
|
118
|
+
* ```ts
|
|
119
|
+
* const hlc = HLC.increment(HLC.create('node-1'), 1000);
|
|
120
|
+
* const encoded = HLC.encode(hlc);
|
|
121
|
+
* // encoded === '0000000003e8:0000:node-1'
|
|
122
|
+
* ```
|
|
123
|
+
*/
|
|
124
|
+
const _encode = (hlc) => {
|
|
125
|
+
// 12 hex digits = 48-bit wall clock (good to year 10889), 4 hex = 16-bit counter
|
|
126
|
+
const wallHex = hlc.wall_ms.toString(16).padStart(12, '0');
|
|
127
|
+
const counterHex = hlc.counter.toString(16).padStart(4, '0');
|
|
128
|
+
return `${wallHex}:${counterHex}:${hlc.node_id}`;
|
|
129
|
+
};
|
|
130
|
+
/**
|
|
131
|
+
* Decode an HLC timestamp from a colon-separated hex string.
|
|
132
|
+
*
|
|
133
|
+
* Inverse of `encode`. Supports node IDs containing colons.
|
|
134
|
+
*
|
|
135
|
+
* @example
|
|
136
|
+
* ```ts
|
|
137
|
+
* const hlc = HLC.decode('0000000003e8:0000:node-1');
|
|
138
|
+
* // hlc === { wall_ms: 1000, counter: 0, node_id: 'node-1' }
|
|
139
|
+
* ```
|
|
140
|
+
*/
|
|
141
|
+
const _decode = (s) => {
|
|
142
|
+
const parts = s.split(':');
|
|
143
|
+
if (parts.length < 3)
|
|
144
|
+
throw new Error(`Invalid HLC format: expected at least 3 colon-separated parts, got "${s}"`);
|
|
145
|
+
const wall_ms = parseInt(parts[0], 16);
|
|
146
|
+
const counter = parseInt(parts[1], 16);
|
|
147
|
+
const node_id = parts.slice(2).join(':');
|
|
148
|
+
if (isNaN(wall_ms))
|
|
149
|
+
throw new Error(`Invalid HLC format: wall_ms is not valid hex in "${s}"`);
|
|
150
|
+
if (isNaN(counter))
|
|
151
|
+
throw new Error(`Invalid HLC format: counter is not valid hex in "${s}"`);
|
|
152
|
+
return { wall_ms, counter, node_id };
|
|
153
|
+
};
|
|
154
|
+
/**
|
|
155
|
+
* Create a managed HLC clock as an Effect Ref.
|
|
156
|
+
*
|
|
157
|
+
* @example
|
|
158
|
+
* ```ts
|
|
159
|
+
* import { Effect } from 'effect';
|
|
160
|
+
*
|
|
161
|
+
* const program = Effect.gen(function* () {
|
|
162
|
+
* const clock = yield* HLC.makeClock('node-1');
|
|
163
|
+
* const ts = yield* HLC.tick(clock);
|
|
164
|
+
* // ts.wall_ms === Date.now() (approximately)
|
|
165
|
+
* });
|
|
166
|
+
* ```
|
|
167
|
+
*/
|
|
168
|
+
export const makeClock = (nodeId) => Ref.make(_create(nodeId));
|
|
169
|
+
/**
|
|
170
|
+
* Tick a managed clock forward, returning the new HLC timestamp.
|
|
171
|
+
*
|
|
172
|
+
* @example
|
|
173
|
+
* ```ts
|
|
174
|
+
* const ts = yield* HLC.tick(clock);
|
|
175
|
+
* // ts.wall_ms >= previous wall_ms
|
|
176
|
+
* ```
|
|
177
|
+
*/
|
|
178
|
+
export const tick = (clock) => Ref.updateAndGet(clock, (current) => _increment(current, Date.now()));
|
|
179
|
+
/**
|
|
180
|
+
* Receive a remote HLC timestamp and merge it into the managed clock.
|
|
181
|
+
*
|
|
182
|
+
* @example
|
|
183
|
+
* ```ts
|
|
184
|
+
* const remoteTs = HLC.decode(remoteEncoded);
|
|
185
|
+
* const merged = yield* HLC.receive(clock, remoteTs);
|
|
186
|
+
* // merged.wall_ms >= remoteTs.wall_ms
|
|
187
|
+
* ```
|
|
188
|
+
*/
|
|
189
|
+
export const receive = (clock, remote) => Ref.updateAndGet(clock, (current) => _merge(current, remote, Date.now()));
|
|
190
|
+
/**
|
|
191
|
+
* HLC namespace -- Hybrid Logical Clock.
|
|
192
|
+
*
|
|
193
|
+
* Pure functions for creating, comparing, incrementing, and merging HLC
|
|
194
|
+
* timestamps, plus Effect-based managed clock helpers. Encodes to/from
|
|
195
|
+
* a deterministic colon-separated hex string format.
|
|
196
|
+
*
|
|
197
|
+
* @example
|
|
198
|
+
* ```ts
|
|
199
|
+
* import { HLC } from '@czap/core';
|
|
200
|
+
*
|
|
201
|
+
* const a = HLC.increment(HLC.create('A'), Date.now());
|
|
202
|
+
* const b = HLC.increment(HLC.create('B'), Date.now());
|
|
203
|
+
* const merged = HLC.merge(a, b, Date.now());
|
|
204
|
+
* const encoded = HLC.encode(merged);
|
|
205
|
+
* const decoded = HLC.decode(encoded);
|
|
206
|
+
* ```
|
|
207
|
+
*/
|
|
208
|
+
export const HLC = {
|
|
209
|
+
create: _create,
|
|
210
|
+
compare,
|
|
211
|
+
increment: _increment,
|
|
212
|
+
merge: _merge,
|
|
213
|
+
encode: _encode,
|
|
214
|
+
decode: _decode,
|
|
215
|
+
makeClock,
|
|
216
|
+
tick,
|
|
217
|
+
receive,
|
|
218
|
+
};
|
|
219
|
+
//# sourceMappingURL=hlc.js.map
|
package/dist/hlc.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hlc.js","sourceRoot":"","sources":["../src/hlc.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@czap/core` — **LiteShip** primitives for the **CZAP** engine: boundaries,
|
|
3
|
+
* tokens, styles, themes, signals, and working-deck coordination (compositor,
|
|
4
|
+
* plan graph, ECS, capsule factory).
|
|
5
|
+
* @module
|
|
6
|
+
*/
|
|
7
|
+
export { SignalInput, ThresholdValue, StateName, ContentAddress, IntegrityDigest, TokenRef, Millis } from './brands.js';
|
|
8
|
+
export type { HLC as HLCBrand } from './brands.js';
|
|
9
|
+
export { fnv1a, fnv1aBytes } from './fnv.js';
|
|
10
|
+
export { CanonicalCbor } from './cbor.js';
|
|
11
|
+
export type { Prettify, StateUnion, OutputsFor, BoundaryCrossing, EffectValue, EffectError, RequireAtLeastOne, DeepReadonly, } from './type-utils.js';
|
|
12
|
+
export { tupleMap } from './tuple.js';
|
|
13
|
+
export { Boundary, BoundarySpec } from './boundary.js';
|
|
14
|
+
export { Token } from './token.js';
|
|
15
|
+
export type { TokenCategory } from './token.js';
|
|
16
|
+
export { Style } from './style.js';
|
|
17
|
+
export type { StyleLayer, ShadowLayer } from './style.js';
|
|
18
|
+
export { Theme } from './theme.js';
|
|
19
|
+
export { Component } from './component.js';
|
|
20
|
+
export type { SlotConfig } from './component.js';
|
|
21
|
+
export { Signal } from './signal.js';
|
|
22
|
+
export type { SignalSourceType, SignalSource } from './signal.js';
|
|
23
|
+
export { Easing } from './easing.js';
|
|
24
|
+
export { Animation } from './animation.js';
|
|
25
|
+
export { Timeline } from './timeline.js';
|
|
26
|
+
export type { Quantizer } from './quantizer-types.js';
|
|
27
|
+
export { Scheduler } from './scheduler.js';
|
|
28
|
+
export { Compositor } from './compositor.js';
|
|
29
|
+
export type { CompositeState, CompositorConfig } from './compositor.js';
|
|
30
|
+
export { CompositorStatePool } from './compositor-pool.js';
|
|
31
|
+
export { SpeculativeEvaluator } from './speculative.js';
|
|
32
|
+
export { TokenBuffer } from './token-buffer.js';
|
|
33
|
+
export { UIQuality } from './ui-quality.js';
|
|
34
|
+
export type { UIQualityTier, MotionTier } from './ui-quality.js';
|
|
35
|
+
export { GenFrame } from './gen-frame.js';
|
|
36
|
+
export type { UIFrame, FrameType, MorphStrategy, GapStrategy } from './gen-frame.js';
|
|
37
|
+
export { VideoRenderer } from './video.js';
|
|
38
|
+
export type { VideoConfig, VideoFrameOutput } from './video.js';
|
|
39
|
+
export type { CaptureConfig, CaptureFrame, FrameCapture, CaptureResult } from './capture.js';
|
|
40
|
+
export { BlendTree } from './blend.js';
|
|
41
|
+
export { FrameBudget } from './frame-budget.js';
|
|
42
|
+
export type { Priority } from './frame-budget.js';
|
|
43
|
+
export { DirtyFlags } from './dirty.js';
|
|
44
|
+
export type { CellKind, CellMeta, CellEnvelope } from './protocol.js';
|
|
45
|
+
export type { Entity, System, DenseSystem, DenseStore } from './ecs.js';
|
|
46
|
+
export { Part, World, EntityId } from './ecs.js';
|
|
47
|
+
export { Composable, ComposableWorld } from './composable.js';
|
|
48
|
+
export type { EntityComponents, ComposableEntity, ComposableWorldShape } from './composable.js';
|
|
49
|
+
export { Cell } from './cell.js';
|
|
50
|
+
export { Derived } from './derived.js';
|
|
51
|
+
export { Zap } from './zap.js';
|
|
52
|
+
export { Store } from './store.js';
|
|
53
|
+
export { Wire } from './wire.js';
|
|
54
|
+
export { Op } from './op.js';
|
|
55
|
+
export type { CapLevel, CapSet } from './caps.js';
|
|
56
|
+
export { Cap } from './caps.js';
|
|
57
|
+
export { HLC } from './hlc.js';
|
|
58
|
+
export { VectorClock } from './vector-clock.js';
|
|
59
|
+
export { TypedRef } from './typed-ref.js';
|
|
60
|
+
export type { ReceiptSubject, ReceiptEnvelope, ChainValidationError } from './receipt.js';
|
|
61
|
+
export { Receipt } from './receipt.js';
|
|
62
|
+
export type { DAGNode, ReceiptDAG, MergeResult, ForkViolation } from './dag.js';
|
|
63
|
+
export { DAG } from './dag.js';
|
|
64
|
+
export { Plan } from './plan.js';
|
|
65
|
+
export type { OpType, EdgeType } from './plan.js';
|
|
66
|
+
export { RuntimeCoordinator } from './runtime-coordinator.js';
|
|
67
|
+
export type { RuntimePhase, RuntimeCoordinatorConfig } from './runtime-coordinator.js';
|
|
68
|
+
export { Codec } from './codec.js';
|
|
69
|
+
export { LiveCell } from './live-cell.js';
|
|
70
|
+
export { WASMDispatch } from './wasm-dispatch.js';
|
|
71
|
+
export type { WASMKernels, WASMDispatchAPI } from './wasm-dispatch.js';
|
|
72
|
+
export { fallbackKernels } from './wasm-fallback.js';
|
|
73
|
+
export { AVBridge } from './av-bridge.js';
|
|
74
|
+
export { AVRenderer } from './av-renderer.js';
|
|
75
|
+
export { DEFAULT_TARGET_FPS, MS_PER_SEC, SSE_BUFFER_SIZE, SSE_HEARTBEAT_MS, SSE_RECONNECT_INITIAL_MS, SSE_RECONNECT_MAX_MS, COMPOSITOR_POOL_CAP, DIRTY_FLAGS_MAX, WASM_SCRATCH_BASE, CAPTURE_KEYFRAME_INTERVAL, EASING_SPRING_STEPS, THEME_TRANSITION_DURATION_MS, THEME_TRANSITION_EASING, CANVAS_FALLBACK_WIDTH, CANVAS_FALLBACK_HEIGHT, VIEWPORT, } from './defaults.js';
|
|
76
|
+
export { CzapValidationError, isValidationError } from './validation-error.js';
|
|
77
|
+
export { Diagnostics } from './diagnostics.js';
|
|
78
|
+
export type { DiagnosticEvent, DiagnosticLevel, DiagnosticPayload, DiagnosticsSink } from './diagnostics.js';
|
|
79
|
+
export { AddressedDigest } from './addressed-digest.js';
|
|
80
|
+
export { ShipCapsule } from './ship-capsule.js';
|
|
81
|
+
import type { Cell as _Cell } from './cell.js';
|
|
82
|
+
import type { Derived as _Derived } from './derived.js';
|
|
83
|
+
import type { Zap as _Zap } from './zap.js';
|
|
84
|
+
import type { Wire as _Wire } from './wire.js';
|
|
85
|
+
/** Union of the four reactive primitives the CZAP graph exposes to user code. */
|
|
86
|
+
export type Primitive<T> = _Cell.Shape<T> | _Derived.Shape<T> | _Zap.Shape<T> | _Wire.Shape<T>;
|
|
87
|
+
/** Narrow a {@link Primitive} to a {@link Cell}. */
|
|
88
|
+
export declare const isCell: <T>(p: Primitive<T>) => p is _Cell.Shape<T>;
|
|
89
|
+
/** Narrow a {@link Primitive} to a {@link Derived}. */
|
|
90
|
+
export declare const isDerived: <T>(p: Primitive<T>) => p is _Derived.Shape<T>;
|
|
91
|
+
/** Narrow a {@link Primitive} to a {@link Zap}. */
|
|
92
|
+
export declare const isZap: <T>(p: Primitive<T>) => p is _Zap.Shape<T>;
|
|
93
|
+
/** Narrow a {@link Primitive} to a {@link Wire}. */
|
|
94
|
+
export declare const isWire: <T>(p: Primitive<T>) => p is _Wire.Shape<T>;
|
|
95
|
+
export { Config, defineConfig } from './config.js';
|
|
96
|
+
export type { PrimitiveKind, PluginConfig as CorePluginConfig, AstroConfig as CoreAstroConfig } from './config.js';
|
|
97
|
+
export type { AssemblyKind, Site, CapabilityDecl, BudgetDecl, Invariant, AttributionDecl, CapsuleContract, } from './capsule.js';
|
|
98
|
+
export { TypeValidator } from './capsule.js';
|
|
99
|
+
export { defineCapsule, getCapsuleCatalog } from './assembly.js';
|
|
100
|
+
export type { CapsuleDef } from './assembly.js';
|
|
101
|
+
export { boundaryEvaluateCapsule } from './capsules/boundary-evaluate.js';
|
|
102
|
+
export { tokenBufferCapsule } from './capsules/token-buffer.js';
|
|
103
|
+
export { canonicalCborCapsule } from './capsules/canonical-cbor.js';
|
|
104
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@czap/core` — **LiteShip** primitives for the **CZAP** engine: boundaries,
|
|
3
|
+
* tokens, styles, themes, signals, and working-deck coordination (compositor,
|
|
4
|
+
* plan graph, ECS, capsule factory).
|
|
5
|
+
* @module
|
|
6
|
+
*/
|
|
7
|
+
// Brands — sanctioned constructors. The lower-level `brand` factory is
|
|
8
|
+
// intentionally NOT re-exported here; it is the unsafe escape-hatch used
|
|
9
|
+
// by `brands.ts` itself to define the sanctioned set, and exposing it on
|
|
10
|
+
// the public surface would let consumers forge any brand. Code that
|
|
11
|
+
// genuinely needs to mint a new brand should import from `@czap/core/brands`
|
|
12
|
+
// directly and document the use site.
|
|
13
|
+
export { SignalInput, ThresholdValue, StateName, ContentAddress, IntegrityDigest, TokenRef, Millis } from './brands.js';
|
|
14
|
+
// FNV-1a hash utility
|
|
15
|
+
export { fnv1a, fnv1aBytes } from './fnv.js';
|
|
16
|
+
// Canonical CBOR encoder (RFC 8949 §4.2.1) — content-address kernel
|
|
17
|
+
export { CanonicalCbor } from './cbor.js';
|
|
18
|
+
// Tuple utilities
|
|
19
|
+
export { tupleMap } from './tuple.js';
|
|
20
|
+
// Boundary. `BoundarySpec` is exported as a value+type pair (see the
|
|
21
|
+
// namespace-object pattern in ADR-0001); consumers who want only the type
|
|
22
|
+
// can `import type { BoundarySpec } from '@czap/core'`.
|
|
23
|
+
export { Boundary, BoundarySpec } from './boundary.js';
|
|
24
|
+
// Token
|
|
25
|
+
export { Token } from './token.js';
|
|
26
|
+
// Style
|
|
27
|
+
export { Style } from './style.js';
|
|
28
|
+
// Theme
|
|
29
|
+
export { Theme } from './theme.js';
|
|
30
|
+
// Component
|
|
31
|
+
export { Component } from './component.js';
|
|
32
|
+
// Signal
|
|
33
|
+
export { Signal } from './signal.js';
|
|
34
|
+
// Easing
|
|
35
|
+
export { Easing } from './easing.js';
|
|
36
|
+
// Animation
|
|
37
|
+
export { Animation } from './animation.js';
|
|
38
|
+
// Timeline
|
|
39
|
+
export { Timeline } from './timeline.js';
|
|
40
|
+
// Scheduler
|
|
41
|
+
export { Scheduler } from './scheduler.js';
|
|
42
|
+
// Compositor
|
|
43
|
+
export { Compositor } from './compositor.js';
|
|
44
|
+
// Compositor State Pool
|
|
45
|
+
export { CompositorStatePool } from './compositor-pool.js';
|
|
46
|
+
// Speculative Evaluation
|
|
47
|
+
export { SpeculativeEvaluator } from './speculative.js';
|
|
48
|
+
// Token Buffer
|
|
49
|
+
export { TokenBuffer } from './token-buffer.js';
|
|
50
|
+
// UI Quality
|
|
51
|
+
export { UIQuality } from './ui-quality.js';
|
|
52
|
+
// Generative UI Frames
|
|
53
|
+
export { GenFrame } from './gen-frame.js';
|
|
54
|
+
// Video
|
|
55
|
+
export { VideoRenderer } from './video.js';
|
|
56
|
+
// Blend
|
|
57
|
+
export { BlendTree } from './blend.js';
|
|
58
|
+
// Frame budget
|
|
59
|
+
export { FrameBudget } from './frame-budget.js';
|
|
60
|
+
// Dirty tracking
|
|
61
|
+
export { DirtyFlags } from './dirty.js';
|
|
62
|
+
export { Part, World, EntityId } from './ecs.js';
|
|
63
|
+
// Composable
|
|
64
|
+
export { Composable, ComposableWorld } from './composable.js';
|
|
65
|
+
// Cell
|
|
66
|
+
export { Cell } from './cell.js';
|
|
67
|
+
// Derived
|
|
68
|
+
export { Derived } from './derived.js';
|
|
69
|
+
// Zap
|
|
70
|
+
export { Zap } from './zap.js';
|
|
71
|
+
// Store
|
|
72
|
+
export { Store } from './store.js';
|
|
73
|
+
// Wire
|
|
74
|
+
export { Wire } from './wire.js';
|
|
75
|
+
// Op
|
|
76
|
+
export { Op } from './op.js';
|
|
77
|
+
export { Cap } from './caps.js';
|
|
78
|
+
// HLC
|
|
79
|
+
export { HLC } from './hlc.js';
|
|
80
|
+
// VectorClock
|
|
81
|
+
export { VectorClock } from './vector-clock.js';
|
|
82
|
+
// TypedRef
|
|
83
|
+
export { TypedRef } from './typed-ref.js';
|
|
84
|
+
export { Receipt } from './receipt.js';
|
|
85
|
+
export { DAG } from './dag.js';
|
|
86
|
+
// Plan
|
|
87
|
+
export { Plan } from './plan.js';
|
|
88
|
+
// Runtime coordination
|
|
89
|
+
export { RuntimeCoordinator } from './runtime-coordinator.js';
|
|
90
|
+
// Codec
|
|
91
|
+
export { Codec } from './codec.js';
|
|
92
|
+
// `SchemaError` / `isSchemaError` removed from the main entry — they were
|
|
93
|
+
// orphan re-exports from `effect/Schema` with no consumers in the repo
|
|
94
|
+
// and added implicit coupling to an Effect internal sub-path. Consumers
|
|
95
|
+
// who need them should import directly from `effect/Schema`.
|
|
96
|
+
// LiveCell
|
|
97
|
+
export { LiveCell } from './live-cell.js';
|
|
98
|
+
// WASM Dispatch
|
|
99
|
+
export { WASMDispatch } from './wasm-dispatch.js';
|
|
100
|
+
export { fallbackKernels } from './wasm-fallback.js';
|
|
101
|
+
// AVBridge
|
|
102
|
+
export { AVBridge } from './av-bridge.js';
|
|
103
|
+
// AVRenderer
|
|
104
|
+
export { AVRenderer } from './av-renderer.js';
|
|
105
|
+
// Defaults (centralized constants)
|
|
106
|
+
export { DEFAULT_TARGET_FPS, MS_PER_SEC, SSE_BUFFER_SIZE, SSE_HEARTBEAT_MS, SSE_RECONNECT_INITIAL_MS, SSE_RECONNECT_MAX_MS, COMPOSITOR_POOL_CAP, DIRTY_FLAGS_MAX, WASM_SCRATCH_BASE, CAPTURE_KEYFRAME_INTERVAL, EASING_SPRING_STEPS, THEME_TRANSITION_DURATION_MS, THEME_TRANSITION_EASING, CANVAS_FALLBACK_WIDTH, CANVAS_FALLBACK_HEIGHT, VIEWPORT, } from './defaults.js';
|
|
107
|
+
// Validation error
|
|
108
|
+
export { CzapValidationError, isValidationError } from './validation-error.js';
|
|
109
|
+
// Diagnostics
|
|
110
|
+
export { Diagnostics } from './diagnostics.js';
|
|
111
|
+
// AddressedDigest + ShipCapsule (ADR-0011)
|
|
112
|
+
// Browser-bundleable: pure type + crypto.subtle hashing. The Node-only
|
|
113
|
+
// release-input manifest helpers (gzip/tar/yaml) live in @czap/cli.
|
|
114
|
+
export { AddressedDigest } from './addressed-digest.js';
|
|
115
|
+
export { ShipCapsule } from './ship-capsule.js';
|
|
116
|
+
/** Narrow a {@link Primitive} to a {@link Cell}. */
|
|
117
|
+
export const isCell = (p) => p._tag === 'Cell';
|
|
118
|
+
/** Narrow a {@link Primitive} to a {@link Derived}. */
|
|
119
|
+
export const isDerived = (p) => p._tag === 'Derived';
|
|
120
|
+
/** Narrow a {@link Primitive} to a {@link Zap}. */
|
|
121
|
+
export const isZap = (p) => p._tag === 'Zap';
|
|
122
|
+
/** Narrow a {@link Primitive} to a {@link Wire}. */
|
|
123
|
+
export const isWire = (p) => p._tag === 'Wire';
|
|
124
|
+
// Config hub
|
|
125
|
+
export { Config, defineConfig } from './config.js';
|
|
126
|
+
export { TypeValidator } from './capsule.js';
|
|
127
|
+
export { defineCapsule, getCapsuleCatalog } from './assembly.js';
|
|
128
|
+
// `resetCapsuleCatalog` is intentionally NOT re-exported here — it mutates
|
|
129
|
+
// global registry state and ships from `@czap/core/testing` only.
|
|
130
|
+
// Capsule declarations — concrete instances of the 7-arm factory
|
|
131
|
+
export { boundaryEvaluateCapsule } from './capsules/boundary-evaluate.js';
|
|
132
|
+
export { tokenBufferCapsule } from './capsules/token-buffer.js';
|
|
133
|
+
export { canonicalCborCapsule } from './capsules/canonical-cbor.js';
|
|
134
|
+
// Harness lives at `@czap/core/harness` — per-arm test + bench template
|
|
135
|
+
// generators. Not re-exported here so consumers don't pull fast-check and
|
|
136
|
+
// the code-gen surface into every bundle.
|
|
137
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Value lerping between output states.
|
|
3
|
+
*
|
|
4
|
+
* Linearly interpolates all numeric properties of a record
|
|
5
|
+
* from one state to another, controlled by an eased progress value.
|
|
6
|
+
*
|
|
7
|
+
* @module
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Interpolate between two numeric records using an eased value [0..1].
|
|
11
|
+
* Returns a new record with each property lerped: from[k] + (to[k] - from[k]) * eased.
|
|
12
|
+
*/
|
|
13
|
+
export declare function interpolate<T extends Record<string, number>>(from: T, to: T, eased: number, defaults?: Partial<Record<string, number>>): T;
|
|
14
|
+
//# sourceMappingURL=interpolate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interpolate.d.ts","sourceRoot":"","sources":["../src/interpolate.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;GAGG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC1D,IAAI,EAAE,CAAC,EACP,EAAE,EAAE,CAAC,EACL,KAAK,EAAE,MAAM,EACb,QAAQ,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GACzC,CAAC,CAkBH"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Value lerping between output states.
|
|
3
|
+
*
|
|
4
|
+
* Linearly interpolates all numeric properties of a record
|
|
5
|
+
* from one state to another, controlled by an eased progress value.
|
|
6
|
+
*
|
|
7
|
+
* @module
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Interpolate between two numeric records using an eased value [0..1].
|
|
11
|
+
* Returns a new record with each property lerped: from[k] + (to[k] - from[k]) * eased.
|
|
12
|
+
*/
|
|
13
|
+
export function interpolate(from, to, eased, defaults) {
|
|
14
|
+
const result = {};
|
|
15
|
+
for (const [key, a] of Object.entries(from)) {
|
|
16
|
+
const b = to[key] ?? a;
|
|
17
|
+
result[key] = a + (b - a) * eased;
|
|
18
|
+
}
|
|
19
|
+
// Second pass: keys only in `to` (interpolate from implicit 0)
|
|
20
|
+
for (const [key, b] of Object.entries(to)) {
|
|
21
|
+
if (key in result) {
|
|
22
|
+
continue;
|
|
23
|
+
}
|
|
24
|
+
const base = defaults?.[key] ?? 0;
|
|
25
|
+
result[key] = base + (b - base) * eased;
|
|
26
|
+
}
|
|
27
|
+
// `result` has every key present in `from`/`to`, both of which are T. The
|
|
28
|
+
// output is structurally a T but TS can't infer that through Object.entries.
|
|
29
|
+
return result;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=interpolate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interpolate.js","sourceRoot":"","sources":["../src/interpolate.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;GAGG;AACH,MAAM,UAAU,WAAW,CACzB,IAAO,EACP,EAAK,EACL,KAAa,EACb,QAA0C;IAE1C,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,KAAK,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5C,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACvB,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;IACpC,CAAC;IACD,+DAA+D;IAC/D,KAAK,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;QAC1C,IAAI,GAAG,IAAI,MAAM,EAAE,CAAC;YAClB,SAAS;QACX,CAAC;QAED,MAAM,IAAI,GAAG,QAAQ,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC;IAC1C,CAAC;IACD,0EAA0E;IAC1E,6EAA6E;IAC7E,OAAO,MAAsB,CAAC;AAChC,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `LiveCell<K, T>` — bridge between protocol envelope and reactive runtime.
|
|
3
|
+
*
|
|
4
|
+
* A LiveCell is a Cell that also carries a CellEnvelope, tracking
|
|
5
|
+
* its kind, content address, metadata (HLC timestamps, version),
|
|
6
|
+
* and boundary crossings.
|
|
7
|
+
*
|
|
8
|
+
* @module
|
|
9
|
+
*/
|
|
10
|
+
import type { Scope } from 'effect';
|
|
11
|
+
import { Effect, Stream } from 'effect';
|
|
12
|
+
import { Cell } from './cell.js';
|
|
13
|
+
import type { CellKind, CellEnvelope } from './protocol.js';
|
|
14
|
+
import type { BoundaryCrossing } from './type-utils.js';
|
|
15
|
+
import { Boundary } from './boundary.js';
|
|
16
|
+
interface LiveCellShape<K extends CellKind, T> extends Omit<Cell.Shape<T>, '_tag'> {
|
|
17
|
+
readonly _tag: 'LiveCell';
|
|
18
|
+
readonly envelope: Effect.Effect<CellEnvelope<K, T>>;
|
|
19
|
+
readonly crossings: Stream.Stream<BoundaryCrossing<string>>;
|
|
20
|
+
readonly kind: K;
|
|
21
|
+
publishCrossing(crossing: BoundaryCrossing<string>): Effect.Effect<void>;
|
|
22
|
+
}
|
|
23
|
+
declare function _make<K extends CellKind, T>(kind: K, initial: T): Effect.Effect<LiveCellShape<K, T>, never, Scope.Scope>;
|
|
24
|
+
/**
|
|
25
|
+
* Create a boundary-kind LiveCell that automatically publishes crossings
|
|
26
|
+
* when the numeric value transitions between boundary states.
|
|
27
|
+
*/
|
|
28
|
+
declare function _makeBoundary<I extends string, S extends readonly [string, ...string[]]>(boundary: Boundary.Shape<I, S>, initial: number): Effect.Effect<LiveCellShape<'boundary', number>, never, Scope.Scope>;
|
|
29
|
+
/**
|
|
30
|
+
* LiveCell — bridge between the {@link Cell} reactive graph and the wire
|
|
31
|
+
* protocol. A `LiveCell` wraps a `Cell` with a typed {@link CellEnvelope} —
|
|
32
|
+
* kind, content address, HLC, boundary crossings — so primitives can travel
|
|
33
|
+
* between peers as self-describing messages.
|
|
34
|
+
*/
|
|
35
|
+
export declare const LiveCell: {
|
|
36
|
+
/** Wrap an arbitrary value in a {@link LiveCell} with freshly minted identity + HLC. */
|
|
37
|
+
make: typeof _make;
|
|
38
|
+
/** Specialized factory for boundary crossings so the envelope captures crossing metadata. */
|
|
39
|
+
makeBoundary: typeof _makeBoundary;
|
|
40
|
+
};
|
|
41
|
+
export declare namespace LiveCell {
|
|
42
|
+
/** Structural shape of a {@link LiveCell} parameterized by cell kind `K` and value type `T`. */
|
|
43
|
+
type Shape<K extends CellKind, T> = LiveCellShape<K, T>;
|
|
44
|
+
}
|
|
45
|
+
export {};
|
|
46
|
+
//# sourceMappingURL=live-cell.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"live-cell.d.ts","sourceRoot":"","sources":["../src/live-cell.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAe,MAAM,QAAQ,CAAC;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,KAAK,EAAE,QAAQ,EAAY,YAAY,EAAE,MAAM,eAAe,CAAC;AAGtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAGxD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,UAAU,aAAa,CAAC,CAAC,SAAS,QAAQ,EAAE,CAAC,CAAE,SAAQ,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC;IAChF,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACrD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5D,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IACjB,eAAe,CAAC,QAAQ,EAAE,gBAAgB,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;CAC1E;AAED,iBAAS,KAAK,CAAC,CAAC,SAAS,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CA+DjH;AAED;;;GAGG;AACH,iBAAS,aAAa,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,SAAS,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,EAC/E,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAC9B,OAAO,EAAE,MAAM,GACd,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,UAAU,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CA+EtE;AAED;;;;;GAKG;AACH,eAAO,MAAM,QAAQ;IACnB,wFAAwF;;IAExF,6FAA6F;;CAE9F,CAAC;AAEF,MAAM,CAAC,OAAO,WAAW,QAAQ,CAAC;IAChC,gGAAgG;IAChG,KAAY,KAAK,CAAC,CAAC,SAAS,QAAQ,EAAE,CAAC,IAAI,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;CAChE"}
|