Store primitives + event-bridge + client? for isomorphic nav
- def-store/use-store/clear-stores: OCaml primitives with global mutable registry. Bypasses env scoping issues that prevented SX-level stores from persisting across bytecode module boundaries. - client? primitive: _is_client ref (false on server, true in browser). Registered in primitives table for CALL_PRIM compatibility. - Event-bridge island: rewritten to use document-level addEventListener via effect + host-callback, fixing container-ref timing issue. - Header island: uses def-store for idx/shade signals when client? is true, plain signals when false (SSR compatibility). - web-signals.sx: SX store definitions removed, OCaml primitives replace. Isomorphic nav still fixme — client? works from K.eval but the JIT "Not callable: nil" bug prevents proper primitive resolution during render-to-dom hydration. Needs JIT investigation. 100 passed, 1 skipped, 0 failed. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -35,25 +35,9 @@
|
||||
;; Named stores — page-level signal containers
|
||||
;; --------------------------------------------------------------------------
|
||||
|
||||
(define *store-registry* (dict))
|
||||
|
||||
(define def-store :effects [mutation]
|
||||
(fn ((name :as string) (init-fn :as lambda))
|
||||
(let ((registry *store-registry*))
|
||||
(when (not (has-key? registry name))
|
||||
(set! *store-registry* (assoc registry name (cek-call init-fn nil))))
|
||||
(get *store-registry* name))))
|
||||
|
||||
(define use-store :effects []
|
||||
(fn ((name :as string))
|
||||
(if (has-key? *store-registry* name)
|
||||
(get *store-registry* name)
|
||||
(error (str "Store not found: " name
|
||||
". Call (def-store ...) before (use-store ...).")))))
|
||||
|
||||
(define clear-stores :effects [mutation]
|
||||
(fn ()
|
||||
(set! *store-registry* (dict))))
|
||||
;; def-store, use-store, clear-stores are now OCaml primitives
|
||||
;; (sx_primitives.ml) with a global mutable registry that survives
|
||||
;; env scoping across bytecode modules and island hydration.
|
||||
|
||||
|
||||
;; --------------------------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user