arrmatura 6.3.1 → 6.3.3
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 +10 -20
- package/dist/index.cjs +6 -0
- package/dist/index.cjs.map +7 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +7 -0
- package/docs/components.md +89 -0
- package/docs/{hello.md → getstarted.md} +21 -4
- package/docs/manual.md +7 -292
- package/docs/templates.md +222 -0
- package/index.ts +6 -5
- package/package.json +12 -4
- package/src/core/Arrmatron.ts +423 -0
- package/src/core/Component.ts +52 -31
- package/src/core/ManifestNode.ts +50 -36
- package/src/core/resolveExpression.ts +15 -6
- package/src/registry/{iterations.ts → Iterative.ts} +36 -29
- package/src/registry/composition.ts +16 -12
- package/src/registry/conditionals.ts +17 -12
- package/src/registry/connector.ts +48 -0
- package/src/registry/elementary.ts +7 -6
- package/src/registry/fragment.ts +7 -6
- package/src/registry/index.ts +22 -29
- package/src/registry/root.ts +8 -6
- package/src/registry/routing.ts +12 -6
- package/src/registry/selection.ts +11 -9
- package/src/registry/slot.ts +8 -7
- package/src/utils/FingerprintMashine.ts +126 -0
- package/src/utils/applyStateChangedToImpl.ts +18 -0
- package/src/utils/compileExpression.ts +59 -31
- package/src/utils/narrowData.ts +15 -0
- package/src/utils/objectFingerprint.spec.ts +70 -0
- package/types.ts +52 -35
- package/docs/glossary.md +0 -19
- package/src/core/Entitron.ts +0 -406
package/README.md
CHANGED
|
@@ -1,19 +1,17 @@
|
|
|
1
1
|
# Arrmatura
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
> 
|
|
4
4
|
|
|
5
|
-
`Arrmatura` is
|
|
6
|
-
It comprises of
|
|
5
|
+
`Arrmatura` is an universal framework, which promotes ideas of declarative functional programming.
|
|
7
6
|
|
|
8
|
-
|
|
9
|
-
- set of public and private types, which outlines an implementation approach.
|
|
10
|
-
- a runtime engine, that enables launching applications of any kind.
|
|
11
|
-
- `IPlatform` implementation for web to build/launch client applications.
|
|
12
|
-
- Web UI kits with various components, services, forms, rich UI etc.
|
|
7
|
+
It comprises of
|
|
13
8
|
|
|
14
|
-
|
|
9
|
+
- formal notation to define components and its composition.
|
|
10
|
+
- Typescript runtime, enabling development of applications of any kind.
|
|
11
|
+
- Implementation for web clients.
|
|
12
|
+
- UI kit with plenty of web components, services, forms, editors etc.
|
|
15
13
|
|
|
16
|
-
The framework is designed to facilitate the creation of
|
|
14
|
+
The framework is designed to facilitate the creation of applications
|
|
17
15
|
by allowing developers to define components and specify how they are composed and connected.
|
|
18
16
|
|
|
19
17
|
This component composition is achieved through a declarative syntax,
|
|
@@ -27,19 +25,11 @@ to build web applications that are scalable, maintainable, and responsive.
|
|
|
27
25
|
|
|
28
26
|
## Documentation
|
|
29
27
|
|
|
30
|
-
- [Manual](docs/manual.md)
|
|
31
|
-
- [Glossary](docs/glossary.md)
|
|
32
|
-
|
|
33
|
-
## Getting started for Web
|
|
34
|
-
|
|
35
|
-
See [Hello, world](docs/HELLO.md) for starting example.
|
|
28
|
+
- [Manual](./docs/manual.md)
|
|
36
29
|
|
|
37
30
|
## Examples
|
|
38
31
|
|
|
39
32
|
- [Emoji List](https://emojis-list.web.app/)
|
|
33
|
+
- [Focusator](https://focusator.web.app/)
|
|
40
34
|
- [Countries List](https://countries-list.web.app/)
|
|
41
35
|
- [Game Solver](https://dlitskevich.github.io/solver/) ([source](https://github.com/dlitskevich/solver/tree/master/app))
|
|
42
|
-
|
|
43
|
-
## Limitations and considerations
|
|
44
|
-
|
|
45
|
-
TBD
|
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";var L=Object.defineProperty;var Bt=Object.getOwnPropertyDescriptor;var Wt=Object.getOwnPropertyNames;var Jt=Object.prototype.hasOwnProperty;var Gt=(r,t,e)=>t in r?L(r,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):r[t]=e;var Yt=(r,t)=>{for(var e in t)L(r,e,{get:t[e],enumerable:!0})},Zt=(r,t,e,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Wt(t))!Jt.call(r,o)&&o!==e&&L(r,o,{get:()=>t[o],enumerable:!(n=Bt(t,o))||n.enumerable});return r};var qt=r=>Zt(L({},"__esModule",{value:!0}),r);var c=(r,t,e)=>(Gt(r,typeof t!="symbol"?t+"":t,e),e),Et=(r,t,e)=>{if(!t.has(r))throw TypeError("Cannot "+e)};var p=(r,t,e)=>(Et(r,t,"read from private field"),e?e.call(r):t.get(r)),f=(r,t,e)=>{if(t.has(r))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(r):t.set(r,e)},h=(r,t,e,n)=>(Et(r,t,"write to private field"),n?n.call(r,e):t.set(r,e),e);var Se={};Yt(Se,{CRootNode:()=>M,Component:()=>St,compileManifestNode:()=>zt,compileManifestNodes:()=>$e,launch:()=>Ne});module.exports=qt(Se);var rt=(r,t)=>{if(!(!r||!t||typeof r!="object")){if(typeof t=="function")return t(r);if(typeof t=="string"){if(!t.includes("."))return r[t];t=t.split(".")}return t.reduce((e,n)=>e?e[n]:void 0,r)}};function Ct(r){return r==null?"":String(r)}function z(r){let t=r==null?"":String(r);return t.length?t[0].toUpperCase()+t.slice(1):""}var re=1,At=(r="")=>r+String(re++);var Tt=r=>r;var ne=(r,t)=>({id:r,value:t});var wt=(r,t=ne)=>r?Object.entries(r).map(([e,n])=>t(e,n)):[];var D=r=>{if(r==="")return"";if(r==="true")return!0;if(r==="false")return!1;if(r==="0")return 0;if(r==="1")return 1;if(r&&"1234567890+-".includes(r[0])&&r.length<=17){let t=+r;return isNaN(t)?r:t}if(r==="null")return null;if(r!=="undefined")return r};var se=/&#?[0-9a-z]{2,5};/g,ie={amp:"&",gt:">",lt:"<",quot:'"',nbsp:" "};var ae=function(r){let t=r.substring(1,r.length-1);return t[0]==="#"?String.fromCharCode(+t.slice(1)):ie[t]||" "},Mt=(r,t='"',e=t)=>r[0]===t&&r[r.length-1]===e?r.slice(1,-1):r,nt=r=>String(r??"").replace(se,ae);var pe={RE_ATTRS:/([a-zA-Z][a-zA-Z0-9-:]*)(="[^"]*")?/g,RE_EMPTY:/^\s*$/,RE_XML_COMMENT:/<!--((?!-->)[\s\S])*-->/g,RE_XML_TAG:/(<)(\/?)([a-z][a-z0-9\-_:.]*)((?:\s+[a-zA-Z][a-z0-9-:]*(?:="[^"]*")?)*)\s*(\/?)>/gi,SINGLE_TAGS:{img:1,input:1,br:1,hr:1,col:1,source:1}};function It(r){let{RE_XML_TAG:t,RE_EMPTY:e,RE_XML_COMMENT:n,RE_ATTRS:o,SINGLE_TAGS:s}={...pe,...r},a=(u,l,m)=>{let x={tag:l,id:m};return(u.nodes??(u.nodes=[])).push(x),x},i=(u,l)=>{if(l){u.attrs={};for(let m=o.exec(l);m;m=o.exec(l)){let x=m[2]?D(nt(Mt(m[2].slice(1)))):!0;u.attrs[m[1]]=x}}};return u=>{let l=0,m=[{tag:"#root",id:String(l)}],x=String(u).trim().replace(n,""),j=0;for(let y=t.exec(x);y;y=t.exec(x)){let v=y.index&&x.slice(j,y.index);if(y[2]){if(v&&!m[0].nodes?.length&&(v===" "||!v.match(e))&&(m[0].text=nt(v.trim())),m[0].tag!==y[3])throw new Error(` XML Parse closing tag does not match at: ${String(y.index)} near ${y.input.slice(Math.max(y.index-150,0),y.index)}^^^^${y.input.slice(y.index,Math.min(y.index+150,y.input.length))}`);m.shift()}else{let bt=a(m[0],y[3],`X${String(++l)}`);if(i(bt,y[4].trim()),!(y[5]||y[3]in s)&&(m.unshift(bt),m.length===1))throw new Error(`Parse error at: ${y[0]}`)}j=t.lastIndex}return m[0].nodes??[]}}var Pt=It();var ot=new Map;function jt(r,t){let e=(r<<5)-r+t;return e&e}var Ot=":".charCodeAt(0);function ue(r){let t=0;if(ot.has(r))t=ot.get(r);else{for(let e=0;e<r.length;e++)t=jt(t,r.charCodeAt(e));ot.set(r,t)}return t}var st=class{constructor(){c(this,"r",0);c(this,"x");c(this,"$path")}get path(){return this.$path??(this.$path=new Set)}upNumber(t){return this.r=jt(this.r,t)}upString(t){return this.upNumber(ue(t))}upObject(t){if(t.uid)return t.uid;if(t instanceof Date)return this.upNumber(t.getTime());if(!(this.path.size>10||this.path.has(t))){if(this.path.add(t),t instanceof Map)this.upString("$$$Map$$$"),t.forEach((e,n)=>{this.upString(n),this.upNumber(Ot),this.upAny(e)});else if(t instanceof Set)this.upString("$$$Set$$$"),t.forEach(e=>this.upAny(e));else if(Array.isArray(t))this.upString("$$$Array$$$"),t.forEach(e=>this.upAny(e));else{this.upString("$$$Object$$$");for(let e in t)Object.prototype.hasOwnProperty.call(t,e)&&e[0]!=="$"&&(this.upString(e),this.upNumber(Ot),this.upAny(t[e]))}return this.path.delete(t),this.r}}upAny(t){t==null?this.upString(String(t)):typeof t=="number"?isNaN(t)?this.upString("$$$NaN$$$"):this.upNumber(t):typeof t=="object"?this.upObject(t):typeof t=="string"?this.upString(t):typeof t=="boolean"?this.upString(`$$$Boolean$$$${t}`):typeof t=="function"||this.upString(String(t))}do(t){return t==null||typeof t!="object"||Object.isFrozen(t)?t:t.uid?t.uid:t.$ctx?t.$ctx.uid:(this.r=0,this.x=t,this.$path&&this.$path?.clear(),this.upObject(t),this.r)}},le=new st,_=r=>le.do(r);function Dt(r,t){t.__stateChanged?t.__stateChanged(r):r.forEach((e,n)=>{let o=t[`set${z(n)}`];typeof o=="function"?o.call(t,e):t[n]=e})}var _t=r=>typeof r=="object"?Array.isArray(r)?r.length?`[${_t(r[0])??""} x${String(r.length)}]`:"[]":`{${Object.keys(r).toString()}}`:r??"",me=r=>{if(!r)return"";let t=[];return Object.entries(r).forEach(([e,n])=>{n&&e[0]!=="$"&&t.push(` ${e}="${_t(n)}"`)}),t.length?t.join(""):""},it=(r,t="")=>{let{uid:e,displayName:n=e,component:o,children:s}=r,a=s?.size?[...s.values()].map(i=>it(i,` ${t}`)).join(`
|
|
2
|
+
`):"";return`${t}<${n}${me(o)}${a?`>
|
|
3
|
+
${a}
|
|
4
|
+
${t}</${n}>`:"/>"}`};var S,R,A,b,T,E,H,w,F,d=class{constructor(t,e,n,o){this.platform=t;this.manifest=e;this._parent=n;c(this,"$component");c(this,"root");c(this,"scope");c(this,"$children");f(this,S,!1);f(this,R,!1);f(this,A,{});f(this,b,{});f(this,T,void 0);f(this,E,[]);f(this,H,void 0);f(this,w,void 0);f(this,F,void 0);c(this,"toast",t=>{this.platform.toast(t,this)});this.scope=o??this,this.root=o?.root??this,h(this,b,this.manifest.resolveInitialProps(this)),this.$component=this.createComponent(p(this,b)),this.refId&&this.refId.split(",").forEach(s=>this.scope.addReference(s,this))}get parent(){return this._parent}get uid(){return this.manifest.uid}get displayName(){return"\u{1F539}"}createComponent(t){return{...t}}up(t,e=!1){if(!t||p(this,S))return;if(t instanceof Promise){let o=this.raceCondition("set");t.then(s=>o(()=>this.up(s)));return}let n=new Map;Object.entries(t).forEach(([o,s])=>{if(s instanceof Promise){let a=!o||o.startsWith("..."),i=this.raceCondition(`set:${o}`);s.then(u=>i(()=>this.up(a?u:{[o]:u})))}else if(o&&typeof s<"u")if(o[0]==="$")this.$component[o]!==s&&n.set(o.slice(1),s);else{let a=_(s);(!(o in p(this,A))||a!==p(this,A)[o])&&(p(this,A)[o]=a,n.set(o,s))}}),(n.size||e)&&(Dt(n,this.$component),this.touch())}touch(){this.recontent(),this.notify()}get(t){let e=p(this,F)??h(this,F,new Map);if(e.has(t))return e.get(t)();let n=null,o=this.$component,s=o[t];if(s&&typeof s=="function"){let a=s.bind(o);n=()=>a}else if(o.__getStateProperty)n=()=>o.__getStateProperty(t);else{let[a,...i]=t.split(".");if(a==="R"){let u=this.platform.getResource(i)??null;n=()=>u}else{let u=o[`get${z(a)}`],l=typeof u=="function"?()=>u.call(o)??null:()=>o[a]??null;n=i.length?()=>i.reduce((m,x)=>m?.[x]??null,l()):l}}return e.set(t,n),n()}getFromScope(t){return this.scope.get(t)}notify(){p(this,T)?.forEach(t=>t(this))}subscribe(t){let e=p(this,T)??h(this,T,new Set);return e.add(t),()=>{e.delete(t)}}emit(t,e){if(!p(this,S))try{if(t.endsWith(")")){let[n,o]=t.split("(")[0].split("."),s=this.getByRef(n);if(!s)throw new Error(`No such reference: ${n}`);let a=s.$component,i=a[o];if(typeof i!="function")throw new Error(`Not a method: ${n}.${o}()`);let u=i.call(a,e);s.up(u)}else{let[n,o]=t.split(".");o||(o=n,n="this");let s=this.getByRef(n);if(!s)throw new Error(`No such reference: ${n}`);s.up(o==="*"?e:{[o]:e})}}catch(n){this.logError(`emit ${t}:`,n)}}done(){p(this,S)||(h(this,S,!0),this.children?.forEach(t=>t.done()),p(this,E)?.forEach(t=>t(this)),h(this,E,void 0),this._parent?.children?.delete(this.uid),this._parent=void 0)}defer(t){t&&typeof t=="function"&&(p(this,E)??h(this,E,[])).push(t)}settleAsChild(){p(this,R)?this.up(this.manifest.resolveProps(this),!0):(h(this,R,!0),this.initConnectors(),this.up(p(this,b),!0),this.up(this.$component.__init?.(this)))}get children(){return this.$children}get contentManifests(){return this.manifest.getSubNodes(this.platform)}get recontentScope(){return this.scope}recontent(){let t=this.contentManifests;this.platform.redraw(this,this.root),this.children?.forEach((n,o)=>{t?.get(o)||n.done()});let e=new Map;t?.forEach((n,o)=>{let s=this.$children?.get(o)??n.createArrmatron(this.platform,this,this.recontentScope);e.set(s.uid,s)}),this.$children=e;for(let n of e.values())n.settleAsChild()}get refId(){return this.manifest.refId}getByRef(t){if(!t)return;if(t==="this")return this;let e=p(this,w)?.[t];return e||this.parent?.getByRef(t)}addReference(t,e){(p(this,w)??h(this,w,{}))[t]=e}initConnectors(){if(this.manifest.connectors)for(let[t,e]of this.manifest.connectors.entries()){let[n,o]=t.split("|"),[s,a]=n.split("."),i=this.parent?.getByRef(s);if(!i){this.logError(`Connect: No such ref: ${s}`);continue}if(!a){this.logError(`Connect: No Source Property Name: ${s}`);continue}let u=o?l=>({[o]:l}):Tt;this.defer((()=>{let l;return i.subscribe(async m=>{try{let x=await m.get(a),j=_(x);if(l!==void 0&&l===j)return;l=j;let y=u(e(this,x));this.up(y)}catch(x){m.logError("Notify ",x)}})})()),Object.assign(p(this,b),u(e(i,a?i.get(a):i.$component)))}}raceCondition(t){let e=p(this,H)??h(this,H,new Map),n=1+(e.get(t)??0);return e.set(t,n),o=>{if(n===e.get(t))return n=0,o()}}log(t,...e){return this.platform.log({level:"log",source:`${this.displayName}:${this.uid}`,message:t,params:e}),t}logError(t,...e){this.platform.log({level:"error",source:`${this.displayName}:${this.uid}`,error:t,message:`${String(t.message||t)}
|
|
5
|
+
${this.toString().slice(0,120)}`,params:e})}toString(){return it(this)}};S=new WeakMap,R=new WeakMap,A=new WeakMap,b=new WeakMap,T=new WeakMap,E=new WeakMap,H=new WeakMap,w=new WeakMap,F=new WeakMap;var fe={"&&":"|and:","==":"|equals:","!=":"|notEquals:","||":"|or:","<":"|less:","[":"|dot:","]":"",">":"|greater:","??":"|coalesce:","?":"|then:"},he=(r,t)=>t,Ht=r=>"'+-0123456789".includes(r[0])||r==="true"||r==="false";function B(r){let t=D(r[0]==="'"?r.slice(1,r.length-1):r);return()=>t}var Rt=r=>t=>t.getFromScope(r),Ft=(r,t)=>{if(r[0]==="!"){let e=Rt(r.slice(1));return n=>!e(n)}if(r[0]==="#"&&r[1]==="#"){let e=t?.[Number(r.slice(2))];return()=>e}return Ht(r)?B(r):Rt(r)},Xt=r=>r.trim().replace(/(&&|!=|==|>|<|\[|\]|\|\||\?\??)/g,(t,e)=>`${fe[e]}`).split("|").map(t=>t.trim());function kt(r){if(!r.length)return he;let t=r.map(e=>{let n=[],o=e.replaceAll(/'[^']*'/g,i=>(n.push(i.slice(1,-1)),`##${n.length-1}`)),[s,...a]=o.split(":").map(i=>i.trim());return{pipeId:s,args:a.map(i=>Ft(i,n))}});return(e,n)=>t.reduce((o,{pipeId:s,args:a})=>{try{let i=e.platform.getFunction(s);if(typeof i!="function")throw new Error(`${i!=null?"must be a function":"not found"}`);if(o instanceof Promise)return o.then(u=>{let l=[u,...a.map(x=>x(e))];return i.apply(e,l)});{let u=[o,...a.map(l=>l(e))];return i.apply(e,u)}}catch(i){return e.logError(`ERROR: Function ${s||"<empty>"}`,i),o}},n)}function de(r,t){if(!r||r==="it")return t;if(r.startsWith("it.")){let n=r.slice(3);return(o,s)=>t(o,rt(s,n))}let e=Ht(r)?B(r):N(r);return n=>t(n,e(n))}function W(r){if(r.endsWith(")")){let s=r.slice(0,-1).split("(");return W(`${s[0]}=${s[1]}`)}let[t,...e]=Xt(r),[n,o]=t.split("=").map(s=>s.trim());return{key:n,pipec:de(o,kt(e))}}function N(r){let[t,...e]=Xt(r),n=kt(e),o=Ft(t);return s=>n(s,o(s))}function Ut(r){return new Function("c",r.replaceAll(/[^'a-z]([a-z][a-z0-9-.]+)/gi,'c.prop("$1")'))}var ge=/\{([^}]+)\}/g;function vt(r,t){let e=[],n=r.replace(ge,(a,i)=>(e.push(t(i.trim())),"{$$$}"));if(!e.length)return()=>n;let o=n.split(/\{\$\$\$\}/g),s=o.pop();return(...a)=>o.map((i,u)=>`${i}${Ct(e[u](...a))}`).join("")+s}var at=new Map;function ye(r){if(typeof r!="string")return()=>r;if(r.startsWith("js:"))return Ut(r.slice(3));if(r.includes("{")){let t=r.slice(1,-1);return r[0]==="{"&&r[r.length-1]==="}"&&!t.includes("{")?N(t):vt(r.replace(/\s+/g," "),N)}return B(r)}var J=r=>at.has(r)?at.get(r):at.set(r,ye(r)).get(r);var g=class{constructor(t){c(this,"$content");c(this,"uid");c(this,"refId");c(this,"propertyResolvers",[]);c(this,"initialState",{});c(this,"connectors");c(this,"tag");this.uid=`${At("N")}:${t}`}createArrmatron(t,e,n){return new this.EntitronConstructor(t,this,e,n)}getSubNodes(t){return this.$content}addPropertyResolver(t,e){return this.propertyResolvers.push((n,o)=>(o[e]=t(n),o)),this}addDataPropertyResolver(t,e){return this.propertyResolvers.push((n,o)=>{let s=t(n);return o.data=Object.assign(o.data||{},{[e]:s}),o}),this}addPropertiesResolver(t){return this.propertyResolvers.push((e,n)=>{let o=t(e);return o&&typeof o=="object"&&Object.entries(o).forEach(([s,a])=>{n[s]=a}),n}),this}addConnector(t,e){let{key:n,pipec:o}=W(t);(this.connectors??(this.connectors=new Map)).set(`${n}|${e}`,o)}addEmitter(t,e){let{key:n,pipec:o}=W(t),s=n+(t.endsWith(")")?"()":"");this.initialState[e]=a=>i=>a.scope?.emit(s,o(a,i))}resolveInitialProps(t){return this.propertyResolvers.reduce((e,n)=>n(t,e),Object.entries(this.initialState).reduce((e,[n,o])=>(e[n]=o(t),e),{}))}resolveProps(t){return this.propertyResolvers.reduce((e,n)=>n(t,e),{})}compileAttribute(t,e){if(t.startsWith("data-"))this.addDataPropertyResolver(J(e),t.slice(5));else if(t==="Ref")this.refId=String(e);else if(t==="Props"){let n=String(e);n.startsWith("<-")?this.addConnector(n.slice(2),""):this.addPropertiesResolver(J(n))}else if(typeof e!="string")this.initialState[t]=()=>e;else if(e.includes("{"))this.addPropertyResolver(J(e),t);else if(e.startsWith("<-"))if(e.endsWith(".This")){let n=e.slice(2,-5).trim();this.initialState[t]=o=>o.getByRef(n)?.$component}else this.addConnector(e.slice(2),t);else e.startsWith("->")?this.addEmitter(e.slice(2).trim()||"*",t):this.initialState[t]=()=>e}compileAttributes(t){t&&Object.entries(t).forEach(e=>this.compileAttribute(...e))}};var pt=class extends d{get displayName(){return"ROOT"}get recontentScope(){return this}slotContent(t){}createComponent(t){return this.platform.createComponent({},t,this)}},M=class extends g{constructor(e){super("R0");this.template=e;c(this,"slotContent");c(this,"nodes");this.slotContent={}}getSubNodes(e){return e.getCompiledNodes(Pt(this.template))}getSlotContent(e,n){}get EntitronConstructor(){return pt}};var Lt=r=>r?typeof r=="string"?r.split(",").map(t=>({id:t,name:t})):Array.isArray(r)?r:typeof r[Symbol.iterator]=="function"?[...r]:typeof r=="object"?wt(r,(t,e)=>typeof e=="object"?{...e,id:t}:{id:t,name:String(e)}):[{id:String(r),name:String(r)}]:[];var ct=class extends d{constructor(){super(...arguments);c(this,"pkHash",{})}get displayName(){return"\u{1F539}each"}get contentManifests(){let e=Lt(this.$component.each),n=this.manifest.getItemCtxNode(this.platform),o=new Map;if(this.pkHash={},e?.length){if(!e.forEach)throw new Error(`[each] Items has no forEach() ${e.toString()}`);e.forEach((s,a)=>{let i=typeof s=="string"?{id:s}:s,u=i.id;u==null&&(this.logError("ERROR: empty item id: ",i),u=String(a));let l=String(u);if(this.pkHash[l]){this.logError(`ERROR: duplicate item id : ${l} (skipped)`,i);return}this.pkHash[l]=i;let m=n.cloneWithDatum(i,this.platform).addPropertyResolver(()=>this.pkHash[l],n.itemName);o.set(m.uid,m)})}return o}},X,k,I,G=class extends g{constructor(e,[n,o,s=o]){super(e.id);f(this,X,void 0);f(this,k,void 0);f(this,I,void 0);h(this,I,e),h(this,k,n.startsWith("@")?n.slice(1):n),s[0]==="<"&&s[1]==="-"?this.addConnector(s.slice(2),"each"):this.addPropertyResolver(N(s),"each")}getItemCtxNode(e){return p(this,X)??h(this,X,new lt(p(this,I).id,p(this,k),e.getCompiledNodes([p(this,I)])))}get EntitronConstructor(){return ct}};X=new WeakMap,k=new WeakMap,I=new WeakMap;var ut=class extends d{get recontentScope(){return this}get displayName(){return"\u{1F539}ui:for:item"}emit(t,e){return this.scope.emit(t,e)}get(t){let e=this.manifest.itemName;return t.startsWith(`${e}.`)||t===e?super.get(t):this.scope.get(t)}},lt=class r extends g{constructor(e,n,o){super(e);c(this,"itemName");this.itemName=n,this.$content=o}cloneWithDatum(e,n){let o=`${String(this.uid)}#${e.id}`,s=new r(o,this.itemName,this.getSubNodes(n));return s.uid=o,s}get EntitronConstructor(){return ut}};var mt=class extends d{get displayName(){return`\u{1F4A0}${this.manifest.tag}`}get recontentScope(){return this}slotContent(t){return this.manifest.getSlotContent(this.platform,t)}createComponent(t){return this.platform.createComponent(this.manifest.tag,t,this)}},U,Y=class extends g{constructor({id:e,tag:n,attrs:o,nodes:s}){super(e);c(this,"slotContent",null);c(this,"tag");c(this,"nodes");f(this,U,void 0);this.tag=n,this.nodes=s,this.compileAttributes(o)}getSlotContent(e,n){if(!this.slotContent){let o=this.nodes?.reduce((s,a)=>{let i="default",u=!1;return a.tag.startsWith(`${this.tag}:`)&&(i=a.tag.split(":")[1],u=!0),s[i]=(s[i]||[]).concat(u?a.nodes??[]:a),s},{});this.slotContent=Object.entries(o??{}).reduce((s,[a,i])=>(s[a]=e.getCompiledNodes(i),s),{})}return this.slotContent[n||"default"]??void 0}getSubNodes(e){return p(this,U)??h(this,U,e.getCompiledNodes(this.tag))}get EntitronConstructor(){return mt}};U=new WeakMap;var ft=class extends d{get contentManifests(){let t=this.manifest.getBranches(this.platform);return this.$component.condition?t.then:t.else}get displayName(){return"\u{1F539}if"}},C,$,Z=class extends g{constructor(e,n){super(e.id);f(this,C,void 0);f(this,$,void 0);h(this,C,e),this.compileCondition(n)}get EntitronConstructor(){return ft}getBranches(e){if(p(this,$))return p(this,$);h(this,$,{});let{nodes:n}=p(this,C),o=[p(this,C)];if(n?.length){let s=n.find(i=>i.tag==="Else"),a=n.find(i=>i.tag==="Then");s?(p(this,$).else=s.nodes?e.getCompiledNodes(s.nodes):void 0,o=a?a.nodes:[Object.assign(p(this,C),{nodes:n.filter(i=>i!==s)})]):a&&(o=a.nodes)}return p(this,$).then=o?e.getCompiledNodes(o):void 0,p(this,$)}compileCondition(e){if(e[0]==="<"&&e[1]==="-")this.addConnector(e.slice(2),"condition");else if(e.slice(0,5)==="slot("){let n=e.slice(5,-1);this.addPropertyResolver(o=>!!o.scope.slotContent?.(n)?.size,"condition")}else{let n=N(e);this.addPropertyResolver(o=>!!n(o),"condition")}}};C=new WeakMap,$=new WeakMap;var ht=class extends d{constructor(){super(...arguments);c(this,"prevkey")}touch(){super.touch();let{trigger:e,data:n,change:o}=this.$component,s="trigger"in this.$component;if(s&&e==null)return;let i=_(s?e:n);(!("prevkey"in this)||this.prevkey!=i)&&(this.prevkey=i,o?.(n))}get displayName(){return"\u{1F539}Connector"}},q=class extends g{constructor({attrs:t,id:e}){super(e),this.compileAttributes(t)}get EntitronConstructor(){return ht}};var dt=class extends d{get displayName(){return this.manifest.tag}createComponent(t){return this.platform.createComponent({tag:this.manifest.tag,native:!0},t,this)}},P,K=class extends g{constructor({id:e,tag:n,attrs:o,nodes:s,text:a}){super(e);f(this,P,void 0);this.tag=n,this.compileAttributes(o),a&&this.compileAttribute("#text",a),h(this,P,s)}getSubNodes(e){return p(this,P)?e.getCompiledNodes(p(this,P)):void 0}get EntitronConstructor(){return dt}};P=new WeakMap;var O,Q=class extends g{constructor({id:e,nodes:n}){super(e);f(this,O,void 0);h(this,O,n)}getSubNodes(e){return p(this,O)?e.getCompiledNodes(p(this,O)):void 0}get EntitronConstructor(){return d}};O=new WeakMap;var gt=class extends d{get displayName(){return"dynamics"}get contentManifests(){let t=this.$component.tag,e=`${this.uid}:${String(t??"")}`;return new Map([[e,Object.assign(this.platform.getCompiledNodes({...this.manifest.xml,tag:t}),{uid:e})]])}},V=class extends g{constructor(e,n){super(e.id);c(this,"xml");this.compileAttribute("tag",n),this.xml=e}get EntitronConstructor(){return gt}};var yt=class extends d{get displayName(){return"\u{1F4A0}Selector"}get contentManifests(){let t=this.manifest.getCases(this.platform),e=this.$component.On,n=t?.[e];return n||this.log("unmatched case",e,t),n??t?.default??Object.values(t)[0]}},tt=class extends g{constructor({id:e,tag:n,attrs:o,nodes:s}){super(e);c(this,"cases",null);c(this,"key","");c(this,"nodes");this.tag=n,this.nodes=s,this.compileAttributes(o)}getCases(e){return this.cases??(this.cases=(this.nodes??[]).reduce((n,o)=>(n[o.attrs?.When]=e.getCompiledNodes(o.nodes??[]),n),{}))}get EntitronConstructor(){return yt}};var xt=class extends d{get displayName(){return"\u{1F538}"}get compositeScope(){return this.scope}get contentManifests(){return this.compositeScope.slotContent(this.manifest.key)}get recontentScope(){return this.compositeScope.scope}},et=class extends g{constructor(e){super(e.id);c(this,"key");this.key=e.attrs?.Key}get EntitronConstructor(){return xt}};var $t=(r,t)=>{let{[t]:e,...n}=r.attrs??{};return{text:r.text,tag:r.tag,id:r.id,attrs:n,nodes:r.nodes?.map(o=>o)}},xe=r=>{let{tag:t="div",attrs:e}=r;return e?.Each?new G($t(r,"Each"),String(e.Each).trim().split(" ")):e?.If?new Z($t(r,"If"),String(e.If)):t==="div"||t[0]?.match(/[A-Z0-9]/)==null?new K(r):t==="Dynamic"?new V($t(r,"As"),String(e?.As??"Error.Dynamic")):t==="Slot"?new et(r):t==="Selector"?new tt(r):t==="Connector"?new q(r):t==="Fragment"||t==="Then"||t==="Else"?new Q(r):new Y(r)},Nt=new Map,zt=r=>Nt.has(r)?Nt.get(r):Nt.set(r,xe(r)).get(r),$e=r=>new Map(r?.map(zt).map(t=>[t.uid,t])??[]);var St=class{constructor(t,e){c(this,"$ctx");this.$ctx=e,this.__created(t)}__created(t){}get refId(){return this.$ctx.refId}get platform(){return this.$ctx.platform}__init(t){}get(t){return this.$ctx.get(t)}up(t){return this.$ctx.up(t)}touch(){return this.$ctx.touch()}emit(t,e={}){return this.$ctx.emit(t,e)}defer(t){this.$ctx.defer(t)}defineCalculatedProperty(t,e,n){let o="",s;Object.defineProperty(this,t,{get(){let a=n?.length?n.map(u=>this.$ctx.get(u)):[],i=a.join(":");return o!==i&&(o=i,s=e.apply(this,a)),s}})}toast(t){this.$ctx.toast(t)}log(t,...e){this.$ctx.log(t,...e)}logError(t,...e){this.$ctx.logError(t,...e)}toString(){return`${this.$ctx.toString()}${this.name?`(${this.name})`:""}`}};var Ne=(r,t)=>{let e=new M(t).createArrmatron(r);return e.touch(),e};0&&(module.exports={CRootNode,Component,compileManifestNode,compileManifestNodes,launch});
|
|
6
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../index.ts", "../../ultimus/src/object/gettus.ts", "../../ultimus/src/string/index.ts", "../../ultimus/src/func/nextId.ts", "../../ultimus/src/func/identity.ts", "../../ultimus/src/object/index.ts", "../../ultimus/src/scalar/scalarParse.ts", "../../ultimus/src/xml/utils.ts", "../../ultimus/src/xml/xmlParserFactory.ts", "../../ultimus/src/xml/index.ts", "../src/utils/FingerprintMashine.ts", "../src/utils/applyStateChangedToImpl.ts", "../src/utils/stringify.ts", "../src/core/Arrmatron.ts", "../src/utils/compileExpression.ts", "../../ultimus/src/parsing/createStringInterpolator.ts", "../src/core/resolveExpression.ts", "../src/core/ManifestNode.ts", "../src/registry/root.ts", "../src/utils/narrowData.ts", "../src/registry/Iterative.ts", "../src/registry/composition.ts", "../src/registry/conditionals.ts", "../src/registry/connector.ts", "../src/registry/elementary.ts", "../src/registry/fragment.ts", "../src/registry/routing.ts", "../src/registry/selection.ts", "../src/registry/slot.ts", "../src/registry/index.ts", "../src/core/Component.ts"],
|
|
4
|
+
"sourcesContent": ["import type { IArrmatronRoot, IPlatform } from \"arrmatura/types\";\n\nimport { CRootNode } from \"./src/registry/root\";\n\nexport * from \"./src/registry\";\nexport { CRootNode } from \"./src/registry/root\";\nexport * from \"./src/core/Component\";\n\n/**\n * Launches the runtime with given top-level template on the specified platform.\n *\n * @param {IPlatform} platform - The platform on which to launch the template.\n * @param {string} template - The template to launch with.\n * @return {IArrmatronRoot} The root context object.\n */\nexport const launch = (platform: IPlatform, template: string): IArrmatronRoot => {\n const root = new CRootNode(template).createArrmatron(platform);\n\n root.touch();\n\n return root;\n};\n", "import { Obj, Fn } from \"../../types\";\n\n\nexport const gettus = (o: Obj, key: Fn | string | string[] | ((e: Obj) => unknown)): unknown => {\n if (!o || !key || typeof o !== \"object\") return undefined;\n if (typeof key === \"function\") return key(o);\n if (typeof key === \"string\") {\n if (!key.includes(\".\")) return o[key];\n key = key.split(\".\");\n }\n return key.reduce<Obj | undefined>((r, e) => (r ? (r[e] as Obj) : undefined), o);\n};\n", "import { Hash } from \"../../types\";\n\nexport function str(x: unknown) {\n return x == null ? \"\" : String(x);\n}\nexport function stringifyJson(x: unknown, indent = 2) {\n return JSON.stringify(x, null, indent);\n}\n\nexport function capitalize(x: unknown) {\n const s = x == null ? \"\" : String(x);\n return s.length ? s[0].toUpperCase() + s.slice(1) : \"\";\n}\nexport function strLowerize(x: unknown) {\n const s = str(x);\n return s.length ? s[0].toLowerCase() + s.slice(1) : \"\";\n}\n\nexport function strMapChunks(\n x: unknown,\n fn: (chunk: string, index: number) => string,\n sep = \"_\",\n sep2 = sep\n) {\n return x == null ? \"\" : String(x).split(sep).filter(Boolean).map(fn).filter(Boolean).join(sep2);\n}\nexport function camelize(x: unknown, sep = \"_\") {\n return strMapChunks(str(x), (t, i) => (i ? capitalize(t) : t), sep, \"\");\n}\nexport function qname(x: unknown, re = /\\W+/g) {\n return x == null\n ? \"\"\n : strMapChunks(\n String(x).trim().replaceAll(re, \"_\"),\n (t, i) => (i ? capitalize(t) : strLowerize(t)),\n \"_\",\n \"\"\n );\n}\n\nexport const snakeCase = (x: string) =>\n str(x)\n .replace(/([a-z])([A-Z])/g, \"$1_$2\")\n .toLowerCase();\nexport const properCase = (x: string, sep?: string) => capitalize(camelize(x, sep));\nexport const upperCase = (x: string) => str(x).toUpperCase();\nexport const lowerCase = (x: string) => str(x).toLowerCase();\n\nexport function strFormat(template: string, params: Hash = {}, regExp = /\\$\\{([\\S]+)\\}/gi) {\n return str(template).replaceAll(regExp, (_, key) =>\n params[key] != null ? str(params[key]) : \"\"\n );\n}\n\nexport const strEnhance = (x: string, template?: string, def?: string) => {\n return !x ? \"\" : `${template || \"*\"}`.replace(\"*\", x ?? def ?? \"\");\n};\n\nexport const strTail = (x: string, sep = \" \") => {\n if (!x) {\n return \"\";\n }\n const pos = x.lastIndexOf(sep);\n return pos === -1 ? x : x.slice(pos + sep.length);\n};\n\nexport const strHead = (x: string, sep = /[\\s:/]/) => {\n if (!x) {\n return \"\";\n }\n const [result] = str(x).split(sep);\n\n return result;\n};\nexport const strHeadOrSelf = (x: string, sep = /[\\s:/]/) => {\n return strHead(x, sep) ?? x;\n};\n\nexport const strReplace = (x: string, rep, by, def = \"\") => {\n return x == null ? \"\" : String(x).replace(rep, by ?? def);\n};\n\nexport const abbreviate = (x: string, sep = \" \") =>\n !x\n ? \"\"\n : str(x)\n .split(sep)\n .map((s) => s[0])\n .slice(0, 2)\n .join(\"\")\n .toUpperCase();\n\nexport const mirror = (x: string) =>\n str(x)\n .split(\"\")\n .reduce((r, c) => c + r, \"\");\n\nexport function padLeft(x: string | number, size = 1, fill = \" \") {\n let s = str(x);\n while (s.length < size) {\n s = `${fill}${s}`;\n }\n return s;\n}\n", "/**\n * incremental Uid generation function.\n *\n * @returns new unique Uid\n */\n\nimport { Uid } from \"../../types\";\n\nlet COUNTER = 1;\n\nexport const nextId = (p = \"\"): Uid => p + String(COUNTER++);\n", "/**\n * The `identity/Totus` function.\n *\n * @returns input parameter `as is`\n */\nexport const identity = <T = unknown>(e: T): T => e;\n", "import { Obj } from \"../../types\";\nimport { strEnhance } from \"../string\";\n\nexport * from \"./isEmpty\";\nexport * from \"./mergeObject\";\nexport * from \"./defineObjectRef\";\nexport * from \"./gettus\";\nexport * from \"./settus\";\nexport * from \"./reduceEntries\";\n\nconst DEFAULT_ENTRY_HANDLER = (id: string, n: any): any => ({ id, value: n });\n\n// data structures\nexport const dot = (x: any, k = \"name\", pattern?: string, def: any = null) =>\n x?.[pattern ? strEnhance(k, pattern, def) : k] ?? def;\nexport const join = (x: any[], delim = \", \") => (x ? x.join(delim) : null);\nexport const keysOf = (x: any) => (x ? Object.keys(x) : null);\nexport const valuesOf = (x: any) => (x ? Object.values(x) : null);\nexport const typeOf = (x: any) => (x == null ? \"nullable\" : Array.isArray(x) ? \"array\" : typeof x);\nexport const entriesOf = (x: any) =>\n x ? Object.entries(x).map(([id, value]) => ({ id, value })) : null;\nexport const stringify = (x: any, indent = 2) => (x == null ? \"\" : JSON.stringify(x, null, indent));\n\nexport const assign = (o: Obj, ...delta: unknown[]): object => {\n return Object.assign(o || {}, ...delta);\n};\n\nexport const assignKeyValue = (o: Obj, key: string, value: unknown): object => {\n return Object.assign(o || {}, { [key]: value });\n};\n\nexport const mapEntries = <T = any>(\n o: object | null | undefined,\n fn: (key: string, value: any) => T = DEFAULT_ENTRY_HANDLER\n): T[] => {\n return !o ? [] : Object.entries(o).map(([key, value]: any) => fn(key, value));\n};\n\nexport const isValuable = (x: any): boolean => {\n if (x == null) return false;\n if (Array.isArray(x)) return x.length > 0;\n if (typeof x === \"object\") return Object.values(x).find((v) => v != null) != null;\n return true;\n};\n\nexport const assignFirstArgKeyValue =\n (fn: (...args: unknown[]) => unknown, key: string, val: unknown) =>\n (x: object, ...args: unknown[]) =>\n fn(Object.assign(x || {}, { [key]: val }), ...args.slice(1));\n\nexport const pack = (x?: unknown, key = \"value\"): object => {\n return { [key]: x };\n};\n", "import { Scalar } from \"../../types\";\n/**\n * The scalarParse() function takes an optional string parameter s and returns a Scalar value.\n * It can also return undefined or null.\n * The function tries to parse the input string and convert it to a scalar value, based on some predefined rules.\n *\n * @param s (optional): a string that needs to be parsed and converted to a scalar value.\n * @return returns a Scalar value that can be one of the following:\n * A boolean value (true or false).\n * A number (integer or floating-point).\n * A string value.\n * undefined if the input string is the string \"undefined\".\n * null if the input string is the string \"null\".\n * An empty string if the input string is an empty string.\n * Rules for parsing\n * The scalarParse() function uses the following rules to parse the input string:\n *\n * If the input string is an empty string (''), an empty string is returned.\n * If the input string is the string \"true\", a boolean value true is returned.\n * If the input string is the string \"false\", a boolean value false is returned.\n * If the input string is the string \"0\", the number 0 is returned.\n * If the input string is the string \"1\", the number 1 is returned.\n * If the input string starts with a digit (0-9), a plus sign (+) or a minus sign (-) and has a length less than or equal to 17 characters, the string is converted to a number using the unary + operator. If the resulting value is NaN, the original string is returned, otherwise, the converted number is returned.\n * If the input string is the string \"undefined\", undefined is returned.\n * If the input string is the string \"null\", null is returned.\n * In all other cases, the input string is returned as-is.\n */\nexport const scalarParse = (s?: string): Scalar | null => {\n if (s === \"\") {\n return \"\";\n }\n if (s === \"true\") {\n return true;\n }\n if (s === \"false\") {\n return false;\n }\n if (s === \"0\") {\n return 0;\n }\n if (s === \"1\") {\n return 1;\n }\n if (s && \"1234567890+-\".includes(s[0]) && s.length <= 17) {\n const num = +s;\n return isNaN(num) ? s : num;\n }\n if (s === \"null\") {\n return null;\n }\n if (s === \"undefined\") {\n return undefined;\n }\n return s;\n};\n", "const RE_ESCAPE_XML_ENTITY = /[\"'&<>]/g;\n\nconst RE_XML_ENTITY = /&#?[0-9a-z]{2,5};/g;\n\nconst SUBST_XML_ENTITY: Record<string, string> = {\n amp: \"&\",\n gt: \">\",\n lt: \"<\",\n quot: '\"',\n nbsp: \" \",\n};\n\nconst ESCAPE_XML_ENTITY: Record<string, string> = {\n 34: \""\",\n 38: \"&\",\n 39: \"'\",\n 60: \"<\",\n 62: \">\",\n};\nconst FN_ESCAPE_XML_ENTITY = (m: string) => ESCAPE_XML_ENTITY[m.charCodeAt(0)];\n\nconst FN_XML_ENTITY = function (s0: string) {\n const s = s0.substring(1, s0.length - 1);\n return s[0] === \"#\" ? String.fromCharCode(+s.slice(1)) : SUBST_XML_ENTITY[s] || \" \";\n};\n\nexport const skipQoutes = (s: string, sym = '\"', sym2 = sym) =>\n s[0] === sym && s[s.length - 1] === sym2 ? s.slice(1, -1) : s;\n\nexport const decodeXmlEntities = (s?: string) => String(s ?? \"\").replace(RE_XML_ENTITY, FN_XML_ENTITY);\n\nexport const escapeXml = (s: string) => (!s ? \"\" : `${s}`.replace(RE_ESCAPE_XML_ENTITY, FN_ESCAPE_XML_ENTITY));\n", "import { Hash, XmlNode } from \"../../types\";\nimport { scalarParse } from \"../scalar/scalarParse\";\n\nimport { decodeXmlEntities, skipQoutes } from \"./utils\";\n\nconst defaultOpts = {\n RE_ATTRS: /([a-zA-Z][a-zA-Z0-9-:]*)(=\"[^\"]*\")?/g,\n RE_EMPTY: /^\\s*$/,\n RE_XML_COMMENT: /<!--((?!-->)[\\s\\S])*-->/g,\n RE_XML_TAG: /(<)(\\/?)([a-z][a-z0-9\\-_:.]*)((?:\\s+[a-zA-Z][a-z0-9-:]*(?:=\"[^\"]*\")?)*)\\s*(\\/?)>/gi,\n SINGLE_TAGS: { img: 1, input: 1, br: 1, hr: 1, col: 1, source: 1 } as Hash,\n};\n\nexport function xmlParserFactory(opts?: Partial<typeof defaultOpts>) {\n const { RE_XML_TAG, RE_EMPTY, RE_XML_COMMENT, RE_ATTRS, SINGLE_TAGS } = {\n ...defaultOpts,\n ...opts,\n } as typeof defaultOpts;\n\n const addNode = (c: XmlNode, tag: string, id: string) => {\n const node: XmlNode = { tag, id };\n (c.nodes ?? (c.nodes = [])).push(node);\n\n return node;\n };\n\n const parseAttrs = (node: XmlNode, s: string) => {\n if (!s) return;\n node.attrs = {};\n for (let e = RE_ATTRS.exec(s); e; e = RE_ATTRS.exec(s)) {\n const value = !e[2] ? true : scalarParse(decodeXmlEntities(skipQoutes(e[2].slice(1))));\n node.attrs[e[1]] = value;\n }\n };\n return (_s?: string): XmlNode[] => {\n let COUNTER = 0;\n const ctx: XmlNode[] = [{ tag: \"#root\", id: String(COUNTER) }];\n const s = String(_s).trim().replace(RE_XML_COMMENT, \"\");\n let lastIndex = 0;\n // head text omitted\n for (let e = RE_XML_TAG.exec(s); e; e = RE_XML_TAG.exec(s)) {\n // preceding text\n const text = e.index && s.slice(lastIndex, e.index);\n // closing tag\n if (e[2]) {\n if (text && !ctx[0].nodes?.length && (text === \" \" || !text.match(RE_EMPTY))) {\n ctx[0].text = decodeXmlEntities(text.trim());\n }\n if (ctx[0].tag !== e[3]) {\n throw new Error(\n ` XML Parse closing tag does not match at: ${String(e.index)} near ${e.input.slice(\n Math.max(e.index - 150, 0),\n e.index\n )}^^^^${e.input.slice(e.index, Math.min(e.index + 150, e.input.length))}`\n );\n }\n ctx.shift();\n } else {\n const elt = addNode(ctx[0], e[3], `X${String(++COUNTER)}`);\n parseAttrs(elt, e[4].trim());\n // not single tag\n if (!(e[5] || e[3] in SINGLE_TAGS)) {\n ctx.unshift(elt);\n if (ctx.length === 1) {\n throw new Error(`Parse error at: ${e[0]}`);\n }\n }\n }\n lastIndex = RE_XML_TAG.lastIndex;\n }\n // tail text omitted\n return ctx[0].nodes ?? [];\n };\n}\n", "import { xmlParserFactory } from \"./xmlParserFactory\";\n\n/**\n * Parses an XML string and returns an array of XmlNode objects.\n *\n * @param {_s} [string] The XML string to be parsed.\n * @returns {XmlNode[]} An array of XmlNode objects representing the XML nodes in the parsed string.\n */\nexport const xmlParse = xmlParserFactory();\n", "const CACHE = new Map();\n\nfunction upnum(r: number, n: number) {\n const rr = (r << 5) - r + n;\n return rr & rr;\n}\n\nconst COLON_NUM = \":\".charCodeAt(0);\n\nfunction stringHash(x: string) {\n let h = 0;\n if (CACHE.has(x)) {\n h = CACHE.get(x) as number;\n } else {\n for (let i = 0; i < x.length; i++) {\n h = upnum(h, x.charCodeAt(i));\n }\n CACHE.set(x, h);\n }\n return h;\n}\n\nexport class FingerprintMashine {\n r = 0;\n x?: any;\n $path?: Set<unknown>;\n\n get path() {\n return this.$path ?? (this.$path = new Set());\n }\n\n upNumber(n: number) {\n return (this.r = upnum(this.r, n));\n }\n\n upString(x: string) {\n return this.upNumber(stringHash(x));\n }\n\n upObject(x) {\n if (x.uid) return x.uid;\n\n if (x instanceof Date) return this.upNumber(x.getTime());\n\n if (this.path.size > 10 || this.path.has(x)) {\n return;\n }\n\n this.path.add(x);\n\n if (x instanceof Map) {\n this.upString(\"$$$Map$$$\");\n x.forEach((v, k) => {\n this.upString(k);\n this.upNumber(COLON_NUM);\n this.upAny(v);\n });\n } else if (x instanceof Set) {\n this.upString(\"$$$Set$$$\");\n x.forEach((v) => this.upAny(v));\n } else if (Array.isArray(x)) {\n this.upString(\"$$$Array$$$\");\n x.forEach((v) => this.upAny(v));\n } else {\n this.upString(\"$$$Object$$$\");\n for (const k in x) {\n if (Object.prototype.hasOwnProperty.call(x, k) && k[0] !== \"$\") {\n this.upString(k);\n this.upNumber(COLON_NUM);\n this.upAny(x[k]);\n }\n }\n }\n\n this.path.delete(x);\n\n return this.r;\n }\n upAny(x: any): void {\n if (x == null) {\n this.upString(String(x));\n } else if (typeof x === \"number\") {\n if (isNaN(x)) {\n this.upString(`$$$NaN$$$`);\n } else {\n this.upNumber(x);\n }\n } else if (typeof x === \"object\") {\n this.upObject(x);\n } else if (typeof x === \"string\") {\n this.upString(x);\n } else if (typeof x === \"boolean\") {\n this.upString(`$$$Boolean$$$${x}`);\n } else if (typeof x === \"function\") {\n // this.upString(`$$$Function$$$${x}`);\n } else {\n this.upString(String(x));\n }\n }\n\n do(x: any) {\n if (x == null) return x;\n\n if (typeof x !== \"object\") return x;\n\n if (Object.isFrozen(x)) return x;\n\n if (x.uid) return x.uid;\n\n if (x.$ctx) return x.$ctx.uid;\n\n this.r = 0;\n this.x = x;\n if (this.$path) {\n this.$path?.clear();\n }\n\n this.upObject(x);\n\n return this.r;\n }\n}\n\nconst FM = new FingerprintMashine();\n\nexport const objectFingerprint = (x: any) => FM.do(x);\n", "import { capitalize } from \"ultimus\";\n\nimport type { IComponent } from \"../../types\";\n\nexport function applyStateChangedToImpl(changes: Map<string, unknown>, impl: IComponent) {\n if (impl.__stateChanged) {\n impl.__stateChanged(changes);\n } else {\n changes.forEach((v, k) => {\n const setter = impl[`set${capitalize(k)}`];\n if (typeof setter === \"function\") {\n setter.call(impl, v);\n } else {\n impl[k] = v;\n }\n });\n }\n}\n", "import { Hash } from \"ultimus\";\nconst attributesToString = (v?: Hash): string => {\n if (typeof v === \"object\") {\n if (Array.isArray(v)) {\n return !v.length ? \"[]\" : `[${attributesToString(v[0]) ?? \"\"} x${String(v.length)}]`;\n }\n return `{${Object.keys(v).toString()}}`;\n }\n return v ?? \"\";\n};\n\nconst stringifyState = (attrs?: object | Hash) => {\n if (!attrs) {\n return \"\";\n }\n\n const r: string[] = [];\n Object.entries(attrs).forEach(([k, v]) => {\n if (v && k[0] !== \"$\") {\n r.push(` ${k}=\"${attributesToString(v)}\"`);\n }\n });\n\n return r.length ? r.join(\"\") : \"\";\n};\n\nexport const stringify = (T: any, tab = \"\"): string => {\n const { uid, displayName: tag = uid, component: impl, children } = T;\n\n const ssubs: string = children?.size ? [...children.values()].map((c) => stringify(c, ` ${tab}`)).join(\"\\n\") : \"\";\n\n return `${tab}<${tag}${stringifyState(impl)}${!ssubs ? \"/>\" : `>\\n${ssubs}\\n${tab}</${tag}>`}`;\n};\n", "import { capitalize, identity } from \"ultimus\";\nimport type { Delta, Fn, Hash, LogEntry, Proc, Uid } from \"ultimus/types\";\n\nimport type { IArrmatron, IManifestNode, IComponent, IPlatform } from \"../../types\";\nimport { objectFingerprint } from \"../utils/FingerprintMashine\";\nimport { applyStateChangedToImpl } from \"../utils/applyStateChangedToImpl\";\nimport { stringify } from \"../utils/stringify\";\n\n/**\n * The Arrmatron is the essential concept of the framework.\n * It creates a component instance, manages its state and keeps in touch with others.\n */\nexport class Arrmatron<T extends IManifestNode = IManifestNode> implements IArrmatron {\n readonly $component: IComponent;\n readonly root: IArrmatron;\n readonly scope: Arrmatron;\n\n $children?: Map<Uid, Arrmatron>;\n #isDone = false;\n #isInited = false;\n #fprints: Hash = {};\n #initialState: Hash = {};\n #listeners?: Set<(c: Arrmatron) => void>;\n #defered?: Array<(c: IArrmatron) => void> = [];\n #weak?: Map<string, number>;\n #refs?: Hash<IArrmatron>;\n #propFnMap?: Map<string, Proc>;\n\n constructor(\n readonly platform: IPlatform,\n protected readonly manifest: T,\n private _parent?: Arrmatron,\n scope?: Arrmatron\n ) {\n this.scope = scope ?? this;\n this.root = scope?.root ?? this;\n this.#initialState = this.manifest.resolveInitialProps(this);\n this.$component = this.createComponent(this.#initialState);\n\n if (this.refId) {\n // this.log('addReference', this.refId)\n this.refId.split(\",\").forEach((refId) => this.scope.addReference(refId, this));\n }\n }\n\n get parent(): IArrmatron | undefined {\n return this._parent;\n }\n\n get uid(): string {\n return this.manifest.uid;\n }\n\n get displayName(): string {\n return \"\uD83D\uDD39\";\n }\n\n createComponent(initials: Hash): IComponent {\n // by default, a component is just a plain object.\n return { ...initials };\n }\n\n // --- State\n\n // updates component state\n up(delta?: Delta | Promise<any> | null | void | unknown, force = false): void {\n if (!delta || this.#isDone) {\n return;\n }\n\n if (delta instanceof Promise) {\n const racer = this.raceCondition(`set`);\n delta.then((val) => racer(() => this.up(val)));\n return;\n }\n\n const changes = new Map<string, unknown>();\n Object.entries(delta).forEach(([k, v]) => {\n if (v instanceof Promise) {\n const isSpreading = !k || k.startsWith(\"...\");\n const racer = this.raceCondition(`set:${k}`);\n void v.then((val) => racer(() => this.up(isSpreading ? val : { [k]: val })));\n } else if (k && typeof v !== \"undefined\") {\n if (k[0] === \"$\") {\n if (this.$component[k] !== v) {\n changes.set(k.slice(1), v);\n }\n } else {\n const fprint = objectFingerprint(v);\n if (!(k in this.#fprints) || fprint !== this.#fprints[k]) {\n this.#fprints[k] = fprint;\n changes.set(k, v);\n // } else {\n // if (v && typeof v === \"object\" && v !== this.get(k)) {\n\n // this.log('same skip', k, '\\n ', v, '==', this.get(k), '\\n ', this.#fprints[k], '==', fprint)\n // }\n }\n }\n }\n });\n\n if (changes.size || force) {\n applyStateChangedToImpl(changes, this.$component);\n this.touch();\n }\n }\n\n // do recontent and notify all\n touch() {\n this.recontent();\n this.notify();\n }\n\n /**\n * Retrieves the component value associated with the given property ID.\n * Dot-sepated pathes to properties are supported.\n * Supported getters like `get<Name>()`.\n * use '@' prefix to access platform resources.\n * Functional values are bounded and cached.\n *\n * @param {string} propId - The ID of the property.\n * @return {unknown} The value associated with the property ID.\n */\n get(propId: string): unknown {\n const map = this.#propFnMap ?? (this.#propFnMap = new Map());\n if (map.has(propId)) {\n return map.get(propId)();\n }\n\n let fn: Fn | null = null;\n const impl = this.$component;\n const instant = impl[propId];\n\n if (instant && typeof instant === \"function\") {\n const bound = instant.bind(impl);\n fn = () => bound;\n } else if (impl.__getStateProperty) {\n fn = () => (impl.__getStateProperty as (p: string) => unknown)(propId);\n } else {\n const [pk, ...path] = propId.split(\".\");\n if (pk === \"R\") {\n const val = this.platform.getResource(path) ?? null;\n fn = () => val;\n } else {\n const gettr = impl[`get${capitalize(pk)}`];\n const fn0 =\n typeof gettr === \"function\" ? () => gettr.call(impl) ?? null : () => impl[pk] ?? null;\n\n fn = !path.length ? fn0 : () => path.reduce((r, p) => r?.[p] ?? null, fn0());\n }\n }\n\n map.set(propId, fn);\n\n return fn();\n }\n\n getFromScope(propId: string): unknown {\n return this.scope.get(propId);\n }\n\n // --- Left Arrow.\n\n notify() {\n this.#listeners?.forEach((fn) => fn(this));\n }\n\n // add listener to componet state changes\n subscribe(handler: (src: Arrmatron) => any): Proc {\n const listeners = this.#listeners ?? (this.#listeners = new Set());\n listeners.add(handler);\n return () => {\n listeners.delete(handler);\n };\n }\n\n // --- Right Arrow.\n\n // emits action event to this component\n emit(key: string, data: Delta): void {\n if (this.#isDone) return;\n\n try {\n if (key.endsWith(\")\")) {\n const [refId, target] = key.split(\"(\")[0].split(\".\");\n const ref = this.getByRef(refId);\n if (!ref) {\n throw new Error(`No such reference: ${refId}`);\n }\n\n const impl = ref.$component;\n\n const method = impl[target];\n if (!(typeof method === \"function\")) {\n throw new Error(`Not a method: ${refId}.${target}()`);\n }\n\n const result = method.call(impl, data);\n\n ref.up(result);\n\n // this.log(`-> ${refId}.${target}(data)`, data, impl);\n } else {\n let [refId, target] = key.split(\".\");\n if (!target) {\n target = refId;\n refId = \"this\";\n }\n\n const ref = this.getByRef(refId);\n if (!ref) {\n throw new Error(`No such reference: ${refId}`);\n }\n\n ref.up(target === \"*\" ? data : { [target]: data });\n\n // this.log(`-> ${refId}.${target} = `, data);\n }\n } catch (ex) {\n this.logError(`emit ${key}:`, ex);\n }\n return;\n }\n // --- life-cycle.\n\n // Done hook.\n done() {\n if (this.#isDone) {\n return;\n }\n this.#isDone = true;\n\n this.children?.forEach((c) => c.done());\n\n this.#defered?.forEach((f) => f(this));\n this.#defered = undefined;\n\n this._parent?.children?.delete(this.uid);\n this._parent = undefined;\n }\n\n // register callback to be called on done\n defer(fn: (c: IArrmatron) => void) {\n if (fn && typeof fn === \"function\") {\n (this.#defered ?? (this.#defered = [])).push(fn);\n }\n }\n\n private settleAsChild() {\n if (!this.#isInited) {\n this.#isInited = true;\n\n this.initConnectors();\n\n this.up(this.#initialState, true);\n\n this.up(this.$component.__init?.(this));\n } else {\n void this.up(this.manifest.resolveProps(this), true);\n }\n }\n\n // --- Content.\n\n // map of children contexts\n get children(): Map<Uid, Arrmatron> | undefined {\n return this.$children;\n }\n\n // map of chidren of its node\n get contentManifests() {\n return this.manifest.getSubNodes(this.platform);\n }\n\n // actual scope for re-content\n get recontentScope() {\n return this.scope;\n }\n\n // perform children instantiation and updates\n private recontent() {\n const nodes = this.contentManifests;\n\n this.platform.redraw(this, this.root);\n\n this.children?.forEach((e, uid) => {\n if (!nodes?.get(uid)) {\n e.done();\n }\n });\n\n const children = new Map<Uid, Arrmatron>();\n\n nodes?.forEach((node: IManifestNode, uid: Uid) => {\n const e =\n this.$children?.get(uid) ?? node.createArrmatron(this.platform, this, this.recontentScope);\n children.set(e.uid, e);\n });\n\n this.$children = children;\n\n for (const ch of children.values()) {\n ch.settleAsChild();\n }\n }\n\n // --- Referencing.\n\n get refId() {\n return this.manifest.refId;\n }\n\n // gets any context instance in current or upper scope by key\n getByRef(refId: string): IArrmatron | undefined {\n if (!refId) return undefined;\n\n if (refId === \"this\") {\n return this;\n }\n const local = this.#refs?.[refId];\n if (local) {\n return local;\n }\n return this.parent?.getByRef(refId);\n }\n\n private addReference(refId: string, c: IArrmatron) {\n (this.#refs ?? (this.#refs = {}))[refId] = c;\n }\n\n // --- Connectors -------------------------\n\n private initConnectors() {\n if (this.manifest.connectors) {\n for (const [key, pipes] of this.manifest.connectors.entries()) {\n const [srcIds, targetPropName] = key.split(\"|\");\n const [refId, sourcePropName] = srcIds.split(\".\");\n\n const ref = this.parent?.getByRef(refId) as Arrmatron;\n if (!ref) {\n this.logError(`Connect: No such ref: ${refId}`);\n continue;\n }\n\n if (!sourcePropName) {\n this.logError(`Connect: No Source Property Name: ${refId}`);\n continue;\n }\n\n const applicator = targetPropName ? (rr: any) => ({ [targetPropName]: rr }) : identity;\n\n this.defer(\n (() => {\n let popre;\n return ref.subscribe(async (source: Arrmatron) => {\n try {\n const val = await source.get(sourcePropName);\n const fingerprint = objectFingerprint(val);\n\n if (popre !== undefined && popre === fingerprint) return;\n\n popre = fingerprint;\n const r = applicator(pipes(this, val));\n this.up(r as Delta);\n } catch (ex) {\n source.logError(\"Notify \", ex);\n }\n });\n })()\n );\n\n // hot subscription\n Object.assign(\n this.#initialState,\n applicator(pipes(ref, sourcePropName ? ref.get(sourcePropName) : ref.$component))\n );\n }\n }\n }\n\n // --- Routines -------------------------\n\n raceCondition(key: string) {\n const COUNTERS = this.#weak ?? (this.#weak = new Map<string, number>());\n let counter = 1 + (COUNTERS.get(key) ?? 0);\n COUNTERS.set(key, counter);\n return (fn: () => unknown) => {\n if (counter === COUNTERS.get(key)) {\n counter = 0;\n return fn();\n }\n };\n }\n\n log(val: any, ...args: unknown[]) {\n this.platform.log({\n level: \"log\",\n source: `${this.displayName}:${this.uid}`,\n message: val,\n params: args,\n });\n return val;\n }\n\n logError(error: any, ...args: unknown[]) {\n this.platform.log({\n level: \"error\",\n source: `${this.displayName}:${this.uid}`,\n error,\n message: `${String(error.message || error)}\\n${this.toString().slice(0, 120)}`,\n params: args,\n });\n }\n\n toast = (t: LogEntry) => {\n this.platform.toast(t, this);\n };\n\n toString(): string {\n return stringify(this);\n }\n}\n", "import type { IArrmatron } from \"arrmatura/types\";\nimport { scalarParse, gettus } from \"ultimus\";\nimport type { ExpressionText, Fn, StringHash } from \"ultimus/types\";\n\ntype PipeFn = (c: IArrmatron, argValue: unknown) => unknown;\n\nconst OP_SHORTCUTS: StringHash = {\n \"&&\": \"|and:\",\n \"==\": \"|equals:\",\n \"!=\": \"|notEquals:\",\n \"||\": \"|or:\",\n \"<\": \"|less:\",\n \"[\": \"|dot:\",\n \"]\": \"\",\n \">\": \"|greater:\",\n \"??\": \"|coalesce:\",\n \"?\": \"|then:\",\n};\n\nconst withNoPipes = (_: unknown, v: unknown) => v;\n\nconst isConstKey = (key: string) =>\n \"'+-0123456789\".includes(key[0]) || key === \"true\" || key === \"false\";\n\nexport function compileConstant(a: string) {\n const vv = scalarParse(a[0] === \"'\" ? a.slice(1, a.length - 1) : a);\n return () => vv;\n}\n\nconst compilePropGet = (key: string) => {\n return (c: IArrmatron) => c.getFromScope(key);\n};\n\nconst compileArgument = (a: string, strings?: string[]) => {\n if (a[0] === \"!\") {\n const getter = compilePropGet(a.slice(1));\n return (c: IArrmatron) => !getter(c);\n }\n\n if (a[0] === \"#\" && a[1] === \"#\") {\n const vv = strings?.[Number(a.slice(2))];\n return () => vv;\n }\n\n if (isConstKey(a)) return compileConstant(a);\n\n return compilePropGet(a);\n};\n\nconst splitExpression = (v: ExpressionText) =>\n v\n .trim()\n .replace(/(&&|!=|==|>|<|\\[|\\]|\\|\\||\\?\\??)/g, (_, s) => `${OP_SHORTCUTS[s]}`)\n .split(\"|\")\n .map((s) => s.trim());\n\nfunction withPipes(pipes: string[]) {\n if (!pipes.length) return withNoPipes;\n\n const compiledPipes = pipes.map((key) => {\n const strings: string[] = [];\n\n const expr = key.replaceAll(/'[^']*'/g, (s) => {\n strings.push(s.slice(1, -1));\n return `##${strings.length - 1}`;\n });\n\n const [pipeId, ...args] = expr.split(\":\").map((s) => s.trim());\n return {\n pipeId,\n args: args.map((a) => compileArgument(a, strings)),\n };\n });\n\n return (c: IArrmatron, initialValue: unknown) =>\n compiledPipes.reduce((value, { pipeId, args }) => {\n try {\n const fn = c.platform.getFunction(pipeId);\n if (typeof fn !== \"function\") {\n throw new Error(`${fn != null ? \"must be a function\" : \"not found\"}`);\n }\n if (value instanceof Promise) {\n return value.then((val) => {\n const args0 = [val, ...args.map((fn) => fn(c))];\n const result = fn.apply(c, args0);\n return result;\n });\n } else {\n const args0 = [value, ...args.map((fn) => fn(c))];\n return fn.apply(c, args0);\n }\n } catch (ex) {\n c.logError(`ERROR: Function ${pipeId || \"<empty>\"}`, ex);\n return value;\n }\n }, initialValue);\n}\n\nfunction withHardValue(hardValue: ExpressionText, pipec: PipeFn): PipeFn {\n if (!hardValue || hardValue === \"it\") return pipec;\n\n if (hardValue.startsWith(\"it.\")) {\n const propKey = hardValue.slice(3);\n return (c: IArrmatron, ini: any) => pipec(c, gettus(ini, propKey));\n }\n\n const iniFn = isConstKey(hardValue) ? compileConstant(hardValue) : compilePlaceholder(hardValue);\n\n return (c: IArrmatron) => pipec(c, iniFn(c));\n}\n\nexport function compilePipeExpression(v: ExpressionText) {\n if (v.endsWith(\")\")) {\n const parts = v.slice(0, -1).split(\"(\");\n return compilePipeExpression(`${parts[0]}=${parts[1]}`);\n }\n\n const [_key, ...pipes] = splitExpression(v);\n const [key, hardValue] = _key.split(\"=\").map((s) => s.trim());\n\n return { key, pipec: withHardValue(hardValue, withPipes(pipes)) };\n}\n\nexport function compilePlaceholder(expr: string): Fn {\n const [key, ...pipesExpressions] = splitExpression(expr);\n\n const pipec = withPipes(pipesExpressions);\n\n const fn = compileArgument(key);\n\n return (c) => pipec(c as IArrmatron, fn(c));\n}\n\nexport function compileJsExpression(x: string) {\n return new Function(\"c\", x.replaceAll(/[^'a-z]([a-z][a-z0-9-.]+)/gi, 'c.prop(\"$1\")'));\n}\n", "import { Fn } from \"../../types\";\nimport { str } from \"../string\";\n\nconst RE_PLACEHOLDER = /\\{([^}]+)\\}/g;\n\n/**\n * Creates a string interpolator function that replaces placeholders in the input string\n * with the string representation of the evaluated expressions.\n *\n * @param {string} template - The input string containing placeholders to replace.\n * @param {(expr: string) => Fn} placeholderFactory - A function that produces a function to evaluate an expression.\n * @return {(...args: any[]) => string} A function that, given arguments, evaluates the expressions and replaces the placeholders.\n */\nexport function createStringInterpolator(template: string, placeholderFactory: (expr: string) => Fn) {\n const fnx: Fn[] = [];\n\n const pattern = template.replace(RE_PLACEHOLDER, (_: string, expr: string) => {\n fnx.push(placeholderFactory(expr.trim()));\n return `{$$$}`;\n });\n\n if (!fnx.length) return () => pattern;\n\n const chunks = pattern.split(/\\{\\$\\$\\$\\}/g);\n const tail = chunks.pop();\n return (...args: any[]) =>\n chunks.map((prefix: string, index: number) => `${prefix}${str(fnx[index](...args))}`).join(\"\") + tail;\n}\n", "import { createStringInterpolator } from \"ultimus/src/parsing/createStringInterpolator\";\n\nimport {\n compileConstant,\n compileJsExpression,\n compilePlaceholder,\n} from \"../utils/compileExpression\";\n// \\{\\{([\\w\\.]+)\\}\\}\n\nconst CACHE = new Map();\n\nfunction compileExpression(v: unknown) {\n if (typeof v !== \"string\") return () => v;\n\n if (v.startsWith(\"js:\")) return compileJsExpression(v.slice(3));\n\n if (v.includes(\"{\")) {\n const vCutOne = v.slice(1, -1);\n if (v[0] === \"{\" && v[v.length - 1] === \"}\" && !vCutOne.includes(\"{\")) {\n return compilePlaceholder(vCutOne);\n }\n return createStringInterpolator(v.replace(/\\s+/g, \" \"), compilePlaceholder);\n }\n return compileConstant(v);\n}\n\nexport const resolveExpression = (x: unknown) => {\n return CACHE.has(x) ? CACHE.get(x) : CACHE.set(x, compileExpression(x)).get(x);\n};\n", "import type { IPlatform, IArrmatron, IManifestNode } from \"arrmatura/types\";\nimport { nextId } from \"ultimus\";\nimport type { Delta, ExpressionText, Hash, Uid } from \"ultimus/types\";\n\nimport { compilePipeExpression } from \"../utils/compileExpression\";\n\nimport { Arrmatron } from \"./Arrmatron\";\nimport { resolveExpression } from \"./resolveExpression\";\n\ntype PropertyResolver = (c: IArrmatron, acc: Delta) => Delta;\n\ntype PropertyGetter = (c: IArrmatron) => unknown;\n\n/**\n * ManifestNode is a abstract factory for Arrmatron.\n *\n * Each specific kind of Arrmatron has its own descending implementation of ManifestNode.\n */\nexport abstract class ManifestNode implements IManifestNode {\n protected $content?: Map<Uid, IManifestNode> | undefined;\n uid: Uid;\n refId?: string;\n private readonly propertyResolvers: PropertyResolver[] = [];\n private initialState: Hash<(c: IArrmatron) => any> = {};\n connectors?: Map<string, (c: IArrmatron, x: unknown) => unknown>;\n tag: any;\n\n constructor(xid: Uid) {\n this.uid = `${nextId(\"N\")}:${xid}`;\n }\n\n abstract get EntitronConstructor(): new (\n platform: IPlatform,\n node: typeof this,\n parent?: Arrmatron,\n scope?: Arrmatron\n ) => Arrmatron;\n\n /**\n * Create a context object.\n *\n * @param {IPlatform} platform - The platform object.\n * @param {IArrmatron} parent - The parent context object (optional).\n * @param {IArrmatron} scope - The scope context object (optional).\n * @return {IArrmatron} The created context object.\n */\n createArrmatron(platform: IPlatform, parent?: Arrmatron, scope?: Arrmatron): Arrmatron {\n return new this.EntitronConstructor(platform, this, parent, scope);\n }\n\n getSubNodes(_platform: IPlatform): Map<Uid, IManifestNode> | undefined {\n return this.$content;\n }\n\n addPropertyResolver(getter: PropertyGetter, propKey: string) {\n this.propertyResolvers.push((c: IArrmatron, delta: Delta) => {\n delta[propKey] = getter(c);\n return delta;\n });\n return this;\n }\n\n private addDataPropertyResolver(getter: PropertyGetter, propKey: string) {\n this.propertyResolvers.push((c: IArrmatron, delta: Delta) => {\n const val = getter(c);\n delta.data = Object.assign((delta.data as object) || {}, {\n [propKey]: val,\n });\n return delta;\n });\n return this;\n }\n\n private addPropertiesResolver(getter: PropertyGetter) {\n this.propertyResolvers.push((c: IArrmatron, delta: Delta) => {\n const value = getter(c);\n if (value && typeof value === \"object\") {\n Object.entries(value).forEach(([key, val]) => {\n delta[key] = val;\n });\n }\n return delta;\n });\n return this;\n }\n\n addConnector(expr: ExpressionText, propName: string) {\n const { key, pipec } = compilePipeExpression(expr);\n (this.connectors ?? (this.connectors = new Map())).set(`${key}|${propName}`, pipec);\n }\n\n private addEmitter(expr: ExpressionText, k: string) {\n const { key, pipec } = compilePipeExpression(expr);\n const rkey = key + (expr.endsWith(\")\") ? \"()\" : \"\");\n this.initialState[k] = (c) => (data: unknown) => c.scope?.emit(rkey, pipec(c, data) as Delta);\n }\n\n resolveInitialProps(c: IArrmatron) {\n return this.propertyResolvers.reduce(\n (delta, resolver) => resolver(c, delta),\n Object.entries(this.initialState).reduce((acc, [key, fn]) => {\n acc[key] = fn(c);\n return acc;\n }, {} as Hash)\n );\n }\n\n resolveProps(c: IArrmatron) {\n return this.propertyResolvers.reduce((delta, resolver) => resolver(c, delta), {});\n }\n\n compileAttribute(k: string, v: unknown) {\n if (k.startsWith(\"data-\")) {\n this.addDataPropertyResolver(resolveExpression(v), k.slice(5));\n } else if (k === \"Ref\") {\n this.refId = String(v);\n } else if (k === \"Props\") {\n const sv = String(v);\n if (sv.startsWith(\"<-\")) {\n this.addConnector(sv.slice(2), \"\");\n } else {\n this.addPropertiesResolver(resolveExpression(sv));\n }\n } else {\n if (typeof v !== \"string\") {\n this.initialState[k] = () => v;\n } else {\n if (!v.includes(\"{\")) {\n if (v.startsWith(\"<-\")) {\n if (v.endsWith(\".This\")) {\n const refId = v.slice(2, -5).trim();\n this.initialState[k] = (c) => c.getByRef(refId)?.$component;\n } else {\n this.addConnector(v.slice(2), k);\n }\n } else if (v.startsWith(\"->\")) {\n this.addEmitter(v.slice(2).trim() || \"*\", k);\n } else {\n this.initialState[k] = () => v;\n }\n } else {\n this.addPropertyResolver(resolveExpression(v), k);\n }\n }\n }\n }\n\n compileAttributes(attrs?: Hash) {\n if (attrs) {\n Object.entries(attrs).forEach((keyValue) => this.compileAttribute(...keyValue));\n }\n }\n}\n", "import type { EContent, IPlatform } from \"arrmatura/types\";\nimport { xmlParse } from \"ultimus\";\nimport type { Hash, XmlNode } from \"ultimus/types\";\n\nimport { Arrmatron } from \"../core/Arrmatron\";\nimport { ManifestNode } from \"../core/ManifestNode\";\n\nimport { CCompositeNode } from \"./composition\";\n\nclass RootCtx extends Arrmatron<CCompositeNode> {\n get displayName(): string {\n return `ROOT`;\n }\n\n get recontentScope(): Arrmatron {\n return this;\n }\n\n slotContent(_slotId?: string): EContent | undefined {\n return undefined;\n }\n\n createComponent(initials: Hash) {\n return this.platform.createComponent({}, initials, this);\n }\n}\n\nexport class CRootNode extends ManifestNode {\n slotContent: Hash<EContent>;\n nodes?: XmlNode[\"nodes\"];\n\n constructor(private template: string) {\n super(\"R0\");\n this.slotContent = {};\n }\n\n getSubNodes(platform: IPlatform) {\n return platform.getCompiledNodes(xmlParse(this.template));\n }\n\n getSlotContent(_platform: IPlatform, _slotId?: string) {\n return undefined;\n }\n\n get EntitronConstructor() {\n return RootCtx;\n }\n}\n", "import { mapEntries } from \"ultimus\";\n\nexport const narrowData = (data: any) => {\n if (!data) {\n return [];\n }\n if (typeof data === \"string\") return data.split(\",\").map((id) => ({ id, name: id }));\n if (Array.isArray(data)) return data;\n if (typeof data[Symbol.iterator] === \"function\") return [...data];\n if (typeof data === \"object\")\n return mapEntries(data, (key, value) =>\n typeof value === \"object\" ? { ...value, id: key } : { id: key, name: String(value) }\n );\n return [{ id: String(data), name: String(data) }];\n};\n", "import type { EContent, IManifestNode, IPlatform } from \"arrmatura/types\";\nimport type { Datum, Delta, Hash, Uid, XmlNode } from \"ultimus/types\";\n\nimport { Arrmatron } from \"../core/Arrmatron\";\nimport { ManifestNode } from \"../core/ManifestNode\";\nimport { compilePlaceholder } from \"../utils/compileExpression\";\nimport { narrowData } from \"../utils/narrowData\";\n\nclass Iterative extends Arrmatron<CForNode> {\n pkHash: Hash<Datum> = {};\n\n get displayName(): string {\n return \"\uD83D\uDD39each\";\n }\n\n get contentManifests() {\n const each: any = narrowData(this.$component.each);\n const itemNode = this.manifest.getItemCtxNode(this.platform);\n const nodes: Map<Uid, IManifestNode> = new Map();\n this.pkHash = {};\n if (each?.length) {\n if (!each.forEach) {\n throw new Error(`[each] Items has no forEach() ${each.toString()}`);\n }\n each.forEach((_datum: Datum, index: number) => {\n const datum = typeof _datum === \"string\" ? { id: _datum } : _datum;\n let id = datum.id;\n\n if (id == null) {\n this.logError(\"ERROR: empty item id: \", datum);\n id = String(index);\n }\n\n const pk = String(id);\n if (this.pkHash[pk]) {\n this.logError(`ERROR: duplicate item id : ${pk} (skipped)`, datum);\n return;\n }\n\n this.pkHash[pk] = datum;\n\n const inode = itemNode\n .cloneWithDatum(datum, this.platform)\n .addPropertyResolver(() => this.pkHash[pk], itemNode.itemName);\n\n nodes.set(inode.uid, inode);\n });\n }\n return nodes;\n }\n}\n\nexport class CForNode extends ManifestNode {\n #itemNode?: CItemNode;\n #itemName: string;\n #xmlNode: XmlNode;\n constructor(xmlNode: XmlNode, [itemName, prep, expr = prep]: string[]) {\n super(xmlNode.id);\n\n this.#xmlNode = xmlNode;\n\n this.#itemName = itemName.startsWith(\"@\") ? itemName.slice(1) : itemName;\n\n if (expr[0] === \"<\" && expr[1] === \"-\") {\n this.addConnector(expr.slice(2), \"each\");\n } else {\n this.addPropertyResolver(compilePlaceholder(expr), \"each\");\n }\n }\n\n getItemCtxNode(platform: IPlatform) {\n return (\n this.#itemNode ??\n (this.#itemNode = new CItemNode(\n this.#xmlNode.id,\n this.#itemName,\n platform.getCompiledNodes([this.#xmlNode])\n ))\n );\n }\n\n get EntitronConstructor() {\n return Iterative;\n }\n}\n\nclass IterativeItem extends Arrmatron<CItemNode> {\n get recontentScope(): Arrmatron {\n return this;\n }\n\n get displayName(): string {\n return \"\uD83D\uDD39ui:for:item\";\n }\n\n emit(key: string, data: Delta) {\n return this.scope.emit(key, data);\n }\n\n get(propId: string) {\n const iName: string = this.manifest.itemName;\n const value =\n propId.startsWith(`${iName}.`) || propId === iName\n ? super.get(propId)\n : this.scope.get(propId);\n // this.log(propId, value);\n return value;\n }\n}\n\nclass CItemNode extends ManifestNode {\n itemName: string;\n constructor(id: string, itemName: string, content?: EContent) {\n super(id);\n this.itemName = itemName;\n this.$content = content;\n }\n\n cloneWithDatum(datum: Datum, platform: IPlatform) {\n const uid = `${String(this.uid)}#${datum.id}`;\n const c = new CItemNode(uid, this.itemName, this.getSubNodes(platform));\n c.uid = uid;\n return c;\n }\n\n get EntitronConstructor() {\n return IterativeItem;\n }\n}\n", "import type { EContent, IManifestNode, IPlatform } from \"arrmatura/types\";\nimport type { Hash, XmlNode } from \"ultimus/types\";\n\nimport { Arrmatron } from \"../core/Arrmatron\";\nimport { ManifestNode } from \"../core/ManifestNode\";\n\nexport class Composite extends Arrmatron<CCompositeNode> {\n get displayName(): string {\n return `\uD83D\uDCA0${this.manifest.tag}`;\n }\n\n get recontentScope(): Arrmatron {\n return this;\n }\n\n slotContent(slotId?: string): EContent | undefined {\n return this.manifest.getSlotContent(this.platform, slotId);\n }\n\n createComponent(initials: Hash) {\n return this.platform.createComponent(this.manifest.tag, initials, this);\n }\n}\n\nexport class CCompositeNode extends ManifestNode {\n slotContent: Hash<EContent> | null = null;\n tag: string;\n nodes?: XmlNode[\"nodes\"];\n #content?: Map<string, IManifestNode>;\n\n constructor({ id, tag, attrs, nodes }: XmlNode) {\n super(id);\n this.tag = tag;\n this.nodes = nodes;\n this.compileAttributes(attrs);\n }\n\n getSlotContent(platform: IPlatform, slotId?: string): EContent | undefined {\n if (!this.slotContent) {\n const slots = this.nodes?.reduce<Hash<XmlNode[]>>((groups, e) => {\n let gId = \"default\";\n let isContainer = false;\n if (e.tag.startsWith(`${this.tag}:`)) {\n gId = e.tag.split(\":\")[1];\n isContainer = true;\n }\n groups[gId] = (groups[gId] || []).concat(isContainer ? e.nodes ?? [] : e);\n return groups;\n }, {});\n\n this.slotContent = Object.entries(slots ?? {}).reduce<Hash<EContent>>(\n (groups, [gId, nodes]) => {\n groups[gId] = platform.getCompiledNodes(nodes);\n return groups;\n },\n {}\n );\n }\n\n return this.slotContent[slotId || \"default\"] ?? undefined;\n }\n\n getSubNodes(platform: IPlatform) {\n return this.#content ?? (this.#content = platform.getCompiledNodes(this.tag));\n }\n\n get EntitronConstructor() {\n return Composite;\n }\n}\n", "import type { EContent, IArrmatron, IPlatform } from \"arrmatura/types\";\nimport type { XmlNode } from \"ultimus/types\";\n\nimport { Arrmatron } from \"../core/Arrmatron\";\nimport { ManifestNode } from \"../core/ManifestNode\";\nimport { compilePlaceholder } from \"../utils/compileExpression\";\n\nimport { Composite } from \"./composition\";\n\nclass Conditional extends Arrmatron<CIfNode> {\n get contentManifests() {\n const branches = this.manifest.getBranches(this.platform);\n return this.$component.condition ? branches.then : branches.else;\n }\n\n get displayName(): string {\n return \"\uD83D\uDD39if\";\n }\n}\n\nexport class CIfNode extends ManifestNode {\n #xml: XmlNode;\n #branches?: { then?: EContent; else?: EContent };\n constructor(xml: XmlNode, expr: string) {\n super(xml.id);\n this.#xml = xml;\n this.compileCondition(expr);\n }\n\n get EntitronConstructor() {\n return Conditional;\n }\n\n getBranches(platform: IPlatform) {\n if (this.#branches) {\n return this.#branches;\n }\n\n this.#branches = {};\n\n const { nodes } = this.#xml;\n\n let $then: XmlNode[] | undefined = [this.#xml];\n if (nodes?.length) {\n const ifElse = nodes.find((e) => e.tag === \"Else\");\n const ifThen = nodes.find((e) => e.tag === \"Then\");\n if (ifElse) {\n this.#branches.else = ifElse.nodes ? platform.getCompiledNodes(ifElse.nodes) : undefined;\n $then = ifThen\n ? ifThen.nodes\n : [\n Object.assign(this.#xml, {\n nodes: nodes.filter((e) => e !== ifElse),\n }),\n ];\n } else if (ifThen) {\n $then = ifThen.nodes;\n }\n }\n this.#branches.then = $then ? platform.getCompiledNodes($then) : undefined;\n\n return this.#branches;\n }\n\n compileCondition(expr: string): void {\n if (expr[0] === \"<\" && expr[1] === \"-\") {\n this.addConnector(expr.slice(2), \"condition\");\n } else if (expr.slice(0, 5) === \"slot(\") {\n const slotId = expr.slice(5, -1);\n // DO NOT place inside iterations.\n this.addPropertyResolver(\n (c: IArrmatron) => !!(c.scope as Composite).slotContent?.(slotId)?.size,\n \"condition\"\n );\n } else {\n const resolver = compilePlaceholder(expr);\n this.addPropertyResolver((c) => !!resolver(c), \"condition\");\n }\n }\n}\n", "import { Fn, XmlNode } from \"ultimus\";\n\nimport { Arrmatron } from \"../core/Arrmatron\";\nimport { ManifestNode } from \"../core/ManifestNode\";\nimport { objectFingerprint } from \"../utils/FingerprintMashine\";\n\nclass Connector extends Arrmatron<ConnectorNode> {\n prevkey: any;\n\n /**\n * Triggers an with changes after a specified timeout.\n *\n * @return {void} No return value.\n */\n touch() {\n super.touch();\n\n const { trigger, data, change } = this.$component;\n const hasTrigger = \"trigger\" in this.$component;\n\n if (hasTrigger && trigger == null) return;\n\n const key = hasTrigger ? trigger : data;\n const fprint = objectFingerprint(key);\n const changed = !(\"prevkey\" in this) || this.prevkey != fprint;\n\n if (!changed) return;\n\n this.prevkey = fprint;\n\n (change as Fn)?.(data);\n }\n\n get displayName(): string {\n return \"\uD83D\uDD39Connector\";\n }\n}\n\nexport class ConnectorNode extends ManifestNode {\n constructor({ attrs, id }: XmlNode) {\n super(id);\n this.compileAttributes(attrs);\n }\n\n get EntitronConstructor() {\n return Connector;\n }\n}\n", "import { IPlatform } from \"arrmatura/types\";\nimport type { Hash, XmlNode } from \"ultimus/types\";\n\nimport { Arrmatron } from \"../core/Arrmatron\";\nimport { ManifestNode } from \"../core/ManifestNode\";\n\nclass NativeElementEntitron extends Arrmatron<CElementNode> {\n get displayName(): string {\n return this.manifest.tag;\n }\n\n createComponent(initials: Hash) {\n return this.platform.createComponent({ tag: this.manifest.tag, native: true }, initials, this);\n }\n}\n\nexport class CElementNode extends ManifestNode {\n #nodes: XmlNode[] | undefined;\n\n constructor({ id, tag, attrs, nodes, text }: XmlNode) {\n super(id);\n this.tag = tag;\n this.compileAttributes(attrs);\n if (text) {\n this.compileAttribute(\"#text\", text);\n }\n this.#nodes = nodes;\n }\n\n getSubNodes(platform: IPlatform) {\n return this.#nodes ? platform.getCompiledNodes(this.#nodes) : undefined;\n }\n\n get EntitronConstructor() {\n return NativeElementEntitron;\n }\n}\n", "import type { IPlatform } from \"arrmatura/types\";\nimport type { XmlNode } from \"ultimus/types\";\n\nimport { Arrmatron } from \"../core/Arrmatron\";\nimport { ManifestNode } from \"../core/ManifestNode\";\n\nexport class CFragmentNode extends ManifestNode {\n #nodes: XmlNode[] | undefined;\n\n constructor({ id, nodes }: XmlNode) {\n super(id);\n this.#nodes = nodes;\n }\n\n getSubNodes(platform: IPlatform) {\n return this.#nodes ? platform.getCompiledNodes(this.#nodes) : undefined;\n }\n\n get EntitronConstructor() {\n return Arrmatron;\n }\n}\n", "import type { XmlNode } from \"ultimus/types\";\n\nimport { Arrmatron } from \"../core/Arrmatron\";\nimport { ManifestNode } from \"../core/ManifestNode\";\n\nclass DynamicTag extends Arrmatron<CDynamicTagNode> {\n get displayName(): string {\n return \"dynamics\";\n }\n\n get contentManifests() {\n const tag = this.$component.tag;\n const uid = `${this.uid}:${String(tag ?? \"\")}`;\n return new Map([\n [\n uid,\n Object.assign(this.platform.getCompiledNodes({ ...this.manifest.xml, tag } as XmlNode), {\n uid,\n }),\n ],\n ]);\n }\n}\n\nexport class CDynamicTagNode extends ManifestNode {\n xml: XmlNode & { tag: string };\n\n constructor(xml: XmlNode, expr: string) {\n super(xml.id);\n this.compileAttribute(\"tag\", expr);\n this.xml = xml;\n }\n\n get EntitronConstructor() {\n return DynamicTag;\n }\n}\n", "import type { EContent, IPlatform } from \"arrmatura/types\";\nimport type { Hash, XmlNode } from \"ultimus/types\";\n\nimport { Arrmatron } from \"../core/Arrmatron\";\nimport { ManifestNode } from \"../core/ManifestNode\";\n\nexport class Selector extends Arrmatron<CSelectorNode> {\n get displayName(): string {\n return `\uD83D\uDCA0Selector`;\n }\n\n /**\n * Gets the content of the function.\n *\n * @return {any} The content of the function.\n */\n get contentManifests() {\n const cases = this.manifest.getCases(this.platform);\n const onKey = this.$component.On as string;\n const matchedCase = cases?.[onKey];\n if (!matchedCase) {\n this.log(\"unmatched case\", onKey, cases);\n }\n return matchedCase ?? cases?.[\"default\"] ?? Object.values(cases)[0];\n }\n}\n\nexport class CSelectorNode extends ManifestNode {\n cases: Hash<EContent> | null = null;\n key = \"\";\n nodes?: XmlNode[\"nodes\"];\n\n constructor({ id, tag, attrs, nodes }: XmlNode) {\n super(id);\n this.tag = tag;\n this.nodes = nodes;\n this.compileAttributes(attrs);\n }\n\n /**\n * Retrieves the cases nodes for a component.\n *\n * @param {IPlatform} platform - The platform to get cases for.\n * @return {Hash<EContent>} - The cases for the platform.\n */\n getCases(platform: IPlatform): Hash<EContent> {\n return (\n this.cases ??\n (this.cases = (this.nodes ?? []).reduce<Hash<EContent>>((groups, node) => {\n groups[node.attrs?.When as string] = platform.getCompiledNodes(node.nodes ?? []);\n return groups;\n }, {}))\n );\n }\n\n get EntitronConstructor() {\n return Selector;\n }\n}\n", "import type { XmlNode } from \"ultimus/types\";\n\nimport { Arrmatron } from \"../core/Arrmatron\";\nimport { ManifestNode } from \"../core/ManifestNode\";\n\nimport { Composite } from \"./composition\";\n\nclass Slot extends Arrmatron {\n get displayName(): string {\n return \"\uD83D\uDD38\";\n }\n\n get compositeScope(): Composite {\n return this.scope as Composite;\n }\n\n get contentManifests() {\n return this.compositeScope.slotContent((this.manifest as CSlotNode).key);\n }\n\n get recontentScope(): Arrmatron {\n return this.compositeScope.scope;\n }\n}\n\nexport class CSlotNode extends ManifestNode {\n key?: string;\n\n constructor(x: XmlNode) {\n super(x.id);\n this.key = x.attrs?.Key as string;\n }\n\n get EntitronConstructor() {\n return Slot;\n }\n}\n", "import { Uid, XmlNode } from \"ultimus\";\n\nimport { IManifestNode } from \"../../types\";\n\nimport { CForNode } from \"./Iterative\";\nimport { CCompositeNode } from \"./composition\";\nimport { CIfNode } from \"./conditionals\";\nimport { ConnectorNode } from \"./connector\";\nimport { CElementNode } from \"./elementary\";\nimport { CFragmentNode } from \"./fragment\";\nimport { CDynamicTagNode } from \"./routing\";\nimport { CSelectorNode } from \"./selection\";\nimport { CSlotNode } from \"./slot\";\n\nconst cloneNode = (x: XmlNode, eliminateAttr: string): XmlNode => {\n const { [eliminateAttr]: _, ...attrs } = x.attrs ?? {};\n return {\n text: x.text,\n tag: x.tag,\n id: x.id,\n attrs,\n nodes: x.nodes?.map((n) => n),\n };\n};\n\nconst __compileManifestNode = (x: XmlNode): IManifestNode => {\n const { tag = \"div\", attrs } = x;\n if (attrs?.[\"Each\"]) {\n return new CForNode(cloneNode(x, \"Each\"), String(attrs[\"Each\"]).trim().split(\" \"));\n }\n if (attrs?.[\"If\"]) {\n return new CIfNode(cloneNode(x, \"If\"), String(attrs[\"If\"]));\n }\n if (tag === \"div\" || tag[0]?.match(/[A-Z0-9]/) == null) {\n return new CElementNode(x);\n }\n if (tag === \"Dynamic\") {\n return new CDynamicTagNode(cloneNode(x, \"As\"), String(attrs?.As ?? \"Error.Dynamic\"));\n }\n if (tag === \"Slot\") {\n return new CSlotNode(x);\n }\n if (tag === \"Selector\") {\n return new CSelectorNode(x);\n }\n if (tag === \"Connector\") {\n return new ConnectorNode(x);\n }\n if (tag === \"Fragment\" || tag === \"Then\" || tag === \"Else\") {\n return new CFragmentNode(x);\n }\n return new CCompositeNode(x);\n};\n\nconst CTXNODES = new Map();\n\nexport const compileManifestNode = (x: XmlNode): IManifestNode => {\n return CTXNODES.has(x) ? CTXNODES.get(x) : CTXNODES.set(x, __compileManifestNode(x)).get(x);\n};\n\nexport const compileManifestNodes = (x: XmlNode[]): Map<Uid, IManifestNode> =>\n new Map<Uid, IManifestNode>(x?.map(compileManifestNode).map((c) => [c.uid, c]) ?? []);\n", "import type { Delta, Hash, LogEntry } from \"ultimus/types\";\n\nimport type { IComponentContext, IArrmatron, IComponent } from \"../../types\";\n\n/**\n * Base Ancestor for custom components.\n */\nexport abstract class Component implements IComponent {\n [key: string]: unknown;\n readonly $ctx: IComponentContext;\n\n constructor(initials: Hash, ctx: IComponentContext) {\n this.$ctx = ctx;\n this.__created(initials);\n }\n\n // Lifecycle method called within constructor.\n __created(_: Hash) {}\n\n get refId() {\n return this.$ctx.refId;\n }\n\n get platform() {\n return this.$ctx.platform;\n }\n\n // hook on initialization\n // returned value will be used to update state\n __init(_: IArrmatron): Delta | null | undefined | unknown {\n return undefined;\n }\n // get from$ctx state\n get(key: string) {\n return this.$ctx.get(key);\n }\n\n // update$ctx state\n up(d) {\n return this.$ctx.up(d);\n }\n\n touch() {\n return this.$ctx.touch();\n }\n\n // emit action event to another component by key\n emit(key: string, data: Delta = {}) {\n return this.$ctx.emit(key, data);\n }\n\n // register callback to be called on done\n defer(fn: () => void) {\n this.$ctx.defer(fn);\n }\n\n defineCalculatedProperty(key, fn: (...args: any[]) => any, deps?: string[]) {\n let depKey = \"\";\n let depValue = undefined;\n Object.defineProperty(this, key, {\n get() {\n const args: any[] = deps?.length ? deps.map((k) => this.$ctx.get(k)) : [];\n const newKey = args.join(\":\");\n if (depKey !== newKey) {\n depKey = newKey;\n depValue = fn.apply(this, args);\n }\n return depValue;\n },\n });\n }\n\n toast(entry: LogEntry) {\n this.$ctx.toast(entry);\n }\n\n log(val: unknown, ...args: unknown[]) {\n this.$ctx.log(val, ...args);\n }\n\n logError(val: unknown, ...args: unknown[]) {\n this.$ctx.logError(val, ...args);\n }\n\n toString() {\n return `${this.$ctx.toString()}${this.name ? `(${this.name})` : \"\"}`;\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["arrmatura_exports", "__export", "CRootNode", "Component", "compileManifestNode", "compileManifestNodes", "launch", "__toCommonJS", "gettus", "o", "key", "r", "e", "str", "x", "capitalize", "x", "s", "COUNTER", "nextId", "p", "identity", "e", "DEFAULT_ENTRY_HANDLER", "id", "n", "mapEntries", "o", "fn", "DEFAULT_ENTRY_HANDLER", "key", "value", "scalarParse", "s", "num", "RE_XML_ENTITY", "SUBST_XML_ENTITY", "FN_XML_ENTITY", "s0", "s", "SUBST_XML_ENTITY", "skipQoutes", "sym", "sym2", "decodeXmlEntities", "RE_XML_ENTITY", "defaultOpts", "xmlParserFactory", "opts", "RE_XML_TAG", "RE_EMPTY", "RE_XML_COMMENT", "RE_ATTRS", "SINGLE_TAGS", "addNode", "c", "tag", "id", "node", "parseAttrs", "s", "e", "value", "scalarParse", "decodeXmlEntities", "skipQoutes", "_s", "COUNTER", "ctx", "lastIndex", "text", "elt", "xmlParse", "xmlParserFactory", "CACHE", "upnum", "n", "rr", "COLON_NUM", "stringHash", "x", "h", "i", "FingerprintMashine", "__publicField", "v", "k", "FM", "objectFingerprint", "applyStateChangedToImpl", "changes", "impl", "v", "k", "setter", "capitalize", "attributesToString", "v", "stringifyState", "attrs", "r", "k", "stringify", "T", "tab", "uid", "tag", "impl", "children", "ssubs", "c", "_isDone", "_isInited", "_fprints", "_initialState", "_listeners", "_defered", "_weak", "_refs", "_propFnMap", "Arrmatron", "platform", "manifest", "_parent", "scope", "__publicField", "__privateAdd", "__privateSet", "__privateGet", "refId", "initials", "delta", "force", "racer", "val", "changes", "k", "v", "isSpreading", "fprint", "objectFingerprint", "applyStateChangedToImpl", "propId", "map", "fn", "impl", "instant", "bound", "pk", "path", "gettr", "capitalize", "fn0", "r", "p", "handler", "listeners", "key", "data", "target", "ref", "method", "result", "ex", "c", "f", "nodes", "e", "uid", "children", "node", "ch", "local", "pipes", "srcIds", "targetPropName", "sourcePropName", "applicator", "rr", "identity", "popre", "source", "fingerprint", "COUNTERS", "counter", "args", "error", "stringify", "OP_SHORTCUTS", "withNoPipes", "_", "v", "isConstKey", "key", "compileConstant", "a", "vv", "scalarParse", "compilePropGet", "c", "compileArgument", "strings", "getter", "splitExpression", "s", "withPipes", "pipes", "compiledPipes", "expr", "pipeId", "args", "initialValue", "value", "fn", "val", "args0", "ex", "withHardValue", "hardValue", "pipec", "propKey", "ini", "gettus", "iniFn", "compilePlaceholder", "compilePipeExpression", "parts", "_key", "pipesExpressions", "compileJsExpression", "x", "RE_PLACEHOLDER", "createStringInterpolator", "template", "placeholderFactory", "fnx", "pattern", "_", "expr", "chunks", "tail", "args", "prefix", "index", "str", "CACHE", "compileExpression", "v", "compileJsExpression", "vCutOne", "compilePlaceholder", "createStringInterpolator", "compileConstant", "resolveExpression", "x", "ManifestNode", "xid", "__publicField", "nextId", "platform", "parent", "scope", "_platform", "getter", "propKey", "c", "delta", "val", "value", "key", "expr", "propName", "pipec", "compilePipeExpression", "k", "rkey", "data", "resolver", "acc", "fn", "v", "resolveExpression", "sv", "refId", "attrs", "keyValue", "RootCtx", "Arrmatron", "_slotId", "initials", "CRootNode", "ManifestNode", "template", "__publicField", "platform", "xmlParse", "_platform", "narrowData", "data", "id", "mapEntries", "key", "value", "Iterative", "Arrmatron", "__publicField", "each", "narrowData", "itemNode", "nodes", "_datum", "index", "datum", "id", "pk", "inode", "_itemNode", "_itemName", "_xmlNode", "CForNode", "ManifestNode", "xmlNode", "itemName", "prep", "expr", "__privateAdd", "__privateSet", "compilePlaceholder", "platform", "__privateGet", "CItemNode", "IterativeItem", "key", "data", "propId", "iName", "_CItemNode", "content", "uid", "c", "Composite", "Arrmatron", "slotId", "initials", "_content", "CCompositeNode", "ManifestNode", "id", "tag", "attrs", "nodes", "__publicField", "__privateAdd", "platform", "slots", "groups", "e", "gId", "isContainer", "__privateGet", "__privateSet", "Conditional", "Arrmatron", "branches", "_xml", "_branches", "CIfNode", "ManifestNode", "xml", "expr", "__privateAdd", "__privateSet", "platform", "__privateGet", "nodes", "$then", "ifElse", "e", "ifThen", "slotId", "c", "resolver", "compilePlaceholder", "Connector", "Arrmatron", "__publicField", "trigger", "data", "change", "hasTrigger", "fprint", "objectFingerprint", "ConnectorNode", "ManifestNode", "attrs", "id", "NativeElementEntitron", "Arrmatron", "initials", "_nodes", "CElementNode", "ManifestNode", "id", "tag", "attrs", "nodes", "text", "__privateAdd", "__privateSet", "platform", "__privateGet", "_nodes", "CFragmentNode", "ManifestNode", "id", "nodes", "__privateAdd", "__privateSet", "platform", "__privateGet", "Arrmatron", "DynamicTag", "Arrmatron", "tag", "uid", "CDynamicTagNode", "ManifestNode", "xml", "expr", "__publicField", "Selector", "Arrmatron", "cases", "onKey", "matchedCase", "CSelectorNode", "ManifestNode", "id", "tag", "attrs", "nodes", "__publicField", "platform", "groups", "node", "Slot", "Arrmatron", "CSlotNode", "ManifestNode", "x", "__publicField", "cloneNode", "x", "eliminateAttr", "_", "attrs", "n", "__compileManifestNode", "tag", "CForNode", "CIfNode", "CElementNode", "CDynamicTagNode", "CSlotNode", "CSelectorNode", "ConnectorNode", "CFragmentNode", "CCompositeNode", "CTXNODES", "compileManifestNode", "compileManifestNodes", "c", "Component", "initials", "ctx", "__publicField", "_", "key", "d", "data", "fn", "deps", "depKey", "depValue", "args", "k", "newKey", "entry", "val", "launch", "platform", "template", "root", "CRootNode"]
|
|
7
|
+
}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
var _=(r,t)=>{if(!(!r||!t||typeof r!="object")){if(typeof t=="function")return t(r);if(typeof t=="string"){if(!t.includes("."))return r[t];t=t.split(".")}return t.reduce((e,n)=>e?e[n]:void 0,r)}};function tt(r){return r==null?"":String(r)}function S(r){let t=r==null?"":String(r);return t.length?t[0].toUpperCase()+t.slice(1):""}var At=1,et=(r="")=>r+String(At++);var rt=r=>r;var Tt=(r,t)=>({id:r,value:t});var nt=(r,t=Tt)=>r?Object.entries(r).map(([e,n])=>t(e,n)):[];var y=r=>{if(r==="")return"";if(r==="true")return!0;if(r==="false")return!1;if(r==="0")return 0;if(r==="1")return 1;if(r&&"1234567890+-".includes(r[0])&&r.length<=17){let t=+r;return isNaN(t)?r:t}if(r==="null")return null;if(r!=="undefined")return r};var Mt=/&#?[0-9a-z]{2,5};/g,It={amp:"&",gt:">",lt:"<",quot:'"',nbsp:" "};var Pt=function(r){let t=r.substring(1,r.length-1);return t[0]==="#"?String.fromCharCode(+t.slice(1)):It[t]||" "},ot=(r,t='"',e=t)=>r[0]===t&&r[r.length-1]===e?r.slice(1,-1):r,R=r=>String(r??"").replace(Mt,Pt);var Ot={RE_ATTRS:/([a-zA-Z][a-zA-Z0-9-:]*)(="[^"]*")?/g,RE_EMPTY:/^\s*$/,RE_XML_COMMENT:/<!--((?!-->)[\s\S])*-->/g,RE_XML_TAG:/(<)(\/?)([a-z][a-z0-9\-_:.]*)((?:\s+[a-zA-Z][a-z0-9-:]*(?:="[^"]*")?)*)\s*(\/?)>/gi,SINGLE_TAGS:{img:1,input:1,br:1,hr:1,col:1,source:1}};function st(r){let{RE_XML_TAG:t,RE_EMPTY:e,RE_XML_COMMENT:n,RE_ATTRS:o,SINGLE_TAGS:s}={...Ot,...r},i=(p,c,m)=>{let h={tag:c,id:m};return(p.nodes??(p.nodes=[])).push(h),h},a=(p,c)=>{if(c){p.attrs={};for(let m=o.exec(c);m;m=o.exec(c)){let h=m[2]?y(R(ot(m[2].slice(1)))):!0;p.attrs[m[1]]=h}}};return p=>{let c=0,m=[{tag:"#root",id:String(c)}],h=String(p).trim().replace(n,""),g=0;for(let f=t.exec(h);f;f=t.exec(h)){let N=f.index&&h.slice(g,f.index);if(f[2]){if(N&&!m[0].nodes?.length&&(N===" "||!N.match(e))&&(m[0].text=R(N.trim())),m[0].tag!==f[3])throw new Error(` XML Parse closing tag does not match at: ${String(f.index)} near ${f.input.slice(Math.max(f.index-150,0),f.index)}^^^^${f.input.slice(f.index,Math.min(f.index+150,f.input.length))}`);m.shift()}else{let V=i(m[0],f[3],`X${String(++c)}`);if(a(V,f[4].trim()),!(f[5]||f[3]in s)&&(m.unshift(V),m.length===1))throw new Error(`Parse error at: ${f[0]}`)}g=t.lastIndex}return m[0].nodes??[]}}var it=st();var H=new Map;function pt(r,t){let e=(r<<5)-r+t;return e&e}var at=":".charCodeAt(0);function Dt(r){let t=0;if(H.has(r))t=H.get(r);else{for(let e=0;e<r.length;e++)t=pt(t,r.charCodeAt(e));H.set(r,t)}return t}var F=class{r=0;x;$path;get path(){return this.$path??(this.$path=new Set)}upNumber(t){return this.r=pt(this.r,t)}upString(t){return this.upNumber(Dt(t))}upObject(t){if(t.uid)return t.uid;if(t instanceof Date)return this.upNumber(t.getTime());if(!(this.path.size>10||this.path.has(t))){if(this.path.add(t),t instanceof Map)this.upString("$$$Map$$$"),t.forEach((e,n)=>{this.upString(n),this.upNumber(at),this.upAny(e)});else if(t instanceof Set)this.upString("$$$Set$$$"),t.forEach(e=>this.upAny(e));else if(Array.isArray(t))this.upString("$$$Array$$$"),t.forEach(e=>this.upAny(e));else{this.upString("$$$Object$$$");for(let e in t)Object.prototype.hasOwnProperty.call(t,e)&&e[0]!=="$"&&(this.upString(e),this.upNumber(at),this.upAny(t[e]))}return this.path.delete(t),this.r}}upAny(t){t==null?this.upString(String(t)):typeof t=="number"?isNaN(t)?this.upString("$$$NaN$$$"):this.upNumber(t):typeof t=="object"?this.upObject(t):typeof t=="string"?this.upString(t):typeof t=="boolean"?this.upString(`$$$Boolean$$$${t}`):typeof t=="function"||this.upString(String(t))}do(t){return t==null||typeof t!="object"||Object.isFrozen(t)?t:t.uid?t.uid:t.$ctx?t.$ctx.uid:(this.r=0,this.x=t,this.$path&&this.$path?.clear(),this.upObject(t),this.r)}},_t=new F,x=r=>_t.do(r);function ct(r,t){t.__stateChanged?t.__stateChanged(r):r.forEach((e,n)=>{let o=t[`set${S(n)}`];typeof o=="function"?o.call(t,e):t[n]=e})}var ut=r=>typeof r=="object"?Array.isArray(r)?r.length?`[${ut(r[0])??""} x${String(r.length)}]`:"[]":`{${Object.keys(r).toString()}}`:r??"",Rt=r=>{if(!r)return"";let t=[];return Object.entries(r).forEach(([e,n])=>{n&&e[0]!=="$"&&t.push(` ${e}="${ut(n)}"`)}),t.length?t.join(""):""},X=(r,t="")=>{let{uid:e,displayName:n=e,component:o,children:s}=r,i=s?.size?[...s.values()].map(a=>X(a,` ${t}`)).join(`
|
|
2
|
+
`):"";return`${t}<${n}${Rt(o)}${i?`>
|
|
3
|
+
${i}
|
|
4
|
+
${t}</${n}>`:"/>"}`};var u=class{constructor(t,e,n,o){this.platform=t;this.manifest=e;this._parent=n;this.scope=o??this,this.root=o?.root??this,this.#n=this.manifest.resolveInitialProps(this),this.$component=this.createComponent(this.#n),this.refId&&this.refId.split(",").forEach(s=>this.scope.addReference(s,this))}$component;root;scope;$children;#t=!1;#e=!1;#r={};#n={};#s;#o=[];#a;#i;#p;get parent(){return this._parent}get uid(){return this.manifest.uid}get displayName(){return"\u{1F539}"}createComponent(t){return{...t}}up(t,e=!1){if(!t||this.#t)return;if(t instanceof Promise){let o=this.raceCondition("set");t.then(s=>o(()=>this.up(s)));return}let n=new Map;Object.entries(t).forEach(([o,s])=>{if(s instanceof Promise){let i=!o||o.startsWith("..."),a=this.raceCondition(`set:${o}`);s.then(p=>a(()=>this.up(i?p:{[o]:p})))}else if(o&&typeof s<"u")if(o[0]==="$")this.$component[o]!==s&&n.set(o.slice(1),s);else{let i=x(s);(!(o in this.#r)||i!==this.#r[o])&&(this.#r[o]=i,n.set(o,s))}}),(n.size||e)&&(ct(n,this.$component),this.touch())}touch(){this.recontent(),this.notify()}get(t){let e=this.#p??(this.#p=new Map);if(e.has(t))return e.get(t)();let n=null,o=this.$component,s=o[t];if(s&&typeof s=="function"){let i=s.bind(o);n=()=>i}else if(o.__getStateProperty)n=()=>o.__getStateProperty(t);else{let[i,...a]=t.split(".");if(i==="R"){let p=this.platform.getResource(a)??null;n=()=>p}else{let p=o[`get${S(i)}`],c=typeof p=="function"?()=>p.call(o)??null:()=>o[i]??null;n=a.length?()=>a.reduce((m,h)=>m?.[h]??null,c()):c}}return e.set(t,n),n()}getFromScope(t){return this.scope.get(t)}notify(){this.#s?.forEach(t=>t(this))}subscribe(t){let e=this.#s??(this.#s=new Set);return e.add(t),()=>{e.delete(t)}}emit(t,e){if(!this.#t)try{if(t.endsWith(")")){let[n,o]=t.split("(")[0].split("."),s=this.getByRef(n);if(!s)throw new Error(`No such reference: ${n}`);let i=s.$component,a=i[o];if(typeof a!="function")throw new Error(`Not a method: ${n}.${o}()`);let p=a.call(i,e);s.up(p)}else{let[n,o]=t.split(".");o||(o=n,n="this");let s=this.getByRef(n);if(!s)throw new Error(`No such reference: ${n}`);s.up(o==="*"?e:{[o]:e})}}catch(n){this.logError(`emit ${t}:`,n)}}done(){this.#t||(this.#t=!0,this.children?.forEach(t=>t.done()),this.#o?.forEach(t=>t(this)),this.#o=void 0,this._parent?.children?.delete(this.uid),this._parent=void 0)}defer(t){t&&typeof t=="function"&&(this.#o??(this.#o=[])).push(t)}settleAsChild(){this.#e?this.up(this.manifest.resolveProps(this),!0):(this.#e=!0,this.initConnectors(),this.up(this.#n,!0),this.up(this.$component.__init?.(this)))}get children(){return this.$children}get contentManifests(){return this.manifest.getSubNodes(this.platform)}get recontentScope(){return this.scope}recontent(){let t=this.contentManifests;this.platform.redraw(this,this.root),this.children?.forEach((n,o)=>{t?.get(o)||n.done()});let e=new Map;t?.forEach((n,o)=>{let s=this.$children?.get(o)??n.createArrmatron(this.platform,this,this.recontentScope);e.set(s.uid,s)}),this.$children=e;for(let n of e.values())n.settleAsChild()}get refId(){return this.manifest.refId}getByRef(t){if(!t)return;if(t==="this")return this;let e=this.#i?.[t];return e||this.parent?.getByRef(t)}addReference(t,e){(this.#i??(this.#i={}))[t]=e}initConnectors(){if(this.manifest.connectors)for(let[t,e]of this.manifest.connectors.entries()){let[n,o]=t.split("|"),[s,i]=n.split("."),a=this.parent?.getByRef(s);if(!a){this.logError(`Connect: No such ref: ${s}`);continue}if(!i){this.logError(`Connect: No Source Property Name: ${s}`);continue}let p=o?c=>({[o]:c}):rt;this.defer((()=>{let c;return a.subscribe(async m=>{try{let h=await m.get(i),g=x(h);if(c!==void 0&&c===g)return;c=g;let f=p(e(this,h));this.up(f)}catch(h){m.logError("Notify ",h)}})})()),Object.assign(this.#n,p(e(a,i?a.get(i):a.$component)))}}raceCondition(t){let e=this.#a??(this.#a=new Map),n=1+(e.get(t)??0);return e.set(t,n),o=>{if(n===e.get(t))return n=0,o()}}log(t,...e){return this.platform.log({level:"log",source:`${this.displayName}:${this.uid}`,message:t,params:e}),t}logError(t,...e){this.platform.log({level:"error",source:`${this.displayName}:${this.uid}`,error:t,message:`${String(t.message||t)}
|
|
5
|
+
${this.toString().slice(0,120)}`,params:e})}toast=t=>{this.platform.toast(t,this)};toString(){return X(this)}};var Ht={"&&":"|and:","==":"|equals:","!=":"|notEquals:","||":"|or:","<":"|less:","[":"|dot:","]":"",">":"|greater:","??":"|coalesce:","?":"|then:"},Ft=(r,t)=>t,mt=r=>"'+-0123456789".includes(r[0])||r==="true"||r==="false";function b(r){let t=y(r[0]==="'"?r.slice(1,r.length-1):r);return()=>t}var lt=r=>t=>t.getFromScope(r),ft=(r,t)=>{if(r[0]==="!"){let e=lt(r.slice(1));return n=>!e(n)}if(r[0]==="#"&&r[1]==="#"){let e=t?.[Number(r.slice(2))];return()=>e}return mt(r)?b(r):lt(r)},ht=r=>r.trim().replace(/(&&|!=|==|>|<|\[|\]|\|\||\?\??)/g,(t,e)=>`${Ht[e]}`).split("|").map(t=>t.trim());function dt(r){if(!r.length)return Ft;let t=r.map(e=>{let n=[],o=e.replaceAll(/'[^']*'/g,a=>(n.push(a.slice(1,-1)),`##${n.length-1}`)),[s,...i]=o.split(":").map(a=>a.trim());return{pipeId:s,args:i.map(a=>ft(a,n))}});return(e,n)=>t.reduce((o,{pipeId:s,args:i})=>{try{let a=e.platform.getFunction(s);if(typeof a!="function")throw new Error(`${a!=null?"must be a function":"not found"}`);if(o instanceof Promise)return o.then(p=>{let c=[p,...i.map(h=>h(e))];return a.apply(e,c)});{let p=[o,...i.map(c=>c(e))];return a.apply(e,p)}}catch(a){return e.logError(`ERROR: Function ${s||"<empty>"}`,a),o}},n)}function Xt(r,t){if(!r||r==="it")return t;if(r.startsWith("it.")){let n=r.slice(3);return(o,s)=>t(o,_(s,n))}let e=mt(r)?b(r):d(r);return n=>t(n,e(n))}function E(r){if(r.endsWith(")")){let s=r.slice(0,-1).split("(");return E(`${s[0]}=${s[1]}`)}let[t,...e]=ht(r),[n,o]=t.split("=").map(s=>s.trim());return{key:n,pipec:Xt(o,dt(e))}}function d(r){let[t,...e]=ht(r),n=dt(e),o=ft(t);return s=>n(s,o(s))}function gt(r){return new Function("c",r.replaceAll(/[^'a-z]([a-z][a-z0-9-.]+)/gi,'c.prop("$1")'))}var kt=/\{([^}]+)\}/g;function yt(r,t){let e=[],n=r.replace(kt,(i,a)=>(e.push(t(a.trim())),"{$$$}"));if(!e.length)return()=>n;let o=n.split(/\{\$\$\$\}/g),s=o.pop();return(...i)=>o.map((a,p)=>`${a}${tt(e[p](...i))}`).join("")+s}var k=new Map;function Ut(r){if(typeof r!="string")return()=>r;if(r.startsWith("js:"))return gt(r.slice(3));if(r.includes("{")){let t=r.slice(1,-1);return r[0]==="{"&&r[r.length-1]==="}"&&!t.includes("{")?d(t):yt(r.replace(/\s+/g," "),d)}return b(r)}var C=r=>k.has(r)?k.get(r):k.set(r,Ut(r)).get(r);var l=class{$content;uid;refId;propertyResolvers=[];initialState={};connectors;tag;constructor(t){this.uid=`${et("N")}:${t}`}createArrmatron(t,e,n){return new this.EntitronConstructor(t,this,e,n)}getSubNodes(t){return this.$content}addPropertyResolver(t,e){return this.propertyResolvers.push((n,o)=>(o[e]=t(n),o)),this}addDataPropertyResolver(t,e){return this.propertyResolvers.push((n,o)=>{let s=t(n);return o.data=Object.assign(o.data||{},{[e]:s}),o}),this}addPropertiesResolver(t){return this.propertyResolvers.push((e,n)=>{let o=t(e);return o&&typeof o=="object"&&Object.entries(o).forEach(([s,i])=>{n[s]=i}),n}),this}addConnector(t,e){let{key:n,pipec:o}=E(t);(this.connectors??(this.connectors=new Map)).set(`${n}|${e}`,o)}addEmitter(t,e){let{key:n,pipec:o}=E(t),s=n+(t.endsWith(")")?"()":"");this.initialState[e]=i=>a=>i.scope?.emit(s,o(i,a))}resolveInitialProps(t){return this.propertyResolvers.reduce((e,n)=>n(t,e),Object.entries(this.initialState).reduce((e,[n,o])=>(e[n]=o(t),e),{}))}resolveProps(t){return this.propertyResolvers.reduce((e,n)=>n(t,e),{})}compileAttribute(t,e){if(t.startsWith("data-"))this.addDataPropertyResolver(C(e),t.slice(5));else if(t==="Ref")this.refId=String(e);else if(t==="Props"){let n=String(e);n.startsWith("<-")?this.addConnector(n.slice(2),""):this.addPropertiesResolver(C(n))}else if(typeof e!="string")this.initialState[t]=()=>e;else if(e.includes("{"))this.addPropertyResolver(C(e),t);else if(e.startsWith("<-"))if(e.endsWith(".This")){let n=e.slice(2,-5).trim();this.initialState[t]=o=>o.getByRef(n)?.$component}else this.addConnector(e.slice(2),t);else e.startsWith("->")?this.addEmitter(e.slice(2).trim()||"*",t):this.initialState[t]=()=>e}compileAttributes(t){t&&Object.entries(t).forEach(e=>this.compileAttribute(...e))}};var U=class extends u{get displayName(){return"ROOT"}get recontentScope(){return this}slotContent(t){}createComponent(t){return this.platform.createComponent({},t,this)}},$=class extends l{constructor(e){super("R0");this.template=e;this.slotContent={}}slotContent;nodes;getSubNodes(e){return e.getCompiledNodes(it(this.template))}getSlotContent(e,n){}get EntitronConstructor(){return U}};var xt=r=>r?typeof r=="string"?r.split(",").map(t=>({id:t,name:t})):Array.isArray(r)?r:typeof r[Symbol.iterator]=="function"?[...r]:typeof r=="object"?nt(r,(t,e)=>typeof e=="object"?{...e,id:t}:{id:t,name:String(e)}):[{id:String(r),name:String(r)}]:[];var v=class extends u{pkHash={};get displayName(){return"\u{1F539}each"}get contentManifests(){let t=xt(this.$component.each),e=this.manifest.getItemCtxNode(this.platform),n=new Map;if(this.pkHash={},t?.length){if(!t.forEach)throw new Error(`[each] Items has no forEach() ${t.toString()}`);t.forEach((o,s)=>{let i=typeof o=="string"?{id:o}:o,a=i.id;a==null&&(this.logError("ERROR: empty item id: ",i),a=String(s));let p=String(a);if(this.pkHash[p]){this.logError(`ERROR: duplicate item id : ${p} (skipped)`,i);return}this.pkHash[p]=i;let c=e.cloneWithDatum(i,this.platform).addPropertyResolver(()=>this.pkHash[p],e.itemName);n.set(c.uid,c)})}return n}},A=class extends l{#t;#e;#r;constructor(t,[e,n,o=n]){super(t.id),this.#r=t,this.#e=e.startsWith("@")?e.slice(1):e,o[0]==="<"&&o[1]==="-"?this.addConnector(o.slice(2),"each"):this.addPropertyResolver(d(o),"each")}getItemCtxNode(t){return this.#t??(this.#t=new z(this.#r.id,this.#e,t.getCompiledNodes([this.#r])))}get EntitronConstructor(){return v}},L=class extends u{get recontentScope(){return this}get displayName(){return"\u{1F539}ui:for:item"}emit(t,e){return this.scope.emit(t,e)}get(t){let e=this.manifest.itemName;return t.startsWith(`${e}.`)||t===e?super.get(t):this.scope.get(t)}},z=class r extends l{itemName;constructor(t,e,n){super(t),this.itemName=e,this.$content=n}cloneWithDatum(t,e){let n=`${String(this.uid)}#${t.id}`,o=new r(n,this.itemName,this.getSubNodes(e));return o.uid=n,o}get EntitronConstructor(){return L}};var B=class extends u{get displayName(){return`\u{1F4A0}${this.manifest.tag}`}get recontentScope(){return this}slotContent(t){return this.manifest.getSlotContent(this.platform,t)}createComponent(t){return this.platform.createComponent(this.manifest.tag,t,this)}},T=class extends l{slotContent=null;tag;nodes;#t;constructor({id:t,tag:e,attrs:n,nodes:o}){super(t),this.tag=e,this.nodes=o,this.compileAttributes(n)}getSlotContent(t,e){if(!this.slotContent){let n=this.nodes?.reduce((o,s)=>{let i="default",a=!1;return s.tag.startsWith(`${this.tag}:`)&&(i=s.tag.split(":")[1],a=!0),o[i]=(o[i]||[]).concat(a?s.nodes??[]:s),o},{});this.slotContent=Object.entries(n??{}).reduce((o,[s,i])=>(o[s]=t.getCompiledNodes(i),o),{})}return this.slotContent[e||"default"]??void 0}getSubNodes(t){return this.#t??(this.#t=t.getCompiledNodes(this.tag))}get EntitronConstructor(){return B}};var W=class extends u{get contentManifests(){let t=this.manifest.getBranches(this.platform);return this.$component.condition?t.then:t.else}get displayName(){return"\u{1F539}if"}},w=class extends l{#t;#e;constructor(t,e){super(t.id),this.#t=t,this.compileCondition(e)}get EntitronConstructor(){return W}getBranches(t){if(this.#e)return this.#e;this.#e={};let{nodes:e}=this.#t,n=[this.#t];if(e?.length){let o=e.find(i=>i.tag==="Else"),s=e.find(i=>i.tag==="Then");o?(this.#e.else=o.nodes?t.getCompiledNodes(o.nodes):void 0,n=s?s.nodes:[Object.assign(this.#t,{nodes:e.filter(i=>i!==o)})]):s&&(n=s.nodes)}return this.#e.then=n?t.getCompiledNodes(n):void 0,this.#e}compileCondition(t){if(t[0]==="<"&&t[1]==="-")this.addConnector(t.slice(2),"condition");else if(t.slice(0,5)==="slot("){let e=t.slice(5,-1);this.addPropertyResolver(n=>!!n.scope.slotContent?.(e)?.size,"condition")}else{let e=d(t);this.addPropertyResolver(n=>!!e(n),"condition")}}};var J=class extends u{prevkey;touch(){super.touch();let{trigger:t,data:e,change:n}=this.$component,o="trigger"in this.$component;if(o&&t==null)return;let i=x(o?t:e);(!("prevkey"in this)||this.prevkey!=i)&&(this.prevkey=i,n?.(e))}get displayName(){return"\u{1F539}Connector"}},M=class extends l{constructor({attrs:t,id:e}){super(e),this.compileAttributes(t)}get EntitronConstructor(){return J}};var G=class extends u{get displayName(){return this.manifest.tag}createComponent(t){return this.platform.createComponent({tag:this.manifest.tag,native:!0},t,this)}},I=class extends l{#t;constructor({id:t,tag:e,attrs:n,nodes:o,text:s}){super(t),this.tag=e,this.compileAttributes(n),s&&this.compileAttribute("#text",s),this.#t=o}getSubNodes(t){return this.#t?t.getCompiledNodes(this.#t):void 0}get EntitronConstructor(){return G}};var P=class extends l{#t;constructor({id:t,nodes:e}){super(t),this.#t=e}getSubNodes(t){return this.#t?t.getCompiledNodes(this.#t):void 0}get EntitronConstructor(){return u}};var Y=class extends u{get displayName(){return"dynamics"}get contentManifests(){let t=this.$component.tag,e=`${this.uid}:${String(t??"")}`;return new Map([[e,Object.assign(this.platform.getCompiledNodes({...this.manifest.xml,tag:t}),{uid:e})]])}},O=class extends l{xml;constructor(t,e){super(t.id),this.compileAttribute("tag",e),this.xml=t}get EntitronConstructor(){return Y}};var Z=class extends u{get displayName(){return"\u{1F4A0}Selector"}get contentManifests(){let t=this.manifest.getCases(this.platform),e=this.$component.On,n=t?.[e];return n||this.log("unmatched case",e,t),n??t?.default??Object.values(t)[0]}},j=class extends l{cases=null;key="";nodes;constructor({id:t,tag:e,attrs:n,nodes:o}){super(t),this.tag=e,this.nodes=o,this.compileAttributes(n)}getCases(t){return this.cases??(this.cases=(this.nodes??[]).reduce((e,n)=>(e[n.attrs?.When]=t.getCompiledNodes(n.nodes??[]),e),{}))}get EntitronConstructor(){return Z}};var q=class extends u{get displayName(){return"\u{1F538}"}get compositeScope(){return this.scope}get contentManifests(){return this.compositeScope.slotContent(this.manifest.key)}get recontentScope(){return this.compositeScope.scope}},D=class extends l{key;constructor(t){super(t.id),this.key=t.attrs?.Key}get EntitronConstructor(){return q}};var K=(r,t)=>{let{[t]:e,...n}=r.attrs??{};return{text:r.text,tag:r.tag,id:r.id,attrs:n,nodes:r.nodes?.map(o=>o)}},vt=r=>{let{tag:t="div",attrs:e}=r;return e?.Each?new A(K(r,"Each"),String(e.Each).trim().split(" ")):e?.If?new w(K(r,"If"),String(e.If)):t==="div"||t[0]?.match(/[A-Z0-9]/)==null?new I(r):t==="Dynamic"?new O(K(r,"As"),String(e?.As??"Error.Dynamic")):t==="Slot"?new D(r):t==="Selector"?new j(r):t==="Connector"?new M(r):t==="Fragment"||t==="Then"||t==="Else"?new P(r):new T(r)},Q=new Map,Lt=r=>Q.has(r)?Q.get(r):Q.set(r,vt(r)).get(r),oo=r=>new Map(r?.map(Lt).map(t=>[t.uid,t])??[]);var $t=class{$ctx;constructor(t,e){this.$ctx=e,this.__created(t)}__created(t){}get refId(){return this.$ctx.refId}get platform(){return this.$ctx.platform}__init(t){}get(t){return this.$ctx.get(t)}up(t){return this.$ctx.up(t)}touch(){return this.$ctx.touch()}emit(t,e={}){return this.$ctx.emit(t,e)}defer(t){this.$ctx.defer(t)}defineCalculatedProperty(t,e,n){let o="",s;Object.defineProperty(this,t,{get(){let i=n?.length?n.map(p=>this.$ctx.get(p)):[],a=i.join(":");return o!==a&&(o=a,s=e.apply(this,i)),s}})}toast(t){this.$ctx.toast(t)}log(t,...e){this.$ctx.log(t,...e)}logError(t,...e){this.$ctx.logError(t,...e)}toString(){return`${this.$ctx.toString()}${this.name?`(${this.name})`:""}`}};var po=(r,t)=>{let e=new $(t).createArrmatron(r);return e.touch(),e};export{$ as CRootNode,$t as Component,Lt as compileManifestNode,oo as compileManifestNodes,po as launch};
|
|
6
|
+
//# sourceMappingURL=index.js.map
|