@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 +83 -1
- package/lib/index.js.map +1 -1
- package/lib/types/index.d.ts.map +1 -1
- package/lib/types/index2.d.ts +3 -1
- package/lib/types/index2.d.ts.map +1 -1
- package/package.json +6 -7
- package/src/index.ts +13 -7
package/README.md
CHANGED
|
@@ -10,7 +10,7 @@ bun add @pyreon/solid-compat
|
|
|
10
10
|
|
|
11
11
|
## Quick Start
|
|
12
12
|
|
|
13
|
-
```
|
|
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":"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"}
|
|
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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"}
|
package/lib/types/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":["pyreonSignal","pyreonComputed"],"sources":["../../src/index.ts"],"mappings":";;;;AAiCA,SAAgB,YAAA,CAAgB,YAAA,EAAqD;EACnF,MAAM,CAAA,GAAIA,MAAAA,CAAgB,YAAA,CAAa;EAEvC,MAAM,MAAA,GAAA,CAAA,KAAgC,CAAA,CAAA,CAAG;EAEzC,MAAM,MAAA,GAA2B,CAAA,IAAM;IACrC,IAAI,OAAO,CAAA,KAAM,UAAA,EACf,CAAA,CAAE,MAAA,CAAO,CAAA,CAAoB,CAAA,KAE7B,CAAA,CAAE,GAAA,CAAI,CAAA,CAAE;;EAIZ,OAAO,CAAC,MAAA,EAAQ,MAAA,CAAO;;AAKzB,SAAgB,YAAA,CAAa,EAAA,EAAsB;EACjD,MAAA,CAAa,EAAA,CAAG;;AAKlB,SAAgB,kBAAA,CAAmB,EAAA,EAAsB;EACvD,MAAA,CAAa,EAAA,CAAG;;AASlB,SAAgB,UAAA,CAAc,EAAA,EAAsB;EAClD,MAAM,CAAA,GAAIC,QAAAA,CAAe,EAAA,CAAG;EAC5B,OAAA,MAAa,CAAA,CAAA,CAAG;;AAKlB,SAAgB,UAAA,CAAc,EAAA,EAAmC;EAC/D,MAAM,KAAA,GAAQ,WAAA,CAAA,CAAa;EAC3B,MAAM,IAAA,GAAO,eAAA,CAAA,CAAiB;EAC9B,eAAA,CAAgB,KAAA,CAAM;EACtB,IAAI;IACF,OAAO,EAAA,CAAA,MAAS,KAAA,CAAM,IAAA,CAAA,CAAM,CAAC;YACrB;IACR,eAAA,CAAgB,IAAA,CAAK;;;AASzB,SAAgB,EAAA,CACd,IAAA,EACA,EAAA,EAIqB;EAGrB,IAAI,SAAA;EACJ,IAAI,SAAA;EACJ,IAAI,WAAA,GAAc,KAAA;EAElB,OAAA,MAAa;IAEX,MAAM,KAAA,GACJ,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,GAAI,IAAA,CAA2B,GAAA,CAAK,CAAA,IAAM,CAAA,CAAA,CAAG,CAAC,GAAI,IAAA,CAAA,CAAwB;IAG/F,IAAI,CAAC,WAAA,EAAa;MAChB,WAAA,GAAc,IAAA;MACd,SAAA,GAAY,EAAA,CAAG,KAAA,EAAO,KAAA,CAAA,EAAW,KAAA,CAAA,CAAU;MAC3C,SAAA,GAAY,KAAA;MACZ,OAAO,SAAA;;IAGT,MAAM,MAAA,GAAS,YAAA,CAAA,MAAmB,EAAA,CAAG,KAAA,EAAO,SAAA,EAAW,SAAA,CAAU,CAAC;IAClE,SAAA,GAAY,KAAA;IACZ,SAAA,GAAY,MAAA;IACZ,OAAO,MAAA;;;
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":["pyreonSignal","pyreonComputed"],"sources":["../../src/index.ts"],"mappings":"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"}
|
package/lib/types/index2.d.ts
CHANGED
|
@@ -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
|
-
|
|
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,
|
|
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.
|
|
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
|
-
"
|
|
39
|
-
"
|
|
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": "
|
|
44
|
-
"@pyreon/reactivity": "
|
|
45
|
-
"@pyreon/runtime-dom": "
|
|
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
|
-
|
|
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
|
|
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 {
|
|
285
|
+
export { ErrorBoundary, For, Match, Show, Suspense, Switch }
|