@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/wire.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wire.js","sourceRoot":"","sources":["../src/wire.ts"],"names":[],"mappings":"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"}
|
package/dist/zap.d.ts
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Zap<T> -- push-based event channel via PubSub.
|
|
3
|
+
*
|
|
4
|
+
* @module
|
|
5
|
+
*/
|
|
6
|
+
import { Effect, Stream } from 'effect';
|
|
7
|
+
import type { Scope } from 'effect';
|
|
8
|
+
import type { Millis } from './brands.js';
|
|
9
|
+
interface ZapShape<T> {
|
|
10
|
+
readonly _tag: 'Zap';
|
|
11
|
+
readonly stream: Stream.Stream<T>;
|
|
12
|
+
emit(value: T): Effect.Effect<void>;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Zap -- push-based event channel backed by Effect PubSub.
|
|
16
|
+
* Provides reactive event streams with map, filter, merge, debounce, and throttle.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```ts
|
|
20
|
+
* const program = Effect.scoped(Effect.gen(function* () {
|
|
21
|
+
* const zap = yield* Zap.make<number>();
|
|
22
|
+
* const doubled = yield* Zap.map(zap, n => n * 2);
|
|
23
|
+
* yield* zap.emit(5);
|
|
24
|
+
* // doubled.stream receives 10
|
|
25
|
+
* }));
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
export declare const Zap: {
|
|
29
|
+
make: <T>() => Effect.Effect<ZapShape<T>, never, Scope.Scope>;
|
|
30
|
+
fromDOMEvent: <K extends keyof HTMLElementEventMap>(element: HTMLElement, event: K) => Effect.Effect<ZapShape<HTMLElementEventMap[K]>, never, Scope.Scope>;
|
|
31
|
+
merge: <T>(events: ReadonlyArray<ZapShape<T>>) => Effect.Effect<ZapShape<T>, never, Scope.Scope>;
|
|
32
|
+
map: <A, B>(event: ZapShape<A>, f: (a: A) => B) => Effect.Effect<ZapShape<B>, never, Scope.Scope>;
|
|
33
|
+
filter: <T>(event: ZapShape<T>, predicate: (value: T) => boolean) => Effect.Effect<ZapShape<T>, never, Scope.Scope>;
|
|
34
|
+
debounce: <T>(event: ZapShape<T>, ms: Millis) => Effect.Effect<ZapShape<T>, never, Scope.Scope>;
|
|
35
|
+
throttle: <T>(event: ZapShape<T>, ms: Millis) => Effect.Effect<ZapShape<T>, never, Scope.Scope>;
|
|
36
|
+
};
|
|
37
|
+
export declare namespace Zap {
|
|
38
|
+
/** Structural shape of a {@link Zap}: event-sourced reactive primitive exposing a discrete stream. */
|
|
39
|
+
type Shape<T> = ZapShape<T>;
|
|
40
|
+
}
|
|
41
|
+
export {};
|
|
42
|
+
//# sourceMappingURL=zap.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zap.d.ts","sourceRoot":"","sources":["../src/zap.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,EAA2B,MAAM,QAAQ,CAAC;AACjE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,UAAU,QAAQ,CAAC,CAAC;IAClB,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAClC,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;CACrC;AAuMD;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,GAAG;WAzMD,CAAC,OAAK,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;mBA0B5C,CAAC,SAAS,MAAM,mBAAmB,WAC/C,WAAW,SACb,CAAC,KACP,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;YA6BtD,CAAC,UAAU,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;UA0BxF,CAAC,EAAE,CAAC,SAAS,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;aAqBtF,CAAC,SACT,QAAQ,CAAC,CAAC,CAAC,aACP,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,KAC/B,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;eAuB9B,CAAC,SAAS,QAAQ,CAAC,CAAC,CAAC,MAAM,MAAM,KAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;eAoClF,CAAC,SAAS,QAAQ,CAAC,CAAC,CAAC,MAAM,MAAM,KAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;CA0CpG,CAAC;AAEF,MAAM,CAAC,OAAO,WAAW,GAAG,CAAC;IAC3B,sGAAsG;IACtG,KAAY,KAAK,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC;CACpC"}
|
package/dist/zap.js
ADDED
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Zap<T> -- push-based event channel via PubSub.
|
|
3
|
+
*
|
|
4
|
+
* @module
|
|
5
|
+
*/
|
|
6
|
+
import { Effect, Stream, PubSub, Fiber, Duration } from 'effect';
|
|
7
|
+
/**
|
|
8
|
+
* Creates a new push-based event channel backed by an unbounded PubSub.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```ts
|
|
12
|
+
* const zap = await Effect.runPromise(Effect.scoped(Zap.make<number>()));
|
|
13
|
+
* Effect.runSync(zap.emit(42));
|
|
14
|
+
* // Subscribers on zap.stream will receive 42
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
const _make = () => Effect.gen(function* () {
|
|
18
|
+
const pubsub = yield* PubSub.unbounded();
|
|
19
|
+
yield* Effect.addFinalizer(() => PubSub.shutdown(pubsub));
|
|
20
|
+
return {
|
|
21
|
+
_tag: 'Zap',
|
|
22
|
+
stream: Stream.fromPubSub(pubsub),
|
|
23
|
+
emit: (value) => PubSub.publish(pubsub, value),
|
|
24
|
+
};
|
|
25
|
+
});
|
|
26
|
+
/**
|
|
27
|
+
* Creates a Zap from a DOM event, auto-managing listener lifecycle via Scope.
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```ts
|
|
31
|
+
* const program = Effect.scoped(Effect.gen(function* () {
|
|
32
|
+
* const btn = document.getElementById('btn');
|
|
33
|
+
* if (!(btn instanceof HTMLElement)) return;
|
|
34
|
+
* const clicks = yield* Zap.fromDOMEvent(btn, 'click');
|
|
35
|
+
* // clicks.stream emits MouseEvents; listener removed when scope closes
|
|
36
|
+
* }));
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
const _fromDOMEvent = (element, event) => Effect.gen(function* () {
|
|
40
|
+
const zap = yield* _make();
|
|
41
|
+
const listener = (e) => {
|
|
42
|
+
Effect.runSync(zap.emit(e));
|
|
43
|
+
};
|
|
44
|
+
yield* Effect.acquireRelease(Effect.sync(() => element.addEventListener(event, listener)), () => Effect.sync(() => element.removeEventListener(event, listener)));
|
|
45
|
+
return zap;
|
|
46
|
+
});
|
|
47
|
+
/**
|
|
48
|
+
* Merges multiple Zaps of the same type into a single Zap.
|
|
49
|
+
*
|
|
50
|
+
* @example
|
|
51
|
+
* ```ts
|
|
52
|
+
* const program = Effect.scoped(Effect.gen(function* () {
|
|
53
|
+
* const a = yield* Zap.make<number>();
|
|
54
|
+
* const b = yield* Zap.make<number>();
|
|
55
|
+
* const merged = yield* Zap.merge([a, b]);
|
|
56
|
+
* // merged.stream receives events from both a and b
|
|
57
|
+
* }));
|
|
58
|
+
* ```
|
|
59
|
+
*/
|
|
60
|
+
const _merge = (events) => Effect.gen(function* () {
|
|
61
|
+
const merged = yield* _make();
|
|
62
|
+
yield* Effect.forkScoped(Effect.all(events.map((event) => Stream.runForEach(event.stream, (value) => merged.emit(value))), { concurrency: 'unbounded' }));
|
|
63
|
+
return merged;
|
|
64
|
+
});
|
|
65
|
+
/**
|
|
66
|
+
* Transforms each value emitted by a Zap through a mapping function.
|
|
67
|
+
*
|
|
68
|
+
* @example
|
|
69
|
+
* ```ts
|
|
70
|
+
* const program = Effect.scoped(Effect.gen(function* () {
|
|
71
|
+
* const nums = yield* Zap.make<number>();
|
|
72
|
+
* const strs = yield* Zap.map(nums, n => `value: ${n}`);
|
|
73
|
+
* // strs.stream emits transformed strings
|
|
74
|
+
* }));
|
|
75
|
+
* ```
|
|
76
|
+
*/
|
|
77
|
+
const _map = (event, f) => Effect.gen(function* () {
|
|
78
|
+
const mapped = yield* _make();
|
|
79
|
+
yield* Effect.forkScoped(Stream.runForEach(event.stream, (value) => mapped.emit(f(value))));
|
|
80
|
+
return mapped;
|
|
81
|
+
});
|
|
82
|
+
/**
|
|
83
|
+
* Filters a Zap, only forwarding values that satisfy the predicate.
|
|
84
|
+
*
|
|
85
|
+
* @example
|
|
86
|
+
* ```ts
|
|
87
|
+
* const program = Effect.scoped(Effect.gen(function* () {
|
|
88
|
+
* const nums = yield* Zap.make<number>();
|
|
89
|
+
* const evens = yield* Zap.filter(nums, n => n % 2 === 0);
|
|
90
|
+
* // evens.stream only receives even numbers
|
|
91
|
+
* }));
|
|
92
|
+
* ```
|
|
93
|
+
*/
|
|
94
|
+
const _filter = (event, predicate) => Effect.gen(function* () {
|
|
95
|
+
const filtered = yield* _make();
|
|
96
|
+
yield* Effect.forkScoped(Stream.runForEach(event.stream, (value) => (predicate(value) ? filtered.emit(value) : Effect.void)));
|
|
97
|
+
return filtered;
|
|
98
|
+
});
|
|
99
|
+
/**
|
|
100
|
+
* Debounces a Zap, only emitting after `ms` milliseconds of silence.
|
|
101
|
+
*
|
|
102
|
+
* @example
|
|
103
|
+
* ```ts
|
|
104
|
+
* const program = Effect.scoped(Effect.gen(function* () {
|
|
105
|
+
* const input = yield* Zap.make<string>();
|
|
106
|
+
* const debounced = yield* Zap.debounce(input, Millis(300));
|
|
107
|
+
* // debounced.stream emits only after 300ms pause in input
|
|
108
|
+
* }));
|
|
109
|
+
* ```
|
|
110
|
+
*/
|
|
111
|
+
const _debounce = (event, ms) => Effect.gen(function* () {
|
|
112
|
+
const debounced = yield* _make();
|
|
113
|
+
let pendingFiber = null;
|
|
114
|
+
yield* Effect.forkScoped(Stream.runForEach(event.stream, (value) => Effect.gen(function* () {
|
|
115
|
+
if (pendingFiber) {
|
|
116
|
+
yield* Fiber.interrupt(pendingFiber);
|
|
117
|
+
}
|
|
118
|
+
pendingFiber = yield* Effect.forkChild(Effect.gen(function* () {
|
|
119
|
+
yield* Effect.sleep(Duration.millis(ms));
|
|
120
|
+
yield* debounced.emit(value);
|
|
121
|
+
}));
|
|
122
|
+
})));
|
|
123
|
+
return debounced;
|
|
124
|
+
});
|
|
125
|
+
/**
|
|
126
|
+
* Throttles a Zap, allowing at most one emission per `ms` milliseconds.
|
|
127
|
+
*
|
|
128
|
+
* @example
|
|
129
|
+
* ```ts
|
|
130
|
+
* const program = Effect.scoped(Effect.gen(function* () {
|
|
131
|
+
* const scroll = yield* Zap.make<number>();
|
|
132
|
+
* const throttled = yield* Zap.throttle(scroll, Millis(16));
|
|
133
|
+
* // throttled.stream emits at most once every 16ms (~60fps)
|
|
134
|
+
* }));
|
|
135
|
+
* ```
|
|
136
|
+
*/
|
|
137
|
+
const _throttle = (event, ms) => Effect.gen(function* () {
|
|
138
|
+
const throttled = yield* _make();
|
|
139
|
+
let lastEmitTime = 0;
|
|
140
|
+
yield* Effect.forkScoped(Stream.runForEach(event.stream, (value) => Effect.gen(function* () {
|
|
141
|
+
const now = Date.now();
|
|
142
|
+
if (now - lastEmitTime >= ms) {
|
|
143
|
+
lastEmitTime = now;
|
|
144
|
+
yield* throttled.emit(value);
|
|
145
|
+
}
|
|
146
|
+
})));
|
|
147
|
+
return throttled;
|
|
148
|
+
});
|
|
149
|
+
/**
|
|
150
|
+
* Zap -- push-based event channel backed by Effect PubSub.
|
|
151
|
+
* Provides reactive event streams with map, filter, merge, debounce, and throttle.
|
|
152
|
+
*
|
|
153
|
+
* @example
|
|
154
|
+
* ```ts
|
|
155
|
+
* const program = Effect.scoped(Effect.gen(function* () {
|
|
156
|
+
* const zap = yield* Zap.make<number>();
|
|
157
|
+
* const doubled = yield* Zap.map(zap, n => n * 2);
|
|
158
|
+
* yield* zap.emit(5);
|
|
159
|
+
* // doubled.stream receives 10
|
|
160
|
+
* }));
|
|
161
|
+
* ```
|
|
162
|
+
*/
|
|
163
|
+
export const Zap = {
|
|
164
|
+
make: _make,
|
|
165
|
+
fromDOMEvent: _fromDOMEvent,
|
|
166
|
+
merge: _merge,
|
|
167
|
+
map: _map,
|
|
168
|
+
filter: _filter,
|
|
169
|
+
debounce: _debounce,
|
|
170
|
+
throttle: _throttle,
|
|
171
|
+
};
|
|
172
|
+
//# sourceMappingURL=zap.js.map
|
package/dist/zap.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zap.js","sourceRoot":"","sources":["../src/zap.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@czap/core",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Constraint-based adaptive rendering primitives",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"author": "Eassa Ayoub <eassa@heyoub.dev>",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "https://github.com/heyoub/LiteShip",
|
|
10
|
+
"directory": "packages/core"
|
|
11
|
+
},
|
|
12
|
+
"bugs": "https://github.com/heyoub/LiteShip/issues",
|
|
13
|
+
"homepage": "https://github.com/heyoub/LiteShip#readme",
|
|
14
|
+
"keywords": [
|
|
15
|
+
"czap",
|
|
16
|
+
"constraint-based",
|
|
17
|
+
"adaptive-rendering",
|
|
18
|
+
"framework",
|
|
19
|
+
"boundary",
|
|
20
|
+
"compositor",
|
|
21
|
+
"ecs",
|
|
22
|
+
"typescript"
|
|
23
|
+
],
|
|
24
|
+
"type": "module",
|
|
25
|
+
"sideEffects": false,
|
|
26
|
+
"main": "./dist/index.js",
|
|
27
|
+
"types": "./dist/index.d.ts",
|
|
28
|
+
"exports": {
|
|
29
|
+
".": {
|
|
30
|
+
"types": "./dist/index.d.ts",
|
|
31
|
+
"import": "./dist/index.js",
|
|
32
|
+
"development": "./src/index.ts"
|
|
33
|
+
},
|
|
34
|
+
"./testing": {
|
|
35
|
+
"types": "./dist/testing.d.ts",
|
|
36
|
+
"import": "./dist/testing.js",
|
|
37
|
+
"development": "./src/testing.ts"
|
|
38
|
+
},
|
|
39
|
+
"./harness": {
|
|
40
|
+
"types": "./dist/harness/index.d.ts",
|
|
41
|
+
"import": "./dist/harness/index.js",
|
|
42
|
+
"development": "./src/harness/index.ts"
|
|
43
|
+
},
|
|
44
|
+
"./*": {
|
|
45
|
+
"types": "./dist/*.d.ts",
|
|
46
|
+
"import": "./dist/*.js",
|
|
47
|
+
"development": "./src/*.ts"
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
"files": [
|
|
51
|
+
"dist",
|
|
52
|
+
"src",
|
|
53
|
+
"LICENSE"
|
|
54
|
+
],
|
|
55
|
+
"dependencies": {
|
|
56
|
+
"cborg": "^4.2.0",
|
|
57
|
+
"@czap/_spine": "0.1.0"
|
|
58
|
+
},
|
|
59
|
+
"peerDependencies": {
|
|
60
|
+
"effect": ">=4.0.0-beta.0"
|
|
61
|
+
},
|
|
62
|
+
"engines": {
|
|
63
|
+
"node": ">=22.0.0"
|
|
64
|
+
},
|
|
65
|
+
"publishConfig": {
|
|
66
|
+
"access": "public"
|
|
67
|
+
},
|
|
68
|
+
"scripts": {
|
|
69
|
+
"build": "tsc"
|
|
70
|
+
}
|
|
71
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AddressedDigest construction — pair a {@link ContentAddress} (fnv1a) with an
|
|
3
|
+
* {@link IntegrityDigest} (sha256) over the same canonical bytes (ADR-0011).
|
|
4
|
+
*
|
|
5
|
+
* @module
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import { Effect } from 'effect';
|
|
9
|
+
import type { AddressedDigest as _AddressedDigest } from './brands.js';
|
|
10
|
+
import { IntegrityDigest as mkIntegrityDigest } from './brands.js';
|
|
11
|
+
import { fnv1aBytes } from './fnv.js';
|
|
12
|
+
|
|
13
|
+
export type AddressedDigest = _AddressedDigest;
|
|
14
|
+
|
|
15
|
+
const bytesToHex = (bytes: Uint8Array): string => {
|
|
16
|
+
let out = '';
|
|
17
|
+
for (let i = 0; i < bytes.length; i++) {
|
|
18
|
+
out += bytes[i]!.toString(16).padStart(2, '0');
|
|
19
|
+
}
|
|
20
|
+
return out;
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
const sha256Hex = (bytes: Uint8Array): Effect.Effect<string> =>
|
|
24
|
+
Effect.tryPromise({
|
|
25
|
+
try: async () => {
|
|
26
|
+
const buffer = await crypto.subtle.digest('SHA-256', bytes as BufferSource);
|
|
27
|
+
return bytesToHex(new Uint8Array(buffer));
|
|
28
|
+
},
|
|
29
|
+
catch: (error) =>
|
|
30
|
+
new Error(`SHA-256 hash failed: ${error instanceof Error ? error.message : String(error)}`),
|
|
31
|
+
}).pipe(Effect.orDie);
|
|
32
|
+
|
|
33
|
+
/** Derive an {@link AddressedDigest} from raw bytes. v0.1.0 implements `sha256` only. */
|
|
34
|
+
export const AddressedDigestOf = (
|
|
35
|
+
bytes: Uint8Array,
|
|
36
|
+
algo: 'sha256' | 'blake3' = 'sha256',
|
|
37
|
+
): Effect.Effect<_AddressedDigest, Error> =>
|
|
38
|
+
Effect.gen(function* () {
|
|
39
|
+
if (algo !== 'sha256') {
|
|
40
|
+
return yield* Effect.fail(new Error(`AddressedDigest: algo "${algo}" not yet implemented (v0.2)`));
|
|
41
|
+
}
|
|
42
|
+
const display_id = fnv1aBytes(bytes);
|
|
43
|
+
const hex = yield* sha256Hex(bytes);
|
|
44
|
+
const integrity_digest = mkIntegrityDigest(`sha256:${hex}`);
|
|
45
|
+
return { display_id, integrity_digest, algo: 'sha256' as const };
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
export const AddressedDigest = { of: AddressedDigestOf };
|
package/src/animation.ts
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Animation -- rAF to Effect.Stream interpolation + value lerping.
|
|
3
|
+
*
|
|
4
|
+
* Produces a Stream of AnimationFrame values driven by requestAnimationFrame,
|
|
5
|
+
* with configurable duration and easing. Also provides numeric record
|
|
6
|
+
* interpolation for smooth state transitions.
|
|
7
|
+
*
|
|
8
|
+
* @module
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import { Effect, Stream, Queue } from 'effect';
|
|
12
|
+
import type { Millis } from './brands.js';
|
|
13
|
+
import { Millis as mkMillis } from './brands.js';
|
|
14
|
+
import type { Easing } from './easing.js';
|
|
15
|
+
import { Easing as EasingImpl } from './easing.js';
|
|
16
|
+
import type { Scheduler } from './scheduler.js';
|
|
17
|
+
import { Scheduler as SchedulerImpl } from './scheduler.js';
|
|
18
|
+
import { interpolate } from './interpolate.js';
|
|
19
|
+
|
|
20
|
+
interface AnimationFrameShape {
|
|
21
|
+
readonly progress: number;
|
|
22
|
+
readonly eased: number;
|
|
23
|
+
readonly elapsed: Millis;
|
|
24
|
+
readonly timestamp: number;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Create a finite animation stream driven by rAF.
|
|
29
|
+
* Emits AnimationFrame values from progress 0 to 1.
|
|
30
|
+
*/
|
|
31
|
+
function _run(config: {
|
|
32
|
+
duration: Millis;
|
|
33
|
+
easing?: Easing.Fn;
|
|
34
|
+
scheduler?: Scheduler.Shape;
|
|
35
|
+
}): Stream.Stream<AnimationFrameShape> {
|
|
36
|
+
const { duration, easing = EasingImpl.linear } = config;
|
|
37
|
+
|
|
38
|
+
if (duration <= 0) {
|
|
39
|
+
return Stream.succeed<AnimationFrameShape>({
|
|
40
|
+
progress: 1,
|
|
41
|
+
eased: easing(1),
|
|
42
|
+
elapsed: mkMillis(0),
|
|
43
|
+
timestamp: 0,
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
return Stream.callback<AnimationFrameShape>((queue) =>
|
|
48
|
+
Effect.gen(function* () {
|
|
49
|
+
const sched =
|
|
50
|
+
config.scheduler ?? (typeof requestAnimationFrame !== 'undefined' ? SchedulerImpl.raf() : SchedulerImpl.noop());
|
|
51
|
+
|
|
52
|
+
let startTime: number | null = null;
|
|
53
|
+
let schedId: number;
|
|
54
|
+
|
|
55
|
+
const tick = (timestamp: number): void => {
|
|
56
|
+
if (startTime === null) startTime = timestamp;
|
|
57
|
+
const elapsed = timestamp - startTime;
|
|
58
|
+
const progress = Math.min(elapsed / duration, 1);
|
|
59
|
+
const eased = easing(progress);
|
|
60
|
+
|
|
61
|
+
Queue.offerUnsafe(queue, {
|
|
62
|
+
progress,
|
|
63
|
+
eased,
|
|
64
|
+
elapsed: mkMillis(elapsed),
|
|
65
|
+
timestamp,
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
if (progress >= 1) {
|
|
69
|
+
Queue.endUnsafe(queue);
|
|
70
|
+
} else {
|
|
71
|
+
schedId = sched.schedule(tick);
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
schedId = sched.schedule(tick);
|
|
76
|
+
|
|
77
|
+
yield* Effect.addFinalizer(() =>
|
|
78
|
+
Effect.sync(() => {
|
|
79
|
+
sched.cancel(schedId);
|
|
80
|
+
}),
|
|
81
|
+
);
|
|
82
|
+
|
|
83
|
+
yield* Effect.never;
|
|
84
|
+
}),
|
|
85
|
+
);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Animation — rAF-driven value interpolation exposed as an `Effect.Stream`.
|
|
90
|
+
* Pairs a duration and easing with either primitive lerping or the generic
|
|
91
|
+
* {@link Animation.interpolate} over numeric records.
|
|
92
|
+
*/
|
|
93
|
+
export const Animation = {
|
|
94
|
+
/** Run an rAF animation that yields a stream of {@link Animation.Frame}. */
|
|
95
|
+
run: _run,
|
|
96
|
+
/** Shallow numeric-record interpolator; non-numeric keys pass through. */
|
|
97
|
+
interpolate,
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
export declare namespace Animation {
|
|
101
|
+
/** Structural shape of a single frame emitted by {@link Animation.run}. */
|
|
102
|
+
export type Frame = AnimationFrameShape;
|
|
103
|
+
}
|
package/src/assembly.ts
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Assembly catalog — 7-arm closed vocabulary of capsule kinds.
|
|
3
|
+
* `defineCapsule` validates a contract, computes its content address,
|
|
4
|
+
* and registers it in the module-level catalog for the compiler to walk.
|
|
5
|
+
*
|
|
6
|
+
* @module
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import type { CapsuleContract, AssemblyKind } from './capsule.js';
|
|
10
|
+
import type { ContentAddress } from './brands.js';
|
|
11
|
+
import { fnv1aBytes } from './fnv.js';
|
|
12
|
+
import { CanonicalCbor } from './cbor.js';
|
|
13
|
+
import { Diagnostics } from './diagnostics.js';
|
|
14
|
+
|
|
15
|
+
/** A capsule declaration plus its content-addressed id. */
|
|
16
|
+
export interface CapsuleDef<K extends AssemblyKind, In, Out, R>
|
|
17
|
+
extends CapsuleContract<K, In, Out, R> {
|
|
18
|
+
readonly id: ContentAddress;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const catalog: CapsuleDef<AssemblyKind, unknown, unknown, unknown>[] = [];
|
|
22
|
+
|
|
23
|
+
function computeId(
|
|
24
|
+
contract: Omit<CapsuleContract<AssemblyKind, unknown, unknown, unknown>, 'id'>,
|
|
25
|
+
): ContentAddress {
|
|
26
|
+
// ADR-0003: route through CanonicalCbor to obtain a deterministic byte
|
|
27
|
+
// sequence (RFC 8949 §4.2.1) before hashing. Stable across key order,
|
|
28
|
+
// platform endianness, and stringification quirks.
|
|
29
|
+
const canonicalBytes = CanonicalCbor.encode({
|
|
30
|
+
kind: contract._kind,
|
|
31
|
+
name: contract.name,
|
|
32
|
+
site: contract.site,
|
|
33
|
+
budgets: contract.budgets,
|
|
34
|
+
capabilities: contract.capabilities,
|
|
35
|
+
invariantNames: contract.invariants.map((i) => i.name),
|
|
36
|
+
});
|
|
37
|
+
return fnv1aBytes(canonicalBytes);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Declare a capsule. Validates shape, computes content address,
|
|
42
|
+
* registers in the module-level catalog, returns a typed def.
|
|
43
|
+
* No runtime behavior beyond registration — behavior comes from
|
|
44
|
+
* the harness/compiler walking the catalog.
|
|
45
|
+
*/
|
|
46
|
+
export function defineCapsule<K extends AssemblyKind, In, Out, R>(
|
|
47
|
+
decl: Omit<CapsuleContract<K, In, Out, R>, 'id'>,
|
|
48
|
+
): CapsuleDef<K, In, Out, R> {
|
|
49
|
+
// For pureTransform capsules: omitting `run` downgrades the generated
|
|
50
|
+
// harness test to `it.skip` (Task 8 honest-skip discipline). Warn so
|
|
51
|
+
// contributors notice rather than silently skip property tests.
|
|
52
|
+
// Other arms don't yet have a wired runtime channel — see ADR-TODO.
|
|
53
|
+
if (decl._kind === 'pureTransform' && decl.invariants.length > 0 && decl.run === undefined) {
|
|
54
|
+
Diagnostics.warn({
|
|
55
|
+
source: 'defineCapsule',
|
|
56
|
+
code: 'pure_transform_missing_run',
|
|
57
|
+
message:
|
|
58
|
+
`pureTransform capsule "${decl.name}" declares ${decl.invariants.length} invariant(s) but no ` +
|
|
59
|
+
'`run` function — invariants are type-only without one. Add `run: (input) => ...` to enable runtime validation against your invariants.',
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
const id = computeId(decl as Omit<CapsuleContract<AssemblyKind, unknown, unknown, unknown>, 'id'>);
|
|
63
|
+
const def = { ...decl, id } as CapsuleDef<K, In, Out, R>;
|
|
64
|
+
catalog.push(def as CapsuleDef<AssemblyKind, unknown, unknown, unknown>);
|
|
65
|
+
return def;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/** Read-only snapshot of all registered capsules. */
|
|
69
|
+
export function getCapsuleCatalog(): readonly CapsuleDef<AssemblyKind, unknown, unknown, unknown>[] {
|
|
70
|
+
return catalog.slice();
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/** Clear the registry. Intended for tests and hot-reload only. */
|
|
74
|
+
export function resetCapsuleCatalog(): void {
|
|
75
|
+
catalog.length = 0;
|
|
76
|
+
}
|