@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.
Files changed (372) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +19 -0
  3. package/dist/addressed-digest.d.ts +15 -0
  4. package/dist/addressed-digest.d.ts.map +1 -0
  5. package/dist/addressed-digest.js +35 -0
  6. package/dist/addressed-digest.js.map +1 -0
  7. package/dist/animation.d.ts +46 -0
  8. package/dist/animation.d.ts.map +1 -0
  9. package/dist/animation.js +70 -0
  10. package/dist/animation.js.map +1 -0
  11. package/dist/assembly.d.ts +25 -0
  12. package/dist/assembly.d.ts.map +1 -0
  13. package/dist/assembly.js +58 -0
  14. package/dist/assembly.js.map +1 -0
  15. package/dist/av-bridge.d.ts +74 -0
  16. package/dist/av-bridge.d.ts.map +1 -0
  17. package/dist/av-bridge.js +107 -0
  18. package/dist/av-bridge.js.map +1 -0
  19. package/dist/av-renderer.d.ts +56 -0
  20. package/dist/av-renderer.d.ts.map +1 -0
  21. package/dist/av-renderer.js +65 -0
  22. package/dist/av-renderer.js.map +1 -0
  23. package/dist/blend.d.ts +61 -0
  24. package/dist/blend.d.ts.map +1 -0
  25. package/dist/blend.js +100 -0
  26. package/dist/blend.js.map +1 -0
  27. package/dist/boundary.d.ts +154 -0
  28. package/dist/boundary.d.ts.map +1 -0
  29. package/dist/boundary.js +269 -0
  30. package/dist/boundary.js.map +1 -0
  31. package/dist/brands.d.ts +63 -0
  32. package/dist/brands.d.ts.map +1 -0
  33. package/dist/brands.js +31 -0
  34. package/dist/brands.js.map +1 -0
  35. package/dist/caps.d.ts +49 -0
  36. package/dist/caps.d.ts.map +1 -0
  37. package/dist/caps.js +73 -0
  38. package/dist/caps.js.map +1 -0
  39. package/dist/capsule.d.ts +77 -0
  40. package/dist/capsule.d.ts.map +1 -0
  41. package/dist/capsule.js +18 -0
  42. package/dist/capsule.js.map +1 -0
  43. package/dist/capsules/boundary-evaluate.d.ts +28 -0
  44. package/dist/capsules/boundary-evaluate.d.ts.map +1 -0
  45. package/dist/capsules/boundary-evaluate.js +117 -0
  46. package/dist/capsules/boundary-evaluate.js.map +1 -0
  47. package/dist/capsules/canonical-cbor.d.ts +13 -0
  48. package/dist/capsules/canonical-cbor.d.ts.map +1 -0
  49. package/dist/capsules/canonical-cbor.js +60 -0
  50. package/dist/capsules/canonical-cbor.js.map +1 -0
  51. package/dist/capsules/token-buffer.d.ts +24 -0
  52. package/dist/capsules/token-buffer.d.ts.map +1 -0
  53. package/dist/capsules/token-buffer.js +53 -0
  54. package/dist/capsules/token-buffer.js.map +1 -0
  55. package/dist/capture.d.ts +40 -0
  56. package/dist/capture.d.ts.map +1 -0
  57. package/dist/capture.js +10 -0
  58. package/dist/capture.js.map +1 -0
  59. package/dist/cbor.d.ts +33 -0
  60. package/dist/cbor.d.ts.map +1 -0
  61. package/dist/cbor.js +179 -0
  62. package/dist/cbor.js.map +1 -0
  63. package/dist/cell.d.ts +53 -0
  64. package/dist/cell.d.ts.map +1 -0
  65. package/dist/cell.js +83 -0
  66. package/dist/cell.js.map +1 -0
  67. package/dist/codec.d.ts +30 -0
  68. package/dist/codec.d.ts.map +1 -0
  69. package/dist/codec.js +25 -0
  70. package/dist/codec.js.map +1 -0
  71. package/dist/component.d.ts +52 -0
  72. package/dist/component.d.ts.map +1 -0
  73. package/dist/component.js +44 -0
  74. package/dist/component.js.map +1 -0
  75. package/dist/composable.d.ts +76 -0
  76. package/dist/composable.d.ts.map +1 -0
  77. package/dist/composable.js +221 -0
  78. package/dist/composable.js.map +1 -0
  79. package/dist/compositor-pool.d.ts +74 -0
  80. package/dist/compositor-pool.d.ts.map +1 -0
  81. package/dist/compositor-pool.js +119 -0
  82. package/dist/compositor-pool.js.map +1 -0
  83. package/dist/compositor.d.ts +90 -0
  84. package/dist/compositor.d.ts.map +1 -0
  85. package/dist/compositor.js +278 -0
  86. package/dist/compositor.js.map +1 -0
  87. package/dist/config.d.ts +72 -0
  88. package/dist/config.d.ts.map +1 -0
  89. package/dist/config.js +97 -0
  90. package/dist/config.js.map +1 -0
  91. package/dist/dag.d.ts +251 -0
  92. package/dist/dag.d.ts.map +1 -0
  93. package/dist/dag.js +450 -0
  94. package/dist/dag.js.map +1 -0
  95. package/dist/defaults.d.ts +45 -0
  96. package/dist/defaults.d.ts.map +1 -0
  97. package/dist/defaults.js +45 -0
  98. package/dist/defaults.js.map +1 -0
  99. package/dist/derived.d.ts +34 -0
  100. package/dist/derived.d.ts.map +1 -0
  101. package/dist/derived.js +101 -0
  102. package/dist/derived.js.map +1 -0
  103. package/dist/diagnostics.d.ts +77 -0
  104. package/dist/diagnostics.d.ts.map +1 -0
  105. package/dist/diagnostics.js +122 -0
  106. package/dist/diagnostics.js.map +1 -0
  107. package/dist/dirty.d.ts +55 -0
  108. package/dist/dirty.d.ts.map +1 -0
  109. package/dist/dirty.js +80 -0
  110. package/dist/dirty.js.map +1 -0
  111. package/dist/easing.d.ts +55 -0
  112. package/dist/easing.d.ts.map +1 -0
  113. package/dist/easing.js +291 -0
  114. package/dist/easing.js.map +1 -0
  115. package/dist/ecs.d.ts +105 -0
  116. package/dist/ecs.d.ts.map +1 -0
  117. package/dist/ecs.js +245 -0
  118. package/dist/ecs.js.map +1 -0
  119. package/dist/fnv.d.ts +14 -0
  120. package/dist/fnv.d.ts.map +1 -0
  121. package/dist/fnv.js +28 -0
  122. package/dist/fnv.js.map +1 -0
  123. package/dist/frame-budget.d.ts +73 -0
  124. package/dist/frame-budget.d.ts.map +1 -0
  125. package/dist/frame-budget.js +114 -0
  126. package/dist/frame-budget.js.map +1 -0
  127. package/dist/gen-frame.d.ts +102 -0
  128. package/dist/gen-frame.d.ts.map +1 -0
  129. package/dist/gen-frame.js +121 -0
  130. package/dist/gen-frame.js.map +1 -0
  131. package/dist/harness/arbitrary-from-schema.d.ts +28 -0
  132. package/dist/harness/arbitrary-from-schema.d.ts.map +1 -0
  133. package/dist/harness/arbitrary-from-schema.js +262 -0
  134. package/dist/harness/arbitrary-from-schema.js.map +1 -0
  135. package/dist/harness/cached-projection.d.ts +19 -0
  136. package/dist/harness/cached-projection.d.ts.map +1 -0
  137. package/dist/harness/cached-projection.js +39 -0
  138. package/dist/harness/cached-projection.js.map +1 -0
  139. package/dist/harness/index.d.ts +16 -0
  140. package/dist/harness/index.d.ts.map +1 -0
  141. package/dist/harness/index.js +15 -0
  142. package/dist/harness/index.js.map +1 -0
  143. package/dist/harness/policy-gate.d.ts +18 -0
  144. package/dist/harness/policy-gate.d.ts.map +1 -0
  145. package/dist/harness/policy-gate.js +46 -0
  146. package/dist/harness/policy-gate.js.map +1 -0
  147. package/dist/harness/pure-transform.d.ts +42 -0
  148. package/dist/harness/pure-transform.d.ts.map +1 -0
  149. package/dist/harness/pure-transform.js +76 -0
  150. package/dist/harness/pure-transform.js.map +1 -0
  151. package/dist/harness/receipted-mutation.d.ts +23 -0
  152. package/dist/harness/receipted-mutation.d.ts.map +1 -0
  153. package/dist/harness/receipted-mutation.js +52 -0
  154. package/dist/harness/receipted-mutation.js.map +1 -0
  155. package/dist/harness/scene-composition.d.ts +19 -0
  156. package/dist/harness/scene-composition.d.ts.map +1 -0
  157. package/dist/harness/scene-composition.js +47 -0
  158. package/dist/harness/scene-composition.js.map +1 -0
  159. package/dist/harness/site-adapter.d.ts +18 -0
  160. package/dist/harness/site-adapter.d.ts.map +1 -0
  161. package/dist/harness/site-adapter.js +38 -0
  162. package/dist/harness/site-adapter.js.map +1 -0
  163. package/dist/harness/state-machine.d.ts +19 -0
  164. package/dist/harness/state-machine.d.ts.map +1 -0
  165. package/dist/harness/state-machine.js +44 -0
  166. package/dist/harness/state-machine.js.map +1 -0
  167. package/dist/hlc.d.ts +99 -0
  168. package/dist/hlc.d.ts.map +1 -0
  169. package/dist/hlc.js +219 -0
  170. package/dist/hlc.js.map +1 -0
  171. package/dist/index.d.ts +104 -0
  172. package/dist/index.d.ts.map +1 -0
  173. package/dist/index.js +137 -0
  174. package/dist/index.js.map +1 -0
  175. package/dist/interpolate.d.ts +14 -0
  176. package/dist/interpolate.d.ts.map +1 -0
  177. package/dist/interpolate.js +31 -0
  178. package/dist/interpolate.js.map +1 -0
  179. package/dist/live-cell.d.ts +46 -0
  180. package/dist/live-cell.d.ts.map +1 -0
  181. package/dist/live-cell.js +154 -0
  182. package/dist/live-cell.js.map +1 -0
  183. package/dist/op.d.ts +58 -0
  184. package/dist/op.d.ts.map +1 -0
  185. package/dist/op.js +171 -0
  186. package/dist/op.js.map +1 -0
  187. package/dist/plan.d.ts +195 -0
  188. package/dist/plan.d.ts.map +1 -0
  189. package/dist/plan.js +211 -0
  190. package/dist/plan.js.map +1 -0
  191. package/dist/protocol.d.ts +33 -0
  192. package/dist/protocol.d.ts.map +1 -0
  193. package/dist/protocol.js +10 -0
  194. package/dist/protocol.js.map +1 -0
  195. package/dist/quantizer-types.d.ts +28 -0
  196. package/dist/quantizer-types.d.ts.map +1 -0
  197. package/dist/quantizer-types.js +9 -0
  198. package/dist/quantizer-types.js.map +1 -0
  199. package/dist/receipt.d.ts +294 -0
  200. package/dist/receipt.d.ts.map +1 -0
  201. package/dist/receipt.js +352 -0
  202. package/dist/receipt.js.map +1 -0
  203. package/dist/runtime-coordinator.d.ts +75 -0
  204. package/dist/runtime-coordinator.d.ts.map +1 -0
  205. package/dist/runtime-coordinator.js +149 -0
  206. package/dist/runtime-coordinator.js.map +1 -0
  207. package/dist/scheduler.d.ts +58 -0
  208. package/dist/scheduler.d.ts.map +1 -0
  209. package/dist/scheduler.js +109 -0
  210. package/dist/scheduler.js.map +1 -0
  211. package/dist/ship-capsule.d.ts +54 -0
  212. package/dist/ship-capsule.d.ts.map +1 -0
  213. package/dist/ship-capsule.js +142 -0
  214. package/dist/ship-capsule.js.map +1 -0
  215. package/dist/ship-manifest.d.ts +45 -0
  216. package/dist/ship-manifest.d.ts.map +1 -0
  217. package/dist/ship-manifest.js +175 -0
  218. package/dist/ship-manifest.js.map +1 -0
  219. package/dist/signal.d.ts +149 -0
  220. package/dist/signal.d.ts.map +1 -0
  221. package/dist/signal.js +277 -0
  222. package/dist/signal.js.map +1 -0
  223. package/dist/speculative.d.ts +67 -0
  224. package/dist/speculative.d.ts.map +1 -0
  225. package/dist/speculative.js +139 -0
  226. package/dist/speculative.js.map +1 -0
  227. package/dist/store.d.ts +39 -0
  228. package/dist/store.d.ts.map +1 -0
  229. package/dist/store.js +42 -0
  230. package/dist/store.js.map +1 -0
  231. package/dist/style.d.ts +119 -0
  232. package/dist/style.d.ts.map +1 -0
  233. package/dist/style.js +168 -0
  234. package/dist/style.js.map +1 -0
  235. package/dist/testing.d.ts +14 -0
  236. package/dist/testing.d.ts.map +1 -0
  237. package/dist/testing.js +14 -0
  238. package/dist/testing.js.map +1 -0
  239. package/dist/theme.d.ts +78 -0
  240. package/dist/theme.d.ts.map +1 -0
  241. package/dist/theme.js +109 -0
  242. package/dist/theme.js.map +1 -0
  243. package/dist/timeline.d.ts +45 -0
  244. package/dist/timeline.d.ts.map +1 -0
  245. package/dist/timeline.js +101 -0
  246. package/dist/timeline.js.map +1 -0
  247. package/dist/token-buffer.d.ts +43 -0
  248. package/dist/token-buffer.d.ts.map +1 -0
  249. package/dist/token-buffer.js +112 -0
  250. package/dist/token-buffer.js.map +1 -0
  251. package/dist/token.d.ts +107 -0
  252. package/dist/token.d.ts.map +1 -0
  253. package/dist/token.js +143 -0
  254. package/dist/token.js.map +1 -0
  255. package/dist/tuple.d.ts +16 -0
  256. package/dist/tuple.d.ts.map +1 -0
  257. package/dist/tuple.js +16 -0
  258. package/dist/tuple.js.map +1 -0
  259. package/dist/type-utils.d.ts +41 -0
  260. package/dist/type-utils.d.ts.map +1 -0
  261. package/dist/type-utils.js +10 -0
  262. package/dist/type-utils.js.map +1 -0
  263. package/dist/typed-ref.d.ts +50 -0
  264. package/dist/typed-ref.d.ts.map +1 -0
  265. package/dist/typed-ref.js +59 -0
  266. package/dist/typed-ref.js.map +1 -0
  267. package/dist/ui-quality.d.ts +50 -0
  268. package/dist/ui-quality.d.ts.map +1 -0
  269. package/dist/ui-quality.js +64 -0
  270. package/dist/ui-quality.js.map +1 -0
  271. package/dist/validation-error.d.ts +25 -0
  272. package/dist/validation-error.d.ts.map +1 -0
  273. package/dist/validation-error.js +32 -0
  274. package/dist/validation-error.js.map +1 -0
  275. package/dist/vector-clock.d.ts +46 -0
  276. package/dist/vector-clock.d.ts.map +1 -0
  277. package/dist/vector-clock.js +91 -0
  278. package/dist/vector-clock.js.map +1 -0
  279. package/dist/video.d.ts +62 -0
  280. package/dist/video.d.ts.map +1 -0
  281. package/dist/video.js +59 -0
  282. package/dist/video.js.map +1 -0
  283. package/dist/wasm-dispatch.d.ts +52 -0
  284. package/dist/wasm-dispatch.d.ts.map +1 -0
  285. package/dist/wasm-dispatch.js +204 -0
  286. package/dist/wasm-dispatch.js.map +1 -0
  287. package/dist/wasm-fallback.d.ts +19 -0
  288. package/dist/wasm-fallback.d.ts.map +1 -0
  289. package/dist/wasm-fallback.js +93 -0
  290. package/dist/wasm-fallback.js.map +1 -0
  291. package/dist/wire.d.ts +49 -0
  292. package/dist/wire.d.ts.map +1 -0
  293. package/dist/wire.js +201 -0
  294. package/dist/wire.js.map +1 -0
  295. package/dist/zap.d.ts +42 -0
  296. package/dist/zap.d.ts.map +1 -0
  297. package/dist/zap.js +172 -0
  298. package/dist/zap.js.map +1 -0
  299. package/package.json +71 -0
  300. package/src/addressed-digest.ts +48 -0
  301. package/src/animation.ts +103 -0
  302. package/src/assembly.ts +76 -0
  303. package/src/av-bridge.ts +161 -0
  304. package/src/av-renderer.ts +118 -0
  305. package/src/blend.ts +135 -0
  306. package/src/boundary.ts +363 -0
  307. package/src/brands.ts +86 -0
  308. package/src/caps.ts +100 -0
  309. package/src/capsule.ts +95 -0
  310. package/src/capsules/boundary-evaluate.ts +128 -0
  311. package/src/capsules/canonical-cbor.ts +60 -0
  312. package/src/capsules/token-buffer.ts +57 -0
  313. package/src/capture.ts +48 -0
  314. package/src/cbor.ts +199 -0
  315. package/src/cell.ts +130 -0
  316. package/src/codec.ts +39 -0
  317. package/src/component.ts +102 -0
  318. package/src/composable.ts +328 -0
  319. package/src/compositor-pool.ts +162 -0
  320. package/src/compositor.ts +387 -0
  321. package/src/config.ts +157 -0
  322. package/src/dag.ts +527 -0
  323. package/src/defaults.ts +60 -0
  324. package/src/derived.ts +164 -0
  325. package/src/diagnostics.ts +186 -0
  326. package/src/dirty.ts +101 -0
  327. package/src/easing.ts +334 -0
  328. package/src/ecs.ts +382 -0
  329. package/src/fnv.ts +31 -0
  330. package/src/frame-budget.ts +149 -0
  331. package/src/gen-frame.ts +229 -0
  332. package/src/harness/arbitrary-from-schema.ts +270 -0
  333. package/src/harness/cached-projection.ts +46 -0
  334. package/src/harness/index.ts +16 -0
  335. package/src/harness/policy-gate.ts +51 -0
  336. package/src/harness/pure-transform.ts +121 -0
  337. package/src/harness/receipted-mutation.ts +59 -0
  338. package/src/harness/scene-composition.ts +54 -0
  339. package/src/harness/site-adapter.ts +43 -0
  340. package/src/harness/state-machine.ts +49 -0
  341. package/src/hlc.ts +238 -0
  342. package/src/index.ts +274 -0
  343. package/src/interpolate.ts +37 -0
  344. package/src/live-cell.ts +199 -0
  345. package/src/op.ts +233 -0
  346. package/src/plan.ts +317 -0
  347. package/src/protocol.ts +49 -0
  348. package/src/quantizer-types.ts +29 -0
  349. package/src/receipt.ts +444 -0
  350. package/src/runtime-coordinator.ts +230 -0
  351. package/src/scheduler.ts +161 -0
  352. package/src/ship-capsule.ts +191 -0
  353. package/src/signal.ts +345 -0
  354. package/src/speculative.ts +186 -0
  355. package/src/store.ts +77 -0
  356. package/src/style.ts +249 -0
  357. package/src/testing.ts +14 -0
  358. package/src/theme.ts +153 -0
  359. package/src/timeline.ts +146 -0
  360. package/src/token-buffer.ts +151 -0
  361. package/src/token.ts +197 -0
  362. package/src/tuple.ts +19 -0
  363. package/src/type-utils.ts +48 -0
  364. package/src/typed-ref.ts +79 -0
  365. package/src/ui-quality.ts +105 -0
  366. package/src/validation-error.ts +34 -0
  367. package/src/vector-clock.ts +111 -0
  368. package/src/video.ts +106 -0
  369. package/src/wasm-dispatch.ts +300 -0
  370. package/src/wasm-fallback.ts +102 -0
  371. package/src/wire.ts +274 -0
  372. package/src/zap.ts +241 -0
@@ -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
@@ -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 };
@@ -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
+ }
@@ -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
+ }