ajo 0.0.24 → 0.0.26
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/index.cjs +27 -26
- package/index.js +34 -31
- package/index.min.js +1 -1
- package/package.json +1 -1
- package/readme.md +3 -3
package/index.cjs
CHANGED
|
@@ -25,6 +25,7 @@ __export(ajo_exports, {
|
|
|
25
25
|
useCatch: () => useCatch,
|
|
26
26
|
useEffect: () => useEffect,
|
|
27
27
|
useHost: () => useHost,
|
|
28
|
+
useInsert: () => useInsert,
|
|
28
29
|
useLayout: () => useLayout,
|
|
29
30
|
useMemo: () => useMemo,
|
|
30
31
|
useReducer: () => useReducer,
|
|
@@ -88,7 +89,7 @@ const Fragment = ({ children }) => children, h = (nodeName, props, ...children)
|
|
|
88
89
|
const prev = stack[i][0], next = isFunction(value) ? value(prev) : value;
|
|
89
90
|
if (is(prev, stack[i][0] = isFunction(fn) ? fn(prev, next) : next))
|
|
90
91
|
return;
|
|
91
|
-
|
|
92
|
+
runMutation(host);
|
|
92
93
|
}
|
|
93
94
|
];
|
|
94
95
|
return stack[hooks[0]++];
|
|
@@ -105,7 +106,7 @@ const Fragment = ({ children }) => children, h = (nodeName, props, ...children)
|
|
|
105
106
|
setValue(value2);
|
|
106
107
|
};
|
|
107
108
|
return [value, () => setValue()];
|
|
108
|
-
}, useHost = () => current, useState = (init) => useReducer(null, init), useRef = (current2) => useMemo(() => ({ current: current2 }), []), useCallback = (fn, deps) => useMemo(() => fn, deps), useLayout = (fn, deps) => useFx(fn, deps, "$layout"), useEffect = (fn, deps) => useFx(fn, deps, "$effect");
|
|
109
|
+
}, useHost = () => current, useState = (init) => useReducer(null, init), useRef = (current2) => useMemo(() => ({ current: current2 }), []), useCallback = (fn, deps) => useMemo(() => fn, deps), useInsert = (fn, deps) => useFx(fn, deps, "$insert"), useLayout = (fn, deps) => useFx(fn, deps, "$layout"), useEffect = (fn, deps) => useFx(fn, deps, "$effect");
|
|
109
110
|
const { isArray, from } = Array, { is } = Object, noop = () => {
|
|
110
111
|
}, FN = Symbol(), isObject = (v) => v && typeof v == "object", isFunction = (v) => typeof v == "function", some = (a, b) => isArray(a) && isArray(b) ? a.some((v, i) => !is(v, b[i])) : !is(a, b), reduce = (v) => from(v).reduce(assign, {}), assign = (v, { name, value }) => (v[name] = value, v), microtask = globalThis.queueMicrotask ?? ((fn) => fn()), task = globalThis.requestAnimationFrame ?? microtask, create = (ns, name, key) => {
|
|
111
112
|
const node = ns ? document.createElementNS(ns, name) : document.createElement(name);
|
|
@@ -160,27 +161,11 @@ const { isArray, from } = Array, { is } = Object, noop = () => {
|
|
|
160
161
|
if (globalThis.navigator?.scheduling?.isInputPending()) {
|
|
161
162
|
idleQueue.add(host);
|
|
162
163
|
host.$idle = true;
|
|
163
|
-
idleId ??= requestIdleCallback(
|
|
164
|
-
idleId = null;
|
|
165
|
-
const queue = from(idleQueue);
|
|
166
|
-
for (const host2 of queue) {
|
|
167
|
-
idleQueue.delete(host2);
|
|
168
|
-
host2.$idle = false;
|
|
169
|
-
schedule(host2);
|
|
170
|
-
}
|
|
171
|
-
});
|
|
164
|
+
idleId ??= requestIdleCallback(runIdle);
|
|
172
165
|
return;
|
|
173
166
|
}
|
|
174
|
-
|
|
175
|
-
},
|
|
176
|
-
if (host.$queued)
|
|
177
|
-
return;
|
|
178
|
-
host.$queued = true;
|
|
179
|
-
microtask(() => {
|
|
180
|
-
host.$queued = false;
|
|
181
|
-
runComponent(host);
|
|
182
|
-
});
|
|
183
|
-
}, runComponent = (host) => {
|
|
167
|
+
run(host);
|
|
168
|
+
}, run = (host) => {
|
|
184
169
|
if (host.$idle) {
|
|
185
170
|
idleQueue.delete(host);
|
|
186
171
|
host.$idle = false;
|
|
@@ -196,13 +181,29 @@ const { isArray, from } = Array, { is } = Object, noop = () => {
|
|
|
196
181
|
current = null;
|
|
197
182
|
layoutQueue.add(host);
|
|
198
183
|
host.$layoutQueued = true;
|
|
199
|
-
layoutId ??= task(
|
|
184
|
+
layoutId ??= task(runLayout);
|
|
200
185
|
}
|
|
201
|
-
},
|
|
186
|
+
}, runIdle = () => {
|
|
187
|
+
idleId = null;
|
|
188
|
+
for (const host of from(idleQueue)) {
|
|
189
|
+
idleQueue.delete(host);
|
|
190
|
+
host.$idle = false;
|
|
191
|
+
schedule(host);
|
|
192
|
+
}
|
|
193
|
+
}, runMutation = (host) => {
|
|
194
|
+
if (host.$runQueued)
|
|
195
|
+
return;
|
|
196
|
+
host.$runQueued = true;
|
|
197
|
+
microtask(() => {
|
|
198
|
+
host.$runQueued = false;
|
|
199
|
+
run(host);
|
|
200
|
+
});
|
|
201
|
+
}, runLayout = () => {
|
|
202
202
|
layoutId = null;
|
|
203
203
|
for (const host of layoutQueue) {
|
|
204
204
|
layoutQueue.delete(host);
|
|
205
205
|
host.$layoutQueued = false;
|
|
206
|
+
runFx(host, "$insert");
|
|
206
207
|
try {
|
|
207
208
|
render(host.$h, host);
|
|
208
209
|
host.$h = null;
|
|
@@ -212,10 +213,10 @@ const { isArray, from } = Array, { is } = Object, noop = () => {
|
|
|
212
213
|
runFx(host, "$layout");
|
|
213
214
|
effectQueue.add(host);
|
|
214
215
|
host.$effectQueued = true;
|
|
215
|
-
effectId ??= task(
|
|
216
|
+
effectId ??= task(runEffect);
|
|
216
217
|
}
|
|
217
218
|
}
|
|
218
|
-
},
|
|
219
|
+
}, runEffect = () => {
|
|
219
220
|
effectId = null;
|
|
220
221
|
for (const host of effectQueue) {
|
|
221
222
|
effectQueue.delete(host);
|
|
@@ -260,7 +261,7 @@ const { isArray, from } = Array, { is } = Object, noop = () => {
|
|
|
260
261
|
effectQueue.delete(host);
|
|
261
262
|
host.$effectQueued = false;
|
|
262
263
|
}
|
|
263
|
-
for (const key of ["$layout", "$effect"])
|
|
264
|
+
for (const key of ["$insert", "$layout", "$effect"])
|
|
264
265
|
if (host[key]) {
|
|
265
266
|
for (const fx of host[key]) {
|
|
266
267
|
host[key].delete(fx);
|
package/index.js
CHANGED
|
@@ -79,7 +79,7 @@ export const
|
|
|
79
79
|
|
|
80
80
|
if (is(prev, stack[i][0] = isFunction(fn) ? fn(prev, next) : next)) return
|
|
81
81
|
|
|
82
|
-
|
|
82
|
+
runMutation(host)
|
|
83
83
|
}
|
|
84
84
|
]
|
|
85
85
|
|
|
@@ -115,6 +115,7 @@ export const
|
|
|
115
115
|
useRef = current => useMemo(() => ({ current }), []),
|
|
116
116
|
useCallback = (fn, deps) => useMemo(() => fn, deps),
|
|
117
117
|
|
|
118
|
+
useInsert = (fn, deps) => useFx(fn, deps, '$insert'),
|
|
118
119
|
useLayout = (fn, deps) => useFx(fn, deps, '$layout'),
|
|
119
120
|
useEffect = (fn, deps) => useFx(fn, deps, '$effect')
|
|
120
121
|
|
|
@@ -200,38 +201,16 @@ const
|
|
|
200
201
|
if (host.$idle) return
|
|
201
202
|
|
|
202
203
|
if (globalThis.navigator?.scheduling?.isInputPending()) {
|
|
203
|
-
|
|
204
204
|
idleQueue.add(host)
|
|
205
205
|
host.$idle = true
|
|
206
|
-
|
|
207
|
-
idleId ??= requestIdleCallback(() => {
|
|
208
|
-
idleId = null
|
|
209
|
-
const queue = from(idleQueue)
|
|
210
|
-
for (const host of queue) {
|
|
211
|
-
idleQueue.delete(host)
|
|
212
|
-
host.$idle = false
|
|
213
|
-
schedule(host)
|
|
214
|
-
}
|
|
215
|
-
})
|
|
216
|
-
|
|
206
|
+
idleId ??= requestIdleCallback(runIdle)
|
|
217
207
|
return
|
|
218
208
|
}
|
|
219
209
|
|
|
220
|
-
|
|
221
|
-
},
|
|
222
|
-
|
|
223
|
-
runMutations = host => {
|
|
224
|
-
|
|
225
|
-
if (host.$queued) return
|
|
226
|
-
|
|
227
|
-
host.$queued = true
|
|
228
|
-
microtask(() => {
|
|
229
|
-
host.$queued = false
|
|
230
|
-
runComponent(host)
|
|
231
|
-
})
|
|
210
|
+
run(host)
|
|
232
211
|
},
|
|
233
212
|
|
|
234
|
-
|
|
213
|
+
run = host => {
|
|
235
214
|
|
|
236
215
|
if (host.$idle) {
|
|
237
216
|
idleQueue.delete(host)
|
|
@@ -250,11 +229,33 @@ const
|
|
|
250
229
|
current = null
|
|
251
230
|
layoutQueue.add(host)
|
|
252
231
|
host.$layoutQueued = true
|
|
253
|
-
layoutId ??= task(
|
|
232
|
+
layoutId ??= task(runLayout)
|
|
233
|
+
}
|
|
234
|
+
},
|
|
235
|
+
|
|
236
|
+
runIdle = () => {
|
|
237
|
+
|
|
238
|
+
idleId = null
|
|
239
|
+
|
|
240
|
+
for (const host of from(idleQueue)) {
|
|
241
|
+
idleQueue.delete(host)
|
|
242
|
+
host.$idle = false
|
|
243
|
+
schedule(host)
|
|
254
244
|
}
|
|
255
245
|
},
|
|
256
246
|
|
|
257
|
-
|
|
247
|
+
runMutation = host => {
|
|
248
|
+
|
|
249
|
+
if (host.$runQueued) return
|
|
250
|
+
|
|
251
|
+
host.$runQueued = true
|
|
252
|
+
microtask(() => {
|
|
253
|
+
host.$runQueued = false
|
|
254
|
+
run(host)
|
|
255
|
+
})
|
|
256
|
+
},
|
|
257
|
+
|
|
258
|
+
runLayout = () => {
|
|
258
259
|
|
|
259
260
|
layoutId = null
|
|
260
261
|
|
|
@@ -263,6 +264,8 @@ const
|
|
|
263
264
|
layoutQueue.delete(host)
|
|
264
265
|
host.$layoutQueued = false
|
|
265
266
|
|
|
267
|
+
runFx(host, '$insert')
|
|
268
|
+
|
|
266
269
|
try {
|
|
267
270
|
render(host.$h, host)
|
|
268
271
|
host.$h = null
|
|
@@ -272,12 +275,12 @@ const
|
|
|
272
275
|
runFx(host, '$layout')
|
|
273
276
|
effectQueue.add(host)
|
|
274
277
|
host.$effectQueued = true
|
|
275
|
-
effectId ??= task(
|
|
278
|
+
effectId ??= task(runEffect)
|
|
276
279
|
}
|
|
277
280
|
}
|
|
278
281
|
},
|
|
279
282
|
|
|
280
|
-
|
|
283
|
+
runEffect = () => {
|
|
281
284
|
|
|
282
285
|
effectId = null
|
|
283
286
|
|
|
@@ -333,7 +336,7 @@ const
|
|
|
333
336
|
host.$effectQueued = false
|
|
334
337
|
}
|
|
335
338
|
|
|
336
|
-
for (const key of ['$layout', '$effect']) if (host[key]) {
|
|
339
|
+
for (const key of ['$insert', '$layout', '$effect']) if (host[key]) {
|
|
337
340
|
|
|
338
341
|
for (const fx of host[key]) {
|
|
339
342
|
|
package/index.min.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
var ajo=(()=>{var x=Object.defineProperty;var V=Object.getOwnPropertyDescriptor;var W=Object.getOwnPropertyNames;var D=Object.prototype.hasOwnProperty;var G=(e,t)=>{for(var
|
|
1
|
+
var ajo=(()=>{var x=Object.defineProperty;var V=Object.getOwnPropertyDescriptor;var W=Object.getOwnPropertyNames;var D=Object.prototype.hasOwnProperty;var G=(e,t)=>{for(var u in t)x(e,u,{get:t[u],enumerable:!0})},J=(e,t,u,l)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of W(t))!D.call(e,n)&&n!==u&&x(e,n,{get:()=>t[n],enumerable:!(l=V(t,n))||l.enumerable});return e};var K=e=>J(x({},"__esModule",{value:!0}),e);var ye={};G(ye,{Fragment:()=>U,component:()=>X,h:()=>T,render:()=>Q,useCallback:()=>h,useCatch:()=>Y,useEffect:()=>ne,useHost:()=>p,useInsert:()=>ee,useLayout:()=>te,useMemo:()=>w,useReducer:()=>S,useRef:()=>_,useState:()=>Z});const U=({children:e})=>e,T=(e,t,...u)=>{const{length:l}=u;return u=l==0?null:l==1?u[0]:u,{children:u,...t,nodeName:e}},Q=(e,t,u)=>{let l=t.firstChild;for(e of b(e)){let n=l;if(e instanceof Node)n=e;else if(typeof e=="string"){for(;n&&n.nodeType!=3;)n=n.nextSibling;n?n.data!=e&&(n.data=e):n=document.createTextNode(e)}else{const{xmlns:r=u,nodeName:a,key:i,ref:o,memo:A,children:z,[E]:F,...P}=e;for(;n&&!(n.localName==a&&$(n.$key??=i,i));)n=n.nextSibling;n??=ie(r,a,i),ue(o)&&(o.current=n,n.$ref=o),(A==null||v(n.$deps,n.$deps=A))&&(fe(P,n),f(F)?F(n):Q(z,n,r))}n==l?l=l.nextSibling:oe(t,n,l)}for(;l;){const n=l.nextSibling;H(l),t.removeChild(l),l=n}},X=e=>({nodeName:t,as:u,props:l,key:n,ref:r,memo:a,...i})=>T(u??e?.as??"c-host",{...e?.props,...l,key:n,ref:r,memo:a,[E]:o=>{o.$fn=f(e)?e:le,o.$args={...e?.args,...i},M(o)}}),S=(e,t)=>{const u=p(),l=g(),[n,r]=l;return n==r.length&&(r[n]=[f(t)?t():t,a=>{const i=r[n][0],o=f(a)?a(i):a;$(i,r[n][0]=f(e)?e(i,o):o)||de(u)}]),r[l[0]++]},w=(e,t)=>{const u=g(),[l,n]=u;return(l==n.length||t==null||v(t,n[l][1]))&&(n[l]=[e(),t]),n[u[0]++][0]},Y=e=>{const t=p(),[u,l]=S(),n=g(),[r,a]=n;return a[n[0]++]=e,t.$catch??=i=>{f(a[r])&&a[r](i),l(i)},[u,()=>l()]},p=()=>c,Z=e=>S(null,e),_=e=>w(()=>({current:e}),[]),h=(e,t)=>w(()=>e,t),ee=(e,t)=>I(e,t,"$insert"),te=(e,t)=>I(e,t,"$layout"),ne=(e,t)=>I(e,t,"$effect"),{isArray:s,from:C}=Array,{is:$}=Object,le=()=>{},E=Symbol(),ue=e=>e&&typeof e=="object",f=e=>typeof e=="function",v=(e,t)=>s(e)&&s(t)?e.some((u,l)=>!$(u,t[l])):!$(e,t),re=e=>C(e).reduce(ae,{}),ae=(e,{name:t,value:u})=>(e[t]=u,e),j=globalThis.queueMicrotask??(e=>e()),q=globalThis.requestAnimationFrame??j,ie=(e,t,u)=>{const l=e?document.createElementNS(e,t):document.createElement(t);return l.$key=u,l},b=function*(e,t={data:""},u=!0){let l;for(e of s(e)?e:[e])e==null||typeof e=="boolean"||(typeof e.nodeName=="string"?((l=t.data)&&(t.data="",yield l),yield e):f(e.nodeName)?yield*b(e.nodeName(e),t,!1):s(e)?yield*b(e,t,!1):t.data+=e);u&&(l=t.data)&&(yield l)},fe=(e,t)=>{const u=t.$props??=t.hasAttributes()?re(t.attributes):{};for(const l in{...u,...t.$props=e}){let n=e[l];n!==u[l]&&(l.startsWith("set:")?t[l.slice(4)]=n:n==null||n===!1?t.removeAttribute(l):t.setAttribute(l,n===!0?"":n))}},oe=(e,t,u)=>{if(t.contains?.(document.activeElement)){const l=t.nextSibling;for(;u&&u!=t;){const n=u.nextSibling;e.insertBefore(u,l),u=n}}else e.insertBefore(t,u)},g=()=>c.$hooks??=[0,[]],I=(e,t,u)=>{const l=p(),n=g(),[r,a]=n;r==a.length?(l[u]??=new Set).add(a[r]=[null,e,t]):(t==null||v(t,a[r][2]))&&(a[r][1]=e,a[r][2]=t),n[0]++},M=e=>{if(!e.$idle){if(globalThis.navigator?.scheduling?.isInputPending()){d.add(e),e.$idle=!0,R??=requestIdleCallback(ce);return}B(e)}},B=e=>{e.$idle&&(d.delete(e),e.$idle=!1),c=e,c.$hooks&&(c.$hooks[0]=0);try{e.$h=e.$fn(e.$args)}catch(t){k(t,e.parentNode)}finally{c=null,y.add(e),e.$layoutQueued=!0,L??=q(se)}},ce=()=>{R=null;for(const e of C(d))d.delete(e),e.$idle=!1,M(e)},de=e=>{e.$runQueued||(e.$runQueued=!0,j(()=>{e.$runQueued=!1,B(e)}))},se=()=>{L=null;for(const e of y){y.delete(e),e.$layoutQueued=!1,N(e,"$insert");try{Q(e.$h,e),e.$h=null}catch(t){k(t,e)}finally{N(e,"$layout"),m.add(e),e.$effectQueued=!0,O??=q($e)}}},$e=()=>{O=null;for(const e of m)m.delete(e),e.$effectQueued=!1,N(e,"$effect")},N=(e,t)=>{if(e[t])for(const u of e[t]){const[l,n]=u;if(f(n))try{f(l)&&l(),u[0]=n()}catch(r){u[0]=null,k(r,e.parentNode)}finally{u[1]=null}}},H=e=>{if(e.nodeType==1){for(const t of e.children)H(t);if(e.$ref&&(e.$ref.current=null),!!e.$fn){e.$idle&&(d.delete(e),e.$idle=!1),e.$layoutQueued&&(y.delete(e),e.$layoutQueued=!1),e.$effectQueued&&(m.delete(e),e.$effectQueued=!1);for(const t of["$insert","$layout","$effect"])if(e[t])for(const u of e[t]){e[t].delete(u);try{const[l]=u;f(l)&&l()}catch(l){k(l,e.parentNode)}finally{u[0]=u[1]=null}}}}},k=(e,t)=>{for(let u;t;t=t.parentNode)if(f(u=t.$catch))return void u(e);throw e};let c=null,y=new Set,m=new Set,d=new Set,L=null,O=null,R=null;return K(ye);})();
|
package/package.json
CHANGED
package/readme.md
CHANGED
|
@@ -7,7 +7,7 @@ ajo is a JavaScript view library for building user interfaces
|
|
|
7
7
|
npm install ajo
|
|
8
8
|
```
|
|
9
9
|
|
|
10
|
-
## render JSX to a DOM element
|
|
10
|
+
## render a JSX element to a DOM element
|
|
11
11
|
|
|
12
12
|
```jsx
|
|
13
13
|
/** @jsx h */
|
|
@@ -18,7 +18,7 @@ document.body.innerHTML = '<div>Hello World</div>'
|
|
|
18
18
|
render(<div>Goodbye World</div>, document.body)
|
|
19
19
|
```
|
|
20
20
|
|
|
21
|
-
## stateless
|
|
21
|
+
## function element (stateless)
|
|
22
22
|
|
|
23
23
|
```jsx
|
|
24
24
|
/** @jsx h */
|
|
@@ -29,7 +29,7 @@ const Greet = ({ name }) => <div>Hello {name}</div>
|
|
|
29
29
|
render(<Greet name="World" />, document.body)
|
|
30
30
|
```
|
|
31
31
|
|
|
32
|
-
## stateful
|
|
32
|
+
## component element (stateful)
|
|
33
33
|
|
|
34
34
|
```jsx
|
|
35
35
|
/** @jsx h */
|