@rainfw/core 0.1.2 → 0.2.1

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 (63) hide show
  1. package/dist/client/dom.d.ts +4 -0
  2. package/dist/client/dom.d.ts.map +1 -0
  3. package/dist/client/dom.js +130 -0
  4. package/dist/client/dom.js.map +1 -0
  5. package/dist/client/hooks.d.ts +58 -0
  6. package/dist/client/hooks.d.ts.map +1 -0
  7. package/dist/client/hooks.js +173 -0
  8. package/dist/client/hooks.js.map +1 -0
  9. package/dist/client/hydrate.d.ts +14 -0
  10. package/dist/client/hydrate.d.ts.map +1 -0
  11. package/dist/client/hydrate.js +167 -0
  12. package/dist/client/hydrate.js.map +1 -0
  13. package/dist/client/jsx-runtime.d.ts +6 -0
  14. package/dist/client/jsx-runtime.d.ts.map +1 -0
  15. package/dist/client/jsx-runtime.js +20 -0
  16. package/dist/client/jsx-runtime.js.map +1 -0
  17. package/dist/client/reconciler.d.ts +4 -0
  18. package/dist/client/reconciler.d.ts.map +1 -0
  19. package/dist/client/reconciler.js +238 -0
  20. package/dist/client/reconciler.js.map +1 -0
  21. package/dist/client/runtime.d.ts +6 -0
  22. package/dist/client/runtime.d.ts.map +1 -0
  23. package/dist/client/runtime.js +17 -0
  24. package/dist/client/runtime.js.map +1 -0
  25. package/dist/client/scheduler.d.ts +4 -0
  26. package/dist/client/scheduler.d.ts.map +1 -0
  27. package/dist/client/scheduler.js +44 -0
  28. package/dist/client/scheduler.js.map +1 -0
  29. package/dist/compiler/inject.d.ts +6 -0
  30. package/dist/compiler/inject.d.ts.map +1 -0
  31. package/dist/compiler/inject.js +19 -0
  32. package/dist/compiler/inject.js.map +1 -0
  33. package/dist/compiler/server-action.d.ts +9 -0
  34. package/dist/compiler/server-action.d.ts.map +1 -0
  35. package/dist/compiler/server-action.js +98 -0
  36. package/dist/compiler/server-action.js.map +1 -0
  37. package/dist/context.js +1 -1
  38. package/dist/context.js.map +1 -1
  39. package/dist/index.d.ts +5 -3
  40. package/dist/index.d.ts.map +1 -1
  41. package/dist/index.js +2 -1
  42. package/dist/index.js.map +1 -1
  43. package/dist/jsx/index.d.ts +3 -2
  44. package/dist/jsx/index.d.ts.map +1 -1
  45. package/dist/jsx/index.js +2 -2
  46. package/dist/jsx/index.js.map +1 -1
  47. package/dist/jsx/render.d.ts +7 -1
  48. package/dist/jsx/render.d.ts.map +1 -1
  49. package/dist/jsx/render.js +96 -14
  50. package/dist/jsx/render.js.map +1 -1
  51. package/dist/jsx/types.d.ts +4 -0
  52. package/dist/jsx/types.d.ts.map +1 -1
  53. package/dist/jsx/types.js +10 -0
  54. package/dist/jsx/types.js.map +1 -1
  55. package/dist/router.d.ts +7 -1
  56. package/dist/router.d.ts.map +1 -1
  57. package/dist/router.js +84 -3
  58. package/dist/router.js.map +1 -1
  59. package/dist/types.d.ts +2 -0
  60. package/dist/types.d.ts.map +1 -1
  61. package/package.json +7 -2
  62. package/scripts/dev.js +28 -1
  63. package/scripts/generate.js +228 -10
@@ -0,0 +1,4 @@
1
+ import type { RainElement } from "../jsx/types";
2
+ export declare function applyProps(el: HTMLElement, props: Record<string, unknown>): void;
3
+ export declare function createDomNode(vnode: RainElement): Node;
4
+ //# sourceMappingURL=dom.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dom.d.ts","sourceRoot":"","sources":["../../src/framework/client/dom.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAY,MAAM,cAAc,CAAC;AAwF1D,wBAAgB,UAAU,CACxB,EAAE,EAAE,WAAW,EACf,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,IAAI,CAQN;AA0BD,wBAAgB,aAAa,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAoBtD"}
@@ -0,0 +1,130 @@
1
+ import { Fragment } from "../jsx/createElement";
2
+ import { RAIN_ELEMENT } from "../jsx/types";
3
+ const BOOLEAN_ATTRS = new Set([
4
+ "allowfullscreen",
5
+ "async",
6
+ "autofocus",
7
+ "autoplay",
8
+ "checked",
9
+ "controls",
10
+ "default",
11
+ "defer",
12
+ "disabled",
13
+ "formnovalidate",
14
+ "hidden",
15
+ "inert",
16
+ "ismap",
17
+ "loop",
18
+ "multiple",
19
+ "muted",
20
+ "nomodule",
21
+ "novalidate",
22
+ "open",
23
+ "playsinline",
24
+ "readonly",
25
+ "required",
26
+ "reversed",
27
+ "selected",
28
+ ]);
29
+ function styleToCss(style) {
30
+ const parts = [];
31
+ for (const key of Object.keys(style)) {
32
+ const value = style[key];
33
+ if (value === undefined || value === null)
34
+ continue;
35
+ const cssKey = key.replace(/[A-Z]/g, (ch) => `-${ch.toLowerCase()}`);
36
+ const cssValue = typeof value === "number" ? `${String(value)}px` : value;
37
+ parts.push(`${cssKey}:${String(cssValue)}`);
38
+ }
39
+ return parts.join(";");
40
+ }
41
+ const SKIP_PROPS = new Set(["children", "key", "ref"]);
42
+ function applyEventProp(el, key, value) {
43
+ if (!key.startsWith("on") || typeof value !== "function")
44
+ return false;
45
+ const eventName = key.slice(2).toLowerCase();
46
+ el.addEventListener(eventName, value);
47
+ return true;
48
+ }
49
+ function applySpecialProp(el, key, value) {
50
+ if (key === "className") {
51
+ el.setAttribute("class", String(value));
52
+ return true;
53
+ }
54
+ if (key === "style" && typeof value === "object" && value) {
55
+ el.setAttribute("style", styleToCss(value));
56
+ return true;
57
+ }
58
+ return false;
59
+ }
60
+ function applyRegularProp(el, key, value) {
61
+ if (BOOLEAN_ATTRS.has(key)) {
62
+ if (value) {
63
+ el.setAttribute(key, "");
64
+ }
65
+ else {
66
+ el.removeAttribute(key);
67
+ }
68
+ return;
69
+ }
70
+ if (value === false || value === undefined || value === null) {
71
+ el.removeAttribute(key);
72
+ return;
73
+ }
74
+ el.setAttribute(key, String(value));
75
+ }
76
+ export function applyProps(el, props) {
77
+ for (const key of Object.keys(props)) {
78
+ if (SKIP_PROPS.has(key))
79
+ continue;
80
+ const value = props[key];
81
+ if (applyEventProp(el, key, value))
82
+ continue;
83
+ if (applySpecialProp(el, key, value))
84
+ continue;
85
+ applyRegularProp(el, key, value);
86
+ }
87
+ }
88
+ function isRainElement(value) {
89
+ return (typeof value === "object" &&
90
+ value !== null &&
91
+ value.$$typeof === RAIN_ELEMENT);
92
+ }
93
+ function createChildNodes(children, parent) {
94
+ for (const child of children) {
95
+ if (child === null || child === undefined)
96
+ continue;
97
+ if (typeof child === "boolean")
98
+ continue;
99
+ if (Array.isArray(child)) {
100
+ createChildNodes(child, parent);
101
+ continue;
102
+ }
103
+ if (isRainElement(child)) {
104
+ parent.appendChild(createDomNode(child));
105
+ continue;
106
+ }
107
+ parent.appendChild(document.createTextNode(String(child)));
108
+ }
109
+ }
110
+ export function createDomNode(vnode) {
111
+ const { tag, props, children } = vnode;
112
+ if (tag === Fragment) {
113
+ const frag = document.createDocumentFragment();
114
+ createChildNodes(children, frag);
115
+ return frag;
116
+ }
117
+ if (typeof tag === "function") {
118
+ const result = tag({ ...props, children });
119
+ if (result === null)
120
+ return document.createTextNode("");
121
+ if (typeof result === "string")
122
+ return document.createTextNode(result);
123
+ return createDomNode(result);
124
+ }
125
+ const el = document.createElement(tag);
126
+ applyProps(el, props);
127
+ createChildNodes(children, el);
128
+ return el;
129
+ }
130
+ //# sourceMappingURL=dom.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dom.js","sourceRoot":"","sources":["../../src/framework/client/dom.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ import type { RainComponent, RainElement } from "../jsx/types";
2
+ export interface Fiber {
3
+ vnode: RainElement;
4
+ rendered?: RainElement;
5
+ dom: Node;
6
+ hooks: HookState[];
7
+ hookIndex: number;
8
+ childFibers: Fiber[];
9
+ parent: Fiber | null;
10
+ }
11
+ export interface StateHookState {
12
+ kind: "state";
13
+ value: unknown;
14
+ queue: Array<unknown | ((prev: unknown) => unknown)>;
15
+ }
16
+ export interface EffectHookState {
17
+ kind: "effect";
18
+ effect: () => undefined | (() => void);
19
+ cleanup: (() => void) | undefined;
20
+ deps: unknown[] | undefined;
21
+ }
22
+ export interface RefHookState {
23
+ kind: "ref";
24
+ ref: {
25
+ current: unknown;
26
+ };
27
+ }
28
+ export interface MemoHookState {
29
+ kind: "memo";
30
+ value: unknown;
31
+ deps: unknown[] | undefined;
32
+ }
33
+ export type HookState = StateHookState | EffectHookState | RefHookState | MemoHookState;
34
+ export declare function getCurrentFiber(): Fiber | null;
35
+ export declare function setCurrentFiber(fiber: Fiber | null): void;
36
+ type SetStateAction<T> = T | ((prev: T) => T);
37
+ type Dispatch<T> = (action: SetStateAction<T>) => void;
38
+ export declare function setScheduleUpdate(fn: (fiber: Fiber) => void): void;
39
+ export declare function useState<T>(initial: T): [T, Dispatch<T>];
40
+ export declare function useEffect(effect: () => undefined | (() => void), deps?: unknown[]): void;
41
+ export interface RefObject<T> {
42
+ current: T;
43
+ }
44
+ export declare function useRef<T>(initial: T): RefObject<T>;
45
+ export declare function useMemo<T>(factory: () => T, deps: unknown[]): T;
46
+ export declare function useCallback<T extends (...args: never[]) => unknown>(callback: T, deps: unknown[]): T;
47
+ export interface RainContext<T> {
48
+ _defaultValue: T;
49
+ _currentValue: T;
50
+ Provider: RainComponent;
51
+ }
52
+ export declare function createContext<T>(defaultValue: T): RainContext<T>;
53
+ export declare function useContext<T>(context: RainContext<T>): T;
54
+ export declare function flushPendingEffects(): void;
55
+ export declare function cleanupFiberEffects(fiber: Fiber): void;
56
+ export declare function hasPendingEffects(): boolean;
57
+ export {};
58
+ //# sourceMappingURL=hooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/framework/client/hooks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,173 @@
1
+ import { Fragment } from "../jsx/createElement";
2
+ import { RAIN_ELEMENT } from "../jsx/types";
3
+ const pendingEffects = [];
4
+ let currentFiber = null;
5
+ export function getCurrentFiber() {
6
+ return currentFiber;
7
+ }
8
+ export function setCurrentFiber(fiber) {
9
+ currentFiber = fiber;
10
+ if (fiber) {
11
+ fiber.hookIndex = 0;
12
+ }
13
+ }
14
+ let scheduleUpdateFn = null;
15
+ export function setScheduleUpdate(fn) {
16
+ scheduleUpdateFn = fn;
17
+ }
18
+ export function useState(initial) {
19
+ const fiber = currentFiber;
20
+ if (!fiber) {
21
+ throw new Error("useState must be called inside a component. " +
22
+ "Ensure you are not calling hooks conditionally " +
23
+ "or outside of a render cycle.");
24
+ }
25
+ const idx = fiber.hookIndex;
26
+ fiber.hookIndex++;
27
+ if (idx >= fiber.hooks.length) {
28
+ fiber.hooks.push({
29
+ kind: "state",
30
+ value: initial,
31
+ queue: [],
32
+ });
33
+ }
34
+ const hook = fiber.hooks[idx];
35
+ for (const action of hook.queue) {
36
+ if (typeof action === "function") {
37
+ hook.value = action(hook.value);
38
+ }
39
+ else {
40
+ hook.value = action;
41
+ }
42
+ }
43
+ hook.queue.length = 0;
44
+ const setState = (action) => {
45
+ hook.queue.push(action);
46
+ if (scheduleUpdateFn && fiber) {
47
+ scheduleUpdateFn(fiber);
48
+ }
49
+ };
50
+ return [hook.value, setState];
51
+ }
52
+ function shallowEqual(a, b) {
53
+ if (a === undefined || b === undefined)
54
+ return false;
55
+ if (a.length !== b.length)
56
+ return false;
57
+ for (let i = 0; i < a.length; i++) {
58
+ if (!Object.is(a[i], b[i]))
59
+ return false;
60
+ }
61
+ return true;
62
+ }
63
+ function throwHookError(name) {
64
+ throw new Error(`${name} must be called inside a component. ` +
65
+ "Ensure you are not calling hooks conditionally " +
66
+ "or outside of a render cycle.");
67
+ }
68
+ export function useEffect(effect, deps) {
69
+ if (!currentFiber)
70
+ throwHookError("useEffect");
71
+ const fiber = currentFiber;
72
+ const idx = fiber.hookIndex;
73
+ fiber.hookIndex++;
74
+ if (idx >= fiber.hooks.length) {
75
+ fiber.hooks.push({
76
+ kind: "effect",
77
+ effect,
78
+ cleanup: undefined,
79
+ deps,
80
+ });
81
+ pendingEffects.push({ fiber, index: idx });
82
+ return;
83
+ }
84
+ const hook = fiber.hooks[idx];
85
+ if (!shallowEqual(hook.deps, deps)) {
86
+ hook.effect = effect;
87
+ hook.deps = deps;
88
+ pendingEffects.push({ fiber, index: idx });
89
+ }
90
+ }
91
+ export function useRef(initial) {
92
+ if (!currentFiber)
93
+ throwHookError("useRef");
94
+ const fiber = currentFiber;
95
+ const idx = fiber.hookIndex;
96
+ fiber.hookIndex++;
97
+ if (idx >= fiber.hooks.length) {
98
+ fiber.hooks.push({
99
+ kind: "ref",
100
+ ref: { current: initial },
101
+ });
102
+ }
103
+ return fiber.hooks[idx].ref;
104
+ }
105
+ export function useMemo(factory, deps) {
106
+ if (!currentFiber)
107
+ throwHookError("useMemo");
108
+ const fiber = currentFiber;
109
+ const idx = fiber.hookIndex;
110
+ fiber.hookIndex++;
111
+ if (idx >= fiber.hooks.length) {
112
+ const value = factory();
113
+ fiber.hooks.push({ kind: "memo", value, deps });
114
+ return value;
115
+ }
116
+ const hook = fiber.hooks[idx];
117
+ if (!shallowEqual(hook.deps, deps)) {
118
+ hook.value = factory();
119
+ hook.deps = deps;
120
+ }
121
+ return hook.value;
122
+ }
123
+ export function useCallback(callback, deps) {
124
+ return useMemo(() => callback, deps);
125
+ }
126
+ export function createContext(defaultValue) {
127
+ const context = {
128
+ _defaultValue: defaultValue,
129
+ _currentValue: defaultValue,
130
+ Provider: (props) => {
131
+ context._currentValue = props["value"];
132
+ const children = (props["children"] ?? []);
133
+ return {
134
+ $$typeof: RAIN_ELEMENT,
135
+ tag: Fragment,
136
+ props: {},
137
+ children,
138
+ };
139
+ },
140
+ };
141
+ return context;
142
+ }
143
+ export function useContext(context) {
144
+ if (!currentFiber)
145
+ throwHookError("useContext");
146
+ return context._currentValue;
147
+ }
148
+ export function flushPendingEffects() {
149
+ const effects = [...pendingEffects];
150
+ pendingEffects.length = 0;
151
+ for (const { fiber, index } of effects) {
152
+ const hook = fiber.hooks[index];
153
+ if (!hook || hook.kind !== "effect")
154
+ continue;
155
+ if (hook.cleanup)
156
+ hook.cleanup();
157
+ const result = hook.effect();
158
+ hook.cleanup =
159
+ typeof result === "function" ? result : undefined;
160
+ }
161
+ }
162
+ export function cleanupFiberEffects(fiber) {
163
+ for (const hook of fiber.hooks) {
164
+ if (hook.kind === "effect" && hook.cleanup) {
165
+ hook.cleanup();
166
+ hook.cleanup = undefined;
167
+ }
168
+ }
169
+ }
170
+ export function hasPendingEffects() {
171
+ return pendingEffects.length > 0;
172
+ }
173
+ //# sourceMappingURL=hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../src/framework/client/hooks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { type RainComponent } from "../jsx/types";
2
+ import type { Fiber } from "./hooks";
3
+ interface IslandDescriptor {
4
+ index: number;
5
+ islandId: string;
6
+ rootElement: Element;
7
+ props: Record<string, unknown>;
8
+ propsScript: Element;
9
+ }
10
+ export declare function findIslands(root: Node): IslandDescriptor[];
11
+ export declare function hydrateIsland(rootDom: Element, component: RainComponent, props: Record<string, unknown>): Fiber;
12
+ export declare function hydrateIslands(root: Node, registry: ReadonlyMap<string, RainComponent>): Fiber[];
13
+ export {};
14
+ //# sourceMappingURL=hydrate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hydrate.d.ts","sourceRoot":"","sources":["../../src/framework/client/hydrate.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,KAAK,aAAa,EAGnB,MAAM,cAAc,CAAC;AACtB,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAGrC,UAAU,gBAAgB;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,WAAW,EAAE,OAAO,CAAC;CACtB;AA+DD,wBAAgB,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,gBAAgB,EAAE,CA4B1D;AA+DD,wBAAgB,aAAa,CAC3B,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,aAAa,EACxB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,KAAK,CA+BP;AAED,wBAAgB,cAAc,CAC5B,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,aAAa,CAAC,GAC3C,KAAK,EAAE,CAeT"}
@@ -0,0 +1,167 @@
1
+ import { Fragment } from "../jsx/createElement";
2
+ import { RAIN_ELEMENT, RAIN_ISLAND, } from "../jsx/types";
3
+ import { setCurrentFiber } from "./hooks";
4
+ const ISLAND_START_RE = /^\$rain-island:(\d+):(.+)$/;
5
+ function isRainElement(value) {
6
+ return (typeof value === "object" &&
7
+ value !== null &&
8
+ value.$$typeof === RAIN_ELEMENT);
9
+ }
10
+ function flattenChildren(children) {
11
+ const flat = [];
12
+ for (const child of children) {
13
+ if (Array.isArray(child)) {
14
+ flat.push(...flattenChildren(child));
15
+ }
16
+ else {
17
+ flat.push(child);
18
+ }
19
+ }
20
+ return flat;
21
+ }
22
+ function collectComments(root) {
23
+ const comments = [];
24
+ const walker = document.createTreeWalker(root, NodeFilter.SHOW_COMMENT);
25
+ let current = walker.nextNode();
26
+ while (current) {
27
+ comments.push(current);
28
+ current = walker.nextNode();
29
+ }
30
+ return comments;
31
+ }
32
+ function scanSiblings(start, index) {
33
+ let rootElement = null;
34
+ let propsScript = null;
35
+ let sibling = start.nextSibling;
36
+ const endMarker = `/$rain-island:${index}`;
37
+ while (sibling) {
38
+ if (sibling.nodeType === Node.COMMENT_NODE &&
39
+ sibling.textContent === endMarker) {
40
+ break;
41
+ }
42
+ if (sibling instanceof HTMLScriptElement &&
43
+ sibling.getAttribute("data-rain-props") === String(index)) {
44
+ propsScript = sibling;
45
+ }
46
+ else if (sibling instanceof Element && !rootElement) {
47
+ rootElement = sibling;
48
+ }
49
+ sibling = sibling.nextSibling;
50
+ }
51
+ return { rootElement, propsScript };
52
+ }
53
+ export function findIslands(root) {
54
+ const islands = [];
55
+ const comments = collectComments(root);
56
+ for (const node of comments) {
57
+ const text = node.textContent ?? "";
58
+ const match = ISLAND_START_RE.exec(text);
59
+ if (!match)
60
+ continue;
61
+ const [, indexStr, id] = match;
62
+ const index = parseInt(indexStr ?? "0", 10);
63
+ const islandId = id ?? "";
64
+ const { rootElement, propsScript } = scanSiblings(node, index);
65
+ if (rootElement && propsScript) {
66
+ const rawJson = propsScript.textContent ?? "{}";
67
+ const props = JSON.parse(rawJson);
68
+ islands.push({
69
+ index,
70
+ islandId,
71
+ rootElement,
72
+ props,
73
+ propsScript,
74
+ });
75
+ }
76
+ }
77
+ return islands;
78
+ }
79
+ function attachEventHandlers(el, props) {
80
+ for (const key of Object.keys(props)) {
81
+ if (!key.startsWith("on"))
82
+ continue;
83
+ const value = props[key];
84
+ if (typeof value !== "function")
85
+ continue;
86
+ const eventName = key.slice(2).toLowerCase();
87
+ el.addEventListener(eventName, value);
88
+ }
89
+ }
90
+ function hydrateChildren(parent, children) {
91
+ const flat = flattenChildren(children).filter((c) => c !== null && c !== undefined && typeof c !== "boolean");
92
+ let domIndex = 0;
93
+ for (const child of flat) {
94
+ const domNode = parent.childNodes[domIndex];
95
+ domIndex++;
96
+ if (!domNode)
97
+ break;
98
+ if (isRainElement(child)) {
99
+ hydrateVNodeToDom(domNode, child);
100
+ }
101
+ }
102
+ }
103
+ function hydrateVNodeToDom(dom, vnode) {
104
+ if (typeof vnode.tag === "function") {
105
+ if (vnode.tag === Fragment) {
106
+ hydrateChildren(dom, vnode.children);
107
+ return;
108
+ }
109
+ if (RAIN_ISLAND in vnode.tag) {
110
+ return;
111
+ }
112
+ const result = vnode.tag({
113
+ ...vnode.props,
114
+ children: vnode.children,
115
+ });
116
+ if (result !== null &&
117
+ typeof result !== "string" &&
118
+ isRainElement(result)) {
119
+ hydrateVNodeToDom(dom, result);
120
+ }
121
+ return;
122
+ }
123
+ if (dom instanceof HTMLElement) {
124
+ attachEventHandlers(dom, vnode.props);
125
+ hydrateChildren(dom, vnode.children);
126
+ }
127
+ }
128
+ export function hydrateIsland(rootDom, component, props) {
129
+ const vnode = {
130
+ $$typeof: RAIN_ELEMENT,
131
+ tag: component,
132
+ props,
133
+ children: [],
134
+ };
135
+ const fiber = {
136
+ vnode,
137
+ dom: rootDom,
138
+ hooks: [],
139
+ hookIndex: 0,
140
+ childFibers: [],
141
+ parent: null,
142
+ };
143
+ setCurrentFiber(fiber);
144
+ const rendered = component(props);
145
+ setCurrentFiber(null);
146
+ if (rendered !== null &&
147
+ typeof rendered !== "string" &&
148
+ isRainElement(rendered)) {
149
+ hydrateVNodeToDom(rootDom, rendered);
150
+ fiber.rendered = rendered;
151
+ }
152
+ return fiber;
153
+ }
154
+ export function hydrateIslands(root, registry) {
155
+ const islands = findIslands(root);
156
+ const fibers = [];
157
+ for (const island of islands) {
158
+ const component = registry.get(island.islandId);
159
+ if (!component)
160
+ continue;
161
+ const fiber = hydrateIsland(island.rootElement, component, island.props);
162
+ fibers.push(fiber);
163
+ island.propsScript.remove();
164
+ }
165
+ return fibers;
166
+ }
167
+ //# sourceMappingURL=hydrate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hydrate.js","sourceRoot":"","sources":["../../src/framework/client/hydrate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EACL,YAAY,EACZ,WAAW,GAIZ,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAU1C,MAAM,eAAe,GAAG,4BAA4B,CAAC;AAErD,SAAS,aAAa,CAAC,KAAc;IACnC,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACb,KAAqB,CAAC,QAAQ,KAAK,YAAY,CACjD,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,QAAoB;IAC3C,MAAM,IAAI,GAAe,EAAE,CAAC;IAC5B,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;QAC7B,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC;QACvC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,eAAe,CAAC,IAAU;IACjC,MAAM,QAAQ,GAAc,EAAE,CAAC;IAC/B,MAAM,MAAM,GAAG,QAAQ,CAAC,gBAAgB,CAAC,IAAI,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC;IACxE,IAAI,OAAO,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;IAChC,OAAO,OAAO,EAAE,CAAC;QACf,QAAQ,CAAC,IAAI,CAAC,OAAkB,CAAC,CAAC;QAClC,OAAO,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;IAC9B,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,YAAY,CACnB,KAAc,EACd,KAAa;IAEb,IAAI,WAAW,GAAmB,IAAI,CAAC;IACvC,IAAI,WAAW,GAAmB,IAAI,CAAC;IACvC,IAAI,OAAO,GAAG,KAAK,CAAC,WAAW,CAAC;IAChC,MAAM,SAAS,GAAG,iBAAiB,KAAK,EAAE,CAAC;IAC3C,OAAO,OAAO,EAAE,CAAC;QACf,IACE,OAAO,CAAC,QAAQ,KAAK,IAAI,CAAC,YAAY;YACtC,OAAO,CAAC,WAAW,KAAK,SAAS,EACjC,CAAC;YACD,MAAM;QACR,CAAC;QACD,IACE,OAAO,YAAY,iBAAiB;YACpC,OAAO,CAAC,YAAY,CAAC,iBAAiB,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,EACzD,CAAC;YACD,WAAW,GAAG,OAAO,CAAC;QACxB,CAAC;aAAM,IAAI,OAAO,YAAY,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;YACtD,WAAW,GAAG,OAAO,CAAC;QACxB,CAAC;QACD,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC;IAChC,CAAC;IACD,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAU;IACpC,MAAM,OAAO,GAAuB,EAAE,CAAC;IACvC,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IAEvC,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,CAAC,KAAK;YAAE,SAAS;QAErB,MAAM,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC;QAC/B,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;QAC5C,MAAM,QAAQ,GAAG,EAAE,IAAI,EAAE,CAAC;QAC1B,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,GAAG,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAE/D,IAAI,WAAW,IAAI,WAAW,EAAE,CAAC;YAC/B,MAAM,OAAO,GAAG,WAAW,CAAC,WAAW,IAAI,IAAI,CAAC;YAChD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAA4B,CAAC;YAC7D,OAAO,CAAC,IAAI,CAAC;gBACX,KAAK;gBACL,QAAQ;gBACR,WAAW;gBACX,KAAK;gBACL,WAAW;aACZ,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,mBAAmB,CAC1B,EAAe,EACf,KAA8B;IAE9B,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACrC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,SAAS;QACpC,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;QACzB,IAAI,OAAO,KAAK,KAAK,UAAU;YAAE,SAAS;QAC1C,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QAC7C,EAAE,CAAC,gBAAgB,CAAC,SAAS,EAAE,KAAsB,CAAC,CAAC;IACzD,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,MAAY,EAAE,QAAoB;IACzD,MAAM,IAAI,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC,MAAM,CAC3C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS,IAAI,OAAO,CAAC,KAAK,SAAS,CAC/D,CAAC;IAEF,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,KAAK,MAAM,KAAK,IAAI,IAAI,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC5C,QAAQ,EAAE,CAAC;QACX,IAAI,CAAC,OAAO;YAAE,MAAM;QAEpB,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,iBAAiB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,GAAS,EAAE,KAAkB;IACtD,IAAI,OAAO,KAAK,CAAC,GAAG,KAAK,UAAU,EAAE,CAAC;QACpC,IAAI,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC3B,eAAe,CAAC,GAAG,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;YACrC,OAAO;QACT,CAAC;QAED,IAAI,WAAW,IAAK,KAAK,CAAC,GAA+B,EAAE,CAAC;YAC1D,OAAO;QACT,CAAC;QAED,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC;YACvB,GAAG,KAAK,CAAC,KAAK;YACd,QAAQ,EAAE,KAAK,CAAC,QAAQ;SACzB,CAAC,CAAC;QACH,IACE,MAAM,KAAK,IAAI;YACf,OAAO,MAAM,KAAK,QAAQ;YAC1B,aAAa,CAAC,MAAM,CAAC,EACrB,CAAC;YACD,iBAAiB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QACjC,CAAC;QACD,OAAO;IACT,CAAC;IAED,IAAI,GAAG,YAAY,WAAW,EAAE,CAAC;QAC/B,mBAAmB,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QACtC,eAAe,CAAC,GAAG,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IACvC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,OAAgB,EAChB,SAAwB,EACxB,KAA8B;IAE9B,MAAM,KAAK,GAAgB;QACzB,QAAQ,EAAE,YAAY;QACtB,GAAG,EAAE,SAAS;QACd,KAAK;QACL,QAAQ,EAAE,EAAE;KACb,CAAC;IAEF,MAAM,KAAK,GAAU;QACnB,KAAK;QACL,GAAG,EAAE,OAAO;QACZ,KAAK,EAAE,EAAE;QACT,SAAS,EAAE,CAAC;QACZ,WAAW,EAAE,EAAE;QACf,MAAM,EAAE,IAAI;KACb,CAAC;IAEF,eAAe,CAAC,KAAK,CAAC,CAAC;IACvB,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IAClC,eAAe,CAAC,IAAI,CAAC,CAAC;IAEtB,IACE,QAAQ,KAAK,IAAI;QACjB,OAAO,QAAQ,KAAK,QAAQ;QAC5B,aAAa,CAAC,QAAQ,CAAC,EACvB,CAAC;QACD,iBAAiB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACrC,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC5B,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,cAAc,CAC5B,IAAU,EACV,QAA4C;IAE5C,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,MAAM,GAAY,EAAE,CAAC;IAE3B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAChD,IAAI,CAAC,SAAS;YAAE,SAAS;QAEzB,MAAM,KAAK,GAAG,aAAa,CAAC,MAAM,CAAC,WAAW,EAAE,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;QACzE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEnB,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;IAC9B,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { type RainComponent, type RainElement } from "../jsx/types";
2
+ export { Fragment } from "../jsx/createElement";
3
+ export declare function jsx(tag: string | RainComponent, props: Record<string, unknown>): RainElement;
4
+ export declare const jsxs: typeof jsx;
5
+ export declare const jsxDEV: typeof jsx;
6
+ //# sourceMappingURL=jsx-runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsx-runtime.d.ts","sourceRoot":"","sources":["../../src/framework/client/jsx-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,aAAa,EAClB,KAAK,WAAW,EAEjB,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEhD,wBAAgB,GAAG,CACjB,GAAG,EAAE,MAAM,GAAG,aAAa,EAC3B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,WAAW,CAgBb;AAED,eAAO,MAAM,IAAI,YAAM,CAAC;AACxB,eAAO,MAAM,MAAM,YAAM,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { RAIN_ELEMENT, } from "../jsx/types";
2
+ export { Fragment } from "../jsx/createElement";
3
+ export function jsx(tag, props) {
4
+ const children = props["children"];
5
+ const resolvedChildren = children === undefined
6
+ ? []
7
+ : Array.isArray(children)
8
+ ? children
9
+ : [children];
10
+ const { children: _children, ...rest } = props;
11
+ return {
12
+ $$typeof: RAIN_ELEMENT,
13
+ tag,
14
+ props: rest,
15
+ children: resolvedChildren,
16
+ };
17
+ }
18
+ export const jsxs = jsx;
19
+ export const jsxDEV = jsx;
20
+ //# sourceMappingURL=jsx-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsx-runtime.js","sourceRoot":"","sources":["../../src/framework/client/jsx-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,GAKb,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEhD,MAAM,UAAU,GAAG,CACjB,GAA2B,EAC3B,KAA8B;IAE9B,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAwC,CAAC;IAC1E,MAAM,gBAAgB,GACpB,QAAQ,KAAK,SAAS;QACpB,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;YACvB,CAAC,CAAC,QAAQ;YACV,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAEnB,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC;IAC/C,OAAO;QACL,QAAQ,EAAE,YAAY;QACtB,GAAG;QACH,KAAK,EAAE,IAAI;QACX,QAAQ,EAAE,gBAAgB;KAC3B,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,IAAI,GAAG,GAAG,CAAC;AACxB,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { RainElement } from "../jsx/types";
2
+ import type { Fiber } from "./hooks";
3
+ export declare function reconcile(container: Node, fiber: Fiber, newVnode: RainElement): void;
4
+ //# sourceMappingURL=reconciler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reconciler.d.ts","sourceRoot":"","sources":["../../src/framework/client/reconciler.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAY,MAAM,cAAc,CAAC;AAG1D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AA2RrC,wBAAgB,SAAS,CACvB,SAAS,EAAE,IAAI,EACf,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,WAAW,GACpB,IAAI,CAsBN"}