@pyreon/preact-compat 0.5.5 → 0.5.7

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.
@@ -1,178 +1,47 @@
1
- import { onErrorCaptured, useContext } from "@pyreon/core";
2
- function getCurrentCtx() {
3
- return _currentCtx;
4
- }
5
- function getHookIndex() {
6
- return _hookIndex++;
7
- }
8
-
9
- //#endregion
10
- //#region src/hooks.ts
11
- function requireCtx() {
12
- const ctx = getCurrentCtx();
13
- if (!ctx) throw new Error("Hook called outside of a component render");
14
- return ctx;
15
- }
16
- function depsChanged(a, b) {
17
- if (a === void 0 || b === void 0) return true;
18
- if (a.length !== b.length) return true;
19
- for (let i = 0; i < a.length; i++) if (!Object.is(a[i], b[i])) return true;
20
- return false;
21
- }
22
- /**
23
- * Preact-compatible `useState` — returns `[value, setter]`.
24
- * Triggers a component re-render when the setter is called.
25
- */
26
- function useState(initial) {
27
- const ctx = requireCtx();
28
- const idx = getHookIndex();
29
- if (ctx.hooks.length <= idx) ctx.hooks.push(typeof initial === "function" ? initial() : initial);
30
- const value = ctx.hooks[idx];
31
- const setter = v => {
32
- const current = ctx.hooks[idx];
33
- const next = typeof v === "function" ? v(current) : v;
34
- if (Object.is(current, next)) return;
35
- ctx.hooks[idx] = next;
36
- ctx.scheduleRerender();
37
- };
38
- return [value, setter];
39
- }
40
- /**
41
- * Preact-compatible `useEffect` — runs after render when deps change.
42
- * Returns cleanup on unmount and before re-running.
43
- */
44
- function useEffect(fn, deps) {
45
- const ctx = requireCtx();
46
- const idx = getHookIndex();
47
- if (ctx.hooks.length <= idx) {
48
- const entry = {
49
- fn,
50
- deps,
51
- cleanup: void 0
52
- };
53
- ctx.hooks.push(entry);
54
- ctx.pendingEffects.push(entry);
55
- } else {
56
- const entry = ctx.hooks[idx];
57
- if (depsChanged(entry.deps, deps)) {
58
- entry.fn = fn;
59
- entry.deps = deps;
60
- ctx.pendingEffects.push(entry);
61
- }
62
- }
63
- }
64
- /**
65
- * Preact-compatible `useLayoutEffect` — runs synchronously after DOM mutations.
66
- */
67
- function useLayoutEffect(fn, deps) {
68
- const ctx = requireCtx();
69
- const idx = getHookIndex();
70
- if (ctx.hooks.length <= idx) {
71
- const entry = {
72
- fn,
73
- deps,
74
- cleanup: void 0
75
- };
76
- ctx.hooks.push(entry);
77
- ctx.pendingLayoutEffects.push(entry);
78
- } else {
79
- const entry = ctx.hooks[idx];
80
- if (depsChanged(entry.deps, deps)) {
81
- entry.fn = fn;
82
- entry.deps = deps;
83
- ctx.pendingLayoutEffects.push(entry);
84
- }
85
- }
86
- }
87
- /**
88
- * Preact-compatible `useMemo` — returns the cached value, recomputed when deps change.
89
- */
90
- function useMemo(fn, deps) {
91
- const ctx = requireCtx();
92
- const idx = getHookIndex();
93
- if (ctx.hooks.length <= idx) {
94
- const value = fn();
95
- ctx.hooks.push({
96
- value,
97
- deps
98
- });
99
- return value;
100
- }
101
- const entry = ctx.hooks[idx];
102
- if (depsChanged(entry.deps, deps)) {
103
- entry.value = fn();
104
- entry.deps = deps;
105
- }
106
- return entry.value;
107
- }
108
- /**
109
- * Preact-compatible `useCallback` — returns the cached function when deps haven't changed.
110
- */
111
- function useCallback(fn, deps) {
112
- return useMemo(() => fn, deps);
113
- }
114
- /**
115
- * Preact-compatible `useRef` — returns `{ current }` persisted across re-renders.
116
- */
117
- function useRef(initial) {
118
- const ctx = requireCtx();
119
- const idx = getHookIndex();
120
- if (ctx.hooks.length <= idx) {
121
- const ref = {
122
- current: initial !== void 0 ? initial : null
123
- };
124
- ctx.hooks.push(ref);
125
- }
126
- return ctx.hooks[idx];
127
- }
128
- /**
129
- * Preact-compatible `useReducer` — returns `[state, dispatch]`.
130
- */
131
- function useReducer(reducer, initial) {
132
- const ctx = requireCtx();
133
- const idx = getHookIndex();
134
- if (ctx.hooks.length <= idx) ctx.hooks.push(typeof initial === "function" ? initial() : initial);
135
- const state = ctx.hooks[idx];
136
- const dispatch = action => {
137
- const current = ctx.hooks[idx];
138
- const next = reducer(current, action);
139
- if (Object.is(current, next)) return;
140
- ctx.hooks[idx] = next;
141
- ctx.scheduleRerender();
142
- };
143
- return [state, dispatch];
144
- }
145
- /**
146
- * Preact-compatible `useId` — returns a stable unique string per hook call.
147
- */
148
- function useId() {
149
- const ctx = requireCtx();
150
- const idx = getHookIndex();
151
- if (ctx.hooks.length <= idx) ctx.hooks.push(`:r${(_idCounter++).toString(36)}:`);
152
- return ctx.hooks[idx];
153
- }
154
- /**
155
- * Preact-compatible `memo` — wraps a component to skip re-render when props
156
- * are shallowly equal.
157
- */
158
- function memo(component, areEqual) {
159
- const compare = areEqual ?? ((a, b) => {
160
- const keysA = Object.keys(a);
161
- const keysB = Object.keys(b);
162
- if (keysA.length !== keysB.length) return false;
163
- for (const k of keysA) if (!Object.is(a[k], b[k])) return false;
164
- return true;
165
- });
166
- let prevProps = null;
167
- let prevResult = null;
168
- return props => {
169
- if (prevProps !== null && compare(prevProps, props)) return prevResult;
170
- prevProps = props;
171
- prevResult = component(props);
172
- return prevResult;
173
- };
174
- }
1
+ import { VNodeChild, onErrorCaptured, useContext } from "@pyreon/core";
175
2
 
3
+ //#region src/hooks.d.ts
4
+ /**
5
+ * Preact-compatible `useState` — returns `[value, setter]`.
6
+ * Triggers a component re-render when the setter is called.
7
+ */
8
+ declare function useState<T>(initial: T | (() => T)): [T, (v: T | ((prev: T) => T)) => void];
9
+ /**
10
+ * Preact-compatible `useEffect` — runs after render when deps change.
11
+ * Returns cleanup on unmount and before re-running.
12
+ */
13
+ declare function useEffect(fn: () => (() => void) | void, deps?: unknown[]): void;
14
+ /**
15
+ * Preact-compatible `useLayoutEffect` — runs synchronously after DOM mutations.
16
+ */
17
+ declare function useLayoutEffect(fn: () => (() => void) | void, deps?: unknown[]): void;
18
+ /**
19
+ * Preact-compatible `useMemo` — returns the cached value, recomputed when deps change.
20
+ */
21
+ declare function useMemo<T>(fn: () => T, deps: unknown[]): T;
22
+ /**
23
+ * Preact-compatible `useCallback` — returns the cached function when deps haven't changed.
24
+ */
25
+ declare function useCallback<T extends (...args: never[]) => unknown>(fn: T, deps: unknown[]): T;
26
+ /**
27
+ * Preact-compatible `useRef` — returns `{ current }` persisted across re-renders.
28
+ */
29
+ declare function useRef<T>(initial?: T): {
30
+ current: T | null;
31
+ };
32
+ /**
33
+ * Preact-compatible `useReducer` — returns `[state, dispatch]`.
34
+ */
35
+ declare function useReducer<S, A>(reducer: (state: S, action: A) => S, initial: S | (() => S)): [S, (action: A) => void];
36
+ /**
37
+ * Preact-compatible `useId` — returns a stable unique string per hook call.
38
+ */
39
+ declare function useId(): string;
40
+ /**
41
+ * Preact-compatible `memo` — wraps a component to skip re-render when props
42
+ * are shallowly equal.
43
+ */
44
+ declare function memo<P extends Record<string, unknown>>(component: (props: P) => VNodeChild, areEqual?: (prevProps: P, nextProps: P) => boolean): (props: P) => VNodeChild;
176
45
  //#endregion
177
46
  export { memo, useCallback, useContext, useEffect, onErrorCaptured as useErrorBoundary, useId, useLayoutEffect, useMemo, useReducer, useRef, useState };
178
- //# sourceMappingURL=hooks.d.ts.map
47
+ //# sourceMappingURL=hooks2.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.d.ts","names":[],"sources":["../../../src/jsx-runtime.ts","../../../src/hooks.ts"],"mappings":"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"}
1
+ {"version":3,"file":"hooks2.d.ts","names":[],"sources":["../../../src/hooks.ts"],"mappings":";;;;;;;iBAwCgB,QAAA,GAAA,CAAY,OAAA,EAAS,CAAA,UAAW,CAAA,KAAM,CAAA,GAAI,CAAA,EAAG,CAAA,KAAM,IAAA,EAAM,CAAA,KAAM,CAAA;;;;;iBA2B/D,SAAA,CAAU,EAAA,6BAA+B,IAAA;;;;iBAyBzC,eAAA,CAAgB,EAAA,6BAA+B,IAAA;AAzB/D;;;AAAA,iBAgDgB,OAAA,GAAA,CAAW,EAAA,QAAU,CAAA,EAAG,IAAA,cAAkB,CAAA;;AAvB1D;;iBA8CgB,WAAA,eAA0B,IAAA,sBAAA,CAA2B,EAAA,EAAI,CAAA,EAAG,IAAA,cAAkB,CAAA;;;AAvB9F;iBAgCgB,MAAA,GAAA,CAAU,OAAA,GAAU,CAAA;EAAM,OAAA,EAAS,CAAA;AAAA;;;;iBAiBnC,UAAA,MAAA,CACd,OAAA,GAAU,KAAA,EAAO,CAAA,EAAG,MAAA,EAAQ,CAAA,KAAM,CAAA,EAClC,OAAA,EAAS,CAAA,UAAW,CAAA,KAClB,CAAA,GAAI,MAAA,EAAQ,CAAA;;;;iBA2BA,KAAA,CAAA;;;;;iBAiBA,IAAA,WAAe,MAAA,kBAAA,CAC7B,SAAA,GAAY,KAAA,EAAO,CAAA,KAAM,UAAA,EACzB,QAAA,IAAY,SAAA,EAAW,CAAA,EAAG,SAAA,EAAW,CAAA,gBACnC,KAAA,EAAO,CAAA,KAAM,UAAA"}
@@ -1,87 +1,10 @@
1
- import { Fragment, h } from "@pyreon/core";
2
- import { signal } from "@pyreon/reactivity";
1
+ import { ComponentFn, Fragment, Props, VNode, VNodeChild } from "@pyreon/core";
3
2
 
4
- //#region src/jsx-runtime.ts
5
-
6
- function beginRender(ctx) {
7
- _currentCtx = ctx;
8
- _hookIndex = 0;
9
- ctx.pendingEffects = [];
10
- ctx.pendingLayoutEffects = [];
11
- }
12
- function endRender() {
13
- _currentCtx = null;
14
- _hookIndex = 0;
15
- }
16
- function runLayoutEffects(entries) {
17
- for (const entry of entries) {
18
- if (entry.cleanup) entry.cleanup();
19
- const cleanup = entry.fn();
20
- entry.cleanup = typeof cleanup === "function" ? cleanup : void 0;
21
- }
22
- }
23
- function scheduleEffects(ctx, entries) {
24
- if (entries.length === 0) return;
25
- queueMicrotask(() => {
26
- for (const entry of entries) {
27
- if (ctx.unmounted) return;
28
- if (entry.cleanup) entry.cleanup();
29
- const cleanup = entry.fn();
30
- entry.cleanup = typeof cleanup === "function" ? cleanup : void 0;
31
- }
32
- });
33
- }
34
- function wrapCompatComponent(preactComponent) {
35
- let wrapped = _wrapperCache.get(preactComponent);
36
- if (wrapped) return wrapped;
37
- wrapped = props => {
38
- const ctx = {
39
- hooks: [],
40
- scheduleRerender: () => {},
41
- pendingEffects: [],
42
- pendingLayoutEffects: [],
43
- unmounted: false
44
- };
45
- const version = signal(0);
46
- let updateScheduled = false;
47
- ctx.scheduleRerender = () => {
48
- if (ctx.unmounted || updateScheduled) return;
49
- updateScheduled = true;
50
- queueMicrotask(() => {
51
- updateScheduled = false;
52
- if (!ctx.unmounted) version.set(version.peek() + 1);
53
- });
54
- };
55
- return () => {
56
- version();
57
- beginRender(ctx);
58
- const result = preactComponent(props);
59
- const layoutEffects = ctx.pendingLayoutEffects;
60
- const effects = ctx.pendingEffects;
61
- endRender();
62
- runLayoutEffects(layoutEffects);
63
- scheduleEffects(ctx, effects);
64
- return result;
65
- };
66
- };
67
- _wrapperCache.set(preactComponent, wrapped);
68
- return wrapped;
69
- }
70
- function jsx(type, props, key) {
71
- const {
72
- children,
73
- ...rest
74
- } = props;
75
- const propsWithKey = key != null ? {
76
- ...rest,
77
- key
78
- } : rest;
79
- if (typeof type === "function") return h(wrapCompatComponent(type), children !== void 0 ? {
80
- ...propsWithKey,
81
- children
82
- } : propsWithKey);
83
- return h(type, propsWithKey, ...(children === void 0 ? [] : Array.isArray(children) ? children : [children]));
84
- }
3
+ //#region src/jsx-runtime.d.ts
4
+ declare function jsx(type: string | ComponentFn | symbol, props: Props & {
5
+ children?: VNodeChild | VNodeChild[];
6
+ }, key?: string | number | null): VNode;
7
+ declare const jsxs: typeof jsx;
85
8
  //#endregion
86
9
  export { Fragment, jsx, jsxs };
87
- //# sourceMappingURL=jsx-runtime.d.ts.map
10
+ //# sourceMappingURL=jsx-runtime2.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"jsx-runtime.d.ts","names":[],"sources":["../../../src/jsx-runtime.ts"],"mappings":"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"}
1
+ {"version":3,"file":"jsx-runtime2.d.ts","names":[],"sources":["../../../src/jsx-runtime.ts"],"mappings":";;;iBA2IgB,GAAA,CACd,IAAA,WAAe,WAAA,WACf,KAAA,EAAO,KAAA;EAAU,QAAA,GAAW,UAAA,GAAa,UAAA;AAAA,GACzC,GAAA,4BACC,KAAA;AAAA,cAiBU,IAAA,SAAI,GAAA"}
@@ -1,57 +1,35 @@
1
- import { batch as pyreonBatch, computed as computed$1, effect as effect$1, signal as signal$1 } from "@pyreon/reactivity";
1
+ import { batch as pyreonBatch } from "@pyreon/reactivity";
2
2
 
3
- //#region src/signals.ts
4
- /**
5
- * Create a Preact-style signal with `.value` accessor.
6
- *
7
- * @example
8
- * const count = signal(0)
9
- * count.value++ // write
10
- * console.log(count.value) // read (tracked)
11
- */
12
- function signal(initial) {
13
- const s = signal$1(initial);
14
- return {
15
- get value() {
16
- return s();
17
- },
18
- set value(v) {
19
- s.set(v);
20
- },
21
- peek() {
22
- return s.peek();
23
- }
24
- };
3
+ //#region src/signals.d.ts
4
+ interface ReadonlySignal<T> {
5
+ readonly value: T;
6
+ peek(): T;
25
7
  }
26
- /**
27
- * Create a Preact-style computed with `.value` accessor.
28
- *
29
- * @example
30
- * const doubled = computed(() => count.value * 2)
31
- * console.log(doubled.value)
32
- */
33
- function computed(fn) {
34
- const c = computed$1(fn);
35
- return {
36
- get value() {
37
- return c();
38
- },
39
- peek() {
40
- return c();
41
- }
42
- };
8
+ interface WritableSignal<T> extends ReadonlySignal<T> {
9
+ value: T;
43
10
  }
44
11
  /**
45
- * Run a side-effect that auto-tracks signal reads.
46
- * Returns a dispose function.
47
- */
48
- function effect(fn) {
49
- const e = effect$1(fn);
50
- return () => {
51
- e.dispose();
52
- };
53
- }
54
-
12
+ * Create a Preact-style signal with `.value` accessor.
13
+ *
14
+ * @example
15
+ * const count = signal(0)
16
+ * count.value++ // write
17
+ * console.log(count.value) // read (tracked)
18
+ */
19
+ declare function signal<T>(initial: T): WritableSignal<T>;
20
+ /**
21
+ * Create a Preact-style computed with `.value` accessor.
22
+ *
23
+ * @example
24
+ * const doubled = computed(() => count.value * 2)
25
+ * console.log(doubled.value)
26
+ */
27
+ declare function computed<T>(fn: () => T): ReadonlySignal<T>;
28
+ /**
29
+ * Run a side-effect that auto-tracks signal reads.
30
+ * Returns a dispose function.
31
+ */
32
+ declare function effect(fn: () => void | (() => void)): () => void;
55
33
  //#endregion
56
- export { pyreonBatch as batch, computed, effect, signal };
57
- //# sourceMappingURL=signals.d.ts.map
34
+ export { ReadonlySignal, WritableSignal, pyreonBatch as batch, computed, effect, signal };
35
+ //# sourceMappingURL=signals2.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"signals.d.ts","names":["pyreonSignal","pyreonComputed","pyreonEffect"],"sources":["../../../src/signals.ts"],"mappings":";;;;;;;;;;;AAkCA,SAAgB,MAAA,CAAU,OAAA,EAA+B;EACvD,MAAM,CAAA,GAAIA,QAAAA,CAAgB,OAAA,CAAQ;EAClC,OAAO;IACL,IAAI,KAAA,CAAA,EAAW;MACb,OAAO,CAAA,CAAA,CAAG;;IAEZ,IAAI,KAAA,CAAM,CAAA,EAAM;MACd,CAAA,CAAE,GAAA,CAAI,CAAA,CAAE;;IAEV,IAAA,CAAA,EAAU;MACR,OAAO,CAAA,CAAE,IAAA,CAAA,CAAM;;GAElB;;;;;;;;;AAYH,SAAgB,QAAA,CAAY,EAAA,EAAgC;EAC1D,MAAM,CAAA,GAAIC,UAAAA,CAAe,EAAA,CAAG;EAC5B,OAAO;IACL,IAAI,KAAA,CAAA,EAAW;MACb,OAAO,CAAA,CAAA,CAAG;;IAEZ,IAAA,CAAA,EAAU;MAER,OAAO,CAAA,CAAA,CAAG;;GAEb;;;;;;AAUH,SAAgB,MAAA,CAAO,EAAA,EAA2C;EAEhE,MAAM,CAAA,GAAYC,QAAAA,CAAa,EAAA,CAAG;EAClC,OAAA,MAAa;IACX,CAAA,CAAE,OAAA,CAAA,CAAS"}
1
+ {"version":3,"file":"signals2.d.ts","names":[],"sources":["../../../src/signals.ts"],"mappings":";;;UAiBiB,cAAA;EAAA,SACN,KAAA,EAAO,CAAA;EAChB,IAAA,IAAQ,CAAA;AAAA;AAAA,UAGO,cAAA,YAA0B,cAAA,CAAe,CAAA;EACxD,KAAA,EAAO,CAAA;AAAA;AADT;;;;;;;;AAAA,iBAYgB,MAAA,GAAA,CAAU,OAAA,EAAS,CAAA,GAAI,cAAA,CAAe,CAAA;;;;;;;AAAtD;iBAwBgB,QAAA,GAAA,CAAY,EAAA,QAAU,CAAA,GAAI,cAAA,CAAe,CAAA;;;;;iBAoBzC,MAAA,CAAO,EAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pyreon/preact-compat",
3
- "version": "0.5.5",
3
+ "version": "0.5.7",
4
4
  "description": "Preact-compatible API shim for Pyreon — write Preact-style code that runs on Pyreon's reactive engine",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -59,9 +59,9 @@
59
59
  "prepublishOnly": "bun run build"
60
60
  },
61
61
  "dependencies": {
62
- "@pyreon/core": "^0.5.5",
63
- "@pyreon/reactivity": "^0.5.5",
64
- "@pyreon/runtime-dom": "^0.5.5"
62
+ "@pyreon/core": "^0.5.7",
63
+ "@pyreon/reactivity": "^0.5.7",
64
+ "@pyreon/runtime-dom": "^0.5.7"
65
65
  },
66
66
  "devDependencies": {
67
67
  "@happy-dom/global-registrator": "^20.8.3",