olova 1.0.3 → 1.0.5
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/README.md +21 -17
- package/dist/olova.js +1 -1
- package/package.json +5 -5
package/README.md
CHANGED
|
@@ -1,26 +1,30 @@
|
|
|
1
|
-
# olova
|
|
1
|
+
# olova
|
|
2
2
|
|
|
3
3
|
```html
|
|
4
|
-
<div id="
|
|
5
|
-
|
|
6
|
-
<
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
</template>
|
|
4
|
+
<div id="app">
|
|
5
|
+
<template>
|
|
6
|
+
<div>
|
|
7
|
+
<div>{ count }</div>
|
|
8
|
+
<button @click="increment">Increment</button>
|
|
9
|
+
</div>
|
|
10
|
+
</template>
|
|
11
|
+
</div>
|
|
11
12
|
|
|
12
13
|
<script type="module">
|
|
13
|
-
|
|
14
|
-
olova
|
|
14
|
+
let rander = document.querySelector("template").innerHTML;
|
|
15
|
+
import { createApp } from "//unpkg.com/olova";
|
|
15
16
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
17
|
+
const app = createApp({
|
|
18
|
+
data: {
|
|
19
|
+
count: 0,
|
|
20
|
+
},
|
|
21
|
+
methods: {
|
|
22
|
+
increment() {
|
|
23
|
+
this.count++;
|
|
24
|
+
},
|
|
20
25
|
},
|
|
21
|
-
|
|
22
|
-
useEffect(() => {
|
|
23
|
-
console.log("component mounted!");
|
|
26
|
+
template: rander,
|
|
24
27
|
});
|
|
28
|
+
app.mount("#app");
|
|
25
29
|
</script>
|
|
26
30
|
```
|
package/dist/olova.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
let createApp=({data:e,computed:t,methods:r,watch:
|
|
1
|
+
let createApp=({data:e,computed:t,methods:r,watch:l,mounted:a,beforeMount:n,beforeUpdate:o,template:i,plugins:c=[],components:s={}})=>{let u,f={},d={},h={},p={},m={},E=new Map,y=new Map,b=(e,t)=>{y.set(e,t)},g=(e,t)=>{m[e]=t},v=e=>{Array.from(e.attributes).forEach(t=>{let r=t.name.startsWith("$")?t.name.slice(1):null;if(r&&m[r]){let l=t.value;m[r](e,l,M),e.removeAttribute(t.name)}})},w=e=>new Proxy(e,{get:(e,t)=>"object"==typeof e[t]&&null!==e[t]?w(e[t]):e[t],set:(e,t,r)=>(e[t]!==r&&(e[t]=r,k(t)),!0)});class A extends Error{constructor(e){super(e),this.name="TemplateError"}}class N extends Error{constructor(e){super(e),this.name="StateError"}}let C=(e,t,r=Error)=>function(...l){try{return e.apply(this,l)}catch(a){throw new r(`${t}: ${a.message}`)}};n&&C(n,"Error in beforeMount hook",N).call(M);let x=new Set,T=e=>{f[e]&&(x.add(e),requestAnimationFrame(()=>{x.forEach(e=>{f[e].forEach(C(t=>{t.node?t.node.textContent=t.originalText.replace(/\{(.*?)\}/g,(e,t)=>Function("state",`with(state) { return ${t} }`)(M)):t.element&&t.attrName?(t.element.setAttribute(t.attrName,M[e]),t.element.removeAttribute(`:${t.attrName}`)):t.update&&t.update()},"Error updating bindings"))}),x.clear()}))},S=e=>{if("function"==typeof e){let t=C(e,"Error in onUpdated callback");h.__updated__||(h.__updated__=[]),h.__updated__.push({callback:t})}},k=e=>{o&&C(o,"Error in beforeUpdate hook").call(M,e),T(e),L(),q(e),h.__updated__&&h.__updated__.forEach(e=>e.callback.call(M))},L=()=>{Object.keys(d).forEach(e=>delete d[e])},q=e=>{h[e]&&h[e].forEach(t=>{t.debounce?(clearTimeout(t.timeout),t.timeout=setTimeout(()=>t.callback.call(M,M[e]),t.debounce)):t.throttle?(!t.lastCalled||Date.now()-t.lastCalled>t.throttle)&&(t.callback.call(M,M[e]),t.lastCalled=Date.now()):t.callback.call(M,M[e])})};l&&Object.keys(l).forEach(e=>{"function"==typeof l[e]?h[e]=[{callback:l[e]}]:"object"==typeof l[e]?h[e]=[{...l[e]}]:h[e]=Array.isArray(l[e])?l[e].map(e=>({callback:e})):[{callback:l[e]}]});let M=w({...e,$refs:new Proxy(p,{get:(e,t)=>e[t],set(){throw Error("$refs is read-only")}})}),O={},$={};t&&Object.keys(t).forEach(e=>{let r=t[e];O[e]=[],Object.defineProperty(M,e,{get:()=>"function"==typeof r&&"AsyncFunction"===r.constructor.name?($[e]||(d[e]=new Proxy(M,{get:(t,r)=>(O[e].includes(r)||O[e].push(r),t[r])}),$[e]=r.call(M).then(t=>(d[e]=t,delete $[e],T(e),t)).catch(t=>{console.error(`Error in async computed property "${e}":`,t)})),$[e]):(d.hasOwnProperty(e)||(d[e]=new Proxy(M,{get:(t,r)=>(O[e].includes(r)||O[e].push(r),t[r])}),d[e]=r.call(M)),d[e]),enumerable:!0})});let D=e=>{Object.keys(O).forEach(t=>{O[t].includes(e)&&(delete d[t],T(t))})},B=()=>{u.querySelectorAll("[\\$style]").forEach(e=>{if(!(e instanceof HTMLElement))return;let t=e.getAttribute("$style");if(!t)return;let r=()=>{try{let r=Function("state",`with(state) { return ${t} }`)(M);"object"==typeof r&&null!==r?Object.entries(r).forEach(([t,r])=>{e.style[t]=r}):"string"==typeof r&&e.setAttribute("style",r)}catch(l){console.error("Error applying style directive:",l)}};r(),T(t)})},_=()=>{u.querySelectorAll("[\\$if]").forEach(e=>{if(!(e instanceof HTMLElement))return;let t=e.getAttribute("$if");if(!t)return;let r=e.parentNode,l=document.createComment("$if placeholder");r?.insertBefore(l,e);let a=e.nextElementSibling;for(;a&&!a.hasAttribute("$else");)a=a.nextElementSibling;let n=()=>{try{Function("state",`with(state) { return ${t} }`)(M)?(e.style.display="",e.parentNode!==r&&r?.insertBefore(e,l.nextSibling),a&&(a.style.display="none")):(e.style.display="none",a&&(a.style.display=""))}catch(n){console.error("Error evaluating :if directive:",n)}};n(),T(t)})},j=e=>{if(!(e instanceof HTMLElement))return;let t=e.getAttribute("$show");if(!t)return;let r=()=>{try{let r=Function("state",`with(state) { return ${t} }`)(M);e.style.display=r?"":"none"}catch(l){console.error("Error evaluating $show directive:",l)}};r(),f[t]||(f[t]=[]),f[t].push({element:e,update:r})},H=()=>{u.querySelectorAll("[\\$for]").forEach(e=>{if(!(e instanceof HTMLElement))return;let t=e.getAttribute("$for");if(!t)return;let r=t.match(/^\s*(\w+)\s+(?:of|in)\s+(\w+)\s*$/);if(!r){console.error("Invalid :for expression:",t);return}let[,l,a]=r,n=e.parentNode,o=document.createComment("$for placeholder");n?.insertBefore(o,e),e.removeAttribute("$for");let i=e.cloneNode(!0);n?.removeChild(e);let c=()=>{let e=document.createDocumentFragment(),t=M[a];for(Array.isArray(t)&&t.forEach((t,r)=>{let a=i.cloneNode(!0),n={[l]:t,index:r},o=new Proxy(n,{get:(e,t)=>(t in e)?e[t]:M[t]}),c=e=>{if(e.nodeType===Node.TEXT_NODE){let t=e.textContent;t.includes("{")&&t.includes("}")&&(e.textContent=t.replace(/\{(.*?)\}/g,(e,t)=>Function("state",`with(state) { return ${t} }`)(o)))}else e.nodeType===Node.ELEMENT_NODE&&Array.from(e.childNodes).forEach(c)};c(a),a.querySelectorAll("*").forEach(e=>{Array.from(e.attributes).forEach(t=>{if(t.value.includes("{")&&t.value.includes("}")){let r=t.value.replace(/\{(.*?)\}/g,(e,t)=>Function("state",`with(state) { return ${t} }`)(o));e.setAttribute(t.name,r)}})}),e.appendChild(a)});o.nextSibling;)n?.removeChild(o.nextSibling);n?.insertBefore(e,o.nextSibling)};c(),f[a]||(f[a]=[]),f[a].push({updateFor:c})})},U=()=>{u.querySelectorAll("[\\$ref]").forEach(e=>{if(!(e instanceof HTMLElement))return;let t=e.getAttribute("$ref");t&&(p[t]=e,e.removeAttribute("$ref"))})},W=()=>{u.querySelectorAll("[\\$model]").forEach(e=>{if(!(e instanceof HTMLInputElement||e instanceof HTMLTextAreaElement||e instanceof HTMLSelectElement))return;let t=e.getAttribute("$model");t&&(e.value=M[t]||"",e.addEventListener("input",e=>{M[t]=e.target.value}),f[t]||(f[t]=[]),f[t].push({element:e,updateModel(){e.value=M[t]||""}}),e.removeAttribute("$model"))})},F=e=>{if(e.nodeType===Node.ELEMENT_NODE){let t=e.tagName.toLowerCase();if(y.has(t)){let r=y.get(t),l=Array.from(e.attributes).reduce((e,t)=>(e[t.name]=t.value,e),{}),a=r(l),n=document.createElement("div");n.innerHTML=a;let o=n.firstElementChild;return e.parentNode.replaceChild(o,e),o}}return e},P=()=>{let e=document.createElement("div");e.innerHTML=i.trim();let t=e.getElementsByTagName("template");if(t.length>0){let r=t[0].content;u.innerHTML="",u.appendChild(r.cloneNode(!0))}else u.innerHTML="",u.appendChild(e);let l=e=>{e.nodeType===Node.ELEMENT_NODE&&Array.from((e=F(e)).childNodes).forEach(l)};Array.from(u.childNodes).forEach(l),u.querySelectorAll("*").forEach(e=>{if(e instanceof HTMLElement){v(e);let t=[...e.childNodes].filter(e=>e.nodeType===Node.TEXT_NODE&&/\{.*?\}/.test(e.textContent||""));t.forEach(e=>{let t=e.textContent||"",r=t.match(/\{(.*?)\}/g);r&&r.forEach(r=>{let l=r.replace(/\{|\}/g,"").trim();f[l]||(f[l]=[]),f[l].push({node:e,originalText:t})})}),Array.from(e.attributes).forEach(t=>{if(t.name.startsWith("$")){let r=t.value.trim(),l=t.name.slice(1);f[r]||(f[r]=[]),f[r].push({element:e,attrName:l})}})}})};Object.entries(s).forEach(([e,t])=>{b(e,t)});let X=()=>{c.forEach(e=>{"function"==typeof e&&e({createPlugin:g,state:M,bindings:f})})},G=()=>{u.querySelectorAll("*").forEach(e=>{Array.from(e.attributes).forEach(t=>{if(t.name.startsWith("@")){let l=t.name.slice(1),a=t.value.trim();e.addEventListener(l,e=>{if(r&&r[a])r[a].call(M,e);else try{Function("state","event",`with(state) { ${a} }`).call(M,M,e),k()}catch(t){console.error(`Error executing inline event expression: ${a}`,t)}})}})})},I=()=>{u.querySelectorAll("[\\$class]").forEach(e=>{if(!(e instanceof HTMLElement))return;let t=e.getAttribute("$class");if(!t)return;let r=()=>{try{let r=Function("state",`with(state) { return ${t} }`)(M);"object"==typeof r&&null!==r?Object.entries(r).forEach(([t,r])=>{r?e.classList.add(t):e.classList.remove(t)}):"string"==typeof r&&(e.className=r)}catch(l){console.error("Error applying class directive:",l)}e.removeAttribute("$class")};r(),f[t]||(f[t]=[]),f[t].push({updateClass:r})})},z=(e,t)=>{E.has(e)||E.set(e,[]),E.get(e).forEach(e=>e(t))},J=(e,t)=>(E.has(e)||E.set(e,[]),E.get(e).push(t),()=>{let r=E.get(e),l=r.indexOf(t);-1!==l&&r.splice(l,1)}),K={beforeCreate:[],created:[],beforeMount:[],mounted:[],beforeUpdate:[],updated:[],beforeUnmount:[],unmounted:[]},Q=(e,t)=>{K[e]&&K[e].push(t)},R=e=>{K[e]&&K[e].forEach(e=>e.call(M))},V=e=>{e.data&&Object.assign(M,e.data()),e.methods&&Object.assign(r,e.methods),e.computed&&Object.assign(t,e.computed),e.watch&&Object.keys(e.watch).forEach(t=>{l[t]||(l[t]=[]),l[t].push(e.watch[t])}),e.mounted&&Q("mounted",e.mounted)},Y=e=>{console.error("Global error:",e)};return window.addEventListener("error",Y),{mount:C(function(e){if(!(u=document.querySelector(e)))throw Error(`Element with selector "${e}" not found.`);R("beforeCreate"),R("created"),n&&n.call(M),R("beforeMount"),X(),P(),G(),B(),_(),H(),U(),W(),I(),D(),u.querySelectorAll("[\\$show]").forEach(e=>{e instanceof HTMLElement&&j(e)}),a&&a.call(M),R("mounted"),Object.keys(M).forEach(e=>T(e))},"Error mounting application"),onUpdated:S,createPlugin:g,emit:z,on:J,addLifecycleHook:Q,applyMixin:V,component:b}};export{createApp};
|
package/package.json
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "olova",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.5",
|
|
4
4
|
"description": "A lightweight JavaScript framework for building reactive applications.",
|
|
5
|
-
"main": "olova.js",
|
|
5
|
+
"main": "dist/olova.js",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"javascript",
|
|
8
8
|
"framework",
|
|
9
9
|
"reactive",
|
|
10
|
-
"olova"
|
|
10
|
+
"olova",
|
|
11
|
+
"olovajs"
|
|
11
12
|
],
|
|
12
13
|
"author": "Nazmul Hossain",
|
|
13
|
-
"license": "MIT"
|
|
14
|
-
"dependencies": {}
|
|
14
|
+
"license": "MIT"
|
|
15
15
|
}
|