olova 2.0.12 → 2.0.13
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/olova.js +1 -1
- package/package.json +1 -1
package/dist/olova.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
const e=Symbol("BATCH_UPDATES"),t=Symbol("SIGNAL_TYPE");class n{constructor(){this.globalSubs=new Set,this.propSubs=new Map,this.weakPropSubs=new WeakMap,this.dependencies=new WeakMap,this.batchMode=!1,this.pendingDeps=new Set}subscribe(e,t){if(!t)return;this.dependencies.has(t)||this.dependencies.set(t,new Set);const n=this.dependencies.get(t);if(!n.has(e)){if(n.add(e),!e)return void this.globalSubs.add(t);const s="object"==typeof e?this.weakPropSubs:this.propSubs;s.has(e)||s.set(e,new Set),s.get(e).add(t)}}notify(e,t=new Set){if(this.batchMode)return this.pendingDeps.add(e),t;if(e){const n=this.propSubs.get(e);if(n&&this.notifyDependentSubs(n,e,t),"object"==typeof e){const n=this.weakPropSubs.get(e);n&&this.notifyDependentSubs(n,e,t)}}return this.notifyDependentSubs(this.globalSubs,e,t),t}startBatch(){this.batchMode=!0,this.pendingDeps.clear()}endBatch(){this.batchMode=!1;const e=new Set;for(const t of this.pendingDeps)this.notify(t,e);return this.pendingDeps.clear(),e}notifyDependentSubs(e,t,n){for(const s of e)if(!n.has(s)){const e=this.dependencies.get(s);t&&e&&!e.has(t)||(s(),n.add(s))}}cleanup(e){if(e){this.propSubs.delete(e);for(const[t,n]of this.dependencies)n.delete(e),0===n.size&&this.dependencies.delete(t)}}}class s{constructor(){this.updates=new Map,this.priorities=new Map,this.timeouts=new Map,this.debounceTime=16}add(e,t,n=0,s=!1){if(s)return this.timeouts.has(e)&&clearTimeout(this.timeouts.get(e)),void this.timeouts.set(e,setTimeout((()=>{this.addImmediate(e,t,n),this.timeouts.delete(e)}),this.debounceTime));this.addImmediate(e,t,n)}addImmediate(e,t,n){if(this.updates.has(e)){const s=this.updates.get(e),i=this.priorities.get(e)||0;"object"==typeof s&&"object"==typeof t&&(t={...s,...t}),n=Math.max(i,n)}this.updates.set(e,t),this.priorities.set(e,n)}process(e){0!==this.updates.size&&(this.timeouts.size>0?Promise.all(Array.from(this.timeouts.values()).map((e=>new Promise((t=>{const n=setInterval((()=>{this.timeouts.has(e)||(clearInterval(n),t())}),0)}))))).then((()=>this.processImmediate(e))):this.processImmediate(e))}processImmediate(e){const t=[...this.updates.entries()].sort(((e,t)=>(this.priorities.get(t[0])||0)-(this.priorities.get(e[0])||0)));e.startBatch();const n=new Set;for(const[s,i]of t)"function"==typeof i&&i(),e.notify(s,n);e.endBatch(),this.updates.clear(),this.priorities.clear()}clear(){this.timeouts.forEach((e=>clearTimeout(e))),this.timeouts.clear(),this.updates.clear(),this.priorities.clear()}}const i=(i,o={})=>{const{equals:r=Object.is,immediate:a=!0,batched:c=!1,debounce:l=!1}=o;let d=i;const u=new n,f=new s,p=e=>{const t=h();return t&&u.subscribe(e,t),e?d[e]:d};return p[e]=()=>(u.startBatch(),()=>{u.endBatch(),f.clear()}),p[t]=!0,[p,(e,t,n=0)=>{const s="function"==typeof e?e(t?d[t]:d):e;(t?!r(d[t],s):!r(d,s))&&(d=t?{...d,[t]:s}:s,c?(f.add(t,s,n,l),queueMicrotask((()=>{f.process(u)}))):u.notify(t))}]};function o(e,t={defer:!1}){let n=null,s=new Set;const i=()=>{n&&n(),s.clear(),f=i;try{n=e()||null}finally{f=null}};return t.defer||i(),i}function r(e,t={}){const[n,s]=i(void 0,t);let r=!1,a=new Set;return o((()=>{a.clear();const i=e();r&&t.equals&&t.equals(n(),i)||(s(i),r=!0)})),n}function a(e,t={}){const{initialValue:n=null,cacheTime:s=5e3,retries:o=3,retryDelay:r=1e3,lazy:a=!1}=t,[c,l]=i(n),[d,u]=i(!1),[f,h]=i(null);let p=new Map,m=new Map,y=0;const b=e=>{e?(p.delete(e),m.has(e)&&(clearTimeout(m.get(e)),m.delete(e))):(p.clear(),m.forEach((e=>clearTimeout(e))),m.clear())},g=async t=>{const n=JSON.stringify(t);if(p.has(n))return p.get(n);u(!0),h(null),y=0;const i=async()=>{try{const i=await e(t);return l(i),p.set(n,i),s>0&&m.set(n,setTimeout((()=>b(n)),s)),i}catch(e){if(y<o)return y++,await new Promise((e=>setTimeout(e,r*y))),i();throw h(e),e}finally{u(!1)}};return i()};return a||g(),{data:c,loading:d,error:f,refetch:g,clearCache:b}}function c(e,n,...s){if("function"==typeof e)return e({...n,children:s});if(e===l)return s.flat().filter(Boolean);const i=document.createElement(e);if(n)for(const[e,s]of Object.entries(n))if("ref"===e)"function"==typeof s?s(i):s&&(s.current=i);else if(e.startsWith("on")){const t=e.toLowerCase().slice(2);i.addEventListener(t,s)}else if("style"===e)"string"==typeof s?i.style.cssText=s:Object.assign(i.style,s);else if("classList"===e){if(Array.isArray(s))i.classList.add(...s.filter(Boolean));else if("object"==typeof s)for(const[e,t]of Object.entries(s))t?i.classList.add(e):i.classList.remove(e)}else"class"===e||"className"===e?i.className=s:["key"].includes(e)||("function"==typeof s&&s[t]?o((()=>{i[e]=s()})):i[e]=s);return s.flat().forEach((e=>{const t=g(e);t&&i.appendChild(t)})),i}new Map;const l=Symbol("Fragment");function d(t,n,s={}){const{hydrate:o=!1,onError:r=console.error,suspense:a=!0,beforeMount:c,afterMount:l}=s;if(!o)for(;n.firstChild;)n.removeChild(n.firstChild);const[d]=i(null),f=d[e]();c?.();try{let e=t();if(a&&e instanceof Promise)return void e.then((e=>{u(e,n,o),l?.()})).catch(r);u(e,n,o),l?.()}catch(e){r(e)}finally{f()}return()=>{for(;n.firstChild;)n.removeChild(n.firstChild)}}function u(e,t,n){if(!e)return;const s=Array.isArray(e)?e.flat(1/0):[e],i=Array.from(t.childNodes);let o=0;if(s.filter(Boolean).forEach((e=>{"string"==typeof e||"number"==typeof e?n&&i[o]?.nodeType===Node.TEXT_NODE?i[o].textContent=e+"":t.appendChild(document.createTextNode(e+"")):e instanceof Node?n&&i[o]?e.isEqualNode(i[o])||t.replaceChild(e,i[o]):t.appendChild(e):Array.isArray(e)?u(e,t,n):e&&"object"==typeof e&&t.appendChild(document.createTextNode(JSON.stringify(e))),o++})),!n)for(;o<i.length;)t.removeChild(i[o]),o++}let f=null;const h=()=>f;function p(e){const t=Symbol("context");return new Map,{Provider:({value:e,children:n})=>{const s=m(t);return f=e,f=s,n},Context:t,defaultValue:e}}function m(e){return f||e.defaultValue}function y({fallback:e,children:t}){try{return t}catch(t){return e(t)}}function b(e){let t=null,n=null;return function(s){if(!t)throw n||(n=e().then((e=>{t=e.default||e}))),n;return c(t,s)}}export{i as createSignal,o as createEffect,r as createMemo,a as createResource,p as createContext,m as useContext,c as h,l as Fragment,d as render,y as ErrorBoundary,b as lazy};const g=e=>{if(null==e||!1===e)return null;const n=()=>{const e=Math.random().toString(36).slice(2,8),t=document.createComment("start:"+e),n=document.createComment("end:"+e),s=document.createDocumentFragment();return s.appendChild(t),s.appendChild(n),{fragment:s,startNode:t,endNode:n}};if("function"==typeof e){const{fragment:s,startNode:i,endNode:r}=n();let a=null,c=null;return o((()=>{let n=(e[t],e());if(n===c)return;if(a){if(a.nodeType===Node.TEXT_NODE&&("string"==typeof n||"number"==typeof n)){const e=n+"";return a.textContent!==e&&(a.textContent=e),void(c=n)}if(a instanceof Element&&n instanceof Element&&a.tagName===n.tagName){const e=a.attributes,t=n.attributes;for(const t of e)n.hasAttribute(t.name)||a.removeAttribute(t.name);for(const e of t)a.getAttribute(e.name)!==e.value&&a.setAttribute(e.name,e.value);if(a.childNodes.length===n.childNodes.length){let e=!1;for(let t=0;t<a.childNodes.length;t++){const s=a.childNodes[t],i=n.childNodes[t];if(s.nodeType!==Node.TEXT_NODE||i.nodeType!==Node.TEXT_NODE){e=!0;break}s.textContent!==i.textContent&&(s.textContent=i.textContent)}if(!e)return void(c=n)}}}const s=r.parentNode,o=document.createDocumentFragment();if(null!=n){const e=S(n);e&&o.appendChild(e)}if(i.nextSibling!==r){let e=i.nextSibling;const t=[];for(;e&&e!==r;)t.push(e),e=e.nextSibling;t.forEach((e=>e.remove()))}o.firstChild?(s.insertBefore(o,r),a=i.nextSibling):a=null,c=n})),s}if(Array.isArray(e)){const{fragment:t,startNode:s,endNode:i}=n();let r=[],a=new Map;return o((()=>{const t=e.filter(Boolean);if(0===t.length){if(0===r.length)return;let e=s.nextSibling;const t=[];for(;e&&e!==i;)t.push(e),e=e.nextSibling;return t.forEach((e=>e.remove())),r=[],void a.clear()}if(r.length===t.length&&r.length<5){let e=!1;const n=[];let o=s.nextSibling;for(;o&&o!==i;)n.push(o),o=o.nextSibling;for(let s=0;s<t.length;s++){const i=r[s],o=t[s],a=n[s];if(i!==o){if(a.nodeType!==Node.TEXT_NODE||"string"!=typeof o&&"number"!=typeof o){e=!0;break}a.textContent=o+""}}if(!e)return void(r=[...t])}const n=document.createDocumentFragment(),o=new Map;t.forEach(((e,t)=>{const s=e?.key||`${typeof e}:${e+""}`;let i;a.has(s)?(i=a.get(s),a.delete(s)):i=g(e),i&&(o.set(s,i),n.appendChild(i))})),a.clear(),a=o;let c=s.nextSibling;const l=[];for(;c&&c!==i;)l.push(c),c=c.nextSibling;l.forEach((e=>e.remove())),i.parentNode.insertBefore(n,i),r=[...t]})),t}return e instanceof Node?e:document.createTextNode(e+"")},S=e=>{if(Array.isArray(e)){const t=document.createDocumentFragment();return e.forEach((e=>{const n=g(e);n&&t.appendChild(n)})),t}return e instanceof Node?e:document.createTextNode(e+"")};
|
|
1
|
+
let BATCH_UPDATES=Symbol("BATCH_UPDATES"),SIGNAL_TYPE=Symbol("SIGNAL_TYPE");class SubscriptionManager{constructor(){this.globalSubs=new Set,this.propSubs=new Map,this.weakPropSubs=new WeakMap,this.dependencies=new WeakMap,this.batchMode=!1,this.pendingDeps=new Set}subscribe(e,t){if(!t)return;this.dependencies.has(t)||this.dependencies.set(t,new Set);let n=this.dependencies.get(t);if(!n.has(e)){if(n.add(e),!e)return void this.globalSubs.add(t);let r="object"==typeof e?this.weakPropSubs:this.propSubs;r.has(e)||r.set(e,new Set),r.get(e).add(t)}}notify(e,t=new Set){if(this.batchMode)return this.pendingDeps.add(e),t;if(e){let n=this.propSubs.get(e);if(n&&this.notifyDependentSubs(n,e,t),"object"==typeof e){let n=this.weakPropSubs.get(e);n&&this.notifyDependentSubs(n,e,t)}}return this.notifyDependentSubs(this.globalSubs,e,t),t}startBatch(){this.batchMode=!0,this.pendingDeps.clear()}endBatch(){this.batchMode=!1;let e=new Set;for(let t of this.pendingDeps)this.notify(t,e);return this.pendingDeps.clear(),e}notifyDependentSubs(e,t,n){for(let r of e)if(!n.has(r)){let e=this.dependencies.get(r);(!t||!e||e.has(t))&&(r(),n.add(r))}}cleanup(e){if(e)for(let[t,n]of(this.propSubs.delete(e),this.dependencies))n.delete(e),0===n.size&&this.dependencies.delete(t)}}class BatchQueue{constructor(){this.updates=new Map,this.priorities=new Map,this.timeouts=new Map,this.debounceTime=16}add(e,t,n=0,r=!1){if(r)return this.timeouts.has(e)&&clearTimeout(this.timeouts.get(e)),void this.timeouts.set(e,setTimeout((()=>{this.addImmediate(e,t,n),this.timeouts.delete(e)}),this.debounceTime));this.addImmediate(e,t,n)}addImmediate(e,t,n){if(this.updates.has(e)){let r=this.updates.get(e),i=this.priorities.get(e)||0;"object"==typeof r&&"object"==typeof t&&(t={...r,...t}),n=Math.max(i,n)}this.updates.set(e,t),this.priorities.set(e,n)}process(e){if(0!==this.updates.size){if(this.timeouts.size>0)return void Promise.all(Array.from(this.timeouts.values()).map((e=>new Promise((t=>{let n=setInterval((()=>{this.timeouts.has(e)||(clearInterval(n),t())}),0)}))))).then((()=>this.processImmediate(e)));this.processImmediate(e)}}processImmediate(e){let t=[...this.updates.entries()].sort(((e,t)=>(this.priorities.get(t[0])||0)-(this.priorities.get(e[0])||0)));e.startBatch();let n=new Set;for(let[r,i]of t)"function"==typeof i&&i(),e.notify(r,n);e.endBatch(),this.updates.clear(),this.priorities.clear()}clear(){this.timeouts.forEach((e=>clearTimeout(e))),this.timeouts.clear(),this.updates.clear(),this.priorities.clear()}}let createSignal=(e,t={})=>{let{equals:n=Object.is,immediate:r=!0,batched:i=!1,debounce:o=!1}=t,a=e,l=new SubscriptionManager,s=new BatchQueue,c=e=>{let t=getCurrentContext();return t&&l.subscribe(e,t),e?a[e]:a};return c[BATCH_UPDATES]=()=>(l.startBatch(),()=>{l.endBatch(),s.clear()}),c[SIGNAL_TYPE]=!0,[c,(e,t,r=0)=>{let c="function"==typeof e?e(t?a[t]:a):e;(t?!n(a[t],c):!n(a,c))&&(a=t?{...a,[t]:c}:c,i?(s.add(t,c,r,o),queueMicrotask((()=>{s.process(l)}))):l.notify(t))}]};function createEffect(e,t={defer:!1}){let n=null,r=new Set,i=()=>{n&&n(),r.clear(),currentContext=i;try{n=e()||null}finally{currentContext=null}};return t.defer||i(),i}function createMemo(e,t={}){let[n,r]=createSignal(void 0,t),i=!1,o=new Set;return createEffect((()=>{o.clear();let a=e();i&&t.equals&&t.equals(n(),a)||(r(a),i=!0)})),n}function createResource(e,t={}){let{initialValue:n=null,cacheTime:r=5e3,retries:i=3,retryDelay:o=1e3,lazy:a=!1}=t,[l,s]=createSignal(n),[c,d]=createSignal(!1),[u,f]=createSignal(null),h=new Map,p=new Map,m=0,g=e=>{e?(h.delete(e),p.has(e)&&(clearTimeout(p.get(e)),p.delete(e))):(h.clear(),p.forEach((e=>clearTimeout(e))),p.clear())},y=async t=>{let n=JSON.stringify(t);if(h.has(n))return h.get(n);d(!0),f(null),m=0;let a=async()=>{try{let i=await e(t);return s(i),h.set(n,i),r>0&&p.set(n,setTimeout((()=>g(n)),r)),i}catch(e){if(m<i)return await new Promise((e=>setTimeout(e,o*++m))),a();throw f(e),e}finally{d(!1)}};return a()};return a||y(),{data:l,loading:c,error:u,refetch:y,clearCache:g}}let eventDelegation=new Map;function delegateEvent(e,t,n){if(!eventDelegation.has(e)){let t=t=>{let n=eventDelegation.get(e);for(let[e,r]of n)t.target.matches(e)&&r(t)};document.addEventListener(e,t),eventDelegation.set(e,new Map)}eventDelegation.get(e).set(t,n)}function h(e,t,...n){let r="http://www.w3.org/2000/svg",i=new Set(["svg","path","circle","rect","line","polygon","polyline","ellipse","g","text","tspan","defs","use","mask","clipPath"]);if("function"==typeof e)return e({...t,children:n});if(e===Fragment){let e=document.createDocumentFragment();return n.flat().forEach((t=>{let n=processChild(t);n&&e.appendChild(n)})),e}if("string"!=typeof e)throw Error(`Invalid element type: ${e}`);let o=i.has(e.toLowerCase())||t&&t.xmlns===r,a=o?document.createElementNS(r,e):document.createElement(e);if(t)for(let[e,n]of Object.entries(t))if("ref"===e)"function"==typeof n?n(a):n&&(n.current=a);else if(e.startsWith("on")){let t=e.slice(2).toLowerCase();a.addEventListener(t,n)}else if("style"===e)"string"==typeof n?a.style.cssText=n:Object.assign(a.style,n);else if("classList"===e){if(Array.isArray(n))a.classList.add(...n.filter(Boolean));else if("object"==typeof n)for(let[e,t]of Object.entries(n))t?a.classList.add(e):a.classList.remove(e)}else"class"===e||"className"===e?a.setAttribute("class",n):["key"].includes(e)||("function"==typeof n&&n[SIGNAL_TYPE]?createEffect((()=>{o?a.setAttribute(e,n()):a[e]=n()})):o?!0===n?a.setAttribute(e,""):!1!==n&&null!=n&&a.setAttribute(e,n):a[e]=n);return n.flat().forEach((e=>{if(null==e)return;let t=processChild(e);t&&(o&&t instanceof SVGElement||t instanceof Node?a.appendChild(t):a.appendChild(document.createTextNode(String(t))))})),a}let Fragment=Symbol("Fragment");function render(e,t,n={}){let{hydrate:r=!1,onError:i=console.error,suspense:o=!0,beforeMount:a,afterMount:l}=n;if(!r)for(;t.firstChild;)t.removeChild(t.firstChild);let[s]=createSignal(null),c=s[BATCH_UPDATES]();a?.();try{let n=e();if(o&&n instanceof Promise)return void n.then((e=>{mountChildren(e,t,r),l?.()})).catch(i);mountChildren(n,t,r),l?.()}catch(e){i(e)}finally{c()}return()=>{for(;t.firstChild;)t.removeChild(t.firstChild)}}function mountChildren(e,t,n){if(!e)return;let r=Array.isArray(e)?e.flat(1/0):[e],i=Array.from(t.childNodes),o=0;if(r.filter(Boolean).forEach((e=>{"string"==typeof e||"number"==typeof e?n&&i[o]?.nodeType===Node.TEXT_NODE?i[o].textContent=String(e):t.appendChild(document.createTextNode(String(e))):e instanceof Node?n&&i[o]?e.isEqualNode(i[o])||t.replaceChild(e,i[o]):t.appendChild(e):Array.isArray(e)?mountChildren(e,t,n):e&&"object"==typeof e&&t.appendChild(document.createTextNode(JSON.stringify(e))),o++})),!n)for(;o<i.length;)t.removeChild(i[o]),o++}let currentContext=null,getCurrentContext=()=>currentContext;function createContext(e){let t=Symbol("context");return{Provider({value:e,children:n}){let r=useContext(t);return currentContext=e,currentContext=r,n},Context:t,defaultValue:e}}function useContext(e){return currentContext||e.defaultValue}function ErrorBoundary({fallback:e,children:t}){try{return t}catch(t){return e(t)}}function lazy(e){let t=null,n=null;return function(r){if(!t)throw n||(n=e().then((e=>{t=e.default||e}))),n;return h(t,r)}}"undefined"!=typeof window?(window.h=h,window.Fragment=Fragment):"undefined"!=typeof global&&(global.h=h,global.Fragment=Fragment);export default{h:h,Fragment:Fragment};let processChild=e=>{if(null==e||!1===e||!0===e)return null;let t=()=>{let e=Math.random().toString(36).slice(2,8),t=document.createComment(`start:${e}`),n=document.createComment(`end:${e}`),r=document.createDocumentFragment();return r.appendChild(t),r.appendChild(n),{fragment:r,startNode:t,endNode:n}};if("function"==typeof e){let{fragment:n,startNode:r,endNode:i}=t(),o=null,a=null;return createEffect((()=>{let t=(e[SIGNAL_TYPE],e());if((null==t||!1===t||!0===t)&&(t=null),t===a)return;if(o){if(o.nodeType===Node.TEXT_NODE&&("string"==typeof t||"number"==typeof t)){let e=String(t);return o.textContent!==e&&(o.textContent=e),void(a=t)}if(o instanceof Element&&t instanceof Element&&o.tagName===t.tagName){let e=o.attributes,n=t.attributes;for(let n of e)t.hasAttribute(n.name)||o.removeAttribute(n.name);for(let e of n)o.getAttribute(e.name)!==e.value&&o.setAttribute(e.name,e.value);if(o.childNodes.length===t.childNodes.length){let e=!1;for(let n=0;n<o.childNodes.length;n++){let r=o.childNodes[n],i=t.childNodes[n];if(r.nodeType!==Node.TEXT_NODE||i.nodeType!==Node.TEXT_NODE){e=!0;break}r.textContent!==i.textContent&&(r.textContent=i.textContent)}if(!e)return void(a=t)}}}let n=i.parentNode,l=document.createDocumentFragment();if(null!=t){let e=processContent(t);e&&l.appendChild(e)}if(r.nextSibling!==i){let e=r.nextSibling,t=[];for(;e&&e!==i;)t.push(e),e=e.nextSibling;t.forEach((e=>e.remove()))}l.firstChild?(n.insertBefore(l,i),o=r.nextSibling):o=null,a=t})),n}if(Array.isArray(e)){let{fragment:n,startNode:r,endNode:i}=t(),o=[],a=new Map;return createEffect((()=>{let t=e.filter(Boolean);if(0===t.length){if(0===o.length)return;let e=r.nextSibling,t=[];for(;e&&e!==i;)t.push(e),e=e.nextSibling;return t.forEach((e=>e.remove())),o=[],void a.clear()}if(o.length===t.length&&o.length<5){let e=!1,n=[],a=r.nextSibling;for(;a&&a!==i;)n.push(a),a=a.nextSibling;for(let r=0;r<t.length;r++){let i=o[r],a=t[r],l=n[r];if(i!==a){if(l.nodeType!==Node.TEXT_NODE||"string"!=typeof a&&"number"!=typeof a){e=!0;break}l.textContent=String(a)}}if(!e)return void(o=[...t])}let n=document.createDocumentFragment(),l=new Map;t.forEach(((e,t)=>{let r,i=e?.key||`${typeof e}:${String(e)}`;a.has(i)?(r=a.get(i),a.delete(i)):r=processChild(e),r&&(l.set(i,r),n.appendChild(r))})),a.clear(),a=l;let s=r.nextSibling,c=[];for(;s&&s!==i;)c.push(s),s=s.nextSibling;c.forEach((e=>e.remove())),i.parentNode.insertBefore(n,i),o=[...t]})),n}return e instanceof Node?e:document.createTextNode(String(e))},processContent=e=>{if(Array.isArray(e)){let t=document.createDocumentFragment();return e.forEach((e=>{let n=processChild(e);n&&t.appendChild(n)})),t}return e instanceof Node?e:document.createTextNode(String(e))};export{createSignal,createEffect,createMemo,createResource,createContext,useContext,h,Fragment,render,ErrorBoundary,lazy};
|