@faiwer/react 19.0.1 → 19.0.3

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 (114) hide show
  1. package/README.md +38 -16
  2. package/dist/core/actions/helpers.d.ts +6 -1
  3. package/dist/core/actions/helpers.d.ts.map +1 -1
  4. package/dist/core/actions/helpers.js +19 -1
  5. package/dist/core/actions/helpers.js.map +1 -1
  6. package/dist/core/actions/remove.action.d.ts.map +1 -1
  7. package/dist/core/actions/remove.action.js +2 -0
  8. package/dist/core/actions/remove.action.js.map +1 -1
  9. package/dist/core/components.d.ts.map +1 -1
  10. package/dist/core/components.js +9 -1
  11. package/dist/core/components.js.map +1 -1
  12. package/dist/core/createElement.d.ts +5 -1
  13. package/dist/core/createElement.d.ts.map +1 -1
  14. package/dist/core/createElement.js +25 -1
  15. package/dist/core/createElement.js.map +1 -1
  16. package/dist/core/devTools/devTools.d.ts +2 -0
  17. package/dist/core/devTools/devTools.d.ts.map +1 -0
  18. package/dist/core/devTools/devTools.js +46 -0
  19. package/dist/core/devTools/devTools.js.map +1 -0
  20. package/dist/core/devTools/hmr.d.ts +6 -0
  21. package/dist/core/devTools/hmr.d.ts.map +1 -0
  22. package/dist/core/devTools/hmr.js +55 -0
  23. package/dist/core/devTools/hmr.js.map +1 -0
  24. package/dist/core/devTools/toRFiber.d.ts +7 -0
  25. package/dist/core/devTools/toRFiber.d.ts.map +1 -0
  26. package/dist/core/devTools/toRFiber.js +130 -0
  27. package/dist/core/devTools/toRFiber.js.map +1 -0
  28. package/dist/core/devTools/toRJsx.d.ts +10 -0
  29. package/dist/core/devTools/toRJsx.d.ts.map +1 -0
  30. package/dist/core/devTools/toRJsx.js +62 -0
  31. package/dist/core/devTools/toRJsx.js.map +1 -0
  32. package/dist/core/devTools/types.d.ts +154 -0
  33. package/dist/core/devTools/types.d.ts.map +1 -0
  34. package/dist/core/devTools/types.js +19 -0
  35. package/dist/core/devTools/types.js.map +1 -0
  36. package/dist/core/preact/connect.d.ts +3 -0
  37. package/dist/core/preact/connect.d.ts.map +1 -0
  38. package/dist/core/preact/connect.js +162 -0
  39. package/dist/core/preact/connect.js.map +1 -0
  40. package/dist/core/preact/helpers.d.ts +12 -0
  41. package/dist/core/preact/helpers.d.ts.map +1 -0
  42. package/dist/core/preact/helpers.js +52 -0
  43. package/dist/core/preact/helpers.js.map +1 -0
  44. package/dist/core/preact/inspect.d.ts +9 -0
  45. package/dist/core/preact/inspect.d.ts.map +1 -0
  46. package/dist/core/preact/inspect.js +169 -0
  47. package/dist/core/preact/inspect.js.map +1 -0
  48. package/dist/core/preact/toVNode.d.ts +11 -0
  49. package/dist/core/preact/toVNode.d.ts.map +1 -0
  50. package/dist/core/preact/toVNode.js +150 -0
  51. package/dist/core/preact/toVNode.js.map +1 -0
  52. package/dist/core/preact/types.d.ts +180 -0
  53. package/dist/core/preact/types.d.ts.map +1 -0
  54. package/dist/core/preact/types.js +29 -0
  55. package/dist/core/preact/types.js.map +1 -0
  56. package/dist/core/preact/update.d.ts +13 -0
  57. package/dist/core/preact/update.d.ts.map +1 -0
  58. package/dist/core/preact/update.js +40 -0
  59. package/dist/core/preact/update.js.map +1 -0
  60. package/dist/core/reactNodeToFiberNode.d.ts.map +1 -1
  61. package/dist/core/reactNodeToFiberNode.js +10 -2
  62. package/dist/core/reactNodeToFiberNode.js.map +1 -1
  63. package/dist/core/reconciliation/applyActions.d.ts.map +1 -1
  64. package/dist/core/reconciliation/applyActions.js +1 -0
  65. package/dist/core/reconciliation/applyActions.js.map +1 -1
  66. package/dist/core/reconciliation/collect/fromApp.d.ts.map +1 -1
  67. package/dist/core/reconciliation/collect/fromApp.js +10 -1
  68. package/dist/core/reconciliation/collect/fromApp.js.map +1 -1
  69. package/dist/core/reconciliation/compare/areFiberNodesEq.d.ts.map +1 -1
  70. package/dist/core/reconciliation/compare/areFiberNodesEq.js +4 -0
  71. package/dist/core/reconciliation/compare/areFiberNodesEq.js.map +1 -1
  72. package/dist/core/reconciliation/effects.d.ts.map +1 -1
  73. package/dist/core/reconciliation/effects.js +1 -0
  74. package/dist/core/reconciliation/effects.js.map +1 -1
  75. package/dist/core/reconciliation/errors/ReactError.d.ts.map +1 -1
  76. package/dist/core/reconciliation/errors/ReactError.js +3 -0
  77. package/dist/core/reconciliation/errors/ReactError.js.map +1 -1
  78. package/dist/core/reconciliation/fibers.d.ts +12 -2
  79. package/dist/core/reconciliation/fibers.d.ts.map +1 -1
  80. package/dist/core/reconciliation/fibers.js +60 -1
  81. package/dist/core/reconciliation/fibers.js.map +1 -1
  82. package/dist/core/reconciliation/invalidateFiber.js +2 -2
  83. package/dist/core/reconciliation/invalidateFiber.js.map +1 -1
  84. package/dist/core/reconciliation/mount.d.ts.map +1 -1
  85. package/dist/core/reconciliation/mount.js +22 -0
  86. package/dist/core/reconciliation/mount.js.map +1 -1
  87. package/dist/core/reconciliation/postCommit.d.ts.map +1 -1
  88. package/dist/core/reconciliation/postCommit.js +1 -0
  89. package/dist/core/reconciliation/postCommit.js.map +1 -1
  90. package/dist/debug.d.ts +2 -0
  91. package/dist/debug.d.ts.map +1 -0
  92. package/dist/debug.js +2 -0
  93. package/dist/debug.js.map +1 -0
  94. package/dist/hooks/index.d.ts +3 -2
  95. package/dist/hooks/index.d.ts.map +1 -1
  96. package/dist/hooks/index.js +3 -2
  97. package/dist/hooks/index.js.map +1 -1
  98. package/dist/hooks/useEffect.d.ts +1 -0
  99. package/dist/hooks/useEffect.d.ts.map +1 -1
  100. package/dist/hooks/useEffect.js +2 -0
  101. package/dist/hooks/useEffect.js.map +1 -1
  102. package/dist/hooks/useId.js +1 -1
  103. package/dist/hooks/useId.js.map +1 -1
  104. package/dist/hooks/useRef.js +1 -1
  105. package/dist/hooks/useRef.js.map +1 -1
  106. package/dist/index.d.ts +48 -0
  107. package/dist/index.d.ts.map +1 -1
  108. package/dist/index.js +28 -1
  109. package/dist/index.js.map +1 -1
  110. package/dist/types/app.d.ts +9 -0
  111. package/dist/types/app.d.ts.map +1 -1
  112. package/dist/types/component.d.ts +2 -0
  113. package/dist/types/component.d.ts.map +1 -1
  114. package/package.json +14 -1
@@ -0,0 +1,169 @@
1
+ import { PREACT_VERSION, PreactVNodeType, } from './types';
2
+ import { findFiberById } from '../actions/helpers';
3
+ import { getPreactProps } from './toVNode';
4
+ import { nullthrows } from '../../utils';
5
+ import { marshall } from './helpers';
6
+ import { isJsxElementNode } from '../reconciliation/fibers';
7
+ /**
8
+ * A custom version of `PreactRenderer.inspect`. It is simpler to write our own
9
+ * implementation with the same signature and output shape than to support its
10
+ * internal hook detection approach.
11
+ */
12
+ export const patchedPreactRendererInspect = (app, renderer, devToolsNodeId) => {
13
+ const vnode = nullthrows(renderer.getVNodeById(devToolsNodeId));
14
+ // prettier-ignore
15
+ const fiber = nullthrows(findFiberById(app.root, vnode.__v));
16
+ return {
17
+ canSuspend: false,
18
+ key: fiber.key,
19
+ id: devToolsNodeId,
20
+ state: null, // This lib doesn't support class components directly.
21
+ signals: null,
22
+ suspended: false,
23
+ props: marshall(getPreactProps(fiber)),
24
+ name: getFiberName(fiber),
25
+ version: PREACT_VERSION,
26
+ hooks: getHooksInfo(fiber),
27
+ context: null, // Probably for class components.
28
+ type: PreactVNodeType.FN_COMPONENT,
29
+ };
30
+ };
31
+ const getFiberName = (fiber) => {
32
+ return fiber.component
33
+ ? (fiber.component.displayName ?? fiber.component.name)
34
+ : fiber.role === 'context'
35
+ ? (fiber.data.ctx.displayName ?? 'Context')
36
+ : fiber.role === 'portal'
37
+ ? 'Portal'
38
+ : 'unknown';
39
+ };
40
+ const getHooksInfo = (fiber) => {
41
+ if (fiber.type !== 'component') {
42
+ return [];
43
+ }
44
+ const hooks = fiber.data.hooks.flatMap((hook, idx) => getHookInfo(fiber, hook, idx));
45
+ // Preact DevTools support capturing hooks as a tree. But it's too much hassle
46
+ // to support it properly.
47
+ return [
48
+ {
49
+ ...ROOT_HOOK,
50
+ children: hooks.filter((h) => h.depth === 1).map((h) => h.id),
51
+ },
52
+ ...hooks,
53
+ ];
54
+ };
55
+ const getHookInfo = (fiber, hook, idx) => {
56
+ const hookType = hook.type === 'effect' && hook.mode === 'layout'
57
+ ? 'layoutEffect'
58
+ : hook.type;
59
+ const type = 'use' + hookType[0].toUpperCase() + hookType.slice(1);
60
+ const id = `${fiber.id}:${idx}`;
61
+ const [value, subItems] = getHookValue(id, hook);
62
+ return [
63
+ {
64
+ children: subItems.map((si) => si.id),
65
+ depth: 1,
66
+ editable: false,
67
+ id,
68
+ name: type,
69
+ type: 'undefined', // For all internal hooks it's `undefined`.
70
+ value,
71
+ index: idx,
72
+ meta: { index: idx, type },
73
+ },
74
+ ...subItems,
75
+ ];
76
+ };
77
+ const getHookValue = (id, hook) => {
78
+ switch (hook.type) {
79
+ case 'state':
80
+ return valueToHooks(id, hook.state);
81
+ case 'memo':
82
+ return valueToHooks(id, hook.value);
83
+ case 'context':
84
+ const closest = hook.providerFiber;
85
+ return valueToHooks(id, closest ? closest.props.value : hook.ctx.__default);
86
+ case 'effect':
87
+ case 'error':
88
+ return [{ type: 'function', name: 'anonymous' }, []];
89
+ case 'ref': {
90
+ const value = hook.value.current;
91
+ return value instanceof Node
92
+ ? [marshall(value), []]
93
+ : valueToHooks(id, value);
94
+ }
95
+ }
96
+ };
97
+ const valueToHooks = (parentId, data) => {
98
+ if (typeof data !== 'object' || data === null) {
99
+ return [marshall(data), []];
100
+ }
101
+ const path = [parentId];
102
+ const iteratee = (value) => {
103
+ const objHookId = path.join('|');
104
+ const objHook = {
105
+ ...SCALAR_HOOK,
106
+ id: objHookId,
107
+ depth: path.length + 1,
108
+ type: Array.isArray(value) ? 'array' : 'object',
109
+ name: path.at(-1),
110
+ value: marshall(value), // Not used
111
+ };
112
+ const children = [];
113
+ for (const [k, v] of Array.isArray(value)
114
+ ? value.entries()
115
+ : Object.entries(value)) {
116
+ if (typeof v === 'object' &&
117
+ v &&
118
+ !(v instanceof Node) &&
119
+ !isJsxElementNode(v) &&
120
+ path.length <= MAX_OBJ_DEPTH) {
121
+ path.push(String(k));
122
+ children.push(...iteratee(v));
123
+ path.pop();
124
+ }
125
+ else {
126
+ children.push({
127
+ ...SCALAR_HOOK,
128
+ id: `${objHookId}|${k}`,
129
+ depth: path.length + 2,
130
+ type: typeof v,
131
+ name: k,
132
+ value: marshall(v),
133
+ });
134
+ }
135
+ }
136
+ objHook.children = children
137
+ .filter((c) => c.depth === objHook.depth + 1)
138
+ .map((c) => c.id);
139
+ return [objHook, ...children];
140
+ };
141
+ const subhooks = iteratee(data)
142
+ // Skip the base hook.
143
+ .slice(1);
144
+ return [marshall(data), subhooks];
145
+ };
146
+ const MAX_OBJ_DEPTH = 4;
147
+ // A dummy node to extend with custom values.
148
+ const SCALAR_HOOK = {
149
+ children: [],
150
+ depth: -1,
151
+ editable: false,
152
+ id: '',
153
+ meta: null,
154
+ name: '',
155
+ type: '',
156
+ value: null,
157
+ };
158
+ /**
159
+ * Preact DevTools renders a tree of hooks/values where this node is the root
160
+ * node.
161
+ */
162
+ const ROOT_HOOK = {
163
+ ...SCALAR_HOOK,
164
+ depth: 0,
165
+ id: 'root',
166
+ name: 'root',
167
+ type: 'object',
168
+ };
169
+ //# sourceMappingURL=inspect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspect.js","sourceRoot":"","sources":["../../../src/core/preact/inspect.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { FiberNode, UnknownProps } from '../../types';
2
+ import { type PreactVNode } from './types';
3
+ /**
4
+ * Converts the given fiber node to a Preact VNode.
5
+ */
6
+ export declare const fiberToVNode: (fiber: FiberNode, idx: number, skipCache: boolean) => PreactVNode;
7
+ /**
8
+ * Returns `PreactVNode.props` + `__c.props`.
9
+ */
10
+ export declare const getPreactProps: (fiber: FiberNode) => UnknownProps;
11
+ //# sourceMappingURL=toVNode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toVNode.d.ts","sourceRoot":"","sources":["../../../src/core/preact/toVNode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EAGT,YAAY,EACb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAIL,KAAK,WAAW,EACjB,MAAM,SAAS,CAAC;AAKjB;;GAEG;AACH,eAAO,MAAM,YAAY,oEAgBxB,CAAC;AAwGF;;GAEG;AACH,eAAO,MAAM,cAAc,oCAuB1B,CAAC"}
@@ -0,0 +1,150 @@
1
+ import { PreactVNodeFields as F, PreactFragmentComponent, } from './types';
2
+ import { isRootFiber } from '../reconciliation/fibers';
3
+ const vnodesCache = new WeakMap();
4
+ /**
5
+ * Converts the given fiber node to a Preact VNode.
6
+ */
7
+ export const fiberToVNode = (fiber,
8
+ /** Position of the node within its parent container. */
9
+ idx,
10
+ /** Provide true to skip the cache. */
11
+ skipCache) => {
12
+ let cached = !skipCache && vnodesCache.get(fiber);
13
+ if (cached) {
14
+ updateVNode(fiber, cached, idx);
15
+ return cached;
16
+ }
17
+ else {
18
+ const vnode = createVNode(fiber, idx);
19
+ vnodesCache.set(fiber, vnode);
20
+ return vnode;
21
+ }
22
+ };
23
+ /**
24
+ * Created a node Preact VNode from scratch based on the given fiber node.
25
+ */
26
+ const createVNode = (fiber, idx) => {
27
+ const props = getPreactProps(fiber);
28
+ const component = getComponent(fiber);
29
+ return {
30
+ constructor: undefined,
31
+ ref: undefined,
32
+ key: fiber.key ?? undefined,
33
+ props,
34
+ type: component ?? fiber.tag,
35
+ [F.parent]: null, // Filled in `./connect.ts`
36
+ [F.diffIndicator]: 0, // Not used.
37
+ [F.compContext]: component ? getCompContext(fiber, component, props) : null,
38
+ [F.element]: fiber.role === 'portal'
39
+ ? fiber.data
40
+ : fiber.element instanceof Element || fiber.element instanceof Text
41
+ ? fiber.element
42
+ : // Comments are not supported
43
+ undefined,
44
+ [F.index]: isRootFiber(fiber) ? -1 : idx,
45
+ [F.children]: [], // Filled in `./connect.ts`
46
+ __o: null, // Not used.
47
+ [F.flags]: 0, // Not used.
48
+ [F.id]: fiber.id,
49
+ __source: fiber.source ?? undefined,
50
+ registered: false,
51
+ };
52
+ };
53
+ const compCtxCache = new WeakMap();
54
+ /**
55
+ * Generates a __c object. It's not unique per component, but unique per fiber.
56
+ * I.e., different versions of the same fiber node should have exactly the same
57
+ * __c node.
58
+ */
59
+ const getCompContext = (fiber, component, props) => {
60
+ let [fiberId, compCtx] = compCtxCache.get(fiber) ?? [];
61
+ if (!compCtx || fiberId !== fiber.id) {
62
+ compCtx = {
63
+ render: component,
64
+ props,
65
+ context: {},
66
+ constructor: component,
67
+ };
68
+ compCtxCache.set(fiber, [fiber.id, compCtx]);
69
+ }
70
+ else {
71
+ compCtx.props = props;
72
+ }
73
+ return compCtx;
74
+ };
75
+ const updateVNode = (fiber, vnode, idx) => {
76
+ vnode.props = getPreactProps(fiber);
77
+ vnode[F.index] = idx;
78
+ const compCtx = vnode[F.compContext];
79
+ if (compCtx) {
80
+ compCtx.props = getPreactProps(fiber);
81
+ }
82
+ };
83
+ /**
84
+ * Return `PreactVNode.type`. It has to be either a string (a tag name) or a
85
+ * function. We generate pseudo component functions for portal and context nodes
86
+ * because in such a case it's better visualized in the UI.
87
+ */
88
+ const getComponent = (fiber) => {
89
+ if (fiber.role === 'portal') {
90
+ // Generate a unique portal-component. Preact renders its own kind of
91
+ // portals as separate root nodes named "Z". Not very handy, TBH. So this
92
+ // tradeoff seems to be reasonable.
93
+ return getPortalComp(fiber);
94
+ }
95
+ if (fiber.role === 'context') {
96
+ // Generate a unique (per context kind) context-component.
97
+ return getContextComp(fiber.data.ctx);
98
+ }
99
+ if (isRootFiber(fiber) || fiber.type === 'fragment') {
100
+ // Critical: Preact DevTools expect here ONLY the fragment component.
101
+ return PreactFragmentComponent;
102
+ }
103
+ return fiber.component ?? null;
104
+ };
105
+ /**
106
+ * Returns `PreactVNode.props` + `__c.props`.
107
+ */
108
+ export const getPreactProps = (fiber) => {
109
+ if (fiber.role === 'context' || fiber.type === 'component') {
110
+ return { ...fiber.props };
111
+ }
112
+ if (fiber.role === 'portal') {
113
+ const domNode = fiber.data;
114
+ const tagName = domNode.tagName.toLowerCase();
115
+ const classes = domNode.classList.length
116
+ ? '.' + [...domNode.classList].join('.')
117
+ : '';
118
+ return {
119
+ // Preact DevTools will show it as "<div/>"
120
+ target: {
121
+ [F.element]: fiber.data,
122
+ type: tagName,
123
+ },
124
+ selector: `${tagName}${domNode.id ? `#${domNode.id}` : ''}${classes}`,
125
+ };
126
+ }
127
+ // tag, null, fragment, text nodes. None of them is shown in the UI.
128
+ return {};
129
+ };
130
+ const ctxCache = new WeakMap();
131
+ const getContextComp = (ctx) => {
132
+ let component = ctxCache.get(ctx);
133
+ if (!component) {
134
+ component = function FragmentDummy() { return null; }; // prettier-ignore
135
+ component.displayName = (ctx.displayName || 'Provider') + '.Provider';
136
+ ctxCache.set(ctx, component);
137
+ }
138
+ return component;
139
+ };
140
+ const portalCache = new WeakMap();
141
+ const getPortalComp = (fiber) => {
142
+ let component = portalCache.get(fiber);
143
+ if (!component) {
144
+ component = function PortalDummy() { return null; }; // prettier-ignore
145
+ component.displayName = `Portal`;
146
+ portalCache.set(fiber, component);
147
+ }
148
+ return component;
149
+ };
150
+ //# sourceMappingURL=toVNode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toVNode.js","sourceRoot":"","sources":["../../../src/core/preact/toVNode.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,180 @@
1
+ import type { FiberNode, ReactComponent, ReactContext, UnknownProps } from '../../types';
2
+ export declare const PreactVNodeFields: {
3
+ readonly parent: "__";
4
+ readonly element: "__e";
5
+ readonly children: "__k";
6
+ readonly id: "__v";
7
+ readonly compContext: "__c";
8
+ readonly diffIndicator: "__b";
9
+ readonly flags: "__u";
10
+ readonly index: "__i";
11
+ };
12
+ declare const F: {
13
+ readonly parent: "__";
14
+ readonly element: "__e";
15
+ readonly children: "__k";
16
+ readonly id: "__v";
17
+ readonly compContext: "__c";
18
+ readonly diffIndicator: "__b";
19
+ readonly flags: "__u";
20
+ readonly index: "__i";
21
+ };
22
+ export declare function PreactFragmentComponent({ children }: {
23
+ children: JSX.Element;
24
+ }): import("../../index.js").JsxElement;
25
+ export type PreactCompContext = {
26
+ constructor: AnyReactComponent;
27
+ render: AnyReactComponent;
28
+ props: UnknownProps;
29
+ context: object;
30
+ base?: Element | Comment;
31
+ state?: object;
32
+ };
33
+ export type PreactVNode = {
34
+ constructor: unknown | undefined;
35
+ key: string | number | undefined;
36
+ props: UnknownProps | string | number;
37
+ ref: unknown | undefined;
38
+ /** Component function or a tag name */
39
+ type: string | AnyReactComponent | ReactContext<any> | null;
40
+ /** A parent VNode. */
41
+ [F.parent]: PreactVNode | null;
42
+ /** Diff/patch flag/counter. */
43
+ [F.diffIndicator]: number;
44
+ /** An object describing the component and its state. */
45
+ [F.compContext]: PreactCompContext | null;
46
+ /** A DOM node. Refers to the 1st real child DOM element if doesn't have its own. */
47
+ [F.element]: Element | Text | undefined;
48
+ /** Index within the parent's children array. -1 for the root node. */
49
+ [F.index]: number;
50
+ /** Internal children list. */
51
+ [F.children]: Array<PreactVNode | null>;
52
+ /** Not used by dev tools. */
53
+ __o: null;
54
+ /** Hook state counter. */
55
+ [F.flags]: number;
56
+ /** VNode unique ID. */
57
+ [F.id]: number;
58
+ __self?: object;
59
+ __source?: {
60
+ columnNumber: number;
61
+ fileName: string;
62
+ lineNumber: number;
63
+ };
64
+ /** Our fields. */
65
+ registered: boolean;
66
+ };
67
+ /**
68
+ * A special object that:
69
+ * - A preact app creates it on its start up
70
+ * - And then the Preact Dev Tools injected script fills this object with extra
71
+ * API hooks that must be called during the render cycle.
72
+ */
73
+ export type PreactOptions = {
74
+ /** Should be called once on app mount. vNode is `app.root.children[0].
75
+ * `Element` is the DOM node where the app is mounted. */
76
+ _root: (vNode: unknown, element: Element) => void;
77
+ /** Called when a new VNode is created. */
78
+ vnode: (vNode: unknown) => void;
79
+ /** Called at the end of each render. */
80
+ _commit: (vNode: PreactVNode, commitQueue: unknown[]) => void;
81
+ /** Called before Preact handles a node. */
82
+ _diff: (vNode: PreactVNode) => void;
83
+ /** Called after Preact handled a node. */
84
+ diffed: (vnode: PreactVNode) => void;
85
+ /** Called when Preact render engine handle children of a container like node. */
86
+ _render: (vNode: PreactVNode, parent?: PreactVNode) => void;
87
+ /** Called when Preact removes a node. */
88
+ unmount: (vnode: PreactVNode) => void;
89
+ };
90
+ export type PreactRendererConfig = {
91
+ Fragment: typeof PreactFragmentComponent;
92
+ };
93
+ /** Preact DevTools support was build based on this Preact codebase version. */
94
+ export declare const PREACT_VERSION = "10.28.0";
95
+ /** window.__PREACT_DEVTOOLS__ */
96
+ export type PreactDevTools = {
97
+ renderers: Map<number, PreactRenderer>;
98
+ /** A hook that should be called once per app. Automatically created a new
99
+ * Preact-renderer and registers it. */
100
+ attachPreact: (version: typeof PREACT_VERSION, options: PreactOptions, rendererConfig: PreactRendererConfig) => number;
101
+ };
102
+ export type PreactRenderer = {
103
+ getVNodeById: (id: number) => PreactVNode | null;
104
+ /** Called on a tree node selection. */
105
+ inspect: (id: number) => PreactInspection;
106
+ /** Called on manual props/context/state changes for the selected tree node. */
107
+ update: (id: number, type: string, path: string[], value: unknown) => void;
108
+ };
109
+ /** A hook representation. Or sub-value of a hook value. */
110
+ export interface PreactHookInspection {
111
+ /** Unique ID. */
112
+ id: string;
113
+ /** IDs of subhooks. */
114
+ children: string[];
115
+ /** The hierarhcy level. */
116
+ depth: number;
117
+ /** Hook name to display. */
118
+ name: unknown;
119
+ /** When `true` the `.value` can be temporarily edited. */
120
+ editable: boolean;
121
+ /**
122
+ * - `typeof` is it's a field of a hook's value.
123
+ * - `undefined` for regular hooks.
124
+ * - `object` for the root pseudo-hook
125
+ */
126
+ type: string;
127
+ meta: null | {
128
+ index: number;
129
+ type: string;
130
+ };
131
+ /** An order within the parent hook or the component. */
132
+ index?: number;
133
+ /** The value of the hook. May be null. */
134
+ value: unknown;
135
+ }
136
+ /**
137
+ * A component representation for the selected tree node.
138
+ */
139
+ export interface PreactInspection {
140
+ context: null;
141
+ canSuspend: boolean;
142
+ key: FiberNode['key'] | null;
143
+ hooks: PreactHookInspection[];
144
+ /** Long DevTools' ID, not VNode.id */
145
+ id: number;
146
+ name: string;
147
+ props: UnknownProps;
148
+ state: null;
149
+ signals: null;
150
+ type: number;
151
+ suspended: boolean;
152
+ version: typeof PREACT_VERSION;
153
+ }
154
+ export declare enum PreactVNodeType {
155
+ FN_COMPONENT = 3
156
+ }
157
+ /**
158
+ * App['preact']
159
+ */
160
+ export type PreactAdapter = {
161
+ /** A middleware layer over the Preact DevTools API. */
162
+ api: PreactAPI;
163
+ /** window.__PREACT_DEVTOOLS__ */
164
+ global: PreactDevTools;
165
+ /** Fiber IDs of nodes invalidated within the last render. */
166
+ invalidated: Set<number>;
167
+ /** createRoot().render(_this_). */
168
+ userRootVNode: PreactVNode | null;
169
+ /** A banch of helper methods on the page side created by the Preact DevTools
170
+ * extension */
171
+ renderer: PreactRenderer;
172
+ };
173
+ /** A middleware layer over the Preact DevTools API. */
174
+ export type PreactAPI = {
175
+ afterRender: () => void;
176
+ unmount: (fiber: FiberNode) => void;
177
+ };
178
+ type AnyReactComponent = ReactComponent<any>;
179
+ export {};
180
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/preact/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ export const PreactVNodeFields = {
2
+ parent: '__',
3
+ element: '__e',
4
+ children: '__k',
5
+ id: '__v',
6
+ compContext: '__c',
7
+ diffIndicator: '__b',
8
+ flags: '__u',
9
+ index: '__i',
10
+ };
11
+ const F = PreactVNodeFields;
12
+ // prettier-ignore
13
+ export function PreactFragmentComponent({ children }) {
14
+ return children;
15
+ }
16
+ /** Preact DevTools support was build based on this Preact codebase version. */
17
+ export const PREACT_VERSION = '10.28.0';
18
+ export { PreactVNodeType };
19
+ var PreactVNodeType;
20
+ (function (PreactVNodeType) {
21
+ PreactVNodeType[PreactVNodeType["FN_COMPONENT"] = 3] = "FN_COMPONENT";
22
+ // Since we don't use them it's better to comment them
23
+ // MEMO = 5,
24
+ // FORWARD_REF = 4,
25
+ // SUSPENCE = 6,
26
+ // PORTAL = 9,
27
+ // ELEMENT = 1,
28
+ })(PreactVNodeType || (PreactVNodeType = {}));
29
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/core/preact/types.ts"],"names":[],"mappings":"AAOA,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,MAAM,EAAE,IAAI;IACZ,OAAO,EAAE,KAAK;IACd,QAAQ,EAAE,KAAK;IACf,EAAE,EAAE,KAAK;IACT,WAAW,EAAE,KAAK;IAClB,aAAa,EAAE,KAAK;IACpB,KAAK,EAAE,KAAK;IACZ,KAAK,EAAE,KAAK;CACJ,CAAC;AACX,MAAM,CAAC,GAAG,iBAAiB,CAAC;AAE5B,kBAAkB;AAClB,MAAM,UAAU,uBAAuB,CAAC,EAAE,QAAQ,EAA8B,EAAE;IAChF,OAAO,QAAQ,CAAC;AAAA,CACjB;AAyED,+EAA+E;AAC/E,MAAM,CAAC,MAAM,cAAc,GAAG,SAAS,CAAC;SAkE5B,eAAe;AAA3B,IAAY,eAQX;AARD,WAAY,eAAe;IACzB,qEAAgB,CAAA;IAChB,sDAAsD;IACtD,YAAY;IACZ,mBAAmB;IACnB,gBAAgB;IAChB,cAAc;IACd,eAAe;AANE,CACnB,EAFY,eAAe,KAAf,eAAe,QAQ1B"}
@@ -0,0 +1,13 @@
1
+ import type { App } from '../../types';
2
+ import type { PreactRenderer } from './types';
3
+ /**
4
+ * Custom implementation for PreactRenderer.update. It's simpler to intercept
5
+ * update messages at the top level, than to support it via `__c.forceUpdate()`.
6
+ * Internally PreactDev Tools patches `vnode.__c.props` and calls
7
+ * `forceUpdate()`. `__c.props` are not real props. We prettify them for
8
+ * dev-tools. E.g. we convert children JSX nodes into Preact VNodes. So we
9
+ * cannot rely in the default behavior, it'll break components due to wrong type
10
+ * of children JSX elements.
11
+ */
12
+ export declare function patchedPreactRendererUpdate(app: App, renderer: PreactRenderer, devToolsNodeId: number, type: string, path: string[], value: unknown): void;
13
+ //# sourceMappingURL=update.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/core/preact/update.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,GAAG,EAIJ,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAM9C;;;;;;;;GAQG;AACH,wBAAgB,2BAA2B,CACzC,GAAG,EAAE,GAAG,EACR,QAAQ,EAAE,cAAc,EACxB,cAAc,EAAE,MAAM,EACtB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EAAE,EACd,KAAK,EAAE,OAAO,GACb,IAAI,CA+BN"}
@@ -0,0 +1,40 @@
1
+ import { nullthrows } from '../../utils';
2
+ import { findFiberById } from '../actions/helpers';
3
+ import { invalidateFiber } from '../reconciliation/invalidateFiber';
4
+ import { ReactError } from '../reconciliation/errors/ReactError';
5
+ /**
6
+ * Custom implementation for PreactRenderer.update. It's simpler to intercept
7
+ * update messages at the top level, than to support it via `__c.forceUpdate()`.
8
+ * Internally PreactDev Tools patches `vnode.__c.props` and calls
9
+ * `forceUpdate()`. `__c.props` are not real props. We prettify them for
10
+ * dev-tools. E.g. we convert children JSX nodes into Preact VNodes. So we
11
+ * cannot rely in the default behavior, it'll break components due to wrong type
12
+ * of children JSX elements.
13
+ */
14
+ export function patchedPreactRendererUpdate(app, renderer, devToolsNodeId, type, path, value) {
15
+ const vnode = nullthrows(renderer.getVNodeById(devToolsNodeId));
16
+ // prettier-ignore
17
+ const fiber = nullthrows(findFiberById(app.root, vnode.__v));
18
+ if (fiber.type === 'tag') {
19
+ throw new ReactError(fiber, `Updating portal props is not supported`);
20
+ }
21
+ if (type !== 'props') {
22
+ // - `state` & `context`: only for class components, which are not directly
23
+ // supported. Instead they are presented as fn-component hooks.
24
+ // - `signal`: signals are not supported.
25
+ throw new ReactError(fiber, `Updating ${type} is not yet implemented`);
26
+ }
27
+ let root = fiber.props;
28
+ for (const k of path.slice(0, -1))
29
+ root = root[k];
30
+ root[path.at(-1)] = value;
31
+ if (fiber.type === 'component') {
32
+ invalidateFiber(fiber);
33
+ }
34
+ else {
35
+ for (const consumer of fiber.data.consumers) {
36
+ invalidateFiber(consumer);
37
+ }
38
+ }
39
+ }
40
+ //# sourceMappingURL=update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/core/preact/update.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAC;AAEjE;;;;;;;;GAQG;AACH,MAAM,UAAU,2BAA2B,CACzC,GAAQ,EACR,QAAwB,EACxB,cAAsB,EACtB,IAAY,EACZ,IAAc,EACd,KAAc,EACR;IACN,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,CAAC;IAChE,kBAAkB;IAClB,MAAM,KAAK,GAAG,UAAU,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAIxC,CAAC;IAEpB,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QACzB,MAAM,IAAI,UAAU,CAAC,KAAK,EAAE,wCAAwC,CAAC,CAAC;IACxE,CAAC;IAED,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACrB,2EAA2E;QAC3E,kEAAkE;QAClE,yCAAyC;QACzC,MAAM,IAAI,UAAU,CAAC,KAAK,EAAE,YAAY,IAAI,yBAAyB,CAAC,CAAC;IACzE,CAAC;IAED,IAAI,IAAI,GAAG,KAAK,CAAC,KAAqB,CAAC;IACvC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAAE,IAAI,GAAG,IAAI,CAAC,CAAC,CAAiB,CAAC;IAClE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,GAAG,KAAK,CAAC;IAE3B,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAC/B,eAAe,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;SAAM,CAAC;QACN,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YAC5C,eAAe,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;AAAA,CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"reactNodeToFiberNode.d.ts","sourceRoot":"","sources":["../../src/core/reactNodeToFiberNode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAGL,KAAK,SAAS,EAUf,MAAM,UAAU,CAAC;AAQlB,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAGhE;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,qIAuLjC,CAAC"}
1
+ {"version":3,"file":"reactNodeToFiberNode.d.ts","sourceRoot":"","sources":["../../src/core/reactNodeToFiberNode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAGL,KAAK,SAAS,EAUf,MAAM,UAAU,CAAC;AAQlB,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAGhE;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,qIAiMjC,CAAC"}