lunet 0.0.3 → 0.0.4
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 +2 -2
- package/dist/index.cjs.map +3 -3
- package/dist/index.d.cts +4 -4
- package/dist/index.d.ts +4 -4
- package/dist/index.js +2 -2
- package/dist/index.js.map +3 -3
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var{defineProperty:N,getOwnPropertyNames:O,getOwnPropertyDescriptor
|
|
1
|
+
var{defineProperty:N,getOwnPropertyNames:O,getOwnPropertyDescriptor:H}=Object,D=Object.prototype.hasOwnProperty;var w=new WeakMap,P=(e)=>{var o=w.get(e),t;if(o)return o;if(o=N({},"__esModule",{value:!0}),e&&typeof e==="object"||typeof e==="function")O(e).map((n)=>!D.call(o,n)&&N(o,n,{get:()=>e[n],enumerable:!(t=H(e,n))||t.enumerable}));return w.set(e,o),o};var U=(e,o)=>{for(var t in o)N(e,t,{get:o[t],enumerable:!0,configurable:!0,set:(n)=>o[t]=()=>n})};var B={};U(B,{setBatch:()=>x,render:()=>K,h:()=>C,fragment:()=>k,createComponent:()=>E});module.exports=P(B);var E=(e)=>(o)=>[e,o];var k=(...e)=>[null,{},...e];var C=(e,o,...t)=>typeof e==="string"?[e,o??{},...t]:e===k?[null,o??{},...t]:e(o);var M=(e)=>e(),x=(e)=>M=e;var W=(e,o)=>typeof e==="string"||typeof o==="string"?typeof e===typeof o:e[0]===o[0]&&e[1].key===o[1].key,T=(e,o)=>{let t=[],n=Math.max(e.length,o.length);for(let r=0;r<n;r++){let p=e[r],i=o[r];if(!p&&i)t.push([1,r,i]);else if(p&&!i)t.push([2,r,i]);else if(p&&i)if(W(p,i))t.push([0,r,i]);else t.push([2,r,i]),t.push([1,r,i])}return t};var J=(e)=>{let o=e,t=[],n;return{type:2,flat:()=>t.flatMap((r)=>r.flat()),update(r){let[,,...p]=o,[,,...i]=r,s=T(p,i),a=0;for(let[m,g,u]of s){let l=g-a;switch(m){case 0:t[l].update(u);break;case 1:let S=c(u);t.splice(l,0,S);let y=S.render(),b=null;if(n&&n.parentNode){let d=n.nextSibling,h=0;while(d){if(h===l){b=d;break}d=d.nextSibling,h++}if(b)n.parentNode.insertBefore(y,b);else n.parentNode.appendChild(y)}break;case 2:a++;let[X]=t.splice(l,1);X.revoke();break}}o=r},render(){let[,,...r]=o,p=document.createDocumentFragment();return n=document.createComment(""),t=r.map(c),p.append(n,...t.map((i)=>i.render())),p},revoke(){for(let r of t)r.revoke()}}};var F=(e)=>{let o=e,t=null,n,r=(p)=>{if(t)t.update([null,{},p]);else t=J([null,{},p])};return{type:3,flat:()=>t?.flat()??[],update(p){let[,i]=o=p;M(()=>{for(let[s,a]of Object.entries(i))if(n[s]!==a)n[s]=a})},render(){t?.revoke(),t=null;let[p,i]=o;if(n=p(r,{...i}),!t)console.error("never rendered Initial render."),t=J([null,{}]);return t.render()},revoke(){t?.revoke()}}};var f=new WeakMap;var v=new WeakMap;function I(e){return v.get(this)?.[e.type]?.()}var A=(e,o,t)=>{switch(typeof t){case"string":e.setAttribute(o,t);break;case"function":if(o.startsWith("$")){if(!["$beforeMount","$mount","$beforeUnmount","$unmount"].includes(o)){let n=o.substring(1),r=v.get(e);if(!(n in r))e.addEventListener(n,I);r[n]=t}}else console.error("function values cannot mount on attributes.");break;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}},R=(e)=>{let o=e,t=[],n,r=()=>{let[p,i,...s]=o;i.$beforeMount?.();let a=document.createElement(p);v.set(a,{}),i.$mount?.call(a,new CustomEvent("mount",{detail:a}));for(let[m,g]of Object.entries(i))A(a,m,g);return t=s.map(c),a.append(...t.map((m)=>m.render())),f.set(a,()=>{i.$beforeUnmount?.call(a,new CustomEvent("beforeunmount",{detail:a}));for(let m of t)m.revoke();f.delete(a),v.delete(a),a.remove(),i.$unmount?.()}),n=a};return{type:1,flat:()=>[o],update(p){o[1].$beforeUpdate?.call(n,new CustomEvent("beforeupdate",{detail:n}));let[,,...i]=o,[,s,...a]=p;for(let[u,l]of Object.entries(s))if(o[1][u]!==l)A(n,u,l);let m=T(i,a),g=0;for(let[u,l,S]of m){let y=l-g;switch(u){case 0:t[y].update(S);break;case 1:let b=c(S);t.splice(y,0,b);let X=t.reduce((h,L)=>h+L.flat().length,0),d=b.render();if(X>=n.childNodes.length)n.append(d);else n.childNodes[X].before(d);break;case 2:g++,t.splice(y,1)[0].revoke();break}}o=p,s.$update?.call(n,new CustomEvent("update",{detail:n}))},render(){return n&&f.get(n)?.(),r()},revoke(){n&&f.get(n)?.()}}};var $=(e)=>{let o=e,t=new Text(o);return{type:0,flat:()=>[o],update(n){o!==n&&(t.textContent=o=n)},render:()=>t,revoke(){t.remove()}}};var c=(e)=>{if(typeof e==="string")return $(e);else if(typeof e[0]==="string")return R(e);else if(e[0]===null)return J(e);else return F(e)};var K=(e,o)=>{e.childNodes.forEach((t)=>{f.get(t)?.(),t.remove()}),e.append(c(o).render())};
|
|
2
2
|
|
|
3
|
-
//# debugId=
|
|
3
|
+
//# debugId=27E68A5D8CADFA8764756E2164756E21
|
|
4
4
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -10,12 +10,12 @@
|
|
|
10
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 const patches = diff(old_children, new_children);\n let removes = 0;\n\n for (const [type, idx_, jsx] of patches) {\n const idx = idx_ - removes;\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 rendered_children.splice(idx, 0, rendered);\n const dom = rendered.render();\n let refNode: ChildNode | null = null; // TODO: ここら辺を最適化する\n if (mark && mark.parentNode) {\n let node: ChildNode | null = mark.nextSibling;\n let count = 0;\n while (node) {\n if (count === idx) {\n refNode = node;\n break;\n }\n node = node.nextSibling;\n count++;\n }\n if (refNode) {\n mark.parentNode.insertBefore(dom, refNode);\n } else {\n mark.parentNode.appendChild(dom);\n }\n }\n break;\n case 2:\n removes++;\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 }\n}\n",
|
|
11
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 = null as RenderedDOM<JSXFragment> | null;\n\n let props: { [key: string]: unknown } | null;\n\n const render = (jsx: JSXNode) => {\n if(rendered_dom) rendered_dom.update([null, {}, jsx]);\n else rendered_dom = renderFragment([null, {}, jsx]);\n }\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(render, { ...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 }\n}\n",
|
|
12
12
|
"export const revokerMap = new WeakMap<Node, () => void>();\n",
|
|
13
|
-
"import { renderNode, type RenderedDOM, type UnknownRenderedDOM } from \".\";\nimport type { JSXElement, JSXNode } from \"../../jsx\";\nimport { revokerMap } from \"../revokerMap\";\nimport { diff } from \"../diff\";\n\nconst elementEvents: WeakMap<HTMLElement, Record<string, Function>> = new WeakMap;\n\nfunction handleEvent(this: HTMLElement, ev: Event){\n return elementEvents.get(this)?.[ev.type]?.();\n}\n\nconst setAttribute = (el: HTMLElement, name: string, value: unknown) => {\n
|
|
13
|
+
"import { renderNode, type RenderedDOM, type UnknownRenderedDOM } from \".\";\nimport type { JSXElement, JSXNode } from \"../../jsx\";\nimport { revokerMap } from \"../revokerMap\";\nimport { diff } from \"../diff\";\n\nconst elementEvents: WeakMap<HTMLElement, Record<string, Function>> = new WeakMap;\n\nfunction handleEvent(this: HTMLElement, ev: Event){\n return elementEvents.get(this)?.[ev.type]?.();\n}\n\nconst setAttribute = (el: HTMLElement, name: string, value: unknown) => {\n switch(typeof value){\n case \"string\":\n el.setAttribute(name, value);\n break;\n case \"function\":\n if(name.startsWith(\"$\")){\n if(![\"$beforeMount\", \"$mount\", \"$beforeUnmount\", \"$unmount\"].includes(name)){\n const ev_name = name.substring(1);\n const events = elementEvents.get(el)!;\n if(!(ev_name in events))\n el.addEventListener(ev_name, handleEvent);\n events[ev_name] = value;\n }\n }else\n console.error(\"function values cannot mount on attributes.\");\n break;\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 const 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 revokerMap.set(el, () => {\n props.$beforeUnmount?.call<any, any, any>(el, new CustomEvent(\"beforeunmount\", { detail: el }));\n\n for (const child of rendered_children)\n child.revoke();\n revokerMap.delete(el);\n elementEvents.delete(el);\n el.remove();\n \n props.$unmount?.();\n });\n\n return element = el;\n }\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_children] = currentJSX;\n const [, props, ...new_children] = jsx;\n\n for (const [name, value] of Object.entries(props))\n if((currentJSX[1] as any)[name] !== value)\n setAttribute(element!, name, value);\n\n const patches = diff(old_children, new_children);\n let removes = 0;\n for (const [type, idx_, jsx] of patches) {\n const idx = idx_ - removes;\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 rendered_children.splice(idx, 0, rendered);\n\n const dom_index = rendered_children.reduce((p,c)=>p+c.flat().length, 0);\n const el = rendered.render();\n\n if(dom_index >= element!.childNodes.length)\n element!.append(el);\n else\n element!.childNodes[dom_index]!.before(el);\n\n break;\n case 2:\n removes++;\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 element && revokerMap.get(element)?.();\n return render();\n },\n revoke(){ element && revokerMap.get(element)?.() },\n }\n}\n",
|
|
14
14
|
"import type { RenderedDOM } from \".\";\n\nexport const renderText = (jsx: string): RenderedDOM<string> => {\n let currentText = jsx;\n const node = new Text(currentText);\n\n return {\n type: 0,\n flat: () => [currentText],\n update(jsx){ currentText !== jsx && (node.textContent = currentText = jsx) },\n render: () => node,\n revoke(){ node.remove() },\n }\n}\n",
|
|
15
15
|
"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}\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",
|
|
16
16
|
"import type { JSXNode } from \"../jsx\";\nimport { renderNode } from \"./dom\";\nimport { revokerMap } from \"./revokerMap\";\n\ntype RenderFunction = (el: HTMLElement, jsx: JSXNode) => void;\n\nexport const render: RenderFunction = (el, jsx) => {\n el.childNodes.forEach(e=>{\n revokerMap.get(e)?.();\n e.remove();\n });\n\n el.append(renderNode(jsx).render());\n}\n"
|
|
17
17
|
],
|
|
18
|
-
"mappings": "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
|
|
19
|
-
"debugId": "
|
|
18
|
+
"mappings": "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",
|
|
19
|
+
"debugId": "27E68A5D8CADFA8764756E2164756E21",
|
|
20
20
|
"names": []
|
|
21
21
|
}
|
package/dist/index.d.cts
CHANGED
|
@@ -125,10 +125,10 @@ type Attributes<
|
|
|
125
125
|
T extends object = {}
|
|
126
126
|
> = Partial<HTMLAttributes & T & Key & { [key in keyof HTMLElAttrEvMap] : (this: HTMLElement, ev: HTMLElAttrEvMap[key]) => unknown } & {
|
|
127
127
|
$beforeMount: () => unknown
|
|
128
|
-
$mount: (this:
|
|
129
|
-
$beforeUpdate: (this:
|
|
130
|
-
$update: (this:
|
|
131
|
-
$beforeUnmount: (this:
|
|
128
|
+
$mount: (this: HTMLElementTagNameMap[N], ev: CustomEvent<HTMLElementTagNameMap[N]>) => unknown
|
|
129
|
+
$beforeUpdate: (this: HTMLElementTagNameMap[N], ev: CustomEvent<HTMLElementTagNameMap[N]>) => unknown
|
|
130
|
+
$update: (this: HTMLElementTagNameMap[N], ev: CustomEvent<HTMLElementTagNameMap[N]>) => unknown
|
|
131
|
+
$beforeUnmount: (this: HTMLElementTagNameMap[N], ev: CustomEvent<HTMLElementTagNameMap[N]>) => unknown
|
|
132
132
|
$unmount: () => unknown
|
|
133
133
|
}>;
|
|
134
134
|
type HTMLAttributes = {
|
package/dist/index.d.ts
CHANGED
|
@@ -125,10 +125,10 @@ type Attributes<
|
|
|
125
125
|
T extends object = {}
|
|
126
126
|
> = Partial<HTMLAttributes & T & Key & { [key in keyof HTMLElAttrEvMap] : (this: HTMLElement, ev: HTMLElAttrEvMap[key]) => unknown } & {
|
|
127
127
|
$beforeMount: () => unknown
|
|
128
|
-
$mount: (this:
|
|
129
|
-
$beforeUpdate: (this:
|
|
130
|
-
$update: (this:
|
|
131
|
-
$beforeUnmount: (this:
|
|
128
|
+
$mount: (this: HTMLElementTagNameMap[N], ev: CustomEvent<HTMLElementTagNameMap[N]>) => unknown
|
|
129
|
+
$beforeUpdate: (this: HTMLElementTagNameMap[N], ev: CustomEvent<HTMLElementTagNameMap[N]>) => unknown
|
|
130
|
+
$update: (this: HTMLElementTagNameMap[N], ev: CustomEvent<HTMLElementTagNameMap[N]>) => unknown
|
|
131
|
+
$beforeUnmount: (this: HTMLElementTagNameMap[N], ev: CustomEvent<HTMLElementTagNameMap[N]>) => unknown
|
|
132
132
|
$unmount: () => unknown
|
|
133
133
|
}>;
|
|
134
134
|
type HTMLAttributes = {
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var F=(t)=>(o)=>[t,o];var
|
|
1
|
+
var F=(t)=>(o)=>[t,o];var v=(...t)=>[null,{},...t];var A=(t,o,...e)=>typeof t==="string"?[t,o??{},...e]:t===v?[null,o??{},...e]:t(o);var N=(t)=>t(),R=(t)=>N=t;var $=(t,o)=>typeof t==="string"||typeof o==="string"?typeof t===typeof o:t[0]===o[0]&&t[1].key===o[1].key,k=(t,o)=>{let e=[],n=Math.max(t.length,o.length);for(let r=0;r<n;r++){let p=t[r],i=o[r];if(!p&&i)e.push([1,r,i]);else if(p&&!i)e.push([2,r,i]);else if(p&&i)if($(p,i))e.push([0,r,i]);else e.push([2,r,i]),e.push([1,r,i])}return e};var J=(t)=>{let o=t,e=[],n;return{type:2,flat:()=>e.flatMap((r)=>r.flat()),update(r){let[,,...p]=o,[,,...i]=r,s=k(p,i),a=0;for(let[m,g,u]of s){let l=g-a;switch(m){case 0:e[l].update(u);break;case 1:let S=c(u);e.splice(l,0,S);let y=S.render(),b=null;if(n&&n.parentNode){let d=n.nextSibling,h=0;while(d){if(h===l){b=d;break}d=d.nextSibling,h++}if(b)n.parentNode.insertBefore(y,b);else n.parentNode.appendChild(y)}break;case 2:a++;let[X]=e.splice(l,1);X.revoke();break}}o=r},render(){let[,,...r]=o,p=document.createDocumentFragment();return n=document.createComment(""),e=r.map(c),p.append(n,...e.map((i)=>i.render())),p},revoke(){for(let r of e)r.revoke()}}};var M=(t)=>{let o=t,e=null,n,r=(p)=>{if(e)e.update([null,{},p]);else e=J([null,{},p])};return{type:3,flat:()=>e?.flat()??[],update(p){let[,i]=o=p;N(()=>{for(let[s,a]of Object.entries(i))if(n[s]!==a)n[s]=a})},render(){e?.revoke(),e=null;let[p,i]=o;if(n=p(r,{...i}),!e)console.error("never rendered Initial render."),e=J([null,{}]);return e.render()},revoke(){e?.revoke()}}};var f=new WeakMap;var T=new WeakMap;function L(t){return T.get(this)?.[t.type]?.()}var w=(t,o,e)=>{switch(typeof e){case"string":t.setAttribute(o,e);break;case"function":if(o.startsWith("$")){if(!["$beforeMount","$mount","$beforeUnmount","$unmount"].includes(o)){let n=o.substring(1),r=T.get(t);if(!(n in r))t.addEventListener(n,L);r[n]=e}}else console.error("function values cannot mount on attributes.");break;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}},E=(t)=>{let o=t,e=[],n,r=()=>{let[p,i,...s]=o;i.$beforeMount?.();let a=document.createElement(p);T.set(a,{}),i.$mount?.call(a,new CustomEvent("mount",{detail:a}));for(let[m,g]of Object.entries(i))w(a,m,g);return e=s.map(c),a.append(...e.map((m)=>m.render())),f.set(a,()=>{i.$beforeUnmount?.call(a,new CustomEvent("beforeunmount",{detail:a}));for(let m of e)m.revoke();f.delete(a),T.delete(a),a.remove(),i.$unmount?.()}),n=a};return{type:1,flat:()=>[o],update(p){o[1].$beforeUpdate?.call(n,new CustomEvent("beforeupdate",{detail:n}));let[,,...i]=o,[,s,...a]=p;for(let[u,l]of Object.entries(s))if(o[1][u]!==l)w(n,u,l);let m=k(i,a),g=0;for(let[u,l,S]of m){let y=l-g;switch(u){case 0:e[y].update(S);break;case 1:let b=c(S);e.splice(y,0,b);let X=e.reduce((h,x)=>h+x.flat().length,0),d=b.render();if(X>=n.childNodes.length)n.append(d);else n.childNodes[X].before(d);break;case 2:g++,e.splice(y,1)[0].revoke();break}}o=p,s.$update?.call(n,new CustomEvent("update",{detail:n}))},render(){return n&&f.get(n)?.(),r()},revoke(){n&&f.get(n)?.()}}};var C=(t)=>{let o=t,e=new Text(o);return{type:0,flat:()=>[o],update(n){o!==n&&(e.textContent=o=n)},render:()=>e,revoke(){e.remove()}}};var c=(t)=>{if(typeof t==="string")return C(t);else if(typeof t[0]==="string")return E(t);else if(t[0]===null)return J(t);else return M(t)};var ce=(t,o)=>{t.childNodes.forEach((e)=>{f.get(e)?.(),e.remove()}),t.append(c(o).render())};export{R as setBatch,ce as render,A as h,v as fragment,F as createComponent};
|
|
2
2
|
|
|
3
|
-
//# debugId=
|
|
3
|
+
//# debugId=397F86193E8AA0D264756E2164756E21
|
|
4
4
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -10,12 +10,12 @@
|
|
|
10
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 const patches = diff(old_children, new_children);\n let removes = 0;\n\n for (const [type, idx_, jsx] of patches) {\n const idx = idx_ - removes;\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 rendered_children.splice(idx, 0, rendered);\n const dom = rendered.render();\n let refNode: ChildNode | null = null; // TODO: ここら辺を最適化する\n if (mark && mark.parentNode) {\n let node: ChildNode | null = mark.nextSibling;\n let count = 0;\n while (node) {\n if (count === idx) {\n refNode = node;\n break;\n }\n node = node.nextSibling;\n count++;\n }\n if (refNode) {\n mark.parentNode.insertBefore(dom, refNode);\n } else {\n mark.parentNode.appendChild(dom);\n }\n }\n break;\n case 2:\n removes++;\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 }\n}\n",
|
|
11
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 = null as RenderedDOM<JSXFragment> | null;\n\n let props: { [key: string]: unknown } | null;\n\n const render = (jsx: JSXNode) => {\n if(rendered_dom) rendered_dom.update([null, {}, jsx]);\n else rendered_dom = renderFragment([null, {}, jsx]);\n }\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(render, { ...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 }\n}\n",
|
|
12
12
|
"export const revokerMap = new WeakMap<Node, () => void>();\n",
|
|
13
|
-
"import { renderNode, type RenderedDOM, type UnknownRenderedDOM } from \".\";\nimport type { JSXElement, JSXNode } from \"../../jsx\";\nimport { revokerMap } from \"../revokerMap\";\nimport { diff } from \"../diff\";\n\nconst elementEvents: WeakMap<HTMLElement, Record<string, Function>> = new WeakMap;\n\nfunction handleEvent(this: HTMLElement, ev: Event){\n return elementEvents.get(this)?.[ev.type]?.();\n}\n\nconst setAttribute = (el: HTMLElement, name: string, value: unknown) => {\n
|
|
13
|
+
"import { renderNode, type RenderedDOM, type UnknownRenderedDOM } from \".\";\nimport type { JSXElement, JSXNode } from \"../../jsx\";\nimport { revokerMap } from \"../revokerMap\";\nimport { diff } from \"../diff\";\n\nconst elementEvents: WeakMap<HTMLElement, Record<string, Function>> = new WeakMap;\n\nfunction handleEvent(this: HTMLElement, ev: Event){\n return elementEvents.get(this)?.[ev.type]?.();\n}\n\nconst setAttribute = (el: HTMLElement, name: string, value: unknown) => {\n switch(typeof value){\n case \"string\":\n el.setAttribute(name, value);\n break;\n case \"function\":\n if(name.startsWith(\"$\")){\n if(![\"$beforeMount\", \"$mount\", \"$beforeUnmount\", \"$unmount\"].includes(name)){\n const ev_name = name.substring(1);\n const events = elementEvents.get(el)!;\n if(!(ev_name in events))\n el.addEventListener(ev_name, handleEvent);\n events[ev_name] = value;\n }\n }else\n console.error(\"function values cannot mount on attributes.\");\n break;\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 const 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 revokerMap.set(el, () => {\n props.$beforeUnmount?.call<any, any, any>(el, new CustomEvent(\"beforeunmount\", { detail: el }));\n\n for (const child of rendered_children)\n child.revoke();\n revokerMap.delete(el);\n elementEvents.delete(el);\n el.remove();\n \n props.$unmount?.();\n });\n\n return element = el;\n }\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_children] = currentJSX;\n const [, props, ...new_children] = jsx;\n\n for (const [name, value] of Object.entries(props))\n if((currentJSX[1] as any)[name] !== value)\n setAttribute(element!, name, value);\n\n const patches = diff(old_children, new_children);\n let removes = 0;\n for (const [type, idx_, jsx] of patches) {\n const idx = idx_ - removes;\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 rendered_children.splice(idx, 0, rendered);\n\n const dom_index = rendered_children.reduce((p,c)=>p+c.flat().length, 0);\n const el = rendered.render();\n\n if(dom_index >= element!.childNodes.length)\n element!.append(el);\n else\n element!.childNodes[dom_index]!.before(el);\n\n break;\n case 2:\n removes++;\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 element && revokerMap.get(element)?.();\n return render();\n },\n revoke(){ element && revokerMap.get(element)?.() },\n }\n}\n",
|
|
14
14
|
"import type { RenderedDOM } from \".\";\n\nexport const renderText = (jsx: string): RenderedDOM<string> => {\n let currentText = jsx;\n const node = new Text(currentText);\n\n return {\n type: 0,\n flat: () => [currentText],\n update(jsx){ currentText !== jsx && (node.textContent = currentText = jsx) },\n render: () => node,\n revoke(){ node.remove() },\n }\n}\n",
|
|
15
15
|
"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}\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",
|
|
16
16
|
"import type { JSXNode } from \"../jsx\";\nimport { renderNode } from \"./dom\";\nimport { revokerMap } from \"./revokerMap\";\n\ntype RenderFunction = (el: HTMLElement, jsx: JSXNode) => void;\n\nexport const render: RenderFunction = (el, jsx) => {\n el.childNodes.forEach(e=>{\n revokerMap.get(e)?.();\n e.remove();\n });\n\n el.append(renderNode(jsx).render());\n}\n"
|
|
17
17
|
],
|
|
18
|
-
"mappings": "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
|
|
19
|
-
"debugId": "
|
|
18
|
+
"mappings": "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",
|
|
19
|
+
"debugId": "397F86193E8AA0D264756E2164756E21",
|
|
20
20
|
"names": []
|
|
21
21
|
}
|