murasaki 0.2.1 → 0.3.0
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/dist/jsx/dom/index.d.ts +2 -0
- package/dist/jsx/dom/index.d.ts.map +1 -0
- package/dist/jsx/dom/index.js +3 -0
- package/dist/jsx/dom/index.js.map +1 -0
- package/dist/jsx/dom/runtime.d.ts +34 -0
- package/dist/jsx/dom/runtime.d.ts.map +1 -0
- package/dist/jsx/dom/runtime.js +303 -0
- package/dist/jsx/dom/runtime.js.map +1 -0
- package/dist/runtime/bundle.d.ts +8 -0
- package/dist/runtime/bundle.d.ts.map +1 -0
- package/dist/runtime/bundle.js +98 -0
- package/dist/runtime/bundle.js.map +1 -0
- package/dist/runtime/render.d.ts.map +1 -1
- package/dist/runtime/render.js +23 -5
- package/dist/runtime/render.js.map +1 -1
- package/package.json +6 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/jsx/dom/index.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,aAAa,EACb,UAAU,EACV,QAAQ,EACR,GAAG,EACH,MAAM,EACN,IAAI,EACJ,SAAS,EACT,MAAM,EACN,QAAQ,GACT,MAAM,cAAc,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/jsx/dom/index.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAE/D,OAAO,EACL,aAAa,EACb,UAAU,EACV,QAAQ,EACR,GAAG,EACH,MAAM,EACN,IAAI,EACJ,SAAS,EACT,MAAM,EACN,QAAQ,GACT,MAAM,cAAc,CAAA"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
type Props = Record<string, unknown>;
|
|
2
|
+
type Component = (props: Props) => Child;
|
|
3
|
+
type Child = string | number | bigint | boolean | null | undefined | JSXNodeLike | Child[];
|
|
4
|
+
interface JSXNodeLike {
|
|
5
|
+
readonly __isJSXNode: true;
|
|
6
|
+
tag: string | Component;
|
|
7
|
+
props: Props;
|
|
8
|
+
children: Child[];
|
|
9
|
+
toString?: () => string;
|
|
10
|
+
}
|
|
11
|
+
declare class JSXNode implements JSXNodeLike {
|
|
12
|
+
tag: string | Component;
|
|
13
|
+
props: Props;
|
|
14
|
+
children: Child[];
|
|
15
|
+
readonly __isJSXNode: true;
|
|
16
|
+
constructor(tag: string | Component, props: Props, children: Child[]);
|
|
17
|
+
}
|
|
18
|
+
export declare function jsx(tag: string | Component, props: Props | null): JSXNode;
|
|
19
|
+
export declare const jsxs: typeof jsx;
|
|
20
|
+
export declare const jsxDEV: typeof jsx;
|
|
21
|
+
export declare const createElement: typeof jsx;
|
|
22
|
+
export declare function Fragment(props: {
|
|
23
|
+
children?: Child;
|
|
24
|
+
}): Child;
|
|
25
|
+
export declare function useState<T>(initial: T | (() => T)): [T, (next: T | ((prev: T) => T)) => void];
|
|
26
|
+
export declare function useEffect(fn: () => void | (() => void), deps?: unknown[]): void;
|
|
27
|
+
export declare function useRef<T>(initial: T): {
|
|
28
|
+
current: T;
|
|
29
|
+
};
|
|
30
|
+
export declare function createRoot(container: HTMLElement): {
|
|
31
|
+
render(tree: Child): void;
|
|
32
|
+
};
|
|
33
|
+
export { JSXNode };
|
|
34
|
+
//# sourceMappingURL=runtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../../src/jsx/dom/runtime.ts"],"names":[],"mappings":"AAkBA,KAAK,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AACpC,KAAK,SAAS,GAAG,CAAC,KAAK,EAAE,KAAK,KAAK,KAAK,CAAA;AACxC,KAAK,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,GAAG,WAAW,GAAG,KAAK,EAAE,CAAA;AAE1F,UAAU,WAAW;IACnB,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAA;IAC1B,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;IACvB,KAAK,EAAE,KAAK,CAAA;IACZ,QAAQ,EAAE,KAAK,EAAE,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,MAAM,CAAA;CACxB;AAED,cAAM,OAAQ,YAAW,WAAW;IAGzB,GAAG,EAAE,MAAM,GAAG,SAAS;IACvB,KAAK,EAAE,KAAK;IACZ,QAAQ,EAAE,KAAK,EAAE;IAJ1B,QAAQ,CAAC,WAAW,EAAG,IAAI,CAAS;gBAE3B,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,KAAK,EAAE;CAE3B;AAOD,wBAAgB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,GAAG,OAAO,CAUzE;AACD,eAAO,MAAM,IAAI,YAAM,CAAA;AACvB,eAAO,MAAM,MAAM,YAAM,CAAA;AACzB,eAAO,MAAM,aAAa,YAAM,CAAA;AAEhC,wBAAgB,QAAQ,CAAC,KAAK,EAAE;IAAE,QAAQ,CAAC,EAAE,KAAK,CAAA;CAAE,GAAG,KAAK,CAE3D;AAqCD,wBAAgB,QAAQ,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,CAAC,CAmB7F;AAGD,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,GAAG,IAAI,CA2B/E;AAGD,wBAAgB,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG;IAAE,OAAO,EAAE,CAAC,CAAA;CAAE,CASpD;AA0KD,wBAAgB,UAAU,CAAC,SAAS,EAAE,WAAW;iBAEhC,KAAK;EAgBrB;AAKD,OAAO,EAAE,OAAO,EAAE,CAAA"}
|
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
// murasaki/jsx/dom — client-side runtime.
|
|
2
|
+
//
|
|
3
|
+
// Design notes (MVP):
|
|
4
|
+
// - Naive: every state change triggers a full re-render of the root.
|
|
5
|
+
// No virtual-DOM diff, no fiber. Good enough for desktop apps where
|
|
6
|
+
// trees are tiny and re-render is sub-millisecond.
|
|
7
|
+
// - Hooks: useState / useEffect / useRef. Indexed by "component slot"
|
|
8
|
+
// in render order — same as React's call-order rule, so the usual
|
|
9
|
+
// "no hooks in conditionals" applies.
|
|
10
|
+
// - Events: any prop starting with "on" + a function becomes a DOM
|
|
11
|
+
// event listener. Names normalize: onClick → "click", onChange → "change".
|
|
12
|
+
// - HMR friendly: createRoot re-uses the same container, just clears + remounts.
|
|
13
|
+
//
|
|
14
|
+
// This file is browser-only. It uses `document`, `window`, etc., so it must
|
|
15
|
+
// only be loaded via the client bundle — never imported on the Node side.
|
|
16
|
+
class JSXNode {
|
|
17
|
+
tag;
|
|
18
|
+
props;
|
|
19
|
+
children;
|
|
20
|
+
__isJSXNode = true;
|
|
21
|
+
constructor(tag, props, children) {
|
|
22
|
+
this.tag = tag;
|
|
23
|
+
this.props = props;
|
|
24
|
+
this.children = children;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
function isJSXNode(v) {
|
|
28
|
+
return typeof v === 'object' && v !== null && v.__isJSXNode === true;
|
|
29
|
+
}
|
|
30
|
+
// ── jsx() factory ────────────────────────────────────────────────────
|
|
31
|
+
export function jsx(tag, props) {
|
|
32
|
+
const p = (props ?? {});
|
|
33
|
+
const rawChildren = p.children;
|
|
34
|
+
const children = Array.isArray(rawChildren)
|
|
35
|
+
? rawChildren
|
|
36
|
+
: rawChildren != null
|
|
37
|
+
? [rawChildren]
|
|
38
|
+
: [];
|
|
39
|
+
const { children: _drop, ...rest } = p;
|
|
40
|
+
return new JSXNode(tag, rest, children);
|
|
41
|
+
}
|
|
42
|
+
export const jsxs = jsx;
|
|
43
|
+
export const jsxDEV = jsx;
|
|
44
|
+
export const createElement = jsx;
|
|
45
|
+
export function Fragment(props) {
|
|
46
|
+
return props.children ?? null;
|
|
47
|
+
}
|
|
48
|
+
let currentRoot = null;
|
|
49
|
+
function getOrInitSlot(key) {
|
|
50
|
+
const slots = currentRoot.slots;
|
|
51
|
+
let slot = slots.get(key);
|
|
52
|
+
if (!slot) {
|
|
53
|
+
slot = { states: [], effects: [], refs: [] };
|
|
54
|
+
slots.set(key, slot);
|
|
55
|
+
}
|
|
56
|
+
return slot;
|
|
57
|
+
}
|
|
58
|
+
// ── useState ─────────────────────────────────────────────────────────
|
|
59
|
+
// Behavior on the server (no active root): returns the initial value with
|
|
60
|
+
// a no-op setter, so user code can be imported and SSR-rendered safely.
|
|
61
|
+
export function useState(initial) {
|
|
62
|
+
const root = currentRoot;
|
|
63
|
+
if (!root || !root.currentSlot) {
|
|
64
|
+
const v = typeof initial === 'function' ? initial() : initial;
|
|
65
|
+
return [v, () => { }];
|
|
66
|
+
}
|
|
67
|
+
const slot = root.currentSlot;
|
|
68
|
+
const idx = root.stateIdx++;
|
|
69
|
+
if (idx >= slot.states.length) {
|
|
70
|
+
slot.states[idx] = typeof initial === 'function' ? initial() : initial;
|
|
71
|
+
}
|
|
72
|
+
const set = (next) => {
|
|
73
|
+
const prev = slot.states[idx];
|
|
74
|
+
const value = typeof next === 'function' ? next(prev) : next;
|
|
75
|
+
if (Object.is(prev, value))
|
|
76
|
+
return;
|
|
77
|
+
slot.states[idx] = value;
|
|
78
|
+
scheduleRender(root);
|
|
79
|
+
};
|
|
80
|
+
return [slot.states[idx], set];
|
|
81
|
+
}
|
|
82
|
+
// ── useEffect (basic: deps-based; no-op on server) ──────────────────
|
|
83
|
+
export function useEffect(fn, deps) {
|
|
84
|
+
const root = currentRoot;
|
|
85
|
+
if (!root || !root.currentSlot)
|
|
86
|
+
return;
|
|
87
|
+
const slot = root.currentSlot;
|
|
88
|
+
const idx = root.effectIdx++;
|
|
89
|
+
const prev = slot.effects[idx];
|
|
90
|
+
const changed = !prev ||
|
|
91
|
+
!deps ||
|
|
92
|
+
!prev.deps ||
|
|
93
|
+
deps.length !== prev.deps.length ||
|
|
94
|
+
deps.some((d, i) => !Object.is(d, prev.deps?.[i]));
|
|
95
|
+
if (changed) {
|
|
96
|
+
slot.effects[idx] = {
|
|
97
|
+
deps,
|
|
98
|
+
cleanup: prev?.cleanup,
|
|
99
|
+
pending: () => {
|
|
100
|
+
prev?.cleanup?.();
|
|
101
|
+
const ret = fn();
|
|
102
|
+
if (typeof ret === 'function') {
|
|
103
|
+
slot.effects[idx].cleanup = ret;
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
slot.effects[idx].cleanup = undefined;
|
|
107
|
+
}
|
|
108
|
+
},
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
// ── useRef (no-op-ish on server: returns a fresh ref every render) ──
|
|
113
|
+
export function useRef(initial) {
|
|
114
|
+
const root = currentRoot;
|
|
115
|
+
if (!root || !root.currentSlot)
|
|
116
|
+
return { current: initial };
|
|
117
|
+
const slot = root.currentSlot;
|
|
118
|
+
const idx = root.refIdx++;
|
|
119
|
+
if (idx >= slot.refs.length) {
|
|
120
|
+
slot.refs[idx] = { current: initial };
|
|
121
|
+
}
|
|
122
|
+
return slot.refs[idx];
|
|
123
|
+
}
|
|
124
|
+
// ── Schedule a re-render (microtask coalesce) ────────────────────────
|
|
125
|
+
function scheduleRender(root) {
|
|
126
|
+
if (root.rendering) {
|
|
127
|
+
root.pendingRender = true;
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
root.pendingRender = true;
|
|
131
|
+
queueMicrotask(() => {
|
|
132
|
+
if (root.pendingRender) {
|
|
133
|
+
root.pendingRender = false;
|
|
134
|
+
mount(root);
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
// ── Attribute helpers ────────────────────────────────────────────────
|
|
139
|
+
const ATTR_ALIAS = {
|
|
140
|
+
className: 'class',
|
|
141
|
+
htmlFor: 'for',
|
|
142
|
+
charSet: 'charset',
|
|
143
|
+
};
|
|
144
|
+
function camelToKebab(k) {
|
|
145
|
+
if (k[0] === '-' || !/[A-Z]/.test(k))
|
|
146
|
+
return k;
|
|
147
|
+
return k.replace(/[A-Z]/g, (m) => `-${m.toLowerCase()}`);
|
|
148
|
+
}
|
|
149
|
+
function styleObjToCss(obj) {
|
|
150
|
+
let out = '';
|
|
151
|
+
for (const [k, v] of Object.entries(obj)) {
|
|
152
|
+
if (v == null || v === false)
|
|
153
|
+
continue;
|
|
154
|
+
let val;
|
|
155
|
+
if (typeof v === 'number')
|
|
156
|
+
val = `${v}px`;
|
|
157
|
+
else if (typeof v === 'string')
|
|
158
|
+
val = v;
|
|
159
|
+
else
|
|
160
|
+
continue;
|
|
161
|
+
out += `${out ? ';' : ''}${camelToKebab(k)}:${val}`;
|
|
162
|
+
}
|
|
163
|
+
return out;
|
|
164
|
+
}
|
|
165
|
+
// ── DOM materializer ────────────────────────────────────────────────
|
|
166
|
+
function appendChild(parent, child, slotKey) {
|
|
167
|
+
if (child == null || child === false || child === true)
|
|
168
|
+
return;
|
|
169
|
+
if (typeof child === 'string' || typeof child === 'number' || typeof child === 'bigint') {
|
|
170
|
+
parent.appendChild(document.createTextNode(String(child)));
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
if (Array.isArray(child)) {
|
|
174
|
+
child.forEach((c, i) => appendChild(parent, c, `${slotKey}.${i}`));
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
if (isJSXNode(child)) {
|
|
178
|
+
parent.appendChild(toDOM(child, slotKey));
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
function toDOM(node, slotKey) {
|
|
182
|
+
const { tag, props, children } = node;
|
|
183
|
+
// Component / Fragment
|
|
184
|
+
if (typeof tag === 'function') {
|
|
185
|
+
const root = currentRoot;
|
|
186
|
+
const prevSlot = root.currentSlot;
|
|
187
|
+
const prevKey = root.currentSlotKey;
|
|
188
|
+
const prevStateIdx = root.stateIdx;
|
|
189
|
+
const prevEffectIdx = root.effectIdx;
|
|
190
|
+
const prevRefIdx = root.refIdx;
|
|
191
|
+
const key = `${slotKey}|${tag.name || 'Anon'}`;
|
|
192
|
+
root.currentSlotKey = key;
|
|
193
|
+
root.currentSlot = getOrInitSlot(key);
|
|
194
|
+
root.stateIdx = 0;
|
|
195
|
+
root.effectIdx = 0;
|
|
196
|
+
root.refIdx = 0;
|
|
197
|
+
const result = tag({ ...props, children: children.length === 1 ? children[0] : children });
|
|
198
|
+
root.currentSlot = prevSlot;
|
|
199
|
+
root.currentSlotKey = prevKey;
|
|
200
|
+
root.stateIdx = prevStateIdx;
|
|
201
|
+
root.effectIdx = prevEffectIdx;
|
|
202
|
+
root.refIdx = prevRefIdx;
|
|
203
|
+
const frag = document.createDocumentFragment();
|
|
204
|
+
appendChild(frag, result, key);
|
|
205
|
+
return frag;
|
|
206
|
+
}
|
|
207
|
+
// Intrinsic element
|
|
208
|
+
const el = document.createElement(tag);
|
|
209
|
+
for (const k in props) {
|
|
210
|
+
const v = props[k];
|
|
211
|
+
if (k === 'children' || k === 'key' || k === 'ref')
|
|
212
|
+
continue;
|
|
213
|
+
if (v == null || v === false)
|
|
214
|
+
continue;
|
|
215
|
+
// Event handler: onClick, onChange, onInput, ...
|
|
216
|
+
if (k.length > 2 && k[0] === 'o' && k[1] === 'n' && typeof v === 'function') {
|
|
217
|
+
const eventName = k.slice(2).toLowerCase();
|
|
218
|
+
el.addEventListener(eventName, v);
|
|
219
|
+
continue;
|
|
220
|
+
}
|
|
221
|
+
// dangerouslySetInnerHTML
|
|
222
|
+
if (k === 'dangerouslySetInnerHTML') {
|
|
223
|
+
const html = v.__html;
|
|
224
|
+
if (typeof html === 'string')
|
|
225
|
+
el.innerHTML = html;
|
|
226
|
+
continue;
|
|
227
|
+
}
|
|
228
|
+
// Style object
|
|
229
|
+
if (k === 'style' && typeof v === 'object') {
|
|
230
|
+
el.setAttribute('style', styleObjToCss(v));
|
|
231
|
+
continue;
|
|
232
|
+
}
|
|
233
|
+
const name = ATTR_ALIAS[k] || k;
|
|
234
|
+
if (v === true) {
|
|
235
|
+
el.setAttribute(name, '');
|
|
236
|
+
}
|
|
237
|
+
else {
|
|
238
|
+
el.setAttribute(name, String(v));
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
children.forEach((c, i) => appendChild(el, c, `${slotKey}>${tag}.${i}`));
|
|
242
|
+
return el;
|
|
243
|
+
}
|
|
244
|
+
// ── Mount (initial + re-render) ──────────────────────────────────────
|
|
245
|
+
function mount(root) {
|
|
246
|
+
root.rendering = true;
|
|
247
|
+
currentRoot = root;
|
|
248
|
+
root.currentSlotKey = '';
|
|
249
|
+
root.currentSlot = null;
|
|
250
|
+
root.stateIdx = 0;
|
|
251
|
+
root.effectIdx = 0;
|
|
252
|
+
root.refIdx = 0;
|
|
253
|
+
// Render tree
|
|
254
|
+
const tree = root.render();
|
|
255
|
+
// Wipe container + re-fill
|
|
256
|
+
root.container.textContent = '';
|
|
257
|
+
appendChild(root.container, tree, 'root');
|
|
258
|
+
// Flush pending effects (post-render)
|
|
259
|
+
for (const slot of root.slots.values()) {
|
|
260
|
+
for (const effect of slot.effects) {
|
|
261
|
+
if (effect.pending) {
|
|
262
|
+
try {
|
|
263
|
+
effect.pending();
|
|
264
|
+
}
|
|
265
|
+
catch (e) {
|
|
266
|
+
console.error(e);
|
|
267
|
+
}
|
|
268
|
+
effect.pending = undefined;
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
currentRoot = null;
|
|
273
|
+
root.rendering = false;
|
|
274
|
+
if (root.pendingRender) {
|
|
275
|
+
root.pendingRender = false;
|
|
276
|
+
queueMicrotask(() => mount(root));
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
// ── Public createRoot ────────────────────────────────────────────────
|
|
280
|
+
export function createRoot(container) {
|
|
281
|
+
return {
|
|
282
|
+
render(tree) {
|
|
283
|
+
const root = {
|
|
284
|
+
container,
|
|
285
|
+
render: () => tree,
|
|
286
|
+
slots: new Map(),
|
|
287
|
+
currentSlotKey: '',
|
|
288
|
+
currentSlot: null,
|
|
289
|
+
stateIdx: 0,
|
|
290
|
+
effectIdx: 0,
|
|
291
|
+
refIdx: 0,
|
|
292
|
+
rendering: false,
|
|
293
|
+
pendingRender: false,
|
|
294
|
+
};
|
|
295
|
+
mount(root);
|
|
296
|
+
},
|
|
297
|
+
};
|
|
298
|
+
}
|
|
299
|
+
// ── Helper for bundle entry points ──────────────────────────────────
|
|
300
|
+
// The dev runner generates an entry that imports the user's page module,
|
|
301
|
+
// calls jsx() on its default export, and hands it to createRoot.
|
|
302
|
+
export { JSXNode };
|
|
303
|
+
//# sourceMappingURL=runtime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../../src/jsx/dom/runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Route } from './routes.ts';
|
|
2
|
+
type BundleInput = {
|
|
3
|
+
routes: Route[];
|
|
4
|
+
rootLayoutFile: string | null;
|
|
5
|
+
};
|
|
6
|
+
export declare function bundleClient({ routes, rootLayoutFile }: BundleInput): Promise<string>;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=bundle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bundle.d.ts","sourceRoot":"","sources":["../../src/runtime/bundle.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AAExC,KAAK,WAAW,GAAG;IACjB,MAAM,EAAE,KAAK,EAAE,CAAA;IACf,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;CAC9B,CAAA;AAED,wBAAsB,YAAY,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CA4F3F"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
// Generates the client-side JavaScript bundle that hydrates the WebView.
|
|
2
|
+
//
|
|
3
|
+
// We synthesize an entry that:
|
|
4
|
+
// 1. imports every page module (from src/app/.../page.tsx)
|
|
5
|
+
// 2. imports the root layout (if present)
|
|
6
|
+
// 3. wires hash-based routing
|
|
7
|
+
// 4. calls createRoot on #murasaki-root and re-renders on hashchange
|
|
8
|
+
//
|
|
9
|
+
// esbuild bundles the synthesized entry through the user's filesystem
|
|
10
|
+
// (resolveDir = projectRoot), pulling in murasaki/jsx/dom and the user's
|
|
11
|
+
// own code. The output is an IIFE that runs as soon as the <script> loads.
|
|
12
|
+
import * as esbuild from 'esbuild';
|
|
13
|
+
import { projectRoot } from "../env.js";
|
|
14
|
+
export async function bundleClient({ routes, rootLayoutFile }) {
|
|
15
|
+
// Each route gets a numbered Page import so we can wire them by URL path.
|
|
16
|
+
const pageImports = routes
|
|
17
|
+
.map((r, i) => `import Page${i} from ${JSON.stringify(r.pageFile)}`)
|
|
18
|
+
.join('\n');
|
|
19
|
+
const layoutImport = rootLayoutFile
|
|
20
|
+
? `import RootLayout from ${JSON.stringify(rootLayoutFile)}`
|
|
21
|
+
: '';
|
|
22
|
+
// path → Page component map
|
|
23
|
+
const routesMap = routes.map((r, i) => ` ${JSON.stringify(r.path)}: Page${i},`).join('\n');
|
|
24
|
+
const wrap = rootLayoutFile ? 'jsx(RootLayout, { children: jsx(Page, null) })' : 'jsx(Page, null)';
|
|
25
|
+
const entry = `
|
|
26
|
+
${pageImports}
|
|
27
|
+
${layoutImport}
|
|
28
|
+
import { createRoot, jsx } from 'murasaki/jsx/dom'
|
|
29
|
+
|
|
30
|
+
const ROUTES = {
|
|
31
|
+
${routesMap}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
function currentPath() {
|
|
35
|
+
const h = (typeof location !== 'undefined' && location.hash) || ''
|
|
36
|
+
return h.startsWith('#') ? (h.slice(1) || '/') : '/'
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
const container = document.getElementById('murasaki-root')
|
|
40
|
+
if (!container) {
|
|
41
|
+
throw new Error('[murasaki] mount point #murasaki-root not found')
|
|
42
|
+
}
|
|
43
|
+
container.textContent = ''
|
|
44
|
+
|
|
45
|
+
let _root
|
|
46
|
+
function render() {
|
|
47
|
+
const path = currentPath()
|
|
48
|
+
const Page = ROUTES[path] || ROUTES['/']
|
|
49
|
+
if (!Page) {
|
|
50
|
+
container.textContent = '404'
|
|
51
|
+
return
|
|
52
|
+
}
|
|
53
|
+
const tree = ${wrap}
|
|
54
|
+
if (!_root) _root = createRoot(container)
|
|
55
|
+
_root.render(tree)
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
render()
|
|
59
|
+
window.addEventListener('hashchange', render)
|
|
60
|
+
|
|
61
|
+
// Intercept anchor clicks marked with data-murasaki-link
|
|
62
|
+
document.addEventListener('click', function (e) {
|
|
63
|
+
let t = e.target
|
|
64
|
+
while (t && t.nodeType === 1) {
|
|
65
|
+
if (t.tagName === 'A' && t.hasAttribute('data-murasaki-link')) {
|
|
66
|
+
e.preventDefault()
|
|
67
|
+
const href = t.getAttribute('data-murasaki-link')
|
|
68
|
+
if ('#' + href !== location.hash) location.hash = href
|
|
69
|
+
else render()
|
|
70
|
+
return
|
|
71
|
+
}
|
|
72
|
+
t = t.parentNode
|
|
73
|
+
}
|
|
74
|
+
})
|
|
75
|
+
`;
|
|
76
|
+
const result = await esbuild.build({
|
|
77
|
+
stdin: {
|
|
78
|
+
contents: entry,
|
|
79
|
+
loader: 'tsx',
|
|
80
|
+
resolveDir: projectRoot,
|
|
81
|
+
sourcefile: '<murasaki-client-entry>.tsx',
|
|
82
|
+
},
|
|
83
|
+
bundle: true,
|
|
84
|
+
write: false,
|
|
85
|
+
format: 'iife',
|
|
86
|
+
target: ['safari16', 'chrome120', 'firefox120'],
|
|
87
|
+
jsx: 'automatic',
|
|
88
|
+
jsxImportSource: 'murasaki',
|
|
89
|
+
minify: false,
|
|
90
|
+
sourcemap: 'inline',
|
|
91
|
+
logLevel: 'silent',
|
|
92
|
+
});
|
|
93
|
+
if (result.errors.length) {
|
|
94
|
+
throw new Error(`[murasaki] client bundle failed:\n${result.errors.map((e) => e.text).join('\n')}`);
|
|
95
|
+
}
|
|
96
|
+
return result.outputFiles[0].text;
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=bundle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bundle.js","sourceRoot":"","sources":["../../src/runtime/bundle.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,EAAE;AACF,+BAA+B;AAC/B,6DAA6D;AAC7D,4CAA4C;AAC5C,gCAAgC;AAChC,uEAAuE;AACvE,EAAE;AACF,sEAAsE;AACtE,yEAAyE;AACzE,2EAA2E;AAE3E,OAAO,KAAK,OAAO,MAAM,SAAS,CAAA;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAQvC,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,EAAE,MAAM,EAAE,cAAc,EAAe;IACxE,0EAA0E;IAC1E,MAAM,WAAW,GAAG,MAAM;SACvB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;SACnE,IAAI,CAAC,IAAI,CAAC,CAAA;IAEb,MAAM,YAAY,GAAG,cAAc;QACjC,CAAC,CAAC,0BAA0B,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,EAAE;QAC5D,CAAC,CAAC,EAAE,CAAA;IAEN,4BAA4B;IAC5B,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAE3F,MAAM,IAAI,GAAG,cAAc,CAAC,CAAC,CAAC,gDAAgD,CAAC,CAAC,CAAC,iBAAiB,CAAA;IAElG,MAAM,KAAK,GAAG;EACd,WAAW;EACX,YAAY;;;;EAIZ,SAAS;;;;;;;;;;;;;;;;;;;;;;iBAsBM,IAAI;;;;;;;;;;;;;;;;;;;;;;CAsBpB,CAAA;IAEC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC;QACjC,KAAK,EAAE;YACL,QAAQ,EAAE,KAAK;YACf,MAAM,EAAE,KAAK;YACb,UAAU,EAAE,WAAW;YACvB,UAAU,EAAE,6BAA6B;SAC1C;QACD,MAAM,EAAE,IAAI;QACZ,KAAK,EAAE,KAAK;QACZ,MAAM,EAAE,MAAM;QACd,MAAM,EAAE,CAAC,UAAU,EAAE,WAAW,EAAE,YAAY,CAAC;QAC/C,GAAG,EAAE,WAAW;QAChB,eAAe,EAAE,UAAU;QAC3B,MAAM,EAAE,KAAK;QACb,SAAS,EAAE,QAAQ;QACnB,QAAQ,EAAE,QAAQ;KACnB,CAAC,CAAA;IAEF,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CACb,qCAAqC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACnF,CAAA;IACH,CAAC;IAED,OAAO,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;AACnC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/runtime/render.tsx"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/runtime/render.tsx"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAmJ/C,wBAAsB,SAAS,IAAI,OAAO,CAAC,YAAY,CAAC,CAUvD"}
|
package/dist/runtime/render.js
CHANGED
|
@@ -22,6 +22,7 @@ import { existsSync, readFileSync } from 'node:fs';
|
|
|
22
22
|
import { pathToFileURL } from 'node:url';
|
|
23
23
|
import { APP_DIR, APP_GLOBALS_CSS, LEGACY_APP_PATH, LEGACY_GLOBALS_CSS, LEGACY_LAYOUT_PATH, } from "../env.js";
|
|
24
24
|
import { jsx, raw, renderToString } from "../jsx/runtime.js";
|
|
25
|
+
import { bundleClient } from "./bundle.js";
|
|
25
26
|
import { discoverRoutes } from "./routes.js";
|
|
26
27
|
const NO_APP_HTML = '<!doctype html><html><body style="font-family:system-ui;padding:40px;">' +
|
|
27
28
|
'<h1 style="color:#A855F7">No app found</h1>' +
|
|
@@ -177,17 +178,34 @@ async function renderAppRouter() {
|
|
|
177
178
|
const rootLayoutFile = rootLayoutPath && rootLayoutPath.endsWith('/app/layout.tsx') ? rootLayoutPath : null;
|
|
178
179
|
const rootLayoutMod = rootLayoutFile ? await loadModule(rootLayoutFile) : null;
|
|
179
180
|
const metadata = rootLayoutMod?.metadata;
|
|
180
|
-
// 2.
|
|
181
|
+
// 2. Server pre-render each page (gives a usable first paint before the
|
|
182
|
+
// client bundle boots — pre-hydration shell). Each block goes inside
|
|
183
|
+
// the mount root and is replaced by the client renderer on boot.
|
|
181
184
|
const blocks = [];
|
|
182
185
|
for (const route of routes) {
|
|
183
186
|
const inner = await renderPageInner(route, rootLayoutFile);
|
|
184
187
|
blocks.push(`<div data-murasaki-route="${escapeHtml(route.path)}" hidden>${inner}</div>`);
|
|
185
188
|
}
|
|
186
|
-
|
|
187
|
-
//
|
|
188
|
-
|
|
189
|
+
// 3. Wrap the server-rendered content + nav script in the mount container.
|
|
190
|
+
// The client bundle will clear this container on boot and re-render
|
|
191
|
+
// interactively (useState/onClick actually fire after that).
|
|
192
|
+
const mountInner = blocks.join('') + NAV_SCRIPT;
|
|
193
|
+
const mountRoot = `<div id="murasaki-root">${mountInner}</div>`;
|
|
194
|
+
// 4. Build + inline client bundle (esbuild, IIFE)
|
|
195
|
+
let clientScript = '';
|
|
196
|
+
try {
|
|
197
|
+
const code = await bundleClient({ routes, rootLayoutFile });
|
|
198
|
+
clientScript = `<script type="module" data-murasaki="client">${code}</script>`;
|
|
199
|
+
}
|
|
200
|
+
catch (e) {
|
|
201
|
+
// Render an inline error overlay so the WebView shows what broke
|
|
202
|
+
const msg = escapeHtml(String(e?.message ?? e));
|
|
203
|
+
clientScript = `<script>document.body.insertAdjacentHTML('beforeend','<pre style=\\'position:fixed;inset:0;background:#1a0a33;color:#A855F7;padding:24px;font-family:SF Mono,Menlo,monospace;font-size:13px;overflow:auto;z-index:9999\\'>client bundle failed:\\n${msg.replace(/[\\'\\\\]/g, '\\\\$&')}</pre>')</script>`;
|
|
204
|
+
}
|
|
205
|
+
// 5. Render root layout with mount root + client script as children
|
|
206
|
+
const bodyContent = await renderRootLayout(rootLayoutMod, raw(mountRoot + clientScript));
|
|
189
207
|
let html = '<!doctype html>' + bodyContent;
|
|
190
|
-
//
|
|
208
|
+
// 6. Inject metadata + globals.css
|
|
191
209
|
html = injectHead(html, metadata, loadGlobalsCss());
|
|
192
210
|
return { html, metadata };
|
|
193
211
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/runtime/render.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/runtime/render.tsx"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "murasaki",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "The desktop framework for Next.js developers. Node-powered. WebView-thin. No Rust. No Chromium.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"desktop",
|
|
@@ -42,6 +42,10 @@
|
|
|
42
42
|
"./jsx-dev-runtime": {
|
|
43
43
|
"types": "./dist/jsx/jsx-dev-runtime.d.ts",
|
|
44
44
|
"default": "./dist/jsx/jsx-dev-runtime.js"
|
|
45
|
+
},
|
|
46
|
+
"./jsx/dom": {
|
|
47
|
+
"types": "./dist/jsx/dom/index.d.ts",
|
|
48
|
+
"default": "./dist/jsx/dom/index.js"
|
|
45
49
|
}
|
|
46
50
|
},
|
|
47
51
|
"files": [
|
|
@@ -61,6 +65,7 @@
|
|
|
61
65
|
},
|
|
62
66
|
"dependencies": {
|
|
63
67
|
"@webviewjs/webview": "^0.3.2",
|
|
68
|
+
"esbuild": "^0.28.1",
|
|
64
69
|
"tsx": "^4.22.4"
|
|
65
70
|
},
|
|
66
71
|
"devDependencies": {
|