lunet 0.0.6 → 0.0.8

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/index.cjs CHANGED
@@ -1,4 +1,321 @@
1
- var{defineProperty:J,getOwnPropertyNames:F,getOwnPropertyDescriptor:O}=Object,x=Object.prototype.hasOwnProperty;var h=new WeakMap,L=(t)=>{var o=h.get(t),e;if(o)return o;if(o=J({},"__esModule",{value:!0}),t&&typeof t==="object"||typeof t==="function")F(t).map((n)=>!x.call(o,n)&&J(o,n,{get:()=>t[n],enumerable:!(e=O(t,n))||e.enumerable}));return h.set(t,o),o};var R=(t,o)=>{for(var e in o)J(t,e,{get:o[e],enumerable:!0,configurable:!0,set:(n)=>o[e]=()=>n})};var $={};R($,{setBatch:()=>N,render:()=>D,h:()=>w,fragment:()=>g,createComponent:()=>k});module.exports=L($);var k=(t)=>(o)=>[t,o];var g=(...t)=>[null,{},...t];var w=(t,o,...e)=>typeof t==="string"?[t,o??{},...e]:t===g?[null,o??{},...e]:t(o);var T=(t)=>t(),N=(t)=>{T=t};var H=(t,o)=>typeof t==="string"||typeof o==="string"?typeof t===typeof o:t[0]===o[0]&&t[1].key===o[1].key,b=(t,o)=>{let e=[],n=Math.max(t.length,o.length),r=0;for(let a=0;a<n;a++){let p=t[a],i=o[a];if(!p&&i)e.push([1,r++,i]);else if(p&&!i)e.push([2,r,p]);else if(p&&i)if(H(p,i))e.push([0,r++,i]);else e.push([2,r,p]),e.push([1,r++,i])}return e};var y=(t)=>{let o=t,e=[],n;return{update(r){let[,,...a]=o,[,,...p]=r;for(let[i,s,u]of b(a,p))switch(i){case 0:e[s].update(u);break;case 1:let c=l(u),m=c.render();if(e.splice(s,0,c),s===0)n.after(m);else e[s-1].after(m);break;case 2:let[f]=e.splice(s,1);f.revoke();break}o=r},render(){let[,,...r]=o,a=document.createDocumentFragment();return n=document.createComment(""),e=r.map(l),a.append(n,...e.map((p)=>p.render())),a},revoke(){for(let r of e)r.revoke()},after(r){(e.at(-1)??n)?.after(r)}}};var E=(t)=>{let o=t,e,n;return{update(r){let[,a]=o=r;T(()=>{for(let[p,i]of Object.entries(a))if(n[p]!==i)n[p]=i})},render(){e?.revoke(),e=null;let[r,a]=o;if(n=r((p)=>{if(e)e.update([null,{},p]);else e=y([null,{},p])},{...a}),!e)console.error("never rendered Initial render."),e=y([null,{}]);return e.render()},revoke(){e.revoke()},after(r){e.after(r)}}};var d=new WeakMap;function U(t){return d.get(this)?.[t.type]?.call(this,t)}var M=(t,o,e)=>{if(o.startsWith("$")){let n=o.substring(1);if(!["beforeMount","mount","beforeUpdate","update","beforeUnmount","unmount"].includes(n)){let r=d.get(t);if(!(n in r))t.addEventListener(n,U);if(typeof e==="function"||e==null)r[n]=e;else console.error("Invalid event handler: ",e),r[n]=void 0}}else switch(typeof e){case"string":t.setAttribute(o,e);break;case"function":case"object":if(e===null)t.removeAttribute(o);else console.error(`${typeof e} values cannot mount on attributes.`);break;default:if(e===void 0)t.removeAttribute(o);else t.setAttribute(o,String(e));break}},C=(t)=>{let o=t,e=[],n;return{update(r){o[1].$beforeUpdate?.call(n,new CustomEvent("beforeupdate",{detail:n}));let[,a,...p]=o,[,i,...s]=r,u=Object.keys(a).filter((c)=>!(c in i));for(let[c,m]of Object.entries({...i,...Object.fromEntries(u.map((f)=>[f,void 0]))}))if(o[1][c]!==m)M(n,c,m);for(let[c,m,f]of b(p,s))switch(c){case 0:e[m].update(f);break;case 1:let X=l(f),S=X.render();if(e.splice(m,0,X),m===0)if(n.firstChild)n.firstChild.before(S);else n.append(S);else e[m-1].after(S);break;case 2:e.splice(m,1)[0].revoke();break}o=r,i.$update?.call(n,new CustomEvent("update",{detail:n}))},render(){let[r,a,...p]=o;a.$beforeMount?.();let i=document.createElement(r);d.set(i,{}),a.$mount?.call(i,new CustomEvent("mount",{detail:i}));for(let[s,u]of Object.entries(a))M(i,s,u);return e=p.map(l),i.append(...e.map((s)=>s.render())),n=i},revoke(){o[1].$beforeUnmount?.call(n,new CustomEvent("beforeunmount",{detail:n}));for(let r of e)r.revoke();d.delete(n),n.remove(),o[1].$unmount?.()},after(r){n.after(r)}}};var v=(t)=>{let o;return{update(e){t!==e&&(o.textContent=t=e)},render:()=>o=new Text(t),revoke(){o.remove()},after(e){o.parentNode.insertBefore(e,o.nextSibling)}}};var l=(t)=>{if(typeof t==="string")return v(t);else if(typeof t[0]==="string")return C(t);else if(t[0]===null)return y(t);else return E(t)};var A=new WeakMap,D=(t,o)=>{A.get(t)?.revoke();let e=l(o);A.set(t,e),t.append(e.render())};
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropNames = Object.getOwnPropertyNames;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __moduleCache = /* @__PURE__ */ new WeakMap;
6
+ var __toCommonJS = (from) => {
7
+ var entry = __moduleCache.get(from), desc;
8
+ if (entry)
9
+ return entry;
10
+ entry = __defProp({}, "__esModule", { value: true });
11
+ if (from && typeof from === "object" || typeof from === "function")
12
+ __getOwnPropNames(from).map((key) => !__hasOwnProp.call(entry, key) && __defProp(entry, key, {
13
+ get: () => from[key],
14
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
15
+ }));
16
+ __moduleCache.set(from, entry);
17
+ return entry;
18
+ };
19
+ var __export = (target, all) => {
20
+ for (var name in all)
21
+ __defProp(target, name, {
22
+ get: all[name],
23
+ enumerable: true,
24
+ configurable: true,
25
+ set: (newValue) => all[name] = () => newValue
26
+ });
27
+ };
2
28
 
3
- //# debugId=76A612C338578F2E64756E2164756E21
29
+ // src/index.ts
30
+ var exports_src = {};
31
+ __export(exports_src, {
32
+ setBatch: () => setBatch,
33
+ render: () => render,
34
+ h: () => h,
35
+ fragment: () => fragment,
36
+ createComponent: () => createComponent
37
+ });
38
+ module.exports = __toCommonJS(exports_src);
39
+
40
+ // src/jsx/component.ts
41
+ var createComponent = (component) => (props) => [component, props];
42
+ // src/jsx/fragment.ts
43
+ var fragment = (...children) => [null, {}, ...children];
44
+ // src/jsx/likereact.ts
45
+ var h = (type, props, ...children) => typeof type === "string" ? [type, props ?? {}, ...children] : type === fragment ? [null, props ?? {}, ...children] : type(props);
46
+ // src/mount/dom/text.ts
47
+ var createText = (jsx) => {
48
+ const node = new Text(jsx);
49
+ return [[0, jsx, node], node];
50
+ };
51
+ var updateText = (dom, jsx) => {
52
+ if (dom[1] !== jsx)
53
+ dom[2].textContent = dom[1] = jsx;
54
+ };
55
+ var revokeText = (dom) => dom[2].remove();
56
+ var afterText = (dom, node) => {
57
+ dom[2].parentNode?.insertBefore(node, dom[2].nextSibling);
58
+ };
59
+
60
+ // src/mount/diff.ts
61
+ var isCompatibleNode = (before, after) => typeof before === "string" || typeof after === "string" ? typeof before === typeof after : before[0] === after[0] && before[1].key === after[1].key;
62
+ var diff = (before_nodes, after_nodes) => {
63
+ const patches = [];
64
+ const max = Math.max(before_nodes.length, after_nodes.length);
65
+ let index = 0;
66
+ for (let i = 0;i < max; i++) {
67
+ const before = before_nodes[i];
68
+ const after = after_nodes[i];
69
+ if (!before && after)
70
+ patches.push([1, index++, after]);
71
+ else if (before && !after)
72
+ patches.push([2, index, before]);
73
+ else if (before && after)
74
+ if (isCompatibleNode(before, after))
75
+ patches.push([0, index++, after]);
76
+ else {
77
+ patches.push([2, index, before]);
78
+ patches.push([1, index++, after]);
79
+ }
80
+ }
81
+ return patches;
82
+ };
83
+
84
+ // src/mount/dom/element.ts
85
+ var lifecycle_events = new Set([
86
+ "beforeMount",
87
+ "mount",
88
+ "beforeUpdate",
89
+ "update",
90
+ "beforeUnmount",
91
+ "unmount"
92
+ ]);
93
+ var elementEvents = new WeakMap;
94
+ function handleEvent(ev) {
95
+ return elementEvents.get(this)?.[ev.type]?.call(this, ev);
96
+ }
97
+ var setAttribute = (el, name, value) => {
98
+ if (name.startsWith("$")) {
99
+ const ev_name = name.substring(1);
100
+ if (!lifecycle_events.has(ev_name)) {
101
+ const events = elementEvents.get(el);
102
+ if (!(ev_name in events))
103
+ el.addEventListener(ev_name, handleEvent);
104
+ if (typeof value === "function" || value == null)
105
+ events[ev_name] = value;
106
+ else {
107
+ console.error("Invalid event handler: ", value);
108
+ events[ev_name] = undefined;
109
+ }
110
+ }
111
+ } else
112
+ switch (typeof value) {
113
+ case "string":
114
+ el.setAttribute(name, value);
115
+ break;
116
+ case "function":
117
+ case "object":
118
+ if (value === null)
119
+ el.removeAttribute(name);
120
+ else
121
+ console.error(`${typeof value} values cannot mount on attributes.`);
122
+ break;
123
+ default:
124
+ if (value === undefined)
125
+ el.removeAttribute(name);
126
+ else
127
+ el.setAttribute(name, String(value));
128
+ break;
129
+ }
130
+ };
131
+ var createElement = (jsx) => {
132
+ const [tag, props, ...children] = jsx;
133
+ props.$beforeMount?.();
134
+ const element = document.createElement(tag);
135
+ elementEvents.set(element, {});
136
+ props.$mount?.call(element, new CustomEvent("mount", { detail: element }));
137
+ for (const [name, value] of Object.entries(props))
138
+ setAttribute(element, name, value);
139
+ const rendered_children = children.map(createNode);
140
+ element.append(...rendered_children.map((e) => e[1]));
141
+ return [[1, jsx, element, rendered_children.map((e) => e[0])], element];
142
+ };
143
+ var updateElement = (dom, jsx) => {
144
+ const [, [, old_props, ...old_children], element, rendered_children] = dom;
145
+ const [, new_props, ...new_children] = jsx;
146
+ old_props.$beforeUpdate?.call(element, new CustomEvent("beforeupdate", { detail: element }));
147
+ const removed_prop_keys = Object.keys(old_props).filter((key) => !(key in new_props));
148
+ for (const [name, value] of Object.entries({
149
+ ...new_props,
150
+ ...Object.fromEntries(removed_prop_keys.map((key) => [key, undefined]))
151
+ }))
152
+ if (old_props[name] !== value)
153
+ setAttribute(element, name, value);
154
+ for (const [type, idx, jsx2] of diff(old_children, new_children)) {
155
+ switch (type) {
156
+ case 0:
157
+ updateNode(rendered_children[idx], jsx2);
158
+ break;
159
+ case 1:
160
+ const [rendered, node] = createNode(jsx2);
161
+ rendered_children.splice(idx, 0, rendered);
162
+ if (idx === 0) {
163
+ if (element.firstChild) {
164
+ element.firstChild.before(node);
165
+ } else {
166
+ element.append(node);
167
+ }
168
+ } else {
169
+ afterNode(rendered_children[idx - 1], node);
170
+ }
171
+ break;
172
+ case 2:
173
+ revokeNode(rendered_children.splice(idx, 1)[0]);
174
+ break;
175
+ }
176
+ }
177
+ dom[1] = jsx;
178
+ new_props.$update?.call(element, new CustomEvent("update", { detail: element }));
179
+ };
180
+ var revokeElement = (dom) => {
181
+ const [, [, props], element, rendered_children] = dom;
182
+ props.$beforeUnmount?.call(element, new CustomEvent("beforeunmount", { detail: element }));
183
+ for (const child of rendered_children)
184
+ revokeNode(child);
185
+ elementEvents.delete(element);
186
+ element.remove();
187
+ props.$unmount?.();
188
+ };
189
+ var afterElement = (dom, node) => {
190
+ dom[2].after(node);
191
+ };
192
+
193
+ // src/mount/dom/fragment.ts
194
+ var createFragment = (jsx) => {
195
+ const [, , ...children] = jsx;
196
+ const mark = new Comment;
197
+ const el = new DocumentFragment;
198
+ const rendered_children = children.map(createNode);
199
+ el.append(mark, ...rendered_children.map((e) => e[1]));
200
+ return [[2, jsx, mark, rendered_children.map((e) => e[0])], el];
201
+ };
202
+ var updateFragment = (dom, jsx) => {
203
+ const [, [, , ...old_children], mark, rendered_children] = dom;
204
+ const [, , ...new_children] = jsx;
205
+ for (const [type, idx, jsx2] of diff(old_children, new_children)) {
206
+ switch (type) {
207
+ case 0:
208
+ updateNode(rendered_children[idx], jsx2);
209
+ break;
210
+ case 1:
211
+ const [rendered, el] = createNode(jsx2);
212
+ rendered_children.splice(idx, 0, rendered);
213
+ if (idx === 0) {
214
+ mark.after(el);
215
+ } else {
216
+ afterNode(rendered_children[idx - 1], el);
217
+ }
218
+ break;
219
+ case 2:
220
+ const [removed] = rendered_children.splice(idx, 1);
221
+ revokeNode(removed);
222
+ break;
223
+ }
224
+ }
225
+ dom[1] = jsx;
226
+ };
227
+ var revokeFragment = (dom) => {
228
+ for (const child of dom[3])
229
+ revokeNode(child);
230
+ dom[2].remove();
231
+ };
232
+ var afterFragment = (dom, node) => {
233
+ const last_rendered_dom = dom[3].at(-1);
234
+ if (last_rendered_dom)
235
+ afterNode(last_rendered_dom, node);
236
+ else
237
+ dom[2].after(node);
238
+ };
239
+
240
+ // src/batch.ts
241
+ var batch = (cb) => cb();
242
+ var setBatch = (fn) => {
243
+ batch = fn;
244
+ };
245
+
246
+ // src/mount/dom/component.ts
247
+ var createComponent2 = (jsx) => {
248
+ const [component, init_props] = jsx;
249
+ let rendered_dom;
250
+ let doc_frag;
251
+ const props = component((jsx2) => {
252
+ if (rendered_dom)
253
+ updateFragment(rendered_dom, [null, {}, jsx2]);
254
+ else
255
+ [rendered_dom, doc_frag] = createFragment([null, {}, jsx2]);
256
+ }, { ...init_props });
257
+ if (!doc_frag) {
258
+ console.error("never rendered Initial render.");
259
+ [rendered_dom, doc_frag] = createFragment([null, {}]);
260
+ }
261
+ return [
262
+ [
263
+ 3,
264
+ [
265
+ component,
266
+ props
267
+ ],
268
+ rendered_dom
269
+ ],
270
+ doc_frag
271
+ ];
272
+ };
273
+ var updateComponent = (dom, jsx) => {
274
+ const old_props = dom[1][1];
275
+ const new_props = jsx[1];
276
+ batch(() => {
277
+ for (const [key, value] of Object.entries(new_props))
278
+ if (old_props[key] !== value)
279
+ old_props[key] = value;
280
+ });
281
+ };
282
+ var revokeComponent = (dom) => revokeFragment(dom[2]);
283
+ var afterComponent = (dom, node) => afterFragment(dom[2], node);
284
+
285
+ // src/mount/dom/index.ts
286
+ var funcMap = [
287
+ [updateText, revokeText, afterText],
288
+ [updateElement, revokeElement, afterElement],
289
+ [updateFragment, revokeFragment, afterFragment],
290
+ [updateComponent, revokeComponent, afterComponent]
291
+ ];
292
+ var createNode = (jsx) => {
293
+ if (typeof jsx === "string")
294
+ return createText(jsx);
295
+ if (Array.isArray(jsx)) {
296
+ const [tag] = jsx;
297
+ if (typeof tag === "string")
298
+ return createElement(jsx);
299
+ if (typeof tag === "function")
300
+ return createComponent2(jsx);
301
+ if (tag === null)
302
+ return createFragment(jsx);
303
+ }
304
+ throw new Error(`Unrecognized JSX node`, { cause: jsx });
305
+ };
306
+ var updateNode = (dom, jsx) => funcMap[dom[0]][0](dom, jsx);
307
+ var revokeNode = (dom) => funcMap[dom[0]][1](dom);
308
+ var afterNode = (dom, node) => funcMap[dom[0]][2](dom, node);
309
+
310
+ // src/mount/index.ts
311
+ var rootMap = new WeakMap;
312
+ var render = (el, jsx) => {
313
+ if (rootMap.has(el))
314
+ revokeNode(rootMap.get(el));
315
+ const [root, node] = createNode(jsx);
316
+ rootMap.set(el, root);
317
+ el.append(node);
318
+ };
319
+
320
+ //# debugId=A5D082D64B18D38664756E2164756E21
4
321
  //# sourceMappingURL=index.cjs.map
@@ -1,20 +1,20 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/jsx/component.ts", "../src/jsx/fragment.ts", "../src/jsx/likereact.ts", "../src/batch.ts", "../src/mount/diff.ts", "../src/mount/dom/fragment.ts", "../src/mount/dom/component.ts", "../src/mount/dom/element.ts", "../src/mount/dom/text.ts", "../src/mount/dom/index.ts", "../src/mount/index.ts"],
3
+ "sources": ["../src/jsx/component.ts", "../src/jsx/fragment.ts", "../src/jsx/likereact.ts", "../src/mount/dom/text.ts", "../src/mount/diff.ts", "../src/mount/dom/element.ts", "../src/mount/dom/fragment.ts", "../src/batch.ts", "../src/mount/dom/component.ts", "../src/mount/dom/index.ts", "../src/mount/index.ts"],
4
4
  "sourcesContent": [
5
5
  "import type { JSXComponent, JSXNode } from \".\";\n\nexport type ComponentFunction<T extends object> = (render: (jsx: JSXNode) => void, initProps: T) => T;\nexport type Component<T extends object> = (props: T) => JSXComponent;\n\nexport const createComponent = <T extends object>(component: ComponentFunction<T>): Component<T> =>\n (props: T): JSXComponent => [component, props];\n",
6
6
  "import type { JSXFragment, JSXNode } from \".\";\n\nexport const fragment = (...children: JSXNode[]): JSXFragment =>\n [null, {}, ...children];\n",
7
7
  "import type { JSXNode } from \".\";\nimport type { Component } from \"./component\";\nimport { fragment } from \"./fragment\";\n\ntype JSXFactoryFunction = <T extends keyof HTMLElementTagNameMap | Component<any> | typeof fragment>(\n type: T,\n props: null | ( T extends Component<infer P> ? P : { [key: string]: unknown } ),\n ...children: JSXNode[]\n) => JSXNode;\n\nexport const h: JSXFactoryFunction = (type, props, ...children) =>\n typeof type === \"string\"\n ? [type, props ?? {}, ...children]\n : type === fragment\n ? [null, props ?? {}, ...children]\n : type(props);\n",
8
- "type BatchFn = (cb: () => void) => void;\n\nexport let batch: BatchFn = cb => cb();\n\nexport const setBatch = (fn: BatchFn): void => { batch = fn }\n",
8
+ "import type { RenderedDOM } from \".\";\n\nexport const createText = (jsx: string): [RenderedDOM<string>, Text] => {\n const node = new Text(jsx);\n return [[0, jsx, node], node];\n}\n\nexport const updateText = (dom: RenderedDOM<string>, jsx: string) => {\n if (dom[1] !== jsx)\n dom[2].textContent = dom[1] = jsx;\n}\n\nexport const revokeText = (dom: RenderedDOM<string>): void => (\n dom[2].remove()\n)\n\nexport const afterText = (dom: RenderedDOM<string>, node: Node): void => {\n dom[2].parentNode?.insertBefore(node, dom[2].nextSibling)\n}\n",
9
9
  "import type { JSXNode } from \"../jsx\";\n\nexport const isCompatibleNode = (before: JSXNode, after: JSXNode): boolean =>\n typeof before === \"string\" || typeof after === \"string\"\n ? typeof before === typeof after\n : before[0] === after[0] && before[1].key === after[1].key;\n\nexport type Patch =\n | [0, number, JSXNode] // 更新\n | [1, number, JSXNode] // 挿入\n | [2, number, JSXNode] // 削除\n\nexport const diff = (\n before_nodes: JSXNode[],\n after_nodes: JSXNode[],\n): Patch[] => {\n const patches: Patch[] = [];\n const max = Math.max(before_nodes.length, after_nodes.length);\n\n let index = 0;\n for(let i = 0;i < max;i++){\n const before = before_nodes[i];\n const after = after_nodes[i];\n \n if(!before && after)\n patches.push([1, index++, after]);\n else if(before && !after)\n patches.push([2, index, before]);\n else if(before && after)\n if(isCompatibleNode(before, after))\n patches.push([0, index++, after]);\n else{\n patches.push([2, index, before]);\n patches.push([1, index++, after]);\n }\n }\n\n return patches;\n}\n",
10
- "import { renderNode, type RenderedDOM, type UnknownRenderedDOM } from \".\";\nimport type { JSXFragment } from \"../../jsx\";\nimport { diff } from \"../diff\";\n\nexport const renderFragment = (jsx: JSXFragment): RenderedDOM<JSXFragment> => {\n let currentJSX = jsx;\n\n let rendered_children: UnknownRenderedDOM[] = [];\n let mark: Comment | void;\n\n return {\n // type: 2,\n // flat: () => rendered_children.flatMap(e=>e.flat()),\n update(jsx){\n const [,, ...old_children] = currentJSX;\n const [,, ...new_children] = jsx;\n\n for (const [type, idx, jsx] of diff(old_children, new_children)) {\n switch(type){\n case 0:\n rendered_children[idx].update(jsx as any);\n break;\n case 1:\n const rendered = renderNode(jsx);\n const dom = rendered.render();\n rendered_children.splice(idx, 0, rendered);\n if (idx === 0) {\n mark!.after(dom);\n } else {\n rendered_children[idx - 1].after(dom);\n }\n break;\n case 2:\n const [removed] = rendered_children.splice(idx, 1);\n removed.revoke();\n break;\n }\n }\n \n currentJSX = jsx;\n },\n render(){\n const [,, ...children] = currentJSX;\n\n const el = document.createDocumentFragment();\n mark = document.createComment(\"\");\n\n rendered_children = children.map(renderNode);\n el.append(mark, ...rendered_children.map(e=>e.render()));\n\n return el;\n },\n revoke(){\n for (const child of rendered_children)\n child.revoke();\n },\n after(node) {\n (rendered_children.at(-1) ?? mark)?.after(node);\n },\n }\n}\n",
11
- "import { type RenderedDOM } from \".\";\nimport { batch } from \"../../batch\";\nimport type { JSXComponent, JSXFragment, JSXNode } from \"../../jsx\";\nimport { renderFragment } from \"./fragment\";\n\nexport const renderComponent = (jsx: JSXComponent): RenderedDOM<JSXComponent> => {\n let currentJSX = jsx;\n\n let rendered_dom: RenderedDOM<JSXFragment> | null;\n let props: { [key: string]: unknown } | null;\n\n return {\n // type: 3,\n // flat: () => rendered_dom!.flat() ?? [],\n update(jsx){\n const [, afterProps/*, ...children*/] = currentJSX = jsx;\n\n batch(() => {\n for (const [key, value] of Object.entries(afterProps))\n if (props![key] !== value)\n props![key] = value;\n });\n },\n render(){\n rendered_dom?.revoke();\n rendered_dom = null;\n\n const [component, init_props/*, ...children*/] = currentJSX;\n\n props = component((jsx: JSXNode) => {\n if(rendered_dom) rendered_dom.update([null, {}, jsx]);\n else rendered_dom = renderFragment([null, {}, jsx]);\n }, { ...init_props });\n\n if(!rendered_dom) {\n console.error(\"never rendered Initial render.\");\n rendered_dom = renderFragment([null, {}]);\n }\n\n return rendered_dom.render();\n },\n revoke(){ rendered_dom!.revoke() },\n after(node) { rendered_dom!.after(node) },\n }\n}\n",
12
- "import { renderNode, type RenderedDOM, type UnknownRenderedDOM } from \".\";\nimport type { JSXElement } from \"../../jsx\";\nimport { diff } from \"../diff\";\n\nconst elementEvents: WeakMap<HTMLElement, Record<string, Function | undefined | null>> = new WeakMap;\n\nfunction handleEvent(this: HTMLElement, ev: Event){\n return elementEvents.get(this)?.[ev.type]?.call(this, ev);\n}\n\nconst setAttribute = (el: HTMLElement, name: string, value: unknown) => {\n if (name.startsWith(\"$\")) {\n const ev_name = name.substring(1);\n if (![\"beforeMount\", \"mount\", \"beforeUpdate\", \"update\", \"beforeUnmount\", \"unmount\"].includes(ev_name)) {\n const events = elementEvents.get(el)!;\n if(!(ev_name in events))\n el.addEventListener(ev_name, handleEvent);\n if (typeof value === \"function\" || value == null)\n events[ev_name] = value;\n else {\n console.error(\"Invalid event handler: \", value);\n events[ev_name] = undefined;\n }\n }\n } else switch(typeof value){\n case \"string\":\n el.setAttribute(name, value);\n break;\n case \"function\":\n case \"object\":\n if(value === null)\n el.removeAttribute(name);\n else\n console.error(`${typeof value} values cannot mount on attributes.`);\n break;\n default:\n if(value === undefined)\n el.removeAttribute(name);\n else\n el.setAttribute(name, String(value));\n break;\n }\n}\n\nexport const renderElement = (jsx: JSXElement): RenderedDOM<JSXElement> => {\n let currentJSX = jsx;\n\n let rendered_children: UnknownRenderedDOM[] = [];\n let element: HTMLElement | void;\n\n return {\n // type: 1,\n // flat: () => [currentJSX],\n update(jsx){\n currentJSX[1].$beforeUpdate?.call<any, any, any>(element!, new CustomEvent(\"beforeupdate\", { detail: element! }));\n \n const [, old_props, ...old_children] = currentJSX;\n const [, props, ...new_children] = jsx;\n\n const removed_prop_keys = Object.keys(old_props).filter(key => !(key in props));\n\n for (const [name, value] of Object.entries({\n ...props,\n ...Object.fromEntries(\n removed_prop_keys.map(key => [key, undefined])\n )\n }))\n if((currentJSX[1] as any)[name] !== value)\n setAttribute(element!, name, value);\n\n for (const [type, idx, jsx] of diff(old_children, new_children)) {\n switch(type){\n case 0:\n rendered_children[idx].update(jsx as any);\n break;\n case 1:\n const rendered = renderNode(jsx);\n const dom = rendered.render();\n rendered_children.splice(idx, 0, rendered);\n if (idx === 0) {\n if (element!.firstChild) {\n element!.firstChild.before(dom);\n } else {\n element!.append(dom);\n }\n } else {\n rendered_children[idx - 1].after(dom);\n }\n break;\n case 2:\n rendered_children.splice(idx, 1)[0].revoke();\n break;\n }\n }\n\n currentJSX = jsx;\n \n props.$update?.call<any, any, any>(element!, new CustomEvent(\"update\", { detail: element! }));\n },\n render(){\n const [tag, props, ...children] = currentJSX;\n\n props.$beforeMount?.();\n const el = document.createElement(tag);\n elementEvents.set(el, {});\n props.$mount?.call<any, any, any>(el, new CustomEvent(\"mount\", { detail: el }));\n\n for (const [name, value] of Object.entries(props))\n setAttribute(el, name, value);\n\n rendered_children = children.map(renderNode);\n el.append(...rendered_children.map(e=>e.render()));\n\n return element = el;\n },\n revoke(){\n currentJSX[1].$beforeUnmount?.call<any, any, any>(element!, new CustomEvent(\"beforeunmount\", { detail: element! }));\n\n for (const child of rendered_children)\n child.revoke();\n elementEvents.delete(element!);\n element!.remove();\n \n currentJSX[1].$unmount?.();\n },\n after(node) { element!.after(node) },\n }\n}\n",
13
- "import type { RenderedDOM } from \".\";\n\nexport const renderText = (text: string): RenderedDOM<string> => {\n let node: Text | null;\n\n return {\n // type: 0,\n // flat: () => [currentText],\n update(t){ text !== t && (node!.textContent = text = t) },\n render: () => node = new Text(text),\n revoke(){ node!.remove() },\n after(n) { node!.parentNode!.insertBefore(n, node!.nextSibling) },\n }\n}\n",
14
- "import type { JSXComponent, JSXElement, JSXFragment, JSXNode } from \"../../jsx\";\nimport { renderComponent } from \"./component\";\nimport { renderElement } from \"./element\";\nimport { renderFragment } from \"./fragment\";\nimport { renderText } from \"./text\";\n\nexport type RenderedDOM<T extends JSXNode> = {\n // type: T extends string ? 0 : T extends JSXElement ? 1 : T extends JSXFragment ? 2 : T extends JSXComponent ? 3 : never, // 0 種類\n // flat(): (JSXElement | string)[], // 1 差分比較用のフラットJSX出力関数\n update(jsx: T): void, // 2 差分更新関数\n render(): Node, // 3 初回・トラブル時にフル描画をする関数\n revoke(): void, // 4 破棄関数\n after(node: Node): void, // 5 挿入関数\n}\n\nexport type UnknownRenderedDOM = RenderedDOM<string> | RenderedDOM<JSXElement> | RenderedDOM<JSXFragment> | RenderedDOM<JSXComponent>;\n\nexport const renderNode = (jsx: JSXNode): UnknownRenderedDOM => {\n if(typeof jsx === \"string\"){\n return renderText(jsx);\n }else if(typeof jsx[0] === \"string\"){\n return renderElement(jsx);\n }else if(jsx[0] === null){\n return renderFragment(jsx);\n }else{\n return renderComponent(jsx);\n }\n}\n",
15
- "import type { JSXNode } from \"../jsx\";\nimport { renderNode, type UnknownRenderedDOM } from \"./dom\";\n\ntype RenderFunction = (el: HTMLElement, jsx: JSXNode) => void;\n\nconst rootMap = new WeakMap<HTMLElement, UnknownRenderedDOM>();\n\nexport const render: RenderFunction = (el, jsx) => {\n rootMap.get(el)?.revoke();\n\n const root = renderNode(jsx);\n\n rootMap.set(el, root);\n\n el.append(root.render());\n}\n"
10
+ "import { afterNode, createNode, revokeNode, updateNode, type RenderedDOM } from \".\";\nimport type { JSXElement } from \"../../jsx\";\nimport { diff } from \"../diff\";\n\nconst lifecycle_events = new Set([\n \"beforeMount\",\n \"mount\",\n \"beforeUpdate\",\n \"update\",\n \"beforeUnmount\",\n \"unmount\"\n]);\n\nconst elementEvents: WeakMap<HTMLElement, Record<string, Function | undefined | null>> = new WeakMap;\n\nfunction handleEvent(this: HTMLElement, ev: Event){\n return elementEvents.get(this)?.[ev.type]?.call(this, ev);\n}\n\nconst setAttribute = (el: HTMLElement, name: string, value: unknown) => {\n if (name.startsWith(\"$\")) {\n const ev_name = name.substring(1);\n if (!lifecycle_events.has(ev_name)) {\n const events = elementEvents.get(el)!;\n if(!(ev_name in events))\n el.addEventListener(ev_name, handleEvent);\n if (typeof value === \"function\" || value == null)\n events[ev_name] = value;\n else {\n console.error(\"Invalid event handler: \", value);\n events[ev_name] = undefined;\n }\n }\n } else switch(typeof value){\n case \"string\":\n el.setAttribute(name, value);\n break;\n case \"function\":\n case \"object\":\n if(value === null)\n el.removeAttribute(name);\n else\n console.error(`${typeof value} values cannot mount on attributes.`);\n break;\n default:\n if(value === undefined)\n el.removeAttribute(name);\n else\n el.setAttribute(name, String(value));\n break;\n }\n}\n\nexport const createElement = (jsx: JSXElement): [RenderedDOM<JSXElement>, HTMLElement] => {\n const [tag, props, ...children] = jsx;\n\n props.$beforeMount?.();\n const element = document.createElement(tag);\n elementEvents.set(element, {});\n props.$mount?.call<any, any, any>(element, new CustomEvent(\"mount\", { detail: element }));\n\n for (const [name, value] of Object.entries(props))\n setAttribute(element, name, value);\n\n const rendered_children = children.map(createNode);\n element.append(...rendered_children.map(e=>e[1]));\n\n return [[1, jsx, element, rendered_children.map(e=>e[0])], element];\n}\n\nexport const updateElement = (dom: RenderedDOM<JSXElement>, jsx: JSXElement) => {\n const [, [, old_props, ...old_children], element, rendered_children] = dom;\n const [, new_props, ...new_children] = jsx;\n old_props.$beforeUpdate?.call<any, any, any>(element, new CustomEvent(\"beforeupdate\", { detail: element }));\n\n\n const removed_prop_keys = Object.keys(old_props).filter(key => !(key in new_props));\n\n for (const [name, value] of Object.entries({\n ...new_props,\n ...Object.fromEntries(\n removed_prop_keys.map(key => [key, undefined])\n )\n }))\n if((old_props as any)[name] !== value)\n setAttribute(element, name, value);\n\n for (const [type, idx, jsx] of diff(old_children, new_children)) {\n switch(type){\n case 0:\n updateNode(rendered_children[idx], jsx);\n break;\n case 1:\n const [rendered, node] = createNode(jsx);\n rendered_children.splice(idx, 0, rendered);\n if (idx === 0) {\n if (element.firstChild) {\n element.firstChild.before(node);\n } else {\n element.append(node);\n }\n } else {\n afterNode(rendered_children[idx - 1], node);\n }\n break;\n case 2:\n revokeNode(rendered_children.splice(idx, 1)[0]);\n break;\n }\n }\n\n dom[1] = jsx;\n \n new_props.$update?.call<any, any, any>(element, new CustomEvent(\"update\", { detail: element }));\n}\n\nexport const revokeElement = (dom: RenderedDOM<JSXElement>) => {\n const [, [, props], element, rendered_children] = dom;\n props.$beforeUnmount?.call<any, any, any>(element, new CustomEvent(\"beforeunmount\", { detail: element }));\n\n for (const child of rendered_children)\n revokeNode(child);\n elementEvents.delete(element);\n element.remove();\n \n props.$unmount?.();\n}\n\nexport const afterElement = (dom: RenderedDOM<JSXElement>, node: Node) => {\n dom[2].after(node);\n}\n",
11
+ "import { afterNode, createNode, revokeNode, updateNode, type RenderedDOM } from \".\";\nimport type { JSXFragment } from \"../../jsx\";\nimport { diff } from \"../diff\";\n\nexport const createFragment = (jsx: JSXFragment): [RenderedDOM<JSXFragment>, DocumentFragment] => {\n const [,, ...children] = jsx;\n const mark = new Comment;\n const el = new DocumentFragment;\n\n const rendered_children = children.map(createNode);\n el.append(mark, ...rendered_children.map(e=>e[1]));\n\n return [[2, jsx, mark, rendered_children.map(e=>e[0])], el];\n}\n\nexport const updateFragment = (dom: RenderedDOM<JSXFragment>, jsx: JSXFragment) => {\n const [, [,, ...old_children], mark, rendered_children] = dom;\n const [,, ...new_children] = jsx;\n\n for (const [type, idx, jsx] of diff(old_children, new_children)) {\n switch(type){\n case 0:\n updateNode(rendered_children[idx], jsx);\n break;\n case 1:\n const [rendered, el] = createNode(jsx);\n rendered_children.splice(idx, 0, rendered);\n if (idx === 0) {\n mark.after(el);\n } else {\n afterNode(rendered_children[idx - 1], el);\n }\n break;\n case 2:\n const [removed] = rendered_children.splice(idx, 1);\n revokeNode(removed);\n break;\n }\n }\n \n dom[1] = jsx;\n}\n\nexport const revokeFragment = (dom: RenderedDOM<JSXFragment>) => {\n for (const child of dom[3])\n revokeNode(child);\n dom[2].remove();\n}\n\nexport const afterFragment = (dom: RenderedDOM<JSXFragment>, node: Node) => {\n const last_rendered_dom = dom[3].at(-1);\n if (last_rendered_dom)\n afterNode(last_rendered_dom, node);\n else\n dom[2].after(node);\n}\n",
12
+ "type BatchFn = (cb: () => void) => void;\n\nexport let batch: BatchFn = cb => cb();\n\nexport const setBatch = (fn: BatchFn): void => { batch = fn }\n",
13
+ "import { type RenderedDOM } from \".\";\nimport { batch } from \"../../batch\";\nimport type { JSXComponent, JSXFragment, JSXNode } from \"../../jsx\";\nimport { afterFragment, createFragment, revokeFragment, updateFragment } from \"./fragment\";\n\nexport const createComponent = (jsx: JSXComponent): [RenderedDOM<JSXComponent>, DocumentFragment] => {\n const [component, init_props/* , ...children */] = jsx;\n\n let rendered_dom: RenderedDOM<JSXFragment> | void;\n let doc_frag: DocumentFragment | void;\n\n const props = component((jsx: JSXNode) => {\n if (rendered_dom) updateFragment(rendered_dom, [null, {}, jsx]);\n else [rendered_dom, doc_frag] = createFragment([null, {}, jsx]);\n }, { ...init_props });\n\n //@ts-ignore\n if (!doc_frag) {\n console.error(\"never rendered Initial render.\");\n [rendered_dom, doc_frag] = createFragment([null, {}]);\n }\n\n return [\n [\n 3,\n [\n component,\n props,\n /* ...children */\n ] as JSXComponent,\n rendered_dom!\n ],\n doc_frag\n ];\n}\n\nexport const updateComponent = (dom: RenderedDOM<JSXComponent>, jsx: JSXComponent) => {\n const old_props = dom[1][1];\n const new_props = jsx[1];\n\n batch(() => {\n for (const [key, value] of Object.entries(new_props)) //@ts-ignore\n if (old_props[key] !== value) old_props[key] = value;\n });\n}\n\nexport const revokeComponent = (dom: RenderedDOM<JSXComponent>) => (\n revokeFragment(dom[2])\n)\n\nexport const afterComponent = (dom: RenderedDOM<JSXComponent>, node: Node) => (\n afterFragment(dom[2], node)\n)\n",
14
+ "import type { JSXComponent, JSXElement, JSXFragment, JSXNode } from \"../../jsx\";\nimport { createText, updateText, revokeText, afterText } from \"./text\";\nimport { createElement, updateElement, revokeElement, afterElement } from \"./element\";\nimport { createFragment, updateFragment, revokeFragment, afterFragment } from \"./fragment\";\nimport { createComponent, updateComponent, revokeComponent, afterComponent } from \"./component\";\n\nexport type RenderedDOM<T extends JSXNode> =\n T extends string ? [0, string, Text] :\n T extends JSXElement ? [1, JSXElement, HTMLElement, RenderedDOM<any>[]] :\n T extends JSXFragment ? [2, JSXFragment, Comment, RenderedDOM<any>[]] :\n T extends JSXComponent ? [3, JSXComponent, RenderedDOM<JSXFragment>] :\n never;\n\nconst funcMap = [\n [updateText, revokeText, afterText ],\n [updateElement, revokeElement, afterElement ],\n [updateFragment, revokeFragment, afterFragment ],\n [updateComponent, revokeComponent, afterComponent],\n] as const;\n\nexport const createNode = (jsx: JSXNode): [RenderedDOM<any>, Node] => {\n if (typeof jsx === \"string\") return createText(jsx);\n if (Array.isArray(jsx)) {\n const [tag] = jsx;\n if (typeof tag === \"string\") return createElement(jsx);\n if (typeof tag === \"function\") return createComponent(jsx);\n if (tag === null) return createFragment(jsx);\n }\n throw new Error(`Unrecognized JSX node`, { cause: jsx });\n}\n\nexport const updateNode = (dom: RenderedDOM<any>, jsx: any): void => funcMap[dom[0]][0](dom as any, jsx);\n\nexport const revokeNode = (dom: RenderedDOM<any>): void => funcMap[dom[0]][1](dom as any);\n\nexport const afterNode = (dom: RenderedDOM<any>, node: Node): void => funcMap[dom[0]][2](dom as any, node);\n",
15
+ "import type { JSXNode } from \"../jsx\";\nimport { createNode, revokeNode, type RenderedDOM } from \"./dom\";\n\ntype RenderFunction = (el: HTMLElement, jsx: JSXNode) => void;\n\nconst rootMap = new WeakMap<HTMLElement, RenderedDOM<any>>();\n\nexport const render: RenderFunction = (el, jsx) => {\n if (rootMap.has(el))\n revokeNode(rootMap.get(el)!);\n\n const [root, node] = createNode(jsx);\n\n rootMap.set(el, root);\n\n el.append(node);\n}\n"
16
16
  ],
17
- "mappings": "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",
18
- "debugId": "76A612C338578F2E64756E2164756E21",
17
+ "mappings": "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",
18
+ "debugId": "A5D082D64B18D38664756E2164756E21",
19
19
  "names": []
20
20
  }
package/dist/index.js CHANGED
@@ -1,4 +1,289 @@
1
- var E=(e)=>(o)=>[e,o];var S=(...e)=>[null,{},...e];var M=(e,o,...t)=>typeof e==="string"?[e,o??{},...t]:e===S?[null,o??{},...t]:e(o);var J=(e)=>e(),C=(e)=>{J=e};var v=(e,o)=>typeof e==="string"||typeof o==="string"?typeof e===typeof o:e[0]===o[0]&&e[1].key===o[1].key,g=(e,o)=>{let t=[],r=Math.max(e.length,o.length),n=0;for(let a=0;a<r;a++){let p=e[a],i=o[a];if(!p&&i)t.push([1,n++,i]);else if(p&&!i)t.push([2,n,p]);else if(p&&i)if(v(p,i))t.push([0,n++,i]);else t.push([2,n,p]),t.push([1,n++,i])}return t};var y=(e)=>{let o=e,t=[],r;return{update(n){let[,,...a]=o,[,,...p]=n;for(let[i,s,u]of g(a,p))switch(i){case 0:t[s].update(u);break;case 1:let c=l(u),m=c.render();if(t.splice(s,0,c),s===0)r.after(m);else t[s-1].after(m);break;case 2:let[f]=t.splice(s,1);f.revoke();break}o=n},render(){let[,,...n]=o,a=document.createDocumentFragment();return r=document.createComment(""),t=n.map(l),a.append(r,...t.map((p)=>p.render())),a},revoke(){for(let n of t)n.revoke()},after(n){(t.at(-1)??r)?.after(n)}}};var X=(e)=>{let o=e,t,r;return{update(n){let[,a]=o=n;J(()=>{for(let[p,i]of Object.entries(a))if(r[p]!==i)r[p]=i})},render(){t?.revoke(),t=null;let[n,a]=o;if(r=n((p)=>{if(t)t.update([null,{},p]);else t=y([null,{},p])},{...a}),!t)console.error("never rendered Initial render."),t=y([null,{}]);return t.render()},revoke(){t.revoke()},after(n){t.after(n)}}};var b=new WeakMap;function A(e){return b.get(this)?.[e.type]?.call(this,e)}var h=(e,o,t)=>{if(o.startsWith("$")){let r=o.substring(1);if(!["beforeMount","mount","beforeUpdate","update","beforeUnmount","unmount"].includes(r)){let n=b.get(e);if(!(r in n))e.addEventListener(r,A);if(typeof t==="function"||t==null)n[r]=t;else console.error("Invalid event handler: ",t),n[r]=void 0}}else switch(typeof t){case"string":e.setAttribute(o,t);break;case"function":case"object":if(t===null)e.removeAttribute(o);else console.error(`${typeof t} values cannot mount on attributes.`);break;default:if(t===void 0)e.removeAttribute(o);else e.setAttribute(o,String(t));break}},k=(e)=>{let o=e,t=[],r;return{update(n){o[1].$beforeUpdate?.call(r,new CustomEvent("beforeupdate",{detail:r}));let[,a,...p]=o,[,i,...s]=n,u=Object.keys(a).filter((c)=>!(c in i));for(let[c,m]of Object.entries({...i,...Object.fromEntries(u.map((f)=>[f,void 0]))}))if(o[1][c]!==m)h(r,c,m);for(let[c,m,f]of g(p,s))switch(c){case 0:t[m].update(f);break;case 1:let T=l(f),d=T.render();if(t.splice(m,0,T),m===0)if(r.firstChild)r.firstChild.before(d);else r.append(d);else t[m-1].after(d);break;case 2:t.splice(m,1)[0].revoke();break}o=n,i.$update?.call(r,new CustomEvent("update",{detail:r}))},render(){let[n,a,...p]=o;a.$beforeMount?.();let i=document.createElement(n);b.set(i,{}),a.$mount?.call(i,new CustomEvent("mount",{detail:i}));for(let[s,u]of Object.entries(a))h(i,s,u);return t=p.map(l),i.append(...t.map((s)=>s.render())),r=i},revoke(){o[1].$beforeUnmount?.call(r,new CustomEvent("beforeunmount",{detail:r}));for(let n of t)n.revoke();b.delete(r),r.remove(),o[1].$unmount?.()},after(n){r.after(n)}}};var w=(e)=>{let o;return{update(t){e!==t&&(o.textContent=e=t)},render:()=>o=new Text(e),revoke(){o.remove()},after(t){o.parentNode.insertBefore(t,o.nextSibling)}}};var l=(e)=>{if(typeof e==="string")return w(e);else if(typeof e[0]==="string")return k(e);else if(e[0]===null)return y(e);else return X(e)};var N=new WeakMap,nt=(e,o)=>{N.get(e)?.revoke();let t=l(o);N.set(e,t),e.append(t.render())};export{C as setBatch,nt as render,M as h,S as fragment,E as createComponent};
1
+ // src/jsx/component.ts
2
+ var createComponent = (component) => (props) => [component, props];
3
+ // src/jsx/fragment.ts
4
+ var fragment = (...children) => [null, {}, ...children];
5
+ // src/jsx/likereact.ts
6
+ var h = (type, props, ...children) => typeof type === "string" ? [type, props ?? {}, ...children] : type === fragment ? [null, props ?? {}, ...children] : type(props);
7
+ // src/mount/dom/text.ts
8
+ var createText = (jsx) => {
9
+ const node = new Text(jsx);
10
+ return [[0, jsx, node], node];
11
+ };
12
+ var updateText = (dom, jsx) => {
13
+ if (dom[1] !== jsx)
14
+ dom[2].textContent = dom[1] = jsx;
15
+ };
16
+ var revokeText = (dom) => dom[2].remove();
17
+ var afterText = (dom, node) => {
18
+ dom[2].parentNode?.insertBefore(node, dom[2].nextSibling);
19
+ };
2
20
 
3
- //# debugId=CC957926242F8EAC64756E2164756E21
21
+ // src/mount/diff.ts
22
+ var isCompatibleNode = (before, after) => typeof before === "string" || typeof after === "string" ? typeof before === typeof after : before[0] === after[0] && before[1].key === after[1].key;
23
+ var diff = (before_nodes, after_nodes) => {
24
+ const patches = [];
25
+ const max = Math.max(before_nodes.length, after_nodes.length);
26
+ let index = 0;
27
+ for (let i = 0;i < max; i++) {
28
+ const before = before_nodes[i];
29
+ const after = after_nodes[i];
30
+ if (!before && after)
31
+ patches.push([1, index++, after]);
32
+ else if (before && !after)
33
+ patches.push([2, index, before]);
34
+ else if (before && after)
35
+ if (isCompatibleNode(before, after))
36
+ patches.push([0, index++, after]);
37
+ else {
38
+ patches.push([2, index, before]);
39
+ patches.push([1, index++, after]);
40
+ }
41
+ }
42
+ return patches;
43
+ };
44
+
45
+ // src/mount/dom/element.ts
46
+ var lifecycle_events = new Set([
47
+ "beforeMount",
48
+ "mount",
49
+ "beforeUpdate",
50
+ "update",
51
+ "beforeUnmount",
52
+ "unmount"
53
+ ]);
54
+ var elementEvents = new WeakMap;
55
+ function handleEvent(ev) {
56
+ return elementEvents.get(this)?.[ev.type]?.call(this, ev);
57
+ }
58
+ var setAttribute = (el, name, value) => {
59
+ if (name.startsWith("$")) {
60
+ const ev_name = name.substring(1);
61
+ if (!lifecycle_events.has(ev_name)) {
62
+ const events = elementEvents.get(el);
63
+ if (!(ev_name in events))
64
+ el.addEventListener(ev_name, handleEvent);
65
+ if (typeof value === "function" || value == null)
66
+ events[ev_name] = value;
67
+ else {
68
+ console.error("Invalid event handler: ", value);
69
+ events[ev_name] = undefined;
70
+ }
71
+ }
72
+ } else
73
+ switch (typeof value) {
74
+ case "string":
75
+ el.setAttribute(name, value);
76
+ break;
77
+ case "function":
78
+ case "object":
79
+ if (value === null)
80
+ el.removeAttribute(name);
81
+ else
82
+ console.error(`${typeof value} values cannot mount on attributes.`);
83
+ break;
84
+ default:
85
+ if (value === undefined)
86
+ el.removeAttribute(name);
87
+ else
88
+ el.setAttribute(name, String(value));
89
+ break;
90
+ }
91
+ };
92
+ var createElement = (jsx) => {
93
+ const [tag, props, ...children] = jsx;
94
+ props.$beforeMount?.();
95
+ const element = document.createElement(tag);
96
+ elementEvents.set(element, {});
97
+ props.$mount?.call(element, new CustomEvent("mount", { detail: element }));
98
+ for (const [name, value] of Object.entries(props))
99
+ setAttribute(element, name, value);
100
+ const rendered_children = children.map(createNode);
101
+ element.append(...rendered_children.map((e) => e[1]));
102
+ return [[1, jsx, element, rendered_children.map((e) => e[0])], element];
103
+ };
104
+ var updateElement = (dom, jsx) => {
105
+ const [, [, old_props, ...old_children], element, rendered_children] = dom;
106
+ const [, new_props, ...new_children] = jsx;
107
+ old_props.$beforeUpdate?.call(element, new CustomEvent("beforeupdate", { detail: element }));
108
+ const removed_prop_keys = Object.keys(old_props).filter((key) => !(key in new_props));
109
+ for (const [name, value] of Object.entries({
110
+ ...new_props,
111
+ ...Object.fromEntries(removed_prop_keys.map((key) => [key, undefined]))
112
+ }))
113
+ if (old_props[name] !== value)
114
+ setAttribute(element, name, value);
115
+ for (const [type, idx, jsx2] of diff(old_children, new_children)) {
116
+ switch (type) {
117
+ case 0:
118
+ updateNode(rendered_children[idx], jsx2);
119
+ break;
120
+ case 1:
121
+ const [rendered, node] = createNode(jsx2);
122
+ rendered_children.splice(idx, 0, rendered);
123
+ if (idx === 0) {
124
+ if (element.firstChild) {
125
+ element.firstChild.before(node);
126
+ } else {
127
+ element.append(node);
128
+ }
129
+ } else {
130
+ afterNode(rendered_children[idx - 1], node);
131
+ }
132
+ break;
133
+ case 2:
134
+ revokeNode(rendered_children.splice(idx, 1)[0]);
135
+ break;
136
+ }
137
+ }
138
+ dom[1] = jsx;
139
+ new_props.$update?.call(element, new CustomEvent("update", { detail: element }));
140
+ };
141
+ var revokeElement = (dom) => {
142
+ const [, [, props], element, rendered_children] = dom;
143
+ props.$beforeUnmount?.call(element, new CustomEvent("beforeunmount", { detail: element }));
144
+ for (const child of rendered_children)
145
+ revokeNode(child);
146
+ elementEvents.delete(element);
147
+ element.remove();
148
+ props.$unmount?.();
149
+ };
150
+ var afterElement = (dom, node) => {
151
+ dom[2].after(node);
152
+ };
153
+
154
+ // src/mount/dom/fragment.ts
155
+ var createFragment = (jsx) => {
156
+ const [, , ...children] = jsx;
157
+ const mark = new Comment;
158
+ const el = new DocumentFragment;
159
+ const rendered_children = children.map(createNode);
160
+ el.append(mark, ...rendered_children.map((e) => e[1]));
161
+ return [[2, jsx, mark, rendered_children.map((e) => e[0])], el];
162
+ };
163
+ var updateFragment = (dom, jsx) => {
164
+ const [, [, , ...old_children], mark, rendered_children] = dom;
165
+ const [, , ...new_children] = jsx;
166
+ for (const [type, idx, jsx2] of diff(old_children, new_children)) {
167
+ switch (type) {
168
+ case 0:
169
+ updateNode(rendered_children[idx], jsx2);
170
+ break;
171
+ case 1:
172
+ const [rendered, el] = createNode(jsx2);
173
+ rendered_children.splice(idx, 0, rendered);
174
+ if (idx === 0) {
175
+ mark.after(el);
176
+ } else {
177
+ afterNode(rendered_children[idx - 1], el);
178
+ }
179
+ break;
180
+ case 2:
181
+ const [removed] = rendered_children.splice(idx, 1);
182
+ revokeNode(removed);
183
+ break;
184
+ }
185
+ }
186
+ dom[1] = jsx;
187
+ };
188
+ var revokeFragment = (dom) => {
189
+ for (const child of dom[3])
190
+ revokeNode(child);
191
+ dom[2].remove();
192
+ };
193
+ var afterFragment = (dom, node) => {
194
+ const last_rendered_dom = dom[3].at(-1);
195
+ if (last_rendered_dom)
196
+ afterNode(last_rendered_dom, node);
197
+ else
198
+ dom[2].after(node);
199
+ };
200
+
201
+ // src/batch.ts
202
+ var batch = (cb) => cb();
203
+ var setBatch = (fn) => {
204
+ batch = fn;
205
+ };
206
+
207
+ // src/mount/dom/component.ts
208
+ var createComponent2 = (jsx) => {
209
+ const [component, init_props] = jsx;
210
+ let rendered_dom;
211
+ let doc_frag;
212
+ const props = component((jsx2) => {
213
+ if (rendered_dom)
214
+ updateFragment(rendered_dom, [null, {}, jsx2]);
215
+ else
216
+ [rendered_dom, doc_frag] = createFragment([null, {}, jsx2]);
217
+ }, { ...init_props });
218
+ if (!doc_frag) {
219
+ console.error("never rendered Initial render.");
220
+ [rendered_dom, doc_frag] = createFragment([null, {}]);
221
+ }
222
+ return [
223
+ [
224
+ 3,
225
+ [
226
+ component,
227
+ props
228
+ ],
229
+ rendered_dom
230
+ ],
231
+ doc_frag
232
+ ];
233
+ };
234
+ var updateComponent = (dom, jsx) => {
235
+ const old_props = dom[1][1];
236
+ const new_props = jsx[1];
237
+ batch(() => {
238
+ for (const [key, value] of Object.entries(new_props))
239
+ if (old_props[key] !== value)
240
+ old_props[key] = value;
241
+ });
242
+ };
243
+ var revokeComponent = (dom) => revokeFragment(dom[2]);
244
+ var afterComponent = (dom, node) => afterFragment(dom[2], node);
245
+
246
+ // src/mount/dom/index.ts
247
+ var funcMap = [
248
+ [updateText, revokeText, afterText],
249
+ [updateElement, revokeElement, afterElement],
250
+ [updateFragment, revokeFragment, afterFragment],
251
+ [updateComponent, revokeComponent, afterComponent]
252
+ ];
253
+ var createNode = (jsx) => {
254
+ if (typeof jsx === "string")
255
+ return createText(jsx);
256
+ if (Array.isArray(jsx)) {
257
+ const [tag] = jsx;
258
+ if (typeof tag === "string")
259
+ return createElement(jsx);
260
+ if (typeof tag === "function")
261
+ return createComponent2(jsx);
262
+ if (tag === null)
263
+ return createFragment(jsx);
264
+ }
265
+ throw new Error(`Unrecognized JSX node`, { cause: jsx });
266
+ };
267
+ var updateNode = (dom, jsx) => funcMap[dom[0]][0](dom, jsx);
268
+ var revokeNode = (dom) => funcMap[dom[0]][1](dom);
269
+ var afterNode = (dom, node) => funcMap[dom[0]][2](dom, node);
270
+
271
+ // src/mount/index.ts
272
+ var rootMap = new WeakMap;
273
+ var render = (el, jsx) => {
274
+ if (rootMap.has(el))
275
+ revokeNode(rootMap.get(el));
276
+ const [root, node] = createNode(jsx);
277
+ rootMap.set(el, root);
278
+ el.append(node);
279
+ };
280
+ export {
281
+ setBatch,
282
+ render,
283
+ h,
284
+ fragment,
285
+ createComponent
286
+ };
287
+
288
+ //# debugId=3ABCB26137CE572B64756E2164756E21
4
289
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1,20 +1,20 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/jsx/component.ts", "../src/jsx/fragment.ts", "../src/jsx/likereact.ts", "../src/batch.ts", "../src/mount/diff.ts", "../src/mount/dom/fragment.ts", "../src/mount/dom/component.ts", "../src/mount/dom/element.ts", "../src/mount/dom/text.ts", "../src/mount/dom/index.ts", "../src/mount/index.ts"],
3
+ "sources": ["../src/jsx/component.ts", "../src/jsx/fragment.ts", "../src/jsx/likereact.ts", "../src/mount/dom/text.ts", "../src/mount/diff.ts", "../src/mount/dom/element.ts", "../src/mount/dom/fragment.ts", "../src/batch.ts", "../src/mount/dom/component.ts", "../src/mount/dom/index.ts", "../src/mount/index.ts"],
4
4
  "sourcesContent": [
5
5
  "import type { JSXComponent, JSXNode } from \".\";\n\nexport type ComponentFunction<T extends object> = (render: (jsx: JSXNode) => void, initProps: T) => T;\nexport type Component<T extends object> = (props: T) => JSXComponent;\n\nexport const createComponent = <T extends object>(component: ComponentFunction<T>): Component<T> =>\n (props: T): JSXComponent => [component, props];\n",
6
6
  "import type { JSXFragment, JSXNode } from \".\";\n\nexport const fragment = (...children: JSXNode[]): JSXFragment =>\n [null, {}, ...children];\n",
7
7
  "import type { JSXNode } from \".\";\nimport type { Component } from \"./component\";\nimport { fragment } from \"./fragment\";\n\ntype JSXFactoryFunction = <T extends keyof HTMLElementTagNameMap | Component<any> | typeof fragment>(\n type: T,\n props: null | ( T extends Component<infer P> ? P : { [key: string]: unknown } ),\n ...children: JSXNode[]\n) => JSXNode;\n\nexport const h: JSXFactoryFunction = (type, props, ...children) =>\n typeof type === \"string\"\n ? [type, props ?? {}, ...children]\n : type === fragment\n ? [null, props ?? {}, ...children]\n : type(props);\n",
8
- "type BatchFn = (cb: () => void) => void;\n\nexport let batch: BatchFn = cb => cb();\n\nexport const setBatch = (fn: BatchFn): void => { batch = fn }\n",
8
+ "import type { RenderedDOM } from \".\";\n\nexport const createText = (jsx: string): [RenderedDOM<string>, Text] => {\n const node = new Text(jsx);\n return [[0, jsx, node], node];\n}\n\nexport const updateText = (dom: RenderedDOM<string>, jsx: string) => {\n if (dom[1] !== jsx)\n dom[2].textContent = dom[1] = jsx;\n}\n\nexport const revokeText = (dom: RenderedDOM<string>): void => (\n dom[2].remove()\n)\n\nexport const afterText = (dom: RenderedDOM<string>, node: Node): void => {\n dom[2].parentNode?.insertBefore(node, dom[2].nextSibling)\n}\n",
9
9
  "import type { JSXNode } from \"../jsx\";\n\nexport const isCompatibleNode = (before: JSXNode, after: JSXNode): boolean =>\n typeof before === \"string\" || typeof after === \"string\"\n ? typeof before === typeof after\n : before[0] === after[0] && before[1].key === after[1].key;\n\nexport type Patch =\n | [0, number, JSXNode] // 更新\n | [1, number, JSXNode] // 挿入\n | [2, number, JSXNode] // 削除\n\nexport const diff = (\n before_nodes: JSXNode[],\n after_nodes: JSXNode[],\n): Patch[] => {\n const patches: Patch[] = [];\n const max = Math.max(before_nodes.length, after_nodes.length);\n\n let index = 0;\n for(let i = 0;i < max;i++){\n const before = before_nodes[i];\n const after = after_nodes[i];\n \n if(!before && after)\n patches.push([1, index++, after]);\n else if(before && !after)\n patches.push([2, index, before]);\n else if(before && after)\n if(isCompatibleNode(before, after))\n patches.push([0, index++, after]);\n else{\n patches.push([2, index, before]);\n patches.push([1, index++, after]);\n }\n }\n\n return patches;\n}\n",
10
- "import { renderNode, type RenderedDOM, type UnknownRenderedDOM } from \".\";\nimport type { JSXFragment } from \"../../jsx\";\nimport { diff } from \"../diff\";\n\nexport const renderFragment = (jsx: JSXFragment): RenderedDOM<JSXFragment> => {\n let currentJSX = jsx;\n\n let rendered_children: UnknownRenderedDOM[] = [];\n let mark: Comment | void;\n\n return {\n // type: 2,\n // flat: () => rendered_children.flatMap(e=>e.flat()),\n update(jsx){\n const [,, ...old_children] = currentJSX;\n const [,, ...new_children] = jsx;\n\n for (const [type, idx, jsx] of diff(old_children, new_children)) {\n switch(type){\n case 0:\n rendered_children[idx].update(jsx as any);\n break;\n case 1:\n const rendered = renderNode(jsx);\n const dom = rendered.render();\n rendered_children.splice(idx, 0, rendered);\n if (idx === 0) {\n mark!.after(dom);\n } else {\n rendered_children[idx - 1].after(dom);\n }\n break;\n case 2:\n const [removed] = rendered_children.splice(idx, 1);\n removed.revoke();\n break;\n }\n }\n \n currentJSX = jsx;\n },\n render(){\n const [,, ...children] = currentJSX;\n\n const el = document.createDocumentFragment();\n mark = document.createComment(\"\");\n\n rendered_children = children.map(renderNode);\n el.append(mark, ...rendered_children.map(e=>e.render()));\n\n return el;\n },\n revoke(){\n for (const child of rendered_children)\n child.revoke();\n },\n after(node) {\n (rendered_children.at(-1) ?? mark)?.after(node);\n },\n }\n}\n",
11
- "import { type RenderedDOM } from \".\";\nimport { batch } from \"../../batch\";\nimport type { JSXComponent, JSXFragment, JSXNode } from \"../../jsx\";\nimport { renderFragment } from \"./fragment\";\n\nexport const renderComponent = (jsx: JSXComponent): RenderedDOM<JSXComponent> => {\n let currentJSX = jsx;\n\n let rendered_dom: RenderedDOM<JSXFragment> | null;\n let props: { [key: string]: unknown } | null;\n\n return {\n // type: 3,\n // flat: () => rendered_dom!.flat() ?? [],\n update(jsx){\n const [, afterProps/*, ...children*/] = currentJSX = jsx;\n\n batch(() => {\n for (const [key, value] of Object.entries(afterProps))\n if (props![key] !== value)\n props![key] = value;\n });\n },\n render(){\n rendered_dom?.revoke();\n rendered_dom = null;\n\n const [component, init_props/*, ...children*/] = currentJSX;\n\n props = component((jsx: JSXNode) => {\n if(rendered_dom) rendered_dom.update([null, {}, jsx]);\n else rendered_dom = renderFragment([null, {}, jsx]);\n }, { ...init_props });\n\n if(!rendered_dom) {\n console.error(\"never rendered Initial render.\");\n rendered_dom = renderFragment([null, {}]);\n }\n\n return rendered_dom.render();\n },\n revoke(){ rendered_dom!.revoke() },\n after(node) { rendered_dom!.after(node) },\n }\n}\n",
12
- "import { renderNode, type RenderedDOM, type UnknownRenderedDOM } from \".\";\nimport type { JSXElement } from \"../../jsx\";\nimport { diff } from \"../diff\";\n\nconst elementEvents: WeakMap<HTMLElement, Record<string, Function | undefined | null>> = new WeakMap;\n\nfunction handleEvent(this: HTMLElement, ev: Event){\n return elementEvents.get(this)?.[ev.type]?.call(this, ev);\n}\n\nconst setAttribute = (el: HTMLElement, name: string, value: unknown) => {\n if (name.startsWith(\"$\")) {\n const ev_name = name.substring(1);\n if (![\"beforeMount\", \"mount\", \"beforeUpdate\", \"update\", \"beforeUnmount\", \"unmount\"].includes(ev_name)) {\n const events = elementEvents.get(el)!;\n if(!(ev_name in events))\n el.addEventListener(ev_name, handleEvent);\n if (typeof value === \"function\" || value == null)\n events[ev_name] = value;\n else {\n console.error(\"Invalid event handler: \", value);\n events[ev_name] = undefined;\n }\n }\n } else switch(typeof value){\n case \"string\":\n el.setAttribute(name, value);\n break;\n case \"function\":\n case \"object\":\n if(value === null)\n el.removeAttribute(name);\n else\n console.error(`${typeof value} values cannot mount on attributes.`);\n break;\n default:\n if(value === undefined)\n el.removeAttribute(name);\n else\n el.setAttribute(name, String(value));\n break;\n }\n}\n\nexport const renderElement = (jsx: JSXElement): RenderedDOM<JSXElement> => {\n let currentJSX = jsx;\n\n let rendered_children: UnknownRenderedDOM[] = [];\n let element: HTMLElement | void;\n\n return {\n // type: 1,\n // flat: () => [currentJSX],\n update(jsx){\n currentJSX[1].$beforeUpdate?.call<any, any, any>(element!, new CustomEvent(\"beforeupdate\", { detail: element! }));\n \n const [, old_props, ...old_children] = currentJSX;\n const [, props, ...new_children] = jsx;\n\n const removed_prop_keys = Object.keys(old_props).filter(key => !(key in props));\n\n for (const [name, value] of Object.entries({\n ...props,\n ...Object.fromEntries(\n removed_prop_keys.map(key => [key, undefined])\n )\n }))\n if((currentJSX[1] as any)[name] !== value)\n setAttribute(element!, name, value);\n\n for (const [type, idx, jsx] of diff(old_children, new_children)) {\n switch(type){\n case 0:\n rendered_children[idx].update(jsx as any);\n break;\n case 1:\n const rendered = renderNode(jsx);\n const dom = rendered.render();\n rendered_children.splice(idx, 0, rendered);\n if (idx === 0) {\n if (element!.firstChild) {\n element!.firstChild.before(dom);\n } else {\n element!.append(dom);\n }\n } else {\n rendered_children[idx - 1].after(dom);\n }\n break;\n case 2:\n rendered_children.splice(idx, 1)[0].revoke();\n break;\n }\n }\n\n currentJSX = jsx;\n \n props.$update?.call<any, any, any>(element!, new CustomEvent(\"update\", { detail: element! }));\n },\n render(){\n const [tag, props, ...children] = currentJSX;\n\n props.$beforeMount?.();\n const el = document.createElement(tag);\n elementEvents.set(el, {});\n props.$mount?.call<any, any, any>(el, new CustomEvent(\"mount\", { detail: el }));\n\n for (const [name, value] of Object.entries(props))\n setAttribute(el, name, value);\n\n rendered_children = children.map(renderNode);\n el.append(...rendered_children.map(e=>e.render()));\n\n return element = el;\n },\n revoke(){\n currentJSX[1].$beforeUnmount?.call<any, any, any>(element!, new CustomEvent(\"beforeunmount\", { detail: element! }));\n\n for (const child of rendered_children)\n child.revoke();\n elementEvents.delete(element!);\n element!.remove();\n \n currentJSX[1].$unmount?.();\n },\n after(node) { element!.after(node) },\n }\n}\n",
13
- "import type { RenderedDOM } from \".\";\n\nexport const renderText = (text: string): RenderedDOM<string> => {\n let node: Text | null;\n\n return {\n // type: 0,\n // flat: () => [currentText],\n update(t){ text !== t && (node!.textContent = text = t) },\n render: () => node = new Text(text),\n revoke(){ node!.remove() },\n after(n) { node!.parentNode!.insertBefore(n, node!.nextSibling) },\n }\n}\n",
14
- "import type { JSXComponent, JSXElement, JSXFragment, JSXNode } from \"../../jsx\";\nimport { renderComponent } from \"./component\";\nimport { renderElement } from \"./element\";\nimport { renderFragment } from \"./fragment\";\nimport { renderText } from \"./text\";\n\nexport type RenderedDOM<T extends JSXNode> = {\n // type: T extends string ? 0 : T extends JSXElement ? 1 : T extends JSXFragment ? 2 : T extends JSXComponent ? 3 : never, // 0 種類\n // flat(): (JSXElement | string)[], // 1 差分比較用のフラットJSX出力関数\n update(jsx: T): void, // 2 差分更新関数\n render(): Node, // 3 初回・トラブル時にフル描画をする関数\n revoke(): void, // 4 破棄関数\n after(node: Node): void, // 5 挿入関数\n}\n\nexport type UnknownRenderedDOM = RenderedDOM<string> | RenderedDOM<JSXElement> | RenderedDOM<JSXFragment> | RenderedDOM<JSXComponent>;\n\nexport const renderNode = (jsx: JSXNode): UnknownRenderedDOM => {\n if(typeof jsx === \"string\"){\n return renderText(jsx);\n }else if(typeof jsx[0] === \"string\"){\n return renderElement(jsx);\n }else if(jsx[0] === null){\n return renderFragment(jsx);\n }else{\n return renderComponent(jsx);\n }\n}\n",
15
- "import type { JSXNode } from \"../jsx\";\nimport { renderNode, type UnknownRenderedDOM } from \"./dom\";\n\ntype RenderFunction = (el: HTMLElement, jsx: JSXNode) => void;\n\nconst rootMap = new WeakMap<HTMLElement, UnknownRenderedDOM>();\n\nexport const render: RenderFunction = (el, jsx) => {\n rootMap.get(el)?.revoke();\n\n const root = renderNode(jsx);\n\n rootMap.set(el, root);\n\n el.append(root.render());\n}\n"
10
+ "import { afterNode, createNode, revokeNode, updateNode, type RenderedDOM } from \".\";\nimport type { JSXElement } from \"../../jsx\";\nimport { diff } from \"../diff\";\n\nconst lifecycle_events = new Set([\n \"beforeMount\",\n \"mount\",\n \"beforeUpdate\",\n \"update\",\n \"beforeUnmount\",\n \"unmount\"\n]);\n\nconst elementEvents: WeakMap<HTMLElement, Record<string, Function | undefined | null>> = new WeakMap;\n\nfunction handleEvent(this: HTMLElement, ev: Event){\n return elementEvents.get(this)?.[ev.type]?.call(this, ev);\n}\n\nconst setAttribute = (el: HTMLElement, name: string, value: unknown) => {\n if (name.startsWith(\"$\")) {\n const ev_name = name.substring(1);\n if (!lifecycle_events.has(ev_name)) {\n const events = elementEvents.get(el)!;\n if(!(ev_name in events))\n el.addEventListener(ev_name, handleEvent);\n if (typeof value === \"function\" || value == null)\n events[ev_name] = value;\n else {\n console.error(\"Invalid event handler: \", value);\n events[ev_name] = undefined;\n }\n }\n } else switch(typeof value){\n case \"string\":\n el.setAttribute(name, value);\n break;\n case \"function\":\n case \"object\":\n if(value === null)\n el.removeAttribute(name);\n else\n console.error(`${typeof value} values cannot mount on attributes.`);\n break;\n default:\n if(value === undefined)\n el.removeAttribute(name);\n else\n el.setAttribute(name, String(value));\n break;\n }\n}\n\nexport const createElement = (jsx: JSXElement): [RenderedDOM<JSXElement>, HTMLElement] => {\n const [tag, props, ...children] = jsx;\n\n props.$beforeMount?.();\n const element = document.createElement(tag);\n elementEvents.set(element, {});\n props.$mount?.call<any, any, any>(element, new CustomEvent(\"mount\", { detail: element }));\n\n for (const [name, value] of Object.entries(props))\n setAttribute(element, name, value);\n\n const rendered_children = children.map(createNode);\n element.append(...rendered_children.map(e=>e[1]));\n\n return [[1, jsx, element, rendered_children.map(e=>e[0])], element];\n}\n\nexport const updateElement = (dom: RenderedDOM<JSXElement>, jsx: JSXElement) => {\n const [, [, old_props, ...old_children], element, rendered_children] = dom;\n const [, new_props, ...new_children] = jsx;\n old_props.$beforeUpdate?.call<any, any, any>(element, new CustomEvent(\"beforeupdate\", { detail: element }));\n\n\n const removed_prop_keys = Object.keys(old_props).filter(key => !(key in new_props));\n\n for (const [name, value] of Object.entries({\n ...new_props,\n ...Object.fromEntries(\n removed_prop_keys.map(key => [key, undefined])\n )\n }))\n if((old_props as any)[name] !== value)\n setAttribute(element, name, value);\n\n for (const [type, idx, jsx] of diff(old_children, new_children)) {\n switch(type){\n case 0:\n updateNode(rendered_children[idx], jsx);\n break;\n case 1:\n const [rendered, node] = createNode(jsx);\n rendered_children.splice(idx, 0, rendered);\n if (idx === 0) {\n if (element.firstChild) {\n element.firstChild.before(node);\n } else {\n element.append(node);\n }\n } else {\n afterNode(rendered_children[idx - 1], node);\n }\n break;\n case 2:\n revokeNode(rendered_children.splice(idx, 1)[0]);\n break;\n }\n }\n\n dom[1] = jsx;\n \n new_props.$update?.call<any, any, any>(element, new CustomEvent(\"update\", { detail: element }));\n}\n\nexport const revokeElement = (dom: RenderedDOM<JSXElement>) => {\n const [, [, props], element, rendered_children] = dom;\n props.$beforeUnmount?.call<any, any, any>(element, new CustomEvent(\"beforeunmount\", { detail: element }));\n\n for (const child of rendered_children)\n revokeNode(child);\n elementEvents.delete(element);\n element.remove();\n \n props.$unmount?.();\n}\n\nexport const afterElement = (dom: RenderedDOM<JSXElement>, node: Node) => {\n dom[2].after(node);\n}\n",
11
+ "import { afterNode, createNode, revokeNode, updateNode, type RenderedDOM } from \".\";\nimport type { JSXFragment } from \"../../jsx\";\nimport { diff } from \"../diff\";\n\nexport const createFragment = (jsx: JSXFragment): [RenderedDOM<JSXFragment>, DocumentFragment] => {\n const [,, ...children] = jsx;\n const mark = new Comment;\n const el = new DocumentFragment;\n\n const rendered_children = children.map(createNode);\n el.append(mark, ...rendered_children.map(e=>e[1]));\n\n return [[2, jsx, mark, rendered_children.map(e=>e[0])], el];\n}\n\nexport const updateFragment = (dom: RenderedDOM<JSXFragment>, jsx: JSXFragment) => {\n const [, [,, ...old_children], mark, rendered_children] = dom;\n const [,, ...new_children] = jsx;\n\n for (const [type, idx, jsx] of diff(old_children, new_children)) {\n switch(type){\n case 0:\n updateNode(rendered_children[idx], jsx);\n break;\n case 1:\n const [rendered, el] = createNode(jsx);\n rendered_children.splice(idx, 0, rendered);\n if (idx === 0) {\n mark.after(el);\n } else {\n afterNode(rendered_children[idx - 1], el);\n }\n break;\n case 2:\n const [removed] = rendered_children.splice(idx, 1);\n revokeNode(removed);\n break;\n }\n }\n \n dom[1] = jsx;\n}\n\nexport const revokeFragment = (dom: RenderedDOM<JSXFragment>) => {\n for (const child of dom[3])\n revokeNode(child);\n dom[2].remove();\n}\n\nexport const afterFragment = (dom: RenderedDOM<JSXFragment>, node: Node) => {\n const last_rendered_dom = dom[3].at(-1);\n if (last_rendered_dom)\n afterNode(last_rendered_dom, node);\n else\n dom[2].after(node);\n}\n",
12
+ "type BatchFn = (cb: () => void) => void;\n\nexport let batch: BatchFn = cb => cb();\n\nexport const setBatch = (fn: BatchFn): void => { batch = fn }\n",
13
+ "import { type RenderedDOM } from \".\";\nimport { batch } from \"../../batch\";\nimport type { JSXComponent, JSXFragment, JSXNode } from \"../../jsx\";\nimport { afterFragment, createFragment, revokeFragment, updateFragment } from \"./fragment\";\n\nexport const createComponent = (jsx: JSXComponent): [RenderedDOM<JSXComponent>, DocumentFragment] => {\n const [component, init_props/* , ...children */] = jsx;\n\n let rendered_dom: RenderedDOM<JSXFragment> | void;\n let doc_frag: DocumentFragment | void;\n\n const props = component((jsx: JSXNode) => {\n if (rendered_dom) updateFragment(rendered_dom, [null, {}, jsx]);\n else [rendered_dom, doc_frag] = createFragment([null, {}, jsx]);\n }, { ...init_props });\n\n //@ts-ignore\n if (!doc_frag) {\n console.error(\"never rendered Initial render.\");\n [rendered_dom, doc_frag] = createFragment([null, {}]);\n }\n\n return [\n [\n 3,\n [\n component,\n props,\n /* ...children */\n ] as JSXComponent,\n rendered_dom!\n ],\n doc_frag\n ];\n}\n\nexport const updateComponent = (dom: RenderedDOM<JSXComponent>, jsx: JSXComponent) => {\n const old_props = dom[1][1];\n const new_props = jsx[1];\n\n batch(() => {\n for (const [key, value] of Object.entries(new_props)) //@ts-ignore\n if (old_props[key] !== value) old_props[key] = value;\n });\n}\n\nexport const revokeComponent = (dom: RenderedDOM<JSXComponent>) => (\n revokeFragment(dom[2])\n)\n\nexport const afterComponent = (dom: RenderedDOM<JSXComponent>, node: Node) => (\n afterFragment(dom[2], node)\n)\n",
14
+ "import type { JSXComponent, JSXElement, JSXFragment, JSXNode } from \"../../jsx\";\nimport { createText, updateText, revokeText, afterText } from \"./text\";\nimport { createElement, updateElement, revokeElement, afterElement } from \"./element\";\nimport { createFragment, updateFragment, revokeFragment, afterFragment } from \"./fragment\";\nimport { createComponent, updateComponent, revokeComponent, afterComponent } from \"./component\";\n\nexport type RenderedDOM<T extends JSXNode> =\n T extends string ? [0, string, Text] :\n T extends JSXElement ? [1, JSXElement, HTMLElement, RenderedDOM<any>[]] :\n T extends JSXFragment ? [2, JSXFragment, Comment, RenderedDOM<any>[]] :\n T extends JSXComponent ? [3, JSXComponent, RenderedDOM<JSXFragment>] :\n never;\n\nconst funcMap = [\n [updateText, revokeText, afterText ],\n [updateElement, revokeElement, afterElement ],\n [updateFragment, revokeFragment, afterFragment ],\n [updateComponent, revokeComponent, afterComponent],\n] as const;\n\nexport const createNode = (jsx: JSXNode): [RenderedDOM<any>, Node] => {\n if (typeof jsx === \"string\") return createText(jsx);\n if (Array.isArray(jsx)) {\n const [tag] = jsx;\n if (typeof tag === \"string\") return createElement(jsx);\n if (typeof tag === \"function\") return createComponent(jsx);\n if (tag === null) return createFragment(jsx);\n }\n throw new Error(`Unrecognized JSX node`, { cause: jsx });\n}\n\nexport const updateNode = (dom: RenderedDOM<any>, jsx: any): void => funcMap[dom[0]][0](dom as any, jsx);\n\nexport const revokeNode = (dom: RenderedDOM<any>): void => funcMap[dom[0]][1](dom as any);\n\nexport const afterNode = (dom: RenderedDOM<any>, node: Node): void => funcMap[dom[0]][2](dom as any, node);\n",
15
+ "import type { JSXNode } from \"../jsx\";\nimport { createNode, revokeNode, type RenderedDOM } from \"./dom\";\n\ntype RenderFunction = (el: HTMLElement, jsx: JSXNode) => void;\n\nconst rootMap = new WeakMap<HTMLElement, RenderedDOM<any>>();\n\nexport const render: RenderFunction = (el, jsx) => {\n if (rootMap.has(el))\n revokeNode(rootMap.get(el)!);\n\n const [root, node] = createNode(jsx);\n\n rootMap.set(el, root);\n\n el.append(node);\n}\n"
16
16
  ],
17
- "mappings": "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",
18
- "debugId": "CC957926242F8EAC64756E2164756E21",
17
+ "mappings": "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",
18
+ "debugId": "3ABCB26137CE572B64756E2164756E21",
19
19
  "names": []
20
20
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lunet",
3
- "version": "0.0.6",
3
+ "version": "0.0.8",
4
4
  "author": "TNTSuperMan",
5
5
  "license": "MIT",
6
6
  "description": "より柔軟なWebフロントエンドライブラリ。",
@@ -25,7 +25,6 @@
25
25
  "format": ["esm", "cjs"],
26
26
  "target": "browser",
27
27
  "sourcemap": "linked",
28
- "minify": true,
29
28
  "outDir": "dist"
30
29
  },
31
30
  "scripts": {