@pyreon/solid-compat 0.1.1 → 0.1.2

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/README.md CHANGED
@@ -10,7 +10,7 @@ bun add @pyreon/solid-compat
10
10
 
11
11
  ## Quick Start
12
12
 
13
- ```ts
13
+ ```tsx
14
14
  // Replace:
15
15
  // import { createSignal, createEffect } from "solid-js"
16
16
  // With:
@@ -23,6 +23,88 @@ function Counter() {
23
23
  }
24
24
  ```
25
25
 
26
+ ### Derived State and Memos
27
+
28
+ ```tsx
29
+ import { createSignal, createMemo } from "@pyreon/solid-compat"
30
+
31
+ function PriceCalculator() {
32
+ const [price, setPrice] = createSignal(100)
33
+ const [quantity, setQuantity] = createSignal(1)
34
+ const total = createMemo(() => price() * quantity())
35
+
36
+ return (
37
+ <div>
38
+ <input
39
+ type="number"
40
+ value={price()}
41
+ onInput={(e) => setPrice(Number(e.currentTarget.value))}
42
+ />
43
+ <input
44
+ type="number"
45
+ value={quantity()}
46
+ onInput={(e) => setQuantity(Number(e.currentTarget.value))}
47
+ />
48
+ <p>Total: ${total()}</p>
49
+ </div>
50
+ )
51
+ }
52
+ ```
53
+
54
+ ### Control Flow Components
55
+
56
+ ```tsx
57
+ import { createSignal } from "@pyreon/solid-compat"
58
+ import { Show, For } from "@pyreon/solid-compat"
59
+
60
+ function TodoList() {
61
+ const [todos, setTodos] = createSignal([
62
+ { id: 1, text: "Learn Pyreon", done: false },
63
+ { id: 2, text: "Build app", done: false },
64
+ ])
65
+ const [showDone, setShowDone] = createSignal(false)
66
+
67
+ return (
68
+ <div>
69
+ <button onClick={() => setShowDone((s) => !s)}>
70
+ {showDone() ? "Hide" : "Show"} completed
71
+ </button>
72
+ <For each={todos()} by={(t) => t.id}>
73
+ {(todo) => (
74
+ <Show when={showDone() || !todo.done}>
75
+ <p>{todo.text}</p>
76
+ </Show>
77
+ )}
78
+ </For>
79
+ </div>
80
+ )
81
+ }
82
+ ```
83
+
84
+ ### Context and Dependency Injection
85
+
86
+ ```tsx
87
+ import { createContext, useContext } from "@pyreon/solid-compat"
88
+ import { createSignal } from "@pyreon/solid-compat"
89
+
90
+ const CounterContext = createContext({ count: () => 0, increment: () => {} })
91
+
92
+ function CounterProvider(props: { children: any }) {
93
+ const [count, setCount] = createSignal(0)
94
+ const value = { count, increment: () => setCount((c) => c + 1) }
95
+ return (
96
+ <CounterContext.Provider value={value}>
97
+ {props.children}
98
+ </CounterContext.Provider>
99
+ )
100
+ }
101
+
102
+ function Display() {
103
+ const { count, increment } = useContext(CounterContext)
104
+ return <button onClick={increment}>Clicks: {count()}</button>
105
+ }
106
+ ```
107
+
26
108
  ## Key Differences from SolidJS
27
109
 
28
110
  - **Same mental model.** Pyreon's reactivity is signal-based, just like Solid.
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["pyreonSignal","pyreonComputed"],"sources":["../src/index.ts"],"sourcesContent":["// @pyreon/solid-compat — SolidJS-compatible API shims running on Pyreon's reactive engine\n\nimport type { ComponentFn, Props, VNodeChild } from \"@pyreon/core\"\nimport {\n ErrorBoundary,\n For,\n Match,\n createContext as pyreonCreateContext,\n onMount as pyreonOnMount,\n onUnmount as pyreonOnUnmount,\n useContext as pyreonUseContext,\n Show,\n Suspense,\n Switch,\n} from \"@pyreon/core\"\nimport {\n type EffectScope,\n effectScope,\n getCurrentScope,\n batch as pyreonBatch,\n computed as pyreonComputed,\n createSelector as pyreonCreateSelector,\n effect as pyreonEffect,\n signal as pyreonSignal,\n runUntracked,\n setCurrentScope,\n} from \"@pyreon/reactivity\"\n\n// ─── createSignal ────────────────────────────────────────────────────────────\n\nexport type SignalGetter<T> = () => T\nexport type SignalSetter<T> = (v: T | ((prev: T) => T)) => void\n\nexport function createSignal<T>(initialValue: T): [SignalGetter<T>, SignalSetter<T>] {\n const s = pyreonSignal<T>(initialValue)\n\n const getter: SignalGetter<T> = () => s()\n\n const setter: SignalSetter<T> = (v) => {\n if (typeof v === \"function\") {\n s.update(v as (prev: T) => T)\n } else {\n s.set(v)\n }\n }\n\n return [getter, setter]\n}\n\n// ─── createEffect ────────────────────────────────────────────────────────────\n\nexport function createEffect(fn: () => void): void {\n pyreonEffect(fn)\n}\n\n// ─── createRenderEffect ──────────────────────────────────────────────────────\n\nexport function createRenderEffect(fn: () => void): void {\n pyreonEffect(fn)\n}\n\n// ─── createComputed (legacy Solid API) ───────────────────────────────────────\n\nexport { createEffect as createComputed }\n\n// ─── createMemo ──────────────────────────────────────────────────────────────\n\nexport function createMemo<T>(fn: () => T): () => T {\n const c = pyreonComputed(fn)\n return () => c()\n}\n\n// ─── createRoot ──────────────────────────────────────────────────────────────\n\nexport function createRoot<T>(fn: (dispose: () => void) => T): T {\n const scope = effectScope()\n const prev = getCurrentScope()\n setCurrentScope(scope)\n try {\n return fn(() => scope.stop())\n } finally {\n setCurrentScope(prev)\n }\n}\n\n// ─── on ──────────────────────────────────────────────────────────────────────\n\ntype AccessorArray = readonly (() => unknown)[]\ntype OnEffectFunction<D, V> = (input: D, prevInput: D | undefined, prev: V | undefined) => V\n\nexport function on<S extends (() => unknown) | AccessorArray, V>(\n deps: S,\n fn: OnEffectFunction<\n S extends () => infer R ? R : S extends readonly (() => infer R)[] ? R[] : never,\n V\n >,\n): () => V | undefined {\n type D = S extends () => infer R ? R : S extends readonly (() => infer R)[] ? R[] : never\n\n let prevInput: D | undefined\n let prevValue: V | undefined\n let initialized = false\n\n return () => {\n // Read dependencies to register tracking\n const input: D = (\n Array.isArray(deps) ? (deps as (() => unknown)[]).map((d) => d()) : (deps as () => unknown)()\n ) as D\n\n if (!initialized) {\n initialized = true\n prevValue = fn(input, undefined, undefined)\n prevInput = input\n return prevValue\n }\n\n const result = runUntracked(() => fn(input, prevInput, prevValue))\n prevInput = input\n prevValue = result\n return result\n }\n}\n\n// ─── batch ───────────────────────────────────────────────────────────────────\n\nexport { pyreonBatch as batch }\n\n// ─── untrack ─────────────────────────────────────────────────────────────────\n\nexport { runUntracked as untrack }\n\n// ─── onMount / onCleanup ─────────────────────────────────────────────────────\n\nexport { pyreonOnMount as onMount }\nexport { pyreonOnUnmount as onCleanup }\n\n// ─── createSelector ──────────────────────────────────────────────────────────\n\nexport { pyreonCreateSelector as createSelector }\n\n// ─── mergeProps ──────────────────────────────────────────────────────────────\n\nexport function mergeProps<T extends object[]>(...sources: [...T]): T[number] {\n const target = {} as Record<PropertyKey, unknown>\n for (const source of sources) {\n const descriptors = Object.getOwnPropertyDescriptors(source)\n for (const key of Reflect.ownKeys(descriptors)) {\n const desc = descriptors[key as string]\n if (!desc) continue\n // Preserve getters for reactivity\n if (desc.get) {\n Object.defineProperty(target, key, {\n get: desc.get,\n enumerable: true,\n configurable: true,\n })\n } else {\n Object.defineProperty(target, key, {\n value: desc.value,\n writable: true,\n enumerable: true,\n configurable: true,\n })\n }\n }\n }\n return target as T[number]\n}\n\n// ─── splitProps ──────────────────────────────────────────────────────────────\n\nexport function splitProps<T extends Record<string, unknown>, K extends (keyof T)[]>(\n props: T,\n ...keys: K\n): [Pick<T, K[number]>, Omit<T, K[number]>] {\n const picked = {} as Pick<T, K[number]>\n const rest = {} as Record<string, unknown>\n const keySet = new Set<string>(keys.flat() as string[])\n\n const descriptors = Object.getOwnPropertyDescriptors(props)\n for (const key of Reflect.ownKeys(descriptors)) {\n const desc = descriptors[key as string]\n if (!desc) continue\n const target = typeof key === \"string\" && keySet.has(key) ? picked : rest\n if (desc.get) {\n Object.defineProperty(target, key, {\n get: desc.get,\n enumerable: true,\n configurable: true,\n })\n } else {\n Object.defineProperty(target, key, {\n value: desc.value,\n writable: true,\n enumerable: true,\n configurable: true,\n })\n }\n }\n\n return [picked, rest as Omit<T, K[number]>]\n}\n\n// ─── children ────────────────────────────────────────────────────────────────\n\nexport function children(fn: () => VNodeChild): () => VNodeChild {\n const memo = createMemo(() => {\n const result = fn()\n // Resolve function children (reactive getters)\n if (typeof result === \"function\") return (result as () => VNodeChild)()\n return result\n })\n return memo\n}\n\n// ─── lazy ────────────────────────────────────────────────────────────────────\n\nexport function lazy<P extends Props>(\n loader: () => Promise<{ default: ComponentFn<P> }>,\n): ComponentFn<P> & { preload: () => Promise<{ default: ComponentFn<P> }> } {\n let resolved: ComponentFn<P> | null = null\n let error: Error | null = null\n let promise: Promise<{ default: ComponentFn<P> }> | null = null\n\n const load = () => {\n if (!promise) {\n promise = loader()\n .then((mod) => {\n resolved = mod.default\n return mod\n })\n .catch((err) => {\n error = err instanceof Error ? err : new Error(String(err))\n // Allow retry on next render by resetting the promise\n promise = null\n throw error\n })\n }\n return promise\n }\n\n const LazyComponent = ((props: P) => {\n if (error) throw error\n if (!resolved) {\n // Throw the promise so Suspense can catch it\n throw load()\n }\n return resolved(props)\n }) as ComponentFn<P> & { preload: () => Promise<{ default: ComponentFn<P> }> }\n\n LazyComponent.preload = load\n\n return LazyComponent\n}\n\n// ─── createContext / useContext ───────────────────────────────────────────────\n\nexport { pyreonCreateContext as createContext }\nexport { pyreonUseContext as useContext }\n\n// ─── getOwner / runWithOwner ─────────────────────────────────────────────────\n\nexport function getOwner(): EffectScope | null {\n return getCurrentScope()\n}\n\nexport function runWithOwner<T>(owner: EffectScope | null, fn: () => T): T {\n const prev = getCurrentScope()\n setCurrentScope(owner)\n try {\n return fn()\n } finally {\n setCurrentScope(prev)\n }\n}\n\n// ─── Re-exports from @pyreon/core ──────────────────────────────────────────────\n\nexport { Show, Switch, Match, For, Suspense, ErrorBoundary }\n"],"mappings":";;;;AAiCA,SAAgB,aAAgB,cAAqD;CACnF,MAAM,IAAIA,OAAgB,aAAa;CAEvC,MAAM,eAAgC,GAAG;CAEzC,MAAM,UAA2B,MAAM;AACrC,MAAI,OAAO,MAAM,WACf,GAAE,OAAO,EAAoB;MAE7B,GAAE,IAAI,EAAE;;AAIZ,QAAO,CAAC,QAAQ,OAAO;;AAKzB,SAAgB,aAAa,IAAsB;AACjD,QAAa,GAAG;;AAKlB,SAAgB,mBAAmB,IAAsB;AACvD,QAAa,GAAG;;AASlB,SAAgB,WAAc,IAAsB;CAClD,MAAM,IAAIC,SAAe,GAAG;AAC5B,cAAa,GAAG;;AAKlB,SAAgB,WAAc,IAAmC;CAC/D,MAAM,QAAQ,aAAa;CAC3B,MAAM,OAAO,iBAAiB;AAC9B,iBAAgB,MAAM;AACtB,KAAI;AACF,SAAO,SAAS,MAAM,MAAM,CAAC;WACrB;AACR,kBAAgB,KAAK;;;AASzB,SAAgB,GACd,MACA,IAIqB;CAGrB,IAAI;CACJ,IAAI;CACJ,IAAI,cAAc;AAElB,cAAa;EAEX,MAAM,QACJ,MAAM,QAAQ,KAAK,GAAI,KAA2B,KAAK,MAAM,GAAG,CAAC,GAAI,MAAwB;AAG/F,MAAI,CAAC,aAAa;AAChB,iBAAc;AACd,eAAY,GAAG,OAAO,QAAW,OAAU;AAC3C,eAAY;AACZ,UAAO;;EAGT,MAAM,SAAS,mBAAmB,GAAG,OAAO,WAAW,UAAU,CAAC;AAClE,cAAY;AACZ,cAAY;AACZ,SAAO;;;AAuBX,SAAgB,WAA+B,GAAG,SAA4B;CAC5E,MAAM,SAAS,EAAE;AACjB,MAAK,MAAM,UAAU,SAAS;EAC5B,MAAM,cAAc,OAAO,0BAA0B,OAAO;AAC5D,OAAK,MAAM,OAAO,QAAQ,QAAQ,YAAY,EAAE;GAC9C,MAAM,OAAO,YAAY;AACzB,OAAI,CAAC,KAAM;AAEX,OAAI,KAAK,IACP,QAAO,eAAe,QAAQ,KAAK;IACjC,KAAK,KAAK;IACV,YAAY;IACZ,cAAc;IACf,CAAC;OAEF,QAAO,eAAe,QAAQ,KAAK;IACjC,OAAO,KAAK;IACZ,UAAU;IACV,YAAY;IACZ,cAAc;IACf,CAAC;;;AAIR,QAAO;;AAKT,SAAgB,WACd,OACA,GAAG,MACuC;CAC1C,MAAM,SAAS,EAAE;CACjB,MAAM,OAAO,EAAE;CACf,MAAM,SAAS,IAAI,IAAY,KAAK,MAAM,CAAa;CAEvD,MAAM,cAAc,OAAO,0BAA0B,MAAM;AAC3D,MAAK,MAAM,OAAO,QAAQ,QAAQ,YAAY,EAAE;EAC9C,MAAM,OAAO,YAAY;AACzB,MAAI,CAAC,KAAM;EACX,MAAM,SAAS,OAAO,QAAQ,YAAY,OAAO,IAAI,IAAI,GAAG,SAAS;AACrE,MAAI,KAAK,IACP,QAAO,eAAe,QAAQ,KAAK;GACjC,KAAK,KAAK;GACV,YAAY;GACZ,cAAc;GACf,CAAC;MAEF,QAAO,eAAe,QAAQ,KAAK;GACjC,OAAO,KAAK;GACZ,UAAU;GACV,YAAY;GACZ,cAAc;GACf,CAAC;;AAIN,QAAO,CAAC,QAAQ,KAA2B;;AAK7C,SAAgB,SAAS,IAAwC;AAO/D,QANa,iBAAiB;EAC5B,MAAM,SAAS,IAAI;AAEnB,MAAI,OAAO,WAAW,WAAY,QAAQ,QAA6B;AACvE,SAAO;GACP;;AAMJ,SAAgB,KACd,QAC0E;CAC1E,IAAI,WAAkC;CACtC,IAAI,QAAsB;CAC1B,IAAI,UAAuD;CAE3D,MAAM,aAAa;AACjB,MAAI,CAAC,QACH,WAAU,QAAQ,CACf,MAAM,QAAQ;AACb,cAAW,IAAI;AACf,UAAO;IACP,CACD,OAAO,QAAQ;AACd,WAAQ,eAAe,QAAQ,MAAM,IAAI,MAAM,OAAO,IAAI,CAAC;AAE3D,aAAU;AACV,SAAM;IACN;AAEN,SAAO;;CAGT,MAAM,kBAAkB,UAAa;AACnC,MAAI,MAAO,OAAM;AACjB,MAAI,CAAC,SAEH,OAAM,MAAM;AAEd,SAAO,SAAS,MAAM;;AAGxB,eAAc,UAAU;AAExB,QAAO;;AAUT,SAAgB,WAA+B;AAC7C,QAAO,iBAAiB;;AAG1B,SAAgB,aAAgB,OAA2B,IAAgB;CACzE,MAAM,OAAO,iBAAiB;AAC9B,iBAAgB,MAAM;AACtB,KAAI;AACF,SAAO,IAAI;WACH;AACR,kBAAgB,KAAK"}
1
+ {"version":3,"file":"index.js","names":["pyreonSignal","pyreonComputed"],"sources":["../src/index.ts"],"sourcesContent":["// @pyreon/solid-compat — SolidJS-compatible API shims running on Pyreon's reactive engine\n\nimport type { ComponentFn, Props, VNodeChild } from \"@pyreon/core\"\nimport {\n ErrorBoundary,\n For,\n Match,\n createContext as pyreonCreateContext,\n onMount as pyreonOnMount,\n onUnmount as pyreonOnUnmount,\n useContext as pyreonUseContext,\n Show,\n Suspense,\n Switch,\n} from \"@pyreon/core\"\nimport {\n type EffectScope,\n effectScope,\n getCurrentScope,\n batch as pyreonBatch,\n computed as pyreonComputed,\n createSelector as pyreonCreateSelector,\n effect as pyreonEffect,\n signal as pyreonSignal,\n runUntracked,\n setCurrentScope,\n} from \"@pyreon/reactivity\"\n\n// ─── createSignal ────────────────────────────────────────────────────────────\n\nexport type SignalGetter<T> = () => T\nexport type SignalSetter<T> = (v: T | ((prev: T) => T)) => void\n\nexport function createSignal<T>(initialValue: T): [SignalGetter<T>, SignalSetter<T>] {\n const s = pyreonSignal<T>(initialValue)\n\n const getter: SignalGetter<T> = () => s()\n\n const setter: SignalSetter<T> = (v) => {\n if (typeof v === \"function\") {\n s.update(v as (prev: T) => T)\n } else {\n s.set(v)\n }\n }\n\n return [getter, setter]\n}\n\n// ─── createEffect ────────────────────────────────────────────────────────────\n\nexport function createEffect(fn: () => void): void {\n pyreonEffect(fn)\n}\n\n// ─── createRenderEffect ──────────────────────────────────────────────────────\n\nexport function createRenderEffect(fn: () => void): void {\n pyreonEffect(fn)\n}\n\n// ─── createComputed (legacy Solid API) ───────────────────────────────────────\n\nexport { createEffect as createComputed }\n\n// ─── createMemo ──────────────────────────────────────────────────────────────\n\nexport function createMemo<T>(fn: () => T): () => T {\n const c = pyreonComputed(fn)\n return () => c()\n}\n\n// ─── createRoot ──────────────────────────────────────────────────────────────\n\nexport function createRoot<T>(fn: (dispose: () => void) => T): T {\n const scope = effectScope()\n const prev = getCurrentScope()\n setCurrentScope(scope)\n try {\n return fn(() => scope.stop())\n } finally {\n setCurrentScope(prev)\n }\n}\n\n// ─── on ──────────────────────────────────────────────────────────────────────\n\ntype AccessorArray = readonly (() => unknown)[]\ntype OnEffectFunction<D, V> = (input: D, prevInput: D | undefined, prev: V | undefined) => V\n\nexport function on<S extends (() => unknown) | AccessorArray, V>(\n deps: S,\n fn: OnEffectFunction<\n S extends () => infer R ? R : S extends readonly (() => infer R)[] ? R[] : never,\n V\n >,\n): () => V | undefined {\n type D = S extends () => infer R ? R : S extends readonly (() => infer R)[] ? R[] : never\n\n let prevInput: D | undefined\n let prevValue: V | undefined\n let initialized = false\n\n return () => {\n // Read dependencies to register tracking\n const input: D = (\n Array.isArray(deps) ? (deps as (() => unknown)[]).map((d) => d()) : (deps as () => unknown)()\n ) as D\n\n if (!initialized) {\n initialized = true\n prevValue = fn(input, undefined, undefined)\n prevInput = input\n return prevValue\n }\n\n const result = runUntracked(() => fn(input, prevInput, prevValue))\n prevInput = input\n prevValue = result\n return result\n }\n}\n\n// ─── batch ───────────────────────────────────────────────────────────────────\n\nexport { pyreonBatch as batch }\n\n// ─── untrack ─────────────────────────────────────────────────────────────────\n\nexport { runUntracked as untrack }\n\n// ─── onMount / onCleanup ─────────────────────────────────────────────────────\n\nexport { pyreonOnMount as onMount, pyreonOnUnmount as onCleanup }\n\n// ─── createSelector ──────────────────────────────────────────────────────────\n\nexport { pyreonCreateSelector as createSelector }\n\n// ─── mergeProps ──────────────────────────────────────────────────────────────\n\ntype UnionToIntersection<U> = (U extends unknown ? (k: U) => void : never) extends (\n k: infer I,\n) => void\n ? I\n : never\n\ntype MergeProps<T extends object[]> = UnionToIntersection<T[number]>\n\nexport function mergeProps<T extends object[]>(...sources: [...T]): MergeProps<T> {\n const target = {} as Record<PropertyKey, unknown>\n for (const source of sources) {\n const descriptors = Object.getOwnPropertyDescriptors(source)\n for (const key of Reflect.ownKeys(descriptors)) {\n const desc = descriptors[key as string]\n if (!desc) continue\n // Preserve getters for reactivity\n if (desc.get) {\n Object.defineProperty(target, key, {\n get: desc.get,\n enumerable: true,\n configurable: true,\n })\n } else {\n Object.defineProperty(target, key, {\n value: desc.value,\n writable: true,\n enumerable: true,\n configurable: true,\n })\n }\n }\n }\n return target as MergeProps<T>\n}\n\n// ─── splitProps ──────────────────────────────────────────────────────────────\n\nexport function splitProps<T extends Record<string, unknown>, K extends (keyof T)[]>(\n props: T,\n ...keys: K\n): [Pick<T, K[number]>, Omit<T, K[number]>] {\n const picked = {} as Pick<T, K[number]>\n const rest = {} as Record<string, unknown>\n const keySet = new Set<string>(keys.flat() as string[])\n\n const descriptors = Object.getOwnPropertyDescriptors(props)\n for (const key of Reflect.ownKeys(descriptors)) {\n const desc = descriptors[key as string]\n if (!desc) continue\n const target = typeof key === \"string\" && keySet.has(key) ? picked : rest\n if (desc.get) {\n Object.defineProperty(target, key, {\n get: desc.get,\n enumerable: true,\n configurable: true,\n })\n } else {\n Object.defineProperty(target, key, {\n value: desc.value,\n writable: true,\n enumerable: true,\n configurable: true,\n })\n }\n }\n\n return [picked, rest as Omit<T, K[number]>]\n}\n\n// ─── children ────────────────────────────────────────────────────────────────\n\nexport function children(fn: () => VNodeChild): () => VNodeChild {\n const memo = createMemo(() => {\n const result = fn()\n // Resolve function children (reactive getters)\n if (typeof result === \"function\") return (result as () => VNodeChild)()\n return result\n })\n return memo\n}\n\n// ─── lazy ────────────────────────────────────────────────────────────────────\n\nexport function lazy<P extends Props>(\n loader: () => Promise<{ default: ComponentFn<P> }>,\n): ComponentFn<P> & { preload: () => Promise<{ default: ComponentFn<P> }> } {\n let resolved: ComponentFn<P> | null = null\n let error: Error | null = null\n let promise: Promise<{ default: ComponentFn<P> }> | null = null\n\n const load = () => {\n if (!promise) {\n promise = loader()\n .then((mod) => {\n resolved = mod.default\n return mod\n })\n .catch((err) => {\n error = err instanceof Error ? err : new Error(String(err))\n // Allow retry on next render by resetting the promise\n promise = null\n throw error\n })\n }\n return promise\n }\n\n const LazyComponent = ((props: P) => {\n if (error) throw error\n if (!resolved) {\n // Throw the promise so Suspense can catch it\n throw load()\n }\n return resolved(props)\n }) as ComponentFn<P> & { preload: () => Promise<{ default: ComponentFn<P> }> }\n\n LazyComponent.preload = load\n\n return LazyComponent\n}\n\n// ─── createContext / useContext ───────────────────────────────────────────────\n\nexport { pyreonCreateContext as createContext, pyreonUseContext as useContext }\n\n// ─── getOwner / runWithOwner ─────────────────────────────────────────────────\n\nexport function getOwner(): EffectScope | null {\n return getCurrentScope()\n}\n\nexport function runWithOwner<T>(owner: EffectScope | null, fn: () => T): T {\n const prev = getCurrentScope()\n setCurrentScope(owner)\n try {\n return fn()\n } finally {\n setCurrentScope(prev)\n }\n}\n\n// ─── Re-exports from @pyreon/core ──────────────────────────────────────────────\n\nexport { ErrorBoundary, For, Match, Show, Suspense, Switch }\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":["pyreonSignal","pyreonComputed"],"sources":["../../src/index.ts"],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","names":["pyreonSignal","pyreonComputed"],"sources":["../../src/index.ts"],"mappings":"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"}
@@ -12,7 +12,9 @@ declare function createRoot<T>(fn: (dispose: () => void) => T): T;
12
12
  type AccessorArray = readonly (() => unknown)[];
13
13
  type OnEffectFunction<D, V> = (input: D, prevInput: D | undefined, prev: V | undefined) => V;
14
14
  declare function on<S extends (() => unknown) | AccessorArray, V>(deps: S, fn: OnEffectFunction<S extends (() => infer R) ? R : S extends readonly (() => infer R)[] ? R[] : never, V>): () => V | undefined;
15
- declare function mergeProps<T extends object[]>(...sources: [...T]): T[number];
15
+ type UnionToIntersection<U> = (U extends unknown ? (k: U) => void : never) extends ((k: infer I) => void) ? I : never;
16
+ type MergeProps<T extends object[]> = UnionToIntersection<T[number]>;
17
+ declare function mergeProps<T extends object[]>(...sources: [...T]): MergeProps<T>;
16
18
  declare function splitProps<T extends Record<string, unknown>, K extends (keyof T)[]>(props: T, ...keys: K): [Pick<T, K[number]>, Omit<T, K[number]>];
17
19
  declare function children(fn: () => VNodeChild): () => VNodeChild;
18
20
  declare function lazy<P extends Props>(loader: () => Promise<{
@@ -1 +1 @@
1
- {"version":3,"file":"index2.d.ts","names":[],"sources":["../../src/index.ts"],"mappings":";;;;KA8BY,YAAA,YAAwB,CAAA;AAAA,KACxB,YAAA,OAAmB,CAAA,EAAG,CAAA,KAAM,IAAA,EAAM,CAAA,KAAM,CAAA;AAAA,iBAEpC,YAAA,GAAA,CAAgB,YAAA,EAAc,CAAA,IAAK,YAAA,CAAa,CAAA,GAAI,YAAA,CAAa,CAAA;AAAA,iBAkBjE,YAAA,CAAa,EAAA;AAAA,iBAMb,kBAAA,CAAmB,EAAA;AAAA,iBAUnB,UAAA,GAAA,CAAc,EAAA,QAAU,CAAA,SAAU,CAAA;AAAA,iBAOlC,UAAA,GAAA,CAAc,EAAA,GAAK,OAAA,iBAAwB,CAAA,GAAI,CAAA;AAAA,KAa1D,aAAA;AAAA,KACA,gBAAA,UAA0B,KAAA,EAAO,CAAA,EAAG,SAAA,EAAW,CAAA,cAAe,IAAA,EAAM,CAAA,iBAAkB,CAAA;AAAA,iBAE3E,EAAA,6BAA+B,aAAA,IAAA,CAC7C,IAAA,EAAM,CAAA,EACN,EAAA,EAAI,gBAAA,CACF,CAAA,2BAA0B,CAAA,GAAI,CAAA,sCAAuC,CAAA,YACrE,CAAA,UAEK,CAAA;AAAA,iBA8CO,UAAA,oBAAA,CAAA,GAAkC,OAAA,MAAa,CAAA,IAAK,CAAA;AAAA,iBA6BpD,UAAA,WAAqB,MAAA,oCAA0C,CAAA,IAAA,CAC7E,KAAA,EAAO,CAAA,KACJ,IAAA,EAAM,CAAA,IACP,IAAA,CAAK,CAAA,EAAG,CAAA,WAAY,IAAA,CAAK,CAAA,EAAG,CAAA;AAAA,iBA+BhB,QAAA,CAAS,EAAA,QAAU,UAAA,SAAmB,UAAA;AAAA,iBAYtC,IAAA,WAAe,KAAA,CAAA,CAC7B,MAAA,QAAc,OAAA;EAAU,OAAA,EAAS,WAAA,CAAY,CAAA;AAAA,KAC5C,WAAA,CAAY,CAAA;EAAO,OAAA,QAAe,OAAA;IAAU,OAAA,EAAS,WAAA,CAAY,CAAA;EAAA;AAAA;AAAA,iBA2CpD,QAAA,CAAA,GAAY,WAAA;AAAA,iBAIZ,YAAA,GAAA,CAAgB,KAAA,EAAO,WAAA,SAAoB,EAAA,QAAU,CAAA,GAAI,CAAA"}
1
+ {"version":3,"file":"index2.d.ts","names":[],"sources":["../../src/index.ts"],"mappings":";;;;KA8BY,YAAA,YAAwB,CAAA;AAAA,KACxB,YAAA,OAAmB,CAAA,EAAG,CAAA,KAAM,IAAA,EAAM,CAAA,KAAM,CAAA;AAAA,iBAEpC,YAAA,GAAA,CAAgB,YAAA,EAAc,CAAA,IAAK,YAAA,CAAa,CAAA,GAAI,YAAA,CAAa,CAAA;AAAA,iBAkBjE,YAAA,CAAa,EAAA;AAAA,iBAMb,kBAAA,CAAmB,EAAA;AAAA,iBAUnB,UAAA,GAAA,CAAc,EAAA,QAAU,CAAA,SAAU,CAAA;AAAA,iBAOlC,UAAA,GAAA,CAAc,EAAA,GAAK,OAAA,iBAAwB,CAAA,GAAI,CAAA;AAAA,KAa1D,aAAA;AAAA,KACA,gBAAA,UAA0B,KAAA,EAAO,CAAA,EAAG,SAAA,EAAW,CAAA,cAAe,IAAA,EAAM,CAAA,iBAAkB,CAAA;AAAA,iBAE3E,EAAA,6BAA+B,aAAA,IAAA,CAC7C,IAAA,EAAM,CAAA,EACN,EAAA,EAAI,gBAAA,CACF,CAAA,2BAA0B,CAAA,GAAI,CAAA,sCAAuC,CAAA,YACrE,CAAA,UAEK,CAAA;AAAA,KA6CJ,mBAAA,OAA0B,CAAA,oBAAqB,CAAA,EAAG,CAAA,6BACrD,CAAA,sBAEE,CAAA;AAAA,KAGC,UAAA,uBAAiC,mBAAA,CAAoB,CAAA;AAAA,iBAE1C,UAAA,oBAAA,CAAA,GAAkC,OAAA,MAAa,CAAA,IAAK,UAAA,CAAW,CAAA;AAAA,iBA6B/D,UAAA,WAAqB,MAAA,oCAA0C,CAAA,IAAA,CAC7E,KAAA,EAAO,CAAA,KACJ,IAAA,EAAM,CAAA,IACP,IAAA,CAAK,CAAA,EAAG,CAAA,WAAY,IAAA,CAAK,CAAA,EAAG,CAAA;AAAA,iBA+BhB,QAAA,CAAS,EAAA,QAAU,UAAA,SAAmB,UAAA;AAAA,iBAYtC,IAAA,WAAe,KAAA,CAAA,CAC7B,MAAA,QAAc,OAAA;EAAU,OAAA,EAAS,WAAA,CAAY,CAAA;AAAA,KAC5C,WAAA,CAAY,CAAA;EAAO,OAAA,QAAe,OAAA;IAAU,OAAA,EAAS,WAAA,CAAY,CAAA;EAAA;AAAA;AAAA,iBA0CpD,QAAA,CAAA,GAAY,WAAA;AAAA,iBAIZ,YAAA,GAAA,CAAgB,KAAA,EAAO,WAAA,SAAoB,EAAA,QAAU,CAAA,GAAI,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pyreon/solid-compat",
3
- "version": "0.1.1",
3
+ "version": "0.1.2",
4
4
  "description": "SolidJS-compatible API shim for Pyreon — write Solid-style code that runs on Pyreon's reactive engine",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -35,14 +35,13 @@
35
35
  "dev": "vl_rolldown_build-watch",
36
36
  "test": "vitest run",
37
37
  "typecheck": "tsc --noEmit",
38
- "prepublishOnly": "bun run build",
39
- "prepack": "bun run ../../scripts/resolve-workspace-deps.ts pre",
40
- "postpack": "bun run ../../scripts/resolve-workspace-deps.ts post"
38
+ "lint": "biome check .",
39
+ "prepublishOnly": "bun run build"
41
40
  },
42
41
  "dependencies": {
43
- "@pyreon/core": "^0.1.1",
44
- "@pyreon/reactivity": "^0.1.1",
45
- "@pyreon/runtime-dom": "^0.1.1"
42
+ "@pyreon/core": "workspace:*",
43
+ "@pyreon/reactivity": "workspace:*",
44
+ "@pyreon/runtime-dom": "workspace:*"
46
45
  },
47
46
  "devDependencies": {
48
47
  "@happy-dom/global-registrator": "^20.8.3",
package/src/index.ts CHANGED
@@ -131,8 +131,7 @@ export { runUntracked as untrack }
131
131
 
132
132
  // ─── onMount / onCleanup ─────────────────────────────────────────────────────
133
133
 
134
- export { pyreonOnMount as onMount }
135
- export { pyreonOnUnmount as onCleanup }
134
+ export { pyreonOnMount as onMount, pyreonOnUnmount as onCleanup }
136
135
 
137
136
  // ─── createSelector ──────────────────────────────────────────────────────────
138
137
 
@@ -140,7 +139,15 @@ export { pyreonCreateSelector as createSelector }
140
139
 
141
140
  // ─── mergeProps ──────────────────────────────────────────────────────────────
142
141
 
143
- export function mergeProps<T extends object[]>(...sources: [...T]): T[number] {
142
+ type UnionToIntersection<U> = (U extends unknown ? (k: U) => void : never) extends (
143
+ k: infer I,
144
+ ) => void
145
+ ? I
146
+ : never
147
+
148
+ type MergeProps<T extends object[]> = UnionToIntersection<T[number]>
149
+
150
+ export function mergeProps<T extends object[]>(...sources: [...T]): MergeProps<T> {
144
151
  const target = {} as Record<PropertyKey, unknown>
145
152
  for (const source of sources) {
146
153
  const descriptors = Object.getOwnPropertyDescriptors(source)
@@ -164,7 +171,7 @@ export function mergeProps<T extends object[]>(...sources: [...T]): T[number] {
164
171
  }
165
172
  }
166
173
  }
167
- return target as T[number]
174
+ return target as MergeProps<T>
168
175
  }
169
176
 
170
177
  // ─── splitProps ──────────────────────────────────────────────────────────────
@@ -255,8 +262,7 @@ export function lazy<P extends Props>(
255
262
 
256
263
  // ─── createContext / useContext ───────────────────────────────────────────────
257
264
 
258
- export { pyreonCreateContext as createContext }
259
- export { pyreonUseContext as useContext }
265
+ export { pyreonCreateContext as createContext, pyreonUseContext as useContext }
260
266
 
261
267
  // ─── getOwner / runWithOwner ─────────────────────────────────────────────────
262
268
 
@@ -276,4 +282,4 @@ export function runWithOwner<T>(owner: EffectScope | null, fn: () => T): T {
276
282
 
277
283
  // ─── Re-exports from @pyreon/core ──────────────────────────────────────────────
278
284
 
279
- export { Show, Switch, Match, For, Suspense, ErrorBoundary }
285
+ export { ErrorBoundary, For, Match, Show, Suspense, Switch }