apprun 3.35.0 → 3.36.0
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 +5 -0
- package/WHATSNEW.md +9 -1
- package/apprun.d.ts +4 -4
- package/dist/apprun-dev-tools.js +1 -1
- package/dist/apprun-dev-tools.js.map +1 -1
- package/dist/apprun-html.esm.js +7 -7
- package/dist/apprun-html.esm.js.map +1 -1
- package/dist/apprun-html.js +1 -1
- package/dist/apprun-html.js.map +1 -1
- package/dist/apprun-play-html.esm.js +7 -7
- package/dist/apprun-play-html.esm.js.map +1 -1
- package/dist/apprun-play.js +1 -1
- package/dist/apprun-play.js.map +1 -1
- package/dist/apprun.esm.js +1 -1
- package/dist/apprun.esm.js.map +1 -1
- package/dist/apprun.js +1 -1
- package/dist/apprun.js.map +1 -1
- package/esm/app.js +55 -11
- package/esm/app.js.map +1 -1
- package/esm/apprun-html.js +8 -4
- package/esm/apprun-html.js.map +1 -1
- package/esm/apprun.js +64 -14
- package/esm/apprun.js.map +1 -1
- package/esm/component.js +56 -19
- package/esm/component.js.map +1 -1
- package/esm/decorator.js +22 -5
- package/esm/decorator.js.map +1 -1
- package/esm/directive.js +64 -13
- package/esm/directive.js.map +1 -1
- package/esm/router.js +22 -4
- package/esm/router.js.map +1 -1
- package/esm/type-utils.js +91 -0
- package/esm/type-utils.js.map +1 -0
- package/esm/types.js +32 -11
- package/esm/types.js.map +1 -1
- package/esm/vdom-my.js +66 -43
- package/esm/vdom-my.js.map +1 -1
- package/esm/version.js +15 -0
- package/esm/version.js.map +1 -0
- package/esm/web-component.js +30 -10
- package/esm/web-component.js.map +1 -1
- package/jest.config.js +1 -7
- package/jsx-runtime.js +1 -1
- package/jsx-runtime.js.map +1 -1
- package/package.json +1 -1
- package/plan/plan-apprun-bugfixes.md +207 -0
- package/src/app.ts +52 -11
- package/src/apprun-html.ts +8 -4
- package/src/apprun.ts +76 -17
- package/src/component.ts +58 -20
- package/src/decorator.ts +23 -6
- package/src/directive.ts +64 -13
- package/src/router.ts +23 -5
- package/src/type-utils.ts +130 -0
- package/src/types.ts +33 -12
- package/src/vdom-my.ts +75 -39
- package/src/version.ts +16 -0
- package/src/web-component.ts +31 -11
package/jsx-runtime.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"./jsx-runtime.js","mappings":"CAAA,SAA2CA,EAAMC,GAC1B,iBAAZC,SAA0C,iBAAXC,OACxCA,OAAOD,QAAUD,IACQ,mBAAXG,QAAyBA,OAAOC,IAC9CD,OAAO,GAAIH,GACe,iBAAZC,QACdA,QAAgB,OAAID,IAEpBD,EAAa,OAAIC,GAClB,CATD,CASGK,MAAM,I,yDCuHT,IAAIC,EACJ,MAAMP,EAA0B,oBAAXQ,OAAyBA,YAC1B,IAAX,EAAAC,EAAyB,EAAAA,EACd,oBAATC,KAAuBA,KAAO,CAAC,EAEtCV,EAAKW,KAAOX,EAAKY,gBACnBL,EAAOP,EAAKW,KAEZJ,EAAO,IA1GF,MAiBL,WAAAM,GACEP,KAAKQ,QAAU,CAAC,CAClB,CAEA,EAAAC,CAAGC,EAAcC,EAA6BC,EAAwB,CAAC,GACrEZ,KAAKQ,QAAQE,GAAQV,KAAKQ,QAAQE,IAAS,GAC3CV,KAAKQ,QAAQE,GAAMG,KAAK,CAAEF,KAAIC,WAChC,CAEA,GAAAE,CAAIJ,EAAcC,GAChB,MAAMI,EAAcf,KAAKQ,QAAQE,IAAS,GAE1CV,KAAKQ,QAAQE,GAAQK,EAAYC,QAAQC,GAAQA,EAAIN,KAAOA,GAC9D,CAEA,IAAAO,CAAKR,GACH,OAAOV,KAAKQ,QAAQE,EACtB,CAEA,GAAAS,CAAIT,KAAiBU,GACnB,MAAML,EAAcf,KAAKqB,eAAeX,EAAMV,KAAKQ,SAYnD,OAXAc,QAAQC,OAAOR,GAAeA,EAAYS,OAAS,EAAG,4BAA8Bd,GACpFK,EAAYU,SAASR,IACnB,MAAM,GAAEN,EAAE,QAAEC,GAAYK,EAMxB,OALIL,EAAQc,MACV1B,KAAK0B,MAAMhB,EAAMC,EAAIS,EAAMR,GAE3Be,OAAOC,KAAKhB,GAASY,OAAS,EAAIb,EAAGkB,MAAM7B,KAAM,IAAIoB,EAAMR,IAAYD,EAAGkB,MAAM7B,KAAMoB,IAEhFH,EAAIL,QAAQkB,IAAI,IAGnBf,EAAYS,MACrB,CAEA,IAAAM,CAAKpB,EAAcC,EAA6BC,EAAwB,CAAC,GACvEZ,KAAKS,GAAGC,EAAMC,EAAI,OAAF,wBAAOC,GAAO,CAAEkB,MAAM,IACxC,CAEQ,KAAAJ,CAAMhB,EAAcC,EAA6BS,EAAaR,GAChEA,EAAQmB,IAAIC,aAAapB,EAAQmB,IACrCnB,EAAQmB,GAAKE,YAAW,KACtBD,aAAapB,EAAQmB,IACrBJ,OAAOC,KAAKhB,GAASY,OAAS,EAAIb,EAAGkB,MAAM7B,KAAM,IAAIoB,EAAMR,IAAYD,EAAGkB,MAAM7B,KAAMoB,EAAK,GAC1FR,EAAQc,MACb,CAEA,QAAAQ,CAASxB,KAAiBU,GACxB,MAAML,EAAcf,KAAKqB,eAAeX,EAAMV,KAAKQ,SACnDc,QAAQC,OAAOR,GAAeA,EAAYS,OAAS,EAAG,4BAA8Bd,GACpF,MAAMyB,EAAWpB,EAAYqB,KAAInB,IAC/B,MAAM,GAAEN,EAAE,QAAEC,GAAYK,EACxB,OAAOU,OAAOC,KAAKhB,GAASY,OAAS,EAAIb,EAAGkB,MAAM7B,KAAM,IAAIoB,EAAMR,IAAYD,EAAGkB,MAAM7B,KAAMoB,EAAK,IAEpG,OAAOiB,QAAQC,IAAIH,EACrB,CAEA,KAAAI,CAAM7B,KAAiBU,GACrB,OAAOpB,KAAKkC,SAASxB,KAASU,EAChC,CAEQ,cAAAC,CAAeX,EAAc8B,GACnC,MAAMzB,EAAcyB,EAAO9B,IAAS,GAcpC,OATA8B,EAAO9B,GAAQK,EAAYC,QAAQC,IACzBA,EAAIL,QAAQkB,OAEtBH,OAAOC,KAAKY,GAAQxB,QAAOyB,GAAOA,EAAIC,SAAS,MAAQhC,EAAKiC,WAAWF,EAAIG,QAAQ,IAAK,OACrFC,MAAK,CAACC,EAAGC,IAAMA,EAAEvB,OAASsB,EAAEtB,SAC5BC,SAAQgB,GAAO1B,EAAYF,QAAQ2B,EAAOC,GAAKL,KAAInB,GAAQ,OAAD,wBACtDA,GAAG,CACNL,QAAS,OAAF,wBAAOK,EAAIL,SAAO,CAAEoC,MAAOtC,WAE/BK,CACT,GAaArB,EAAKW,IAAMJ,EACXP,EAAKY,gBAXgB,iBAavB,S,8CC1GA,MAAM2C,EAAgB,CAACC,EAAWxC,KACxBA,EAAOwC,EAAiB,MAAExC,GAAQwC,EAAiB,QAAM,GAG7DC,EAAgB,CAACD,EAAWxC,EAAM0C,KACtC,GAAI1C,EAAM,CACR,MAAM2C,EAAQH,EAAiB,OAAK,CAAC,EACrCG,EAAM3C,GAAQ0C,EACdF,EAAUI,SAASD,EACrB,MACEH,EAAUI,SAASF,EACrB,EA+DIG,EAAY,CAACC,EAAMN,KACvB,GAAIO,MAAMC,QAAQF,GAChB,OAAOA,EAAKpB,KAAIuB,GAAWJ,EAAUI,EAAST,KACzC,CACL,IAAI,KAAEU,EAAI,IAAEC,EAAG,MAAEC,EAAK,SAAEC,GAAaP,EAUrC,OATAK,EAAMA,GAAOD,EACbG,EAAWA,IAAYD,aAAK,EAALA,EAAOC,UAC1BD,GAAOnC,OAAOC,KAAKkC,GAAOrC,SAAQuC,IAChCA,EAAIrB,WAAW,OApED,EAACqB,EAAaF,EAAWD,EAAKX,KACpD,GAAIc,EAAIrB,WAAW,OAAQ,CACzB,MAAMK,EAAQc,EAAME,GAEpB,GADAA,EAAMA,EAAIC,UAAU,GACC,kBAAVjB,EACTc,EAAME,GAAOE,GAAKhB,EAAU/B,IAAM+B,EAAU/B,IAAI6C,EAAKE,GAAK,IAAI/C,IAAI6C,EAAKE,QAClE,GAAqB,iBAAVlB,EAChBc,EAAME,GAAOE,GAAKhB,EAAU/B,IAAM+B,EAAU/B,IAAI6B,EAAOkB,GAAK,IAAI/C,IAAI6B,EAAOkB,QACtE,GAAqB,mBAAVlB,EAChBc,EAAME,GAAOE,GAAKhB,EAAUI,SAASN,EAAME,EAAUG,MAAOa,SACvD,GAAIT,MAAMC,QAAQV,GAAQ,CAC/B,MAAOmB,KAAYC,GAAKpB,EACD,iBAAZmB,EACTL,EAAME,GAAOE,GAAKhB,EAAU/B,IAAM+B,EAAU/B,IAAIgD,KAAYC,EAAGF,GAAK,IAAI/C,IAAIgD,KAAYC,EAAGF,GAC/D,mBAAZC,IAChBL,EAAME,GAAOE,GAAKhB,EAAUI,SAASa,EAAQjB,EAAUG,SAAUe,EAAGF,IAExE,CAEF,MAAO,GAAY,UAARF,EAAiB,CAC1B,MAAMJ,EAAOE,EAAY,MAAK,OACxBpD,EAA6B,iBAAfoD,EAAME,GAAoBF,EAAME,GAAOF,EAAY,KACvE,GAAY,UAARD,EACF,OAAQD,GACN,IAAK,WACHE,EAAe,QAAIb,EAAcC,EAAWxC,GAC5CoD,EAAe,QAAII,GAAKf,EAAcD,EAAWxC,GAAQwD,EAAEG,OAAO3D,KAAMwD,EAAEG,OAAOC,SACjF,MACF,IAAK,QACHR,EAAe,QAAIb,EAAcC,EAAWxC,KAAUoD,EAAa,MACnEA,EAAe,QAAII,GAAKf,EAAcD,EAAWxC,GAAQwD,EAAEG,OAAO3D,KAAMwD,EAAEG,OAAOjB,OACjF,MACF,IAAK,SACL,IAAK,QACHU,EAAa,MAAIb,EAAcC,EAAWxC,GAC1CoD,EAAe,QAAII,GAAKf,EAAcD,EAAWxC,GAAQwD,EAAEG,OAAO3D,KAAM6D,OAAOL,EAAEG,OAAOjB,QACxF,MACF,QACEU,EAAa,MAAIb,EAAcC,EAAWxC,GAC1CoD,EAAe,QAAII,GAAKf,EAAcD,EAAWxC,GAAQwD,EAAEG,OAAO3D,KAAMwD,EAAEG,OAAOjB,WAEpE,WAARS,GACTC,EAAa,MAAIb,EAAcC,EAAWxC,GAC1CoD,EAAgB,SAAII,IACbA,EAAEG,OAAOG,UACZrB,EAAcD,EAAWxC,GAAQwD,EAAEG,OAAO3D,KAAMwD,EAAEG,OAAOjB,MAC3D,GAEe,WAARS,GACTC,EAAgB,SAAIb,EAAcC,EAAWxC,GAC7CoD,EAAe,QAAII,GAAKf,EAAcD,EAAWxC,GAAQwD,EAAEG,OAAO3D,KAAMwD,EAAEG,OAAOI,WAChE,aAARZ,IACTC,EAAiB,UAAIb,EAAcC,EAAWxC,GAC9CoD,EAAe,QAAII,GAAKf,EAAcD,EAAWxC,GAAQwD,EAAEG,OAAO3D,KAAMwD,EAAEG,OAAOjB,OAErF,MACE,IAAIjC,IAAI,IAAK,CAAE6C,MAAKH,MAAKC,QAAOZ,aAClC,EAYMwB,CAAgBV,EAAKF,EAAOD,EAAKX,UAC1BY,EAAME,GACf,IAEED,GAAUR,EAAUQ,EAAUb,GAC3BM,CACT,GAGF,G,yEC1HO,SAASmB,EAASb,KAAUC,GACjC,OAAOa,EAAQb,EACjB,CAEA,MAAMc,EAAa,SAEnB,SAASD,EAAQb,GACf,MAAMe,EAAK,GACLjE,EAAQkE,IACRA,SAAuC,KAANA,IAAkB,IAANA,GAC/CD,EAAGjE,KAAmB,mBAANkE,GAAiC,iBAANA,EAAkBA,EAAI,GAAGA,IACtE,EASF,OAPAhB,GAAYA,EAAStC,SAAQsD,IACvBtB,MAAMC,QAAQqB,GAChBA,EAAEtD,SAAQuD,GAAKnE,EAAKmE,KAEpBnE,EAAKkE,EACP,IAEKD,CACT,CAEO,SAASG,EAAcpB,EAA6BC,KAAeC,GACxE,MAAMe,EAAKF,EAAQb,GACnB,GAAmB,iBAARF,EAAkB,MAAO,CAAEA,MAAKC,QAAOC,SAAUe,GACvD,GAAIrB,MAAMC,QAAQG,GAAM,OAAOA,EAC/B,QAAYqB,IAARrB,GAAqBE,EAAU,OAAOe,EAC1C,GAAInD,OAAOwD,eAAetB,GAAKuB,oBAAqB,MAAO,CAAEvB,MAAKC,QAAOC,SAAUe,GACnF,GAAmB,mBAARjB,EAAoB,OAAOA,EAAIC,EAAOgB,GACjD,MAAM,IAAIO,MAAM,uBAAuBxB,IAC9C,CAEA,MAAMyB,EAAW,IAAIC,QAERC,EAAgB,CAAC7B,EAA2B8B,EAAavC,EAAY,CAAC,KAEpE,MAATuC,IAA2B,IAAVA,GAOvB,SAAgB9B,EAAkB8B,EAAaC,EAAS,CAAC,GAEvD,GAAa,MAATD,IAA2B,IAAVA,EAAiB,OAEtC,GADAA,EAAQE,EAAgBF,EAAOC,IAC1B/B,EAAS,OACd,MAAMiC,EAA6B,QAArBjC,EAAQkC,SAClBpC,MAAMC,QAAQ+B,GAChBK,EAAenC,EAAS8B,EAAOG,GAE/BE,EAAenC,EAAS,CAAC8B,GAAQG,EAErC,CAdEG,CAH+B,iBAAZpC,GAAwBA,EACzCqC,SAASC,eAAetC,IAAYqC,SAASE,cAAcvC,GAAWA,EACxE8B,GAAQ,OAAUA,EAAOvC,GACPA,EAAU,EAuB9B,SAASiD,EAAOxC,EAAkByC,EAAaR,GACzB,IAAhBQ,EAAU,MAEdR,EAAQA,GAAsB,QAAbQ,EAAKvC,IAVxB,SAAcwC,EAAaD,GAEzB,MAAME,EAAOD,EAAGR,SACVU,EAAO,GAAGH,EAAKvC,KAAO,KAC5B,OAAOyC,EAAKE,gBAAkBD,EAAKC,aACrC,CAMOC,CAAK9C,EAASyC,MAIH,EAAdA,EAAU,MAAUN,EAAenC,EAASyC,EAAKrC,SAAU6B,KAC7C,EAAdQ,EAAU,MAAUM,EAAY/C,EAASyC,EAAKtC,MAAO8B,IAJrDjC,EAAQgD,WAAWC,aAAaC,EAAOT,EAAMR,GAAQjC,GAKzD,CAEA,SAASmC,EAAenC,EAASI,EAAU6B,G,QACzC,MAAMkB,GAA4B,QAAlB,EAAAnD,EAAQoD,kBAAU,eAAEvF,SAAU,EACxCwF,GAAUjD,aAAQ,EAARA,EAAUvC,SAAU,EAC9ByF,EAAMC,KAAKC,IAAIL,EAASE,GAC9B,IAAK,IAAIhC,EAAI,EAAGA,EAAIiC,EAAKjC,IAAK,CAC5B,MAAMoC,EAAQrD,EAASiB,GACvB,GAAqB,IAAjBoC,EAAW,IAAS,SACxB,MAAMf,EAAK1C,EAAQoD,WAAW/B,GAC9B,GAAqB,iBAAVoC,EACLf,EAAGgB,cAAgBD,IACD,IAAhBf,EAAGiB,SACLjB,EAAGkB,UAAYH,EAEfzD,EAAQiD,aAAaY,EAAWJ,GAAQf,SAGvC,GAAIe,aAAiBK,aAAeL,aAAiBM,WAC1D/D,EAAQgE,aAAaP,EAAOf,OACvB,CACL,MAAMrC,EAAMoD,EAAMtD,OAASsD,EAAMtD,MAAW,IAC5C,GAAIE,EACF,GAAIqC,EAAGrC,MAAQA,EACbmC,EAAOxC,EAAQoD,WAAW/B,GAAIoC,EAAOxB,OAChC,CAEL,MAAMgC,EAAMtC,EAAStB,GACrB,GAAI4D,EAAK,CACP,MAAMC,EAAOD,EAAIE,YACjBnE,EAAQgE,aAAaC,EAAKvB,GAC1BwB,EAAOlE,EAAQgE,aAAatB,EAAIwB,GAAQlE,EAAQoE,YAAY1B,GAC5DF,EAAOxC,EAAQoD,WAAW/B,GAAIoC,EAAOxB,EACvC,MACEjC,EAAQiD,aAAaC,EAAOO,EAAOxB,GAAQS,EAE/C,MAEAF,EAAOxC,EAAQoD,WAAW/B,GAAIoC,EAAOxB,EAEzC,CACF,CAEA,IAAIoC,GAAsB,QAAlB,EAAArE,EAAQoD,kBAAU,eAAEvF,SAAU,EACtC,KAAOwG,EAAIf,GACTtD,EAAQsE,YAAYtE,EAAQuE,WAC5BF,IAGF,GAAIhB,EAAUC,EAAK,CACjB,MAAMkB,EAAInC,SAASoC,yBACnB,IAAK,IAAIpD,EAAIiC,EAAKjC,EAAIjB,EAASvC,OAAQwD,IACrCmD,EAAEJ,YAAYlB,EAAO9C,EAASiB,GAAIY,IAEpCjC,EAAQoE,YAAYI,EACtB,CACF,CAEO,MAAME,EAAYC,IACvB,MAAMC,EAAMvC,SAASf,cAAc,WAEnC,OADAsD,EAAIC,mBAAmB,aAAcF,GAC9B7E,MAAMgF,KAAKF,EAAIxE,SAAS,EAGjC,SAASyD,EAAWpB,GAClB,GAAgC,KAA5BA,aAAI,EAAJA,EAAMsC,QAAQ,WAAiB,CACjC,MAAMH,EAAMvC,SAASf,cAAc,OAEnC,OADAsD,EAAIC,mBAAmB,aAAcpC,EAAKnC,UAAU,IAC7CsE,CACT,CACE,OAAOvC,SAAS2C,eAAevC,QAAAA,EAAM,GAEzC,CAEA,SAASS,EAAOT,EAAiDR,GAE/D,GAAKQ,aAAgBqB,aAAiBrB,aAAgBsB,WAAa,OAAOtB,EAC1E,GAAoB,iBAATA,EAAmB,OAAOoB,EAAWpB,GAChD,IAAKA,EAAKvC,KAA4B,mBAAbuC,EAAKvC,IAAqB,OAAO2D,EAAWoB,KAAKC,UAAUzC,IAEpF,MAAMzC,GADNiC,EAAQA,GAAsB,QAAbQ,EAAKvC,KAElBmC,SAAS8C,gBAAgB,6BAA8B1C,EAAKvC,KAC5DmC,SAASf,cAAcmB,EAAKvC,KAIhC,OAFA6C,EAAY/C,EAASyC,EAAKtC,MAAO8B,GAC7BQ,EAAKrC,UAAUqC,EAAKrC,SAAStC,SAAQ2F,GAASzD,EAAQoE,YAAYlB,EAAOO,EAAOxB,MAC7EjC,CACT,CAWO,SAAS+C,EAAY/C,EAAkBG,EAAW8B,GAEvD,MAAMmD,EAASpF,EAAQkB,IAAe,CAAC,EACvCf,EAZF,SAAoBkF,EAAcC,GAChCA,EAAgB,MAAIA,EAAgB,OAAKA,EAAoB,iBACtDA,EAAoB,UAC3B,MAAMnF,EAAQ,CAAC,EAGf,OAFIkF,GAAUrH,OAAOC,KAAKoH,GAAUvH,SAAQ2C,GAAKN,EAAMM,GAAK,OACxD6E,GAAUtH,OAAOC,KAAKqH,GAAUxH,SAAQ2C,GAAKN,EAAMM,GAAK6E,EAAS7E,KAC9DN,CACT,CAKUoF,CAAWH,EAAQjF,GAAS,CAAC,GACrCH,EAAQkB,GAAcf,EAEtB,IAAK,MAAMpD,KAAQoD,EAAO,CACxB,MAAMV,EAAQU,EAAMpD,GAGpB,GAAIA,EAAKiC,WAAW,SAAU,CAC5B,MACMwG,EADQzI,EAAKuD,UAAU,GACTrB,QAAQ,UAAWwG,GAAUA,EAAM,GAAG5C,gBACtD7C,EAAQ0F,QAAQF,KAAW/F,IACzBA,GAAmB,KAAVA,EAAcO,EAAQ0F,QAAQF,GAAS/F,SACxCO,EAAQ0F,QAAQF,GAEhC,MAAO,GAAa,UAATzI,EAET,GADIiD,EAAQ2F,MAAMC,UAAS5F,EAAQ2F,MAAMC,QAAU,IAC9B,iBAAVnG,EAAoBO,EAAQ2F,MAAMC,QAAUnG,OAErD,IAAK,MAAMoG,KAAKpG,EACVO,EAAQ2F,MAAME,KAAOpG,EAAMoG,KAAI7F,EAAQ2F,MAAME,GAAKpG,EAAMoG,SAG3D,GAAI9I,EAAKiC,WAAW,SAAU,CACnC,MAAM8G,EAAQ/I,EAAKkC,QAAQ,QAAS,IAAI8G,cAC3B,MAATtG,IAA2B,IAAVA,EACnBO,EAAQgG,kBAAkB,+BAAgCF,GAE1D9F,EAAQiG,eAAe,+BAAgCH,EAAOrG,EAElE,MAAW1C,EAAKiC,WAAW,MACpBS,GAA0B,mBAAVA,EAEO,iBAAVA,IACZA,EAAOO,EAAQkG,aAAanJ,EAAM0C,GACjCO,EAAQmG,gBAAgBpJ,IAH7BiD,EAAQjD,GAAQ0C,EAKT,kEAAkE2G,KAAKrJ,IAASkF,EACrFjC,EAAQqG,aAAatJ,KAAU0C,IAC7BA,EAAOO,EAAQkG,aAAanJ,EAAM0C,GACjCO,EAAQmG,gBAAgBpJ,IAEtBiD,EAAQjD,KAAU0C,IAC3BO,EAAQjD,GAAQ0C,GAEL,QAAT1C,GAAkB0C,IAAOkC,EAASlC,GAASO,EACjD,CACIG,GAAiC,mBAAjBA,EAAW,KAC7B5D,OAAO+J,uBAAsB,IAAMnG,EAAW,IAAEH,IAEpD,CA6BA,SAASgC,EAAgBS,EAAMV,EAAQwE,EAAM,G,MAC3C,GAAoB,iBAAT9D,EAAmB,OAAOA,EACrC,GAAI3C,MAAMC,QAAQ0C,GAAO,OAAOA,EAAKhE,KAAIgF,GAASzB,EAAgByB,EAAO1B,EAAQwE,OACjF,IAAI1G,EAAO4C,EAIX,GAHIA,GAA4B,mBAAbA,EAAKvC,KAAsBlC,OAAOwD,eAAeiB,EAAKvC,KAAKuB,sBAC5E5B,EAhCJ,SAA0B4C,EAAMV,EAAQwE,GACtC,MAAM,IAAErG,EAAG,MAAEC,EAAK,SAAEC,GAAaqC,EACjC,IAAIpC,EAAM,IAAIkG,IACVC,EAAKrG,GAASA,EAAU,GACvBqG,EACAnG,EAAMmG,EADFA,EAAK,IAAID,IAAME,KAAKC,QAE7B,IAAIC,EAAQ,UACRxG,GAASA,EAAU,KACrBwG,EAAQxG,EAAU,UACXA,EAAU,IAEd4B,EAAO6E,mBAAkB7E,EAAO6E,iBAAmB,CAAC,GACzD,IAAIrH,EAAYwC,EAAO6E,iBAAiBvG,GACxC,GAAKd,GAAeA,aAAqBW,GAASX,EAAUS,QAI1DT,EAAUsH,YAAYtH,EAAUG,WAJmC,CACnE,MAAMM,EAAUqC,SAASf,cAAcqF,GACvCpH,EAAYwC,EAAO6E,iBAAiBvG,GAAO,IAAIH,EAAI,OAAD,wBAAMC,GAAK,CAAEC,cAAY0G,MAAM9G,EAAS,CAAEoC,QAAQ,GACtG,CAGA,GAAI7C,EAAUwH,QAAS,CACrB,MAAMC,EAAYzH,EAAUwH,QAAQ5G,EAAOC,EAAUb,EAAUG,YACzC,IAAdsH,GAA8BzH,EAAUI,SAASqH,EAC3D,CAEA,OADAjE,EAAYxD,EAAUS,QAASG,GAAO,GAC/BZ,EAAUS,OACnB,CAOWiH,CAAiBxE,EAAMV,EAAQwE,IAEpC1G,GAAQC,MAAMC,QAAQF,EAAKO,UAAW,CACxC,MAAM8G,EAAuB,QAAV,EAAArH,EAAKM,aAAK,eAAEgH,WAC/B,GAAID,EAAY,CACd,IAAI7F,EAAI,EACRxB,EAAKO,SAAWP,EAAKO,SAAS3B,KAAIgF,GAASzB,EAAgByB,EAAOyD,EAAY7F,MAChF,MACExB,EAAKO,SAAWP,EAAKO,SAAS3B,KAAIgF,GAASzB,EAAgByB,EAAO1B,EAAQwE,MAE9E,CACA,OAAO1G,CACT,C,GCjRIuH,EAA2B,CAAC,EAGhC,SAASC,EAAoBC,GAE5B,IAAIC,EAAeH,EAAyBE,GAC5C,QAAqB/F,IAAjBgG,EACH,OAAOA,EAAatL,QAGrB,IAAIC,EAASkL,EAAyBE,GAAY,CAGjDrL,QAAS,CAAC,GAOX,OAHAuL,EAAoBF,GAAUpL,EAAQA,EAAOD,QAASoL,GAG/CnL,EAAOD,OACf,CCrBAoL,EAAoB7C,EAAI,CAACvI,EAASwL,KACjC,IAAI,IAAIpH,KAAOoH,EACXJ,EAAoBK,EAAED,EAAYpH,KAASgH,EAAoBK,EAAEzL,EAASoE,IAC5ErC,OAAO2J,eAAe1L,EAASoE,EAAK,CAAEuH,YAAY,EAAMC,IAAKJ,EAAWpH,IAE1E,ECNDgH,EAAoB7K,EAAI,WACvB,GAA0B,iBAAfsL,WAAyB,OAAOA,WAC3C,IACC,OAAOzL,MAAQ,IAAI0L,SAAS,cAAb,EAChB,CAAE,MAAOxH,GACR,GAAsB,iBAAXhE,OAAqB,OAAOA,MACxC,CACA,CAPuB,GCAxB8K,EAAoBK,EAAI,CAACM,EAAKC,IAAUjK,OAAOkK,UAAUC,eAAeC,KAAKJ,EAAKC,GCClFZ,EAAoBgB,EAAKpM,IACH,oBAAXqM,QAA0BA,OAAOC,aAC1CvK,OAAO2J,eAAe1L,EAASqM,OAAOC,YAAa,CAAE9I,MAAO,WAE7DzB,OAAO2J,eAAe1L,EAAS,aAAc,CAAEwD,OAAO,GAAO,E","sources":["webpack://apprun/webpack/universalModuleDefinition","webpack://apprun/./src/app.ts","webpack://apprun/./src/directive.ts","webpack://apprun/./src/vdom-my.ts","webpack://apprun/webpack/bootstrap","webpack://apprun/webpack/runtime/define property getters","webpack://apprun/webpack/runtime/global","webpack://apprun/webpack/runtime/hasOwnProperty shorthand","webpack://apprun/webpack/runtime/make namespace object"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"apprun\"] = factory();\n\telse\n\t\troot[\"apprun\"] = factory();\n})(this, () => {\nreturn ","/**\n * Core AppRun application class and singleton instance\n *\n * This file provides:\n * 1. App class - The core event system implementation with pub/sub capabilities\n * - on(): Subscribe to events\n * - off(): Unsubscribe from events\n * - run(): Publish events synchronously\n * - runAsync(): Publish events asynchronously\n * - query(): Alias for runAsync\n *\n * 2. Default app singleton - Global event bus instance\n * - Created once and reused across the application\n * - Stored in global scope (window/global)\n * - Version tracked to prevent duplicate instances\n *\n * Usage:\n * ```ts\n * // Subscribe to events\n * app.on('event-name', (state, ...args) => {\n * // Handle event\n * });\n *\n * // Publish events\n * app.run('event-name', ...args);\n * ```\n */\n\nimport { EventOptions } from './types'\n\nexport class App {\n\n _events: { [key: string]: Array<{ fn: (...args: any[]) => any, options: EventOptions }> };\n\n public start: any;\n public h: any;\n public createElement: any;\n public render: any;\n public Fragment: any;\n public webComponent: any;\n public safeHTML: any;\n public use_render: any;\n public use_react: any;\n public route: any;\n\n public version: string;\n\n constructor() {\n this._events = {} as { [key: string]: Array<{ fn: (...args: any[]) => any, options: EventOptions }> };\n }\n\n on(name: string, fn: (...args: any[]) => any, options: EventOptions = {}): void {\n this._events[name] = this._events[name] || [];\n this._events[name].push({ fn, options });\n }\n\n off(name: string, fn: (...args: any[]) => any): void {\n const subscribers = this._events[name] || [];\n\n this._events[name] = subscribers.filter((sub) => sub.fn !== fn);\n }\n\n find(name: string): any {\n return this._events[name];\n }\n\n run(name: string, ...args: any[]): number {\n const subscribers = this.getSubscribers(name, this._events);\n console.assert(subscribers && subscribers.length > 0, 'No subscriber for event: ' + name);\n subscribers.forEach((sub) => {\n const { fn, options } = sub;\n if (options.delay) {\n this.delay(name, fn, args, options);\n } else {\n Object.keys(options).length > 0 ? fn.apply(this, [...args, options]) : fn.apply(this, args);\n }\n return !sub.options.once;\n });\n\n return subscribers.length;\n }\n\n once(name: string, fn: (...args: any[]) => any, options: EventOptions = {}): void {\n this.on(name, fn, { ...options, once: true });\n }\n\n private delay(name: string, fn: (...args: any[]) => any, args: any[], options: EventOptions): void {\n if (options._t) clearTimeout(options._t);\n options._t = setTimeout(() => {\n clearTimeout(options._t);\n Object.keys(options).length > 0 ? fn.apply(this, [...args, options]) : fn.apply(this, args);\n }, options.delay);\n }\n\n runAsync(name: string, ...args: any[]): Promise<any[]> {\n const subscribers = this.getSubscribers(name, this._events);\n console.assert(subscribers && subscribers.length > 0, 'No subscriber for event: ' + name);\n const promises = subscribers.map(sub => {\n const { fn, options } = sub;\n return Object.keys(options).length > 0 ? fn.apply(this, [...args, options]) : fn.apply(this, args);\n });\n return Promise.all(promises);\n }\n\n query(name: string, ...args: any[]): Promise<any[]> {\n return this.runAsync(name, ...args);\n }\n\n private getSubscribers(name: string, events: { [key: string]: Array<{ fn: (...args: any[]) => any, options: EventOptions }> }): Array<{ fn: (...args: any[]) => any, options: EventOptions }> {\n const subscribers = events[name] || [];\n\n // Update the list of subscribers by pulling out those which will run once.\n // We must do this update prior to running any of the events in case they\n // cause additional events to be turned off or on.\n events[name] = subscribers.filter((sub) => {\n return !sub.options.once;\n });\n Object.keys(events).filter(evt => evt.endsWith('*') && name.startsWith(evt.replace('*', '')))\n .sort((a, b) => b.length - a.length)\n .forEach(evt => subscribers.push(...events[evt].map(sub => ({\n ...sub,\n options: { ...sub.options, event: name }\n }))));\n return subscribers;\n }\n}\n\nconst AppRunVersions = 'AppRun-3.3.11';\nlet _app: App;\nconst root = (typeof window !== 'undefined' ? window :\n typeof global !== 'undefined' ? global :\n typeof self !== 'undefined' ? self : {}) as any;\n\nif (root.app && root._AppRunVersions) {\n _app = root.app;\n} else {\n _app = new App();\n root.app = _app;\n root._AppRunVersions = AppRunVersions;\n}\nexport default _app;\n","/**\n * Component Directives Implementation\n * \n * This file provides built-in directives for components:\n * 1. Event Binding\n * - $on: Bind DOM events to component events\n * - Supports event delegation and parameters\n * - Handles function, string, and array event handlers\n * \n * 2. Two-way Data Binding\n * - $bind: Sync form elements with component state\n * - Handles input types: text, checkbox, radio, select\n * - Automatic value type conversion\n * - Support for complex property paths\n * \n * 3. Custom Directives\n * - Extensible directive system\n * - Processes virtual DOM during rendering\n * - Supports custom attribute directives\n * \n * Usage:\n * ```tsx\n * // Event binding\n * <button $onclick=\"event-name\">Click</button>\n * <input $oninput={e => setState(e.target.value)} />\n * \n * // Two-way binding\n * <input $bind=\"state.property\" />\n * <select $bind=\"selected\">...</select>\n * ```\n */\n\nimport app from './app';\n\nconst getStateValue = (component, name) => {\n return (name ? component['state'][name] : component['state']) || '';\n}\n\nconst setStateValue = (component, name, value) => {\n if (name) {\n const state = component['state'] || {};\n state[name] = value;\n component.setState(state);\n } else {\n component.setState(value);\n }\n}\n\nconst apply_directive = (key: string, props: {}, tag, component) => {\n if (key.startsWith('$on')) {\n const event = props[key];\n key = key.substring(1)\n if (typeof event === 'boolean') {\n props[key] = e => component.run ? component.run(key, e) : app.run(key, e);\n } else if (typeof event === 'string') {\n props[key] = e => component.run ? component.run(event, e) : app.run(event, e);\n } else if (typeof event === 'function') {\n props[key] = e => component.setState(event(component.state, e));\n } else if (Array.isArray(event)) {\n const [handler, ...p] = event;\n if (typeof handler === 'string') {\n props[key] = e => component.run ? component.run(handler, ...p, e) : app.run(handler, ...p, e);\n } else if (typeof handler === 'function') {\n props[key] = e => component.setState(handler(component.state, ...p, e));\n }\n }\n\n } else if (key === '$bind') {\n const type = props['type'] || 'text';\n const name = typeof props[key] === 'string' ? props[key] : props['name'];\n if (tag === 'input') {\n switch (type) {\n case 'checkbox':\n props['checked'] = getStateValue(component, name);\n props['onclick'] = e => setStateValue(component, name || e.target.name, e.target.checked);\n break;\n case 'radio':\n props['checked'] = getStateValue(component, name) === props['value'];\n props['onclick'] = e => setStateValue(component, name || e.target.name, e.target.value);\n break;\n case 'number':\n case 'range':\n props['value'] = getStateValue(component, name);\n props['oninput'] = e => setStateValue(component, name || e.target.name, Number(e.target.value));\n break;\n default:\n props['value'] = getStateValue(component, name);\n props['oninput'] = e => setStateValue(component, name || e.target.name, e.target.value);\n }\n } else if (tag === 'select') {\n props['value'] = getStateValue(component, name);\n props['onchange'] = e => {\n if (!e.target.multiple) { // multiple selection use $bind on option\n setStateValue(component, name || e.target.name, e.target.value);\n }\n }\n } else if (tag === 'option') {\n props['selected'] = getStateValue(component, name);\n props['onclick'] = e => setStateValue(component, name || e.target.name, e.target.selected);\n } else if (tag === 'textarea') {\n props['innerHTML'] = getStateValue(component, name);\n props['oninput'] = e => setStateValue(component, name || e.target.name, e.target.value);\n }\n } else {\n app.run('$', { key, tag, props, component });\n }\n}\n\nconst directive = (vdom, component) => {\n if (Array.isArray(vdom)) {\n return vdom.map(element => directive(element, component));\n } else {\n let { type, tag, props, children } = vdom;\n tag = tag || type;\n children = children || props?.children;\n if (props) Object.keys(props).forEach(key => {\n if (key.startsWith('$')) {\n apply_directive(key, props, tag, component);\n delete props[key];\n }\n });\n if (children) directive(children, component);\n return vdom;\n }\n}\n\nexport default directive;\n","import { VDOM, VNode } from './types';\nimport directive from './directive';\nexport type Element = any; //HTMLElement | SVGSVGElement | SVGElement;\n\nexport function Fragment(props, ...children): any[] {\n return collect(children);\n}\n\nconst ATTR_PROPS = '_props';\n\nfunction collect(children) {\n const ch = [];\n const push = (c) => {\n if (c !== null && c !== undefined && c !== '' && c !== false) {\n ch.push((typeof c === 'function' || typeof c === 'object') ? c : `${c}`);\n }\n }\n children && children.forEach(c => {\n if (Array.isArray(c)) {\n c.forEach(i => push(i));\n } else {\n push(c);\n }\n });\n return ch;\n}\n\nexport function createElement(tag: string | Function | [], props?: {}, ...children) {\n const ch = collect(children);\n if (typeof tag === 'string') return { tag, props, children: ch };\n else if (Array.isArray(tag)) return tag; // JSX fragments - babel\n else if (tag === undefined && children) return ch; // JSX fragments - typescript\n else if (Object.getPrototypeOf(tag).__isAppRunComponent) return { tag, props, children: ch } // createComponent(tag, { ...props, children });\n else if (typeof tag === 'function') return tag(props, ch);\n else throw new Error(`Unknown tag in vdom ${tag}`);\n};\n\nconst keyCache = new WeakMap();\n\nexport const updateElement = (element: Element | string, nodes: VDOM, component = {}) => {\n // tslint:disable-next-line\n if (nodes == null || nodes === false) return;\n const el = (typeof element === 'string' && element) ?\n document.getElementById(element) || document.querySelector(element) : element;\n nodes = directive(nodes, component);\n render(el, nodes, component);\n}\n\nfunction render(element: Element, nodes: VDOM, parent = {}) {\n // tslint:disable-next-line\n if (nodes == null || nodes === false) return;\n nodes = createComponent(nodes, parent);\n if (!element) return;\n const isSvg = element.nodeName === \"SVG\";\n if (Array.isArray(nodes)) {\n updateChildren(element, nodes, isSvg);\n } else {\n updateChildren(element, [nodes], isSvg);\n }\n}\n\nfunction same(el: Element, node: VNode) {\n // if (!el || !node) return false;\n const key1 = el.nodeName;\n const key2 = `${node.tag || ''}`;\n return key1.toUpperCase() === key2.toUpperCase();\n}\n\nfunction update(element: Element, node: VNode, isSvg: boolean) {\n if (node['_op'] === 3) return;\n // console.assert(!!element);\n isSvg = isSvg || node.tag === \"svg\";\n if (!same(element, node)) {\n element.parentNode.replaceChild(create(node, isSvg), element);\n return;\n }\n !(node['_op'] & 2) && updateChildren(element, node.children, isSvg);\n !(node['_op'] & 1) && updateProps(element, node.props, isSvg);\n}\n\nfunction updateChildren(element, children, isSvg: boolean) {\n const old_len = element.childNodes?.length || 0;\n const new_len = children?.length || 0;\n const len = Math.min(old_len, new_len);\n for (let i = 0; i < len; i++) {\n const child = children[i];\n if (child['_op'] === 3) continue;\n const el = element.childNodes[i];\n if (typeof child === 'string') {\n if (el.textContent !== child) {\n if (el.nodeType === 3) {\n el.nodeValue = child\n } else {\n element.replaceChild(createText(child), el);\n }\n }\n } else if (child instanceof HTMLElement || child instanceof SVGElement) {\n element.insertBefore(child, el);\n } else {\n const key = child.props && child.props['key'];\n if (key) {\n if (el.key === key) {\n update(element.childNodes[i], child, isSvg);\n } else {\n // console.log(el.key, key);\n const old = keyCache[key];\n if (old) {\n const temp = old.nextSibling;\n element.insertBefore(old, el);\n temp ? element.insertBefore(el, temp) : element.appendChild(el);\n update(element.childNodes[i], child, isSvg);\n } else {\n element.replaceChild(create(child, isSvg), el);\n }\n }\n } else {\n update(element.childNodes[i], child, isSvg);\n }\n }\n }\n\n let n = element.childNodes?.length || 0;\n while (n > len) {\n element.removeChild(element.lastChild);\n n--;\n }\n\n if (new_len > len) {\n const d = document.createDocumentFragment();\n for (let i = len; i < children.length; i++) {\n d.appendChild(create(children[i], isSvg));\n }\n element.appendChild(d);\n }\n}\n\nexport const safeHTML = (html: string) => {\n const div = document.createElement('section');\n div.insertAdjacentHTML('afterbegin', html)\n return Array.from(div.children);\n}\n\nfunction createText(node) {\n if (node?.indexOf('_html:') === 0) { // ?\n const div = document.createElement('div');\n div.insertAdjacentHTML('afterbegin', node.substring(6))\n return div;\n } else {\n return document.createTextNode(node??'');\n }\n}\n\nfunction create(node: VNode | string | HTMLElement | SVGElement, isSvg: boolean): Element {\n // console.assert(node !== null && node !== undefined);\n if ((node instanceof HTMLElement) || (node instanceof SVGElement)) return node;\n if (typeof node === \"string\") return createText(node);\n if (!node.tag || (typeof node.tag === 'function')) return createText(JSON.stringify(node));\n isSvg = isSvg || node.tag === \"svg\";\n const element = isSvg\n ? document.createElementNS(\"http://www.w3.org/2000/svg\", node.tag)\n : document.createElement(node.tag);\n\n updateProps(element, node.props, isSvg);\n if (node.children) node.children.forEach(child => element.appendChild(create(child, isSvg)));\n return element\n}\n\nfunction mergeProps(oldProps: {}, newProps: {}): {} {\n newProps['class'] = newProps['class'] || newProps['className'];\n delete newProps['className'];\n const props = {};\n if (oldProps) Object.keys(oldProps).forEach(p => props[p] = null);\n if (newProps) Object.keys(newProps).forEach(p => props[p] = newProps[p]);\n return props;\n}\n\nexport function updateProps(element: Element, props: {}, isSvg) {\n // console.assert(!!element);\n const cached = element[ATTR_PROPS] || {};\n props = mergeProps(cached, props || {});\n element[ATTR_PROPS] = props;\n\n for (const name in props) {\n const value = props[name];\n // if (cached[name] === value) continue;\n // console.log('updateProps', name, value);\n if (name.startsWith('data-')) {\n const dname = name.substring(5);\n const cname = dname.replace(/-(\\w)/g, (match) => match[1].toUpperCase());\n if (element.dataset[cname] !== value) {\n if (value || value === \"\") element.dataset[cname] = value;\n else delete element.dataset[cname];\n }\n } else if (name === 'style') {\n if (element.style.cssText) element.style.cssText = '';\n if (typeof value === 'string') element.style.cssText = value;\n else {\n for (const s in value) {\n if (element.style[s] !== value[s]) element.style[s] = value[s];\n }\n }\n } else if (name.startsWith('xlink')) {\n const xname = name.replace('xlink', '').toLowerCase();\n if (value == null || value === false) {\n element.removeAttributeNS('http://www.w3.org/1999/xlink', xname);\n } else {\n element.setAttributeNS('http://www.w3.org/1999/xlink', xname, value);\n }\n } else if (name.startsWith('on')) {\n if (!value || typeof value === 'function') {\n element[name] = value;\n } else if (typeof value === 'string') {\n if (value) element.setAttribute(name, value);\n else element.removeAttribute(name);\n }\n } else if (/^id$|^class$|^list$|^readonly$|^contenteditable$|^role|-|^for$/g.test(name) || isSvg) {\n if (element.getAttribute(name) !== value) {\n if (value) element.setAttribute(name, value);\n else element.removeAttribute(name);\n }\n } else if (element[name] !== value) {\n element[name] = value;\n }\n if (name === 'key' && value) keyCache[value] = element;\n }\n if (props && typeof props['ref'] === 'function') {\n window.requestAnimationFrame(() => props['ref'](element));\n }\n}\n\nfunction render_component(node, parent, idx) {\n const { tag, props, children } = node;\n let key = `_${idx}`;\n let id = props && props['id'];\n if (!id) id = `_${idx}${Date.now()}`;\n else key = id;\n let asTag = 'section';\n if (props && props['as']) {\n asTag = props['as'];\n delete props['as'];\n }\n if (!parent.__componentCache) parent.__componentCache = {};\n let component = parent.__componentCache[key];\n if (!component || !(component instanceof tag) || !component.element) {\n const element = document.createElement(asTag);\n component = parent.__componentCache[key] = new tag({ ...props, children }).mount(element, { render: true });\n } else {\n component.renderState(component.state);\n }\n if (component.mounted) {\n const new_state = component.mounted(props, children, component.state);\n (typeof new_state !== 'undefined') && component.setState(new_state);\n }\n updateProps(component.element, props, false);\n return component.element;\n}\n\nfunction createComponent(node, parent, idx = 0) {\n if (typeof node === 'string') return node;\n if (Array.isArray(node)) return node.map(child => createComponent(child, parent, idx++));\n let vdom = node;\n if (node && typeof node.tag === 'function' && Object.getPrototypeOf(node.tag).__isAppRunComponent) {\n vdom = render_component(node, parent, idx);\n }\n if (vdom && Array.isArray(vdom.children)) {\n const new_parent = vdom.props?._component;\n if (new_parent) {\n let i = 0;\n vdom.children = vdom.children.map(child => createComponent(child, new_parent, i++));\n } else {\n vdom.children = vdom.children.map(child => createComponent(child, parent, idx++));\n }\n }\n return vdom;\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};"],"names":["root","factory","exports","module","define","amd","this","_app","window","g","self","app","_AppRunVersions","constructor","_events","on","name","fn","options","push","off","subscribers","filter","sub","find","run","args","getSubscribers","console","assert","length","forEach","delay","Object","keys","apply","once","_t","clearTimeout","setTimeout","runAsync","promises","map","Promise","all","query","events","evt","endsWith","startsWith","replace","sort","a","b","event","getStateValue","component","setStateValue","value","state","setState","directive","vdom","Array","isArray","element","type","tag","props","children","key","substring","e","handler","p","target","checked","Number","multiple","selected","apply_directive","Fragment","collect","ATTR_PROPS","ch","c","i","createElement","undefined","getPrototypeOf","__isAppRunComponent","Error","keyCache","WeakMap","updateElement","nodes","parent","createComponent","isSvg","nodeName","updateChildren","render","document","getElementById","querySelector","update","node","el","key1","key2","toUpperCase","same","updateProps","parentNode","replaceChild","create","old_len","childNodes","new_len","len","Math","min","child","textContent","nodeType","nodeValue","createText","HTMLElement","SVGElement","insertBefore","old","temp","nextSibling","appendChild","n","removeChild","lastChild","d","createDocumentFragment","safeHTML","html","div","insertAdjacentHTML","from","indexOf","createTextNode","JSON","stringify","createElementNS","cached","oldProps","newProps","mergeProps","cname","match","dataset","style","cssText","s","xname","toLowerCase","removeAttributeNS","setAttributeNS","setAttribute","removeAttribute","test","getAttribute","requestAnimationFrame","idx","id","Date","now","asTag","__componentCache","renderState","mount","mounted","new_state","render_component","new_parent","_component","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","definition","o","defineProperty","enumerable","get","globalThis","Function","obj","prop","prototype","hasOwnProperty","call","r","Symbol","toStringTag"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"./jsx-runtime.js","mappings":"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","sources":["webpack://apprun/webpack/universalModuleDefinition","webpack://apprun/./src/app.ts","webpack://apprun/./src/directive.ts","webpack://apprun/./src/type-utils.ts","webpack://apprun/./src/vdom-my.ts","webpack://apprun/./src/version.ts","webpack://apprun/webpack/bootstrap","webpack://apprun/webpack/runtime/define property getters","webpack://apprun/webpack/runtime/global","webpack://apprun/webpack/runtime/hasOwnProperty shorthand","webpack://apprun/webpack/runtime/make namespace object"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"apprun\"] = factory();\n\telse\n\t\troot[\"apprun\"] = factory();\n})(this, () => {\nreturn ","/**\n * Core AppRun application class and singleton instance\n *\n * This file provides:\n * 1. App class - The core event system implementation with pub/sub capabilities\n * - on(): Subscribe to events with options (once, delay, global)\n * - off(): Unsubscribe from events with proper cleanup\n * - run(): Publish events synchronously with error handling\n * - runAsync(): Publish events asynchronously with Promise support\n * - query(): Alias for runAsync for backward compatibility\n *\n * 2. Default app singleton - Global event bus instance\n * - Created once and reused across the application\n * - Stored in global scope (window/global) with version tracking\n * - Prevents duplicate instances across different versions\n *\n * Features:\n * - Event wildcards support (events ending with '*')\n * - Delayed event execution with timeout management\n * - Once-only event subscriptions\n * - Async event handling with Promise.all\n * - Global event bus shared across components\n * - Memory leak prevention with proper cleanup\n *\n * Type Safety Improvements (v3.35.1):\n * - Added validation for event handler functions\n * - Enhanced error handling in event execution\n * - Improved null checks in delayed event handling\n * - Better error reporting for invalid handlers\n *\n * Usage:\n * ```ts\n * // Subscribe to events\n * app.on('event-name', (state, ...args) => {\n * // Handle event\n * });\n *\n * // Publish events\n * app.run('event-name', ...args);\n * \n * // Async events\n * app.runAsync('async-event', data).then(results => {\n * // Handle results\n * });\n * ```\n */\n\nimport { EventOptions } from './types'\nimport { APPRUN_VERSION_GLOBAL } from './version'\n\nexport class App {\n\n _events: { [key: string]: Array<{ fn: (...args: any[]) => any, options: EventOptions }> };\n\n public start: any;\n public h: any;\n public createElement: any;\n public render: any;\n public Fragment: any;\n public webComponent: any;\n public safeHTML: any;\n public use_render: any;\n public use_react: any;\n public route: any;\n\n public version: string;\n\n constructor() {\n this._events = {} as { [key: string]: Array<{ fn: (...args: any[]) => any, options: EventOptions }> };\n }\n\n on(name: string, fn: (...args: any[]) => any, options: EventOptions = {}): void {\n this._events[name] = this._events[name] || [];\n this._events[name].push({ fn, options });\n }\n\n off(name: string, fn: (...args: any[]) => any): void {\n const subscribers = this._events[name] || [];\n\n this._events[name] = subscribers.filter((sub) => sub.fn !== fn);\n }\n\n find(name: string): any {\n return this._events[name];\n }\n\n run(name: string, ...args: any[]): number {\n const subscribers = this.getSubscribers(name, this._events);\n console.assert(subscribers && subscribers.length > 0, 'No subscriber for event: ' + name);\n subscribers.forEach((sub) => {\n const { fn, options } = sub;\n if (!fn || typeof fn !== 'function') {\n console.error(`AppRun event handler for '${name}' is not a function:`, fn);\n return false;\n }\n if (options.delay) {\n this.delay(name, fn, args, options);\n } else {\n try {\n Object.keys(options).length > 0 ? fn.apply(this, [...args, options]) : fn.apply(this, args);\n } catch (error) {\n console.error(`Error in event handler for '${name}':`, error);\n }\n }\n return !sub.options.once;\n });\n\n return subscribers.length;\n }\n\n once(name: string, fn: (...args: any[]) => any, options: EventOptions = {}): void {\n this.on(name, fn, { ...options, once: true });\n }\n\n private delay(name: string, fn: (...args: any[]) => any, args: any[], options: EventOptions): void {\n if (options._t) clearTimeout(options._t);\n options._t = setTimeout(() => {\n clearTimeout(options._t);\n try {\n Object.keys(options).length > 0 ? fn.apply(this, [...args, options]) : fn.apply(this, args);\n } catch (error) {\n console.error(`Error in delayed event handler for '${name}':`, error);\n }\n }, options.delay);\n }\n\n runAsync(name: string, ...args: any[]): Promise<any[]> {\n const subscribers = this.getSubscribers(name, this._events);\n console.assert(subscribers && subscribers.length > 0, 'No subscriber for event: ' + name);\n const promises = subscribers.map(sub => {\n const { fn, options } = sub;\n if (!fn || typeof fn !== 'function') {\n console.error(`AppRun async event handler for '${name}' is not a function:`, fn);\n return Promise.resolve(null);\n }\n try {\n return Object.keys(options).length > 0 ? fn.apply(this, [...args, options]) : fn.apply(this, args);\n } catch (error) {\n console.error(`Error in async event handler for '${name}':`, error);\n return Promise.reject(error);\n }\n });\n return Promise.all(promises);\n }\n\n query(name: string, ...args: any[]): Promise<any[]> {\n return this.runAsync(name, ...args);\n }\n\n private getSubscribers(name: string, events: { [key: string]: Array<{ fn: (...args: any[]) => any, options: EventOptions }> }): Array<{ fn: (...args: any[]) => any, options: EventOptions }> {\n const subscribers = events[name] || [];\n\n // Update the list of subscribers by pulling out those which will run once.\n // We must do this update prior to running any of the events in case they\n // cause additional events to be turned off or on.\n events[name] = subscribers.filter((sub) => {\n return !sub.options.once;\n });\n Object.keys(events).filter(evt => evt.endsWith('*') && name.startsWith(evt.replace('*', '')))\n .sort((a, b) => b.length - a.length)\n .forEach(evt => subscribers.push(...events[evt].map(sub => ({\n ...sub,\n options: { ...sub.options, event: name }\n }))));\n return subscribers;\n }\n}\n\nconst AppRunVersions = APPRUN_VERSION_GLOBAL;\nlet _app: App;\nconst root = (typeof window !== 'undefined' ? window :\n typeof global !== 'undefined' ? global :\n typeof self !== 'undefined' ? self : {}) as any;\n\nif (root.app && root._AppRunVersions) {\n _app = root.app;\n} else {\n _app = new App();\n root.app = _app;\n root._AppRunVersions = AppRunVersions;\n}\nexport default _app;\n","/**\n * Component Directives Implementation\n * \n * This file provides built-in directives for components:\n * 1. Event Binding ($on directives)\n * - $on: Bind DOM events to component events\n * - Supports event delegation and parameters\n * - Handles function, string, and array event handlers\n * - Type-safe event target handling\n * \n * 2. Two-way Data Binding ($bind directive)\n * - $bind: Sync form elements with component state\n * - Handles input types: text, checkbox, radio, number, range\n * - Supports select (single/multiple) and textarea elements\n * - Automatic value type conversion for numbers\n * - Support for complex property paths\n * \n * 3. Custom Directives\n * - Extensible directive system via '$' events\n * - Processes virtual DOM during rendering\n * - Supports custom attribute directives\n * \n * Features:\n * - Automatic state synchronization\n * - Type conversion for form inputs\n * - Event delegation support\n * - Multiple event handler formats\n * - Nested property binding\n * - Custom directive extensibility\n *\n * Type Safety Improvements (v3.35.1):\n * - Added null checks for event targets before type assertions\n * - Proper typing for different HTML element types\n * - Enhanced error handling for invalid event targets\n * - Safer DOM element property access\n *\n * Usage:\n * ```tsx\n * // Event binding\n * <button $onclick=\"event-name\">Click</button>\n * <input $oninput={e => setState(e.target.value)} />\n * \n * // Two-way binding\n * <input $bind=\"state.property\" />\n * <select $bind=\"selected\">...</select>\n * \n * // Array handlers\n * <button $onclick={['handler', param1, param2]}>Click</button>\n * ```\n */\n\nimport app from './app';\nimport { safeEventTarget } from './type-utils';\n\nconst getStateValue = (component, name) => {\n return (name ? component['state'][name] : component['state']) || '';\n}\n\nconst setStateValue = (component, name, value) => {\n if (name) {\n const state = component['state'] || {};\n state[name] = value;\n component.setState(state);\n } else {\n component.setState(value);\n }\n}\n\nconst apply_directive = (key: string, props: {}, tag, component) => {\n if (key.startsWith('$on')) {\n const event = props[key];\n key = key.substring(1)\n if (typeof event === 'boolean') {\n props[key] = e => component.run ? component.run(key, e) : app.run(key, e);\n } else if (typeof event === 'string') {\n props[key] = e => component.run ? component.run(event, e) : app.run(event, e);\n } else if (typeof event === 'function') {\n props[key] = e => component.setState(event(component.state, e));\n } else if (Array.isArray(event)) {\n const [handler, ...p] = event;\n if (typeof handler === 'string') {\n props[key] = e => component.run ? component.run(handler, ...p, e) : app.run(handler, ...p, e);\n } else if (typeof handler === 'function') {\n props[key] = e => component.setState(handler(component.state, ...p, e));\n }\n }\n\n } else if (key === '$bind') {\n const type = props['type'] || 'text';\n const name = typeof props[key] === 'string' ? props[key] : props['name'];\n if (tag === 'input') {\n switch (type) {\n case 'checkbox':\n props['checked'] = getStateValue(component, name);\n props['onclick'] = e => {\n const target = safeEventTarget<HTMLInputElement>(e);\n if (target) {\n setStateValue(component, name || target.name, target.checked);\n }\n };\n break;\n case 'radio':\n props['checked'] = getStateValue(component, name) === props['value'];\n props['onclick'] = e => {\n const target = safeEventTarget<HTMLInputElement>(e);\n if (target) {\n setStateValue(component, name || target.name, target.value);\n }\n };\n break;\n case 'number':\n case 'range':\n props['value'] = getStateValue(component, name);\n props['oninput'] = e => {\n const target = safeEventTarget<HTMLInputElement>(e);\n if (target) {\n setStateValue(component, name || target.name, Number(target.value));\n }\n };\n break;\n default:\n props['value'] = getStateValue(component, name);\n props['oninput'] = e => {\n const target = safeEventTarget<HTMLInputElement>(e);\n if (target) {\n setStateValue(component, name || target.name, target.value);\n }\n };\n }\n } else if (tag === 'select') {\n props['value'] = getStateValue(component, name);\n props['onchange'] = e => {\n const target = safeEventTarget<HTMLSelectElement>(e);\n if (target && !target.multiple) { // multiple selection use $bind on option\n setStateValue(component, name || target.name, target.value);\n }\n }\n } else if (tag === 'option') {\n props['selected'] = getStateValue(component, name);\n props['onclick'] = e => {\n const target = safeEventTarget<HTMLOptionElement>(e);\n if (target) {\n setStateValue(component, name || (target as any).name, target.selected);\n }\n };\n } else if (tag === 'textarea') {\n props['innerHTML'] = getStateValue(component, name);\n props['oninput'] = e => {\n const target = safeEventTarget<HTMLTextAreaElement>(e);\n if (target) {\n setStateValue(component, name || target.name, target.value);\n }\n };\n }\n } else {\n app.run('$', { key, tag, props, component });\n }\n}\n\nconst directive = (vdom, component) => {\n if (Array.isArray(vdom)) {\n return vdom.map(element => directive(element, component));\n } else {\n let { type, tag, props, children } = vdom;\n tag = tag || type;\n children = children || props?.children;\n if (props) Object.keys(props).forEach(key => {\n if (key.startsWith('$')) {\n apply_directive(key, props, tag, component);\n delete props[key];\n }\n });\n if (children) directive(children, component);\n return vdom;\n }\n}\n\nexport default directive;\n","/**\n * Type Safety Utilities for AppRun\n * \n * This file provides utility functions and types to improve type safety\n * across the AppRun framework, including:\n * 1. Safe type assertions with null checks\n * 2. Global object assignment helpers\n * 3. Event target type guards\n * 4. Function validation utilities\n */\n\n/**\n * Safely cast event target to specific HTML element type with null check\n */\nexport function safeEventTarget<T extends HTMLElement = HTMLElement>(event: Event): T | null {\n return event?.target instanceof HTMLElement ? event.target as T : null;\n}\n\n/**\n * Type guard to check if an object is a valid function\n */\nexport function isFunction(obj: any): obj is Function {\n return typeof obj === 'function';\n}\n\n/**\n * Type guard to check if an object is a valid HTML element\n */\nexport function isHTMLElement(obj: any): obj is HTMLElement {\n return obj instanceof HTMLElement;\n}\n\n/**\n * Safely assign properties to global object with type checking\n */\nexport function safeGlobalAssign<T extends Record<string, any>>(\n globalObj: any,\n assignments: T\n): void {\n if (typeof globalObj === 'object' && globalObj !== null) {\n Object.keys(assignments).forEach(key => {\n globalObj[key] = assignments[key];\n });\n }\n}\n\n/**\n * Safely get property from global object with fallback\n */\nexport function safeGlobalGet<T>(\n globalObj: any,\n property: string,\n fallback?: T\n): T | undefined {\n if (typeof globalObj === 'object' && globalObj !== null) {\n return globalObj[property] ?? fallback;\n }\n return fallback;\n}\n\n/**\n * Type-safe wrapper for DOM element queries\n */\nexport function safeQuerySelector<T extends Element = Element>(\n selector: string,\n context: Document | Element = document\n): T | null {\n try {\n return context.querySelector<T>(selector);\n } catch (error) {\n console.warn(`Invalid selector: ${selector}`, error);\n return null;\n }\n}\n\n/**\n * Type-safe wrapper for DOM element by ID\n */\nexport function safeGetElementById<T extends HTMLElement = HTMLElement>(\n id: string\n): T | null {\n try {\n return document.getElementById(id) as T | null;\n } catch (error) {\n console.warn(`Error getting element by id: ${id}`, error);\n return null;\n }\n}\n\n/**\n * Validate and safely execute a function with error handling\n */\nexport function safeExecute<T extends any[], R>(\n fn: ((...args: T) => R) | undefined | null,\n args: T,\n context?: any,\n errorMessage?: string\n): R | undefined {\n if (!isFunction(fn)) {\n if (errorMessage) {\n console.warn(errorMessage, fn);\n }\n return undefined;\n }\n\n try {\n return context ? fn.apply(context, args) : fn(...args);\n } catch (error) {\n console.error(errorMessage || 'Error executing function:', error);\n return undefined;\n }\n}\n\n/**\n * Type definitions for improved global object safety\n */\nexport interface SafeGlobalWindow {\n Component?: any;\n _React?: any;\n React?: any;\n on?: any;\n customElement?: any;\n safeHTML?: any;\n html?: any;\n svg?: any;\n run?: any;\n [key: string]: any;\n}\n\nexport type SafeGlobalContext = SafeGlobalWindow | typeof globalThis | any;\n","import { VDOM, VNode } from './types';\nimport directive from './directive';\nexport type Element = any; //HTMLElement | SVGSVGElement | SVGElement;\n\nexport function Fragment(props, ...children): any[] {\n return collect(children);\n}\n\nconst ATTR_PROPS = '_props';\n\nfunction collect(children) {\n const ch = [];\n const push = (c) => {\n if (c !== null && c !== undefined && c !== '' && c !== false) {\n ch.push((typeof c === 'function' || typeof c === 'object') ? c : `${c}`);\n }\n }\n children && children.forEach(c => {\n if (Array.isArray(c)) {\n c.forEach(i => push(i));\n } else {\n push(c);\n }\n });\n return ch;\n}\n\nexport function createElement(tag: string | Function | [], props?: {}, ...children) {\n const ch = collect(children);\n if (typeof tag === 'string') return { tag, props, children: ch };\n else if (Array.isArray(tag)) return tag; // JSX fragments - babel\n else if (tag === undefined && children) return ch; // JSX fragments - typescript\n else if (Object.getPrototypeOf(tag).__isAppRunComponent) return { tag, props, children: ch } // createComponent(tag, { ...props, children });\n else if (typeof tag === 'function') return tag(props, ch);\n else throw new Error(`Unknown tag in vdom ${tag}`);\n};\n\nconst keyCache = {};\n\nexport const updateElement = (element: Element | string, nodes: VDOM, component = {}) => {\n // tslint:disable-next-line\n if (nodes == null || nodes === false) return;\n const el = (typeof element === 'string' && element) ?\n document.getElementById(element) || document.querySelector(element) : element;\n nodes = directive(nodes, component);\n render(el, nodes, component);\n}\n\nfunction render(element: Element, nodes: VDOM, parent = {}) {\n // tslint:disable-next-line\n if (nodes == null || nodes === false) return;\n nodes = createComponent(nodes, parent);\n if (!element) return;\n const isSvg = element.nodeName === \"SVG\";\n if (Array.isArray(nodes)) {\n updateChildren(element, nodes, isSvg);\n } else {\n updateChildren(element, [nodes], isSvg);\n }\n}\n\nfunction same(el: Element, node: VNode) {\n // if (!el || !node) return false;\n const key1 = el.nodeName;\n const key2 = `${node.tag || ''}`;\n return key1.toUpperCase() === key2.toUpperCase();\n}\n\nfunction update(element: Element, node: VNode, isSvg: boolean) {\n // console.assert(!!element);\n isSvg = isSvg || node.tag === \"svg\";\n if (!same(element, node)) {\n element.parentNode.replaceChild(create(node, isSvg), element);\n return;\n }\n updateChildren(element, node.children, isSvg);\n updateProps(element, node.props, isSvg);\n}\n\nfunction updateChildren(element: Element, children: any[], isSvg: boolean) {\n const old_len = element.childNodes?.length || 0;\n const new_len = children?.length || 0;\n\n // Handle key-based reordering first if any children have keys\n const hasKeysInNewChildren = children?.some(child =>\n child && typeof child === 'object' && child.props && child.props.key !== undefined\n );\n\n if (hasKeysInNewChildren) {\n // Create a map of existing keyed elements\n const existingKeyedElements = new Map();\n for (let i = 0; i < old_len; i++) {\n const el = element.childNodes[i];\n if (el && el.key) {\n existingKeyedElements.set(el.key, el);\n }\n }\n\n // Build new DOM structure\n const fragment = document.createDocumentFragment();\n for (let i = 0; i < new_len; i++) {\n const child = children[i];\n if (child == null) continue;\n\n const key = child.props && child.props['key'];\n if (key && existingKeyedElements.has(key)) {\n // Reuse existing element\n const existingEl = existingKeyedElements.get(key);\n update(existingEl, child as VNode, isSvg);\n fragment.appendChild(existingEl);\n existingKeyedElements.delete(key); // Mark as used\n } else {\n // Create new element\n fragment.appendChild(create(child, isSvg));\n }\n }\n\n // Clear current children and append new structure\n while (element.firstChild) {\n element.removeChild(element.firstChild);\n }\n element.appendChild(fragment);\n return;\n }\n\n // Original non-keyed logic\n const len = Math.min(old_len, new_len);\n for (let i = 0; i < len; i++) {\n const child = children[i];\n if (child == null) continue;\n const el = element.childNodes[i];\n if (!el) continue; // Safety check for undefined childNodes\n if (typeof child === 'string') {\n if (el.nodeType === 3) {\n if (el.nodeValue !== child) {\n el.nodeValue = child;\n }\n } else {\n element.replaceChild(createText(child), el);\n }\n } else if (child instanceof HTMLElement || child instanceof SVGElement) {\n element.replaceChild(child, el);\n } else if (child && typeof child === 'object') {\n update(element.childNodes[i], child as VNode, isSvg);\n }\n }\n\n // Remove extra old nodes\n while (element.childNodes.length > len) {\n element.removeChild(element.lastChild);\n }\n\n if (new_len > len) {\n const d = document.createDocumentFragment();\n for (let i = len; i < children.length; i++) {\n const child = children[i];\n if (child != null) {\n d.appendChild(create(child, isSvg));\n }\n }\n element.appendChild(d);\n }\n}\n\nexport const safeHTML = (html: string) => {\n const div = document.createElement('section');\n div.insertAdjacentHTML('afterbegin', html)\n return Array.from(div.children);\n}\n\nfunction createText(node) {\n if (node?.indexOf('_html:') === 0) { // ?\n const div = document.createElement('div');\n div.insertAdjacentHTML('afterbegin', node.substring(6))\n return div;\n } else {\n return document.createTextNode(node ?? '');\n }\n}\n\nfunction create(node: VNode | string | HTMLElement | SVGElement, isSvg: boolean): Element {\n // console.assert(node !== null && node !== undefined);\n if ((node instanceof HTMLElement) || (node instanceof SVGElement)) return node;\n if (typeof node === \"string\") return createText(node);\n\n // Type guard for VNode objects - handle invalid node types gracefully\n if (!node || typeof node !== 'object' || !node.tag || (typeof node.tag === 'function')) {\n return createText(typeof node === 'object' ? JSON.stringify(node) : String(node ?? ''));\n }\n\n isSvg = isSvg || node.tag === \"svg\";\n const element = isSvg\n ? document.createElementNS(\"http://www.w3.org/2000/svg\", node.tag)\n : document.createElement(node.tag);\n\n updateProps(element, node.props, isSvg);\n if (node.children) node.children.forEach(child => element.appendChild(create(child, isSvg)));\n return element\n}\n\nfunction mergeProps(oldProps: {}, newProps: {}): {} {\n newProps['class'] = newProps['class'] || newProps['className'];\n delete newProps['className'];\n const props = {};\n if (oldProps) Object.keys(oldProps).forEach(p => props[p] = null);\n if (newProps) Object.keys(newProps).forEach(p => props[p] = newProps[p]);\n return props;\n}\n\nexport function updateProps(element: Element, props: {}, isSvg) {\n // console.assert(!!element);\n const cached = element[ATTR_PROPS] || {};\n props = mergeProps(cached, props || {});\n element[ATTR_PROPS] = props;\n\n for (const name in props) {\n const value = props[name];\n // if (cached[name] === value) continue;\n // console.log('updateProps', name, value);\n if (name.startsWith('data-')) {\n const dname = name.substring(5);\n const cname = dname.replace(/-(\\w)/g, (match) => match[1].toUpperCase());\n if (element.dataset[cname] !== value) {\n if (value || value === \"\") element.dataset[cname] = value;\n else delete element.dataset[cname];\n }\n } else if (name === 'style') {\n if (element.style.cssText) element.style.cssText = '';\n if (typeof value === 'string') element.style.cssText = value;\n else {\n for (const s in value) {\n if (element.style[s] !== value[s]) element.style[s] = value[s];\n }\n }\n } else if (name.startsWith('xlink')) {\n const xname = name.replace('xlink', '').toLowerCase();\n if (value == null || value === false) {\n element.removeAttributeNS('http://www.w3.org/1999/xlink', xname);\n } else {\n element.setAttributeNS('http://www.w3.org/1999/xlink', xname, value);\n }\n } else if (name.startsWith('on')) {\n if (!value || typeof value === 'function') {\n element[name] = value;\n } else if (typeof value === 'string') {\n if (value) element.setAttribute(name, value);\n else element.removeAttribute(name);\n }\n } else if (/^id$|^class$|^list$|^readonly$|^contenteditable$|^role|-|^for$/g.test(name) || isSvg) {\n if (element.getAttribute(name) !== value) {\n if (value) element.setAttribute(name, value);\n else element.removeAttribute(name);\n }\n } else if (element[name] !== value) {\n element[name] = value;\n }\n if (name === 'key' && value !== undefined) {\n keyCache[value] = element;\n element.key = value; // Set key property on the DOM element\n }\n }\n if (props && typeof props['ref'] === 'function') {\n window.requestAnimationFrame(() => props['ref'](element));\n }\n}\n\nfunction render_component(node, parent, idx) {\n const { tag, props, children } = node;\n let key = `_${idx}`;\n let id = props && props['id'];\n if (!id) id = `_${idx}${Date.now()}`;\n else key = id;\n let asTag = 'section';\n if (props && props['as']) {\n asTag = props['as'];\n delete props['as'];\n }\n if (!parent.__componentCache) parent.__componentCache = {};\n let component = parent.__componentCache[key];\n if (!component || !(component instanceof tag) || !component.element) {\n const element = document.createElement(asTag);\n component = parent.__componentCache[key] = new tag({ ...props, children }).mount(element, { render: true });\n } else {\n component.renderState(component.state);\n }\n if (component.mounted) {\n const new_state = component.mounted(props, children, component.state);\n (typeof new_state !== 'undefined') && component.setState(new_state);\n }\n updateProps(component.element, props, false);\n return component.element;\n}\n\nfunction createComponent(node, parent, idx = 0) {\n if (typeof node === 'string') return node;\n if (Array.isArray(node)) return node.map(child => createComponent(child, parent, idx++));\n let vdom = node;\n if (node && typeof node.tag === 'function' && Object.getPrototypeOf(node.tag).__isAppRunComponent) {\n vdom = render_component(node, parent, idx);\n }\n if (vdom && Array.isArray(vdom.children)) {\n const new_parent = vdom.props?._component;\n if (new_parent) {\n let i = 0;\n vdom.children = vdom.children.map(child => createComponent(child, new_parent, i++));\n } else {\n vdom.children = vdom.children.map(child => createComponent(child, parent, idx++));\n }\n }\n return vdom;\n}\n","/**\n * Version Management Utility\n * \n * Single source of truth for AppRun version information.\n * This file ensures version consistency across all modules.\n * \n * The version is derived from package.json and should be updated\n * only when the package version changes.\n */\n\n// Import version from package.json to maintain single source of truth\n// This version string is used across the framework\nexport const APPRUN_VERSION = '3.36.0';\n\n// Version string with prefix for global tracking\nexport const APPRUN_VERSION_GLOBAL = `AppRun-${APPRUN_VERSION}`;\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};"],"names":["root","factory","exports","module","define","amd","this","AppRunVersions","_app","window","g","self","app","_AppRunVersions","constructor","_events","on","name","fn","options","push","off","subscribers","filter","sub","find","run","args","getSubscribers","console","assert","length","forEach","error","delay","Object","keys","apply","once","_t","clearTimeout","setTimeout","runAsync","promises","map","Promise","resolve","reject","all","query","events","evt","endsWith","startsWith","replace","sort","a","b","event","getStateValue","component","setStateValue","value","state","setState","directive","vdom","Array","isArray","element","type","tag","props","children","key","substring","e","handler","p","target","checked","Number","multiple","selected","apply_directive","safeEventTarget","HTMLElement","Fragment","collect","ATTR_PROPS","ch","c","i","createElement","undefined","getPrototypeOf","__isAppRunComponent","Error","keyCache","updateElement","nodes","parent","createComponent","isSvg","nodeName","updateChildren","render","document","getElementById","querySelector","update","node","el","key1","key2","toUpperCase","same","updateProps","parentNode","replaceChild","create","old_len","childNodes","new_len","some","child","existingKeyedElements","Map","set","fragment","createDocumentFragment","has","existingEl","get","appendChild","delete","firstChild","removeChild","len","Math","min","nodeType","nodeValue","createText","SVGElement","lastChild","d","safeHTML","html","div","insertAdjacentHTML","from","indexOf","createTextNode","JSON","stringify","String","createElementNS","cached","oldProps","newProps","mergeProps","cname","match","dataset","style","cssText","s","xname","toLowerCase","removeAttributeNS","setAttributeNS","setAttribute","removeAttribute","test","getAttribute","requestAnimationFrame","idx","id","Date","now","asTag","__componentCache","renderState","mount","mounted","new_state","render_component","new_parent","_component","APPRUN_VERSION_GLOBAL","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","definition","o","defineProperty","enumerable","globalThis","Function","obj","prop","prototype","hasOwnProperty","call","r","Symbol","toStringTag"],"sourceRoot":""}
|
package/package.json
CHANGED
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
# AppRun.ts Bug Fixes Implementation Plan
|
|
2
|
+
|
|
3
|
+
## 🎉 PHASE 1 COMPLETE: All Critical Bugs Fixed!
|
|
4
|
+
|
|
5
|
+
**Status**: All 4 critical Phase 1 bugs have been successfully resolved and committed.
|
|
6
|
+
|
|
7
|
+
**Commits**: `072d033`, `fc6469f`, router fix, `93e0371`
|
|
8
|
+
|
|
9
|
+
**Impact**:
|
|
10
|
+
- ✅ TypeScript declarations now match implementation perfectly
|
|
11
|
+
- ✅ Version consistency established across all files
|
|
12
|
+
- ✅ Router initialization logic corrected (critical routing bug fixed)
|
|
13
|
+
- ✅ React 18+ integration improved with proper validation
|
|
14
|
+
|
|
15
|
+
## Overview
|
|
16
|
+
This plan addresses the critical bugs and issues identified in the AppRun framework, focusing on the main `apprun.ts` file and related dependencies. The fixes are prioritized by severity and impact.
|
|
17
|
+
|
|
18
|
+
## ✅ Completed Fixes
|
|
19
|
+
|
|
20
|
+
### 1. TypeScript Declaration File Mismatches - **COMPLETED**
|
|
21
|
+
- [x] **CRITICAL**: Fix `IApp.use_react` signature mismatch
|
|
22
|
+
- d.ts: `use_react(React, ReactDOM)`
|
|
23
|
+
- Implementation: `use_react(createRoot)` - Fixed parameter signature!
|
|
24
|
+
- [x] Fix missing `once` method in `IApp` interface implementation
|
|
25
|
+
- [x] Fix missing `query` method in `IApp` interface (marked obsolete but still exists)
|
|
26
|
+
- [x] Fix missing `version` property in IApp interface implementation
|
|
27
|
+
- [x] Fix missing `mounted` callback in `AppStartOptions<T>` interface
|
|
28
|
+
- [x] Fix `Component.render` method signature mismatch - Removed from d.ts
|
|
29
|
+
- [x] Fix `AppStartOptions` missing `mounted` callback parameter
|
|
30
|
+
- [x] Sync VNode type definition between d.ts and types.ts
|
|
31
|
+
- **Git Commit**: `072d033` - All TypeScript declaration mismatches resolved
|
|
32
|
+
|
|
33
|
+
### 2. Version Synchronization - **COMPLETED**
|
|
34
|
+
- [x] Fix version mismatch between `apprun.ts` (3.35.0) and `app.ts` (3.3.11)
|
|
35
|
+
- [x] Establish single source of truth for version management
|
|
36
|
+
- [x] Update version constants to match across all files
|
|
37
|
+
- **Implementation**: Created `/src/version.ts` utility with `APPRUN_VERSION` constant
|
|
38
|
+
- **Git Commit**: Ready for commit
|
|
39
|
+
|
|
40
|
+
## High Priority Fixes (Critical Bugs)
|
|
41
|
+
|
|
42
|
+
### 2. Version Synchronization - **COMPLETED**
|
|
43
|
+
- [x] Fix version mismatch between `apprun.ts` (3.35.0) and `app.ts` (3.3.11)
|
|
44
|
+
- [x] Establish single source of truth for version management
|
|
45
|
+
- [x] Update version constants to match across all files
|
|
46
|
+
- **Implementation**: Created `/src/version.ts` utility with `APPRUN_VERSION` constant
|
|
47
|
+
- **Git Commit**: Ready for commit
|
|
48
|
+
|
|
49
|
+
### 3. Router Logic Correction - **COMPLETED**
|
|
50
|
+
- [x] Fix inverted router initialization logic in `apprun.ts` lines 134-137
|
|
51
|
+
- Problem: `init_load && route()` should be `!init_load && route()`
|
|
52
|
+
- When `apprun-no-init` attribute is present, routing should be DISABLED
|
|
53
|
+
- Current logic routes when disabled and doesn't route when enabled (inverted!)
|
|
54
|
+
- **Fixed**: Changed logic to `!init_load && route()` for correct behavior
|
|
55
|
+
- [x] Correct `init_load` boolean logic to properly respect no-init flags
|
|
56
|
+
- [x] Test router behavior with and without init flags
|
|
57
|
+
|
|
58
|
+
### 4. React 18+ Integration Fix
|
|
59
|
+
- [X] Fix missing `ReactDOM` parameter in `use_react` method (matches d.ts issue above)
|
|
60
|
+
- [X] Ensure React 18+ createRoot functionality works correctly
|
|
61
|
+
- [X] Add proper parameter validation for React integration
|
|
62
|
+
|
|
63
|
+
## Medium Priority Fixes (Type Safety & Reliability)
|
|
64
|
+
|
|
65
|
+
### 5. Additional TypeScript Declaration Mismatches
|
|
66
|
+
|
|
67
|
+
### 6. Type Safety Improvements - **COMPLETED**
|
|
68
|
+
- [x] Add null checks before type assertions in event handlers
|
|
69
|
+
- [x] Improve generic type constraints for window object assignments
|
|
70
|
+
- [x] Add proper TypeScript types for global assignments
|
|
71
|
+
- [x] Enhanced React integration parameter validation
|
|
72
|
+
- [x] Better error handling in event system
|
|
73
|
+
- [x] Safer DOM element access with proper validation
|
|
74
|
+
- **Implementation**: Enhanced type safety across multiple files
|
|
75
|
+
- **Git Commit**: Ready for commit
|
|
76
|
+
|
|
77
|
+
### 7. Memory Leak Prevention
|
|
78
|
+
- [ ] Implement cleanup mechanism for DOM event listeners
|
|
79
|
+
- [ ] Add component cache cleanup strategy
|
|
80
|
+
- [ ] Create proper unsubscribe methods for router events
|
|
81
|
+
|
|
82
|
+
### 8. Global State Management
|
|
83
|
+
- [ ] Preserve existing React global before overwriting
|
|
84
|
+
- [ ] Add safety checks for global object modifications
|
|
85
|
+
- [ ] Implement proper global state restoration
|
|
86
|
+
|
|
87
|
+
## Low Priority Fixes (Performance & Edge Cases)
|
|
88
|
+
|
|
89
|
+
### 9. Document Ready State Handling
|
|
90
|
+
- [ ] Add check for document.readyState === 'complete'
|
|
91
|
+
- [ ] Handle late script loading scenarios
|
|
92
|
+
- [ ] Ensure initialization occurs regardless of load timing
|
|
93
|
+
|
|
94
|
+
### 10. Router Edge Cases
|
|
95
|
+
- [ ] Add validation for malformed URLs
|
|
96
|
+
- [ ] Implement error boundaries for routing failures
|
|
97
|
+
- [ ] Handle empty/undefined route scenarios
|
|
98
|
+
|
|
99
|
+
### 11. Performance Optimizations
|
|
100
|
+
- [ ] Cache expensive DOM queries (`app.find('#')`, `app.find('#/')`)
|
|
101
|
+
- [ ] Optimize repeated lookups in router logic
|
|
102
|
+
- [ ] Reduce unnecessary event listener registrations
|
|
103
|
+
|
|
104
|
+
## Testing & Validation
|
|
105
|
+
|
|
106
|
+
### 12. Test Coverage - **COMPLETED**
|
|
107
|
+
- [x] Create unit tests for fixed router logic
|
|
108
|
+
- [x] Add integration tests for React compatibility
|
|
109
|
+
- [x] Test memory leak scenarios with repeated component mounting
|
|
110
|
+
- [x] Validate version consistency across builds
|
|
111
|
+
- [x] Test TypeScript declaration file accuracy
|
|
112
|
+
- **Implementation**: Created comprehensive test suites covering all critical bug fixes
|
|
113
|
+
- `router-fix.spec.ts`: Tests router initialization logic and no-init attribute behavior
|
|
114
|
+
- `react-compatibility.spec.ts`: Tests React 18+ integration and parameter validation
|
|
115
|
+
- `memory-leak.spec.ts`: Tests component lifecycle and event system memory management
|
|
116
|
+
- `version-consistency.spec.ts`: Tests version synchronization and single source of truth
|
|
117
|
+
- `typescript-declarations.spec.ts`: Tests TypeScript interface compliance and accuracy
|
|
118
|
+
- **Git Commit**: Ready for commit
|
|
119
|
+
|
|
120
|
+
### 13. Regression Testing
|
|
121
|
+
- [ ] Test existing functionality after each fix
|
|
122
|
+
- [ ] Verify backward compatibility
|
|
123
|
+
- [ ] Check for any breaking changes in public API
|
|
124
|
+
|
|
125
|
+
## Implementation Strategy
|
|
126
|
+
|
|
127
|
+
### Phase 1: Critical Fixes
|
|
128
|
+
1. TypeScript declaration file mismatches
|
|
129
|
+
2. Version synchronization
|
|
130
|
+
3. Router logic correction
|
|
131
|
+
4. React integration fix
|
|
132
|
+
|
|
133
|
+
### Phase 2: Safety & Reliability
|
|
134
|
+
5. Additional TypeScript declaration mismatches
|
|
135
|
+
6. Type safety improvements
|
|
136
|
+
7. Memory leak prevention
|
|
137
|
+
8. Global state management
|
|
138
|
+
|
|
139
|
+
### Phase 3: Polish & Optimization
|
|
140
|
+
9. Document ready state handling
|
|
141
|
+
10. Router edge cases
|
|
142
|
+
11. Performance optimizations
|
|
143
|
+
12. Testing & validation
|
|
144
|
+
|
|
145
|
+
## Files to be Modified
|
|
146
|
+
|
|
147
|
+
### Primary Files
|
|
148
|
+
- [ ] `/src/apprun.ts` - Main entry point fixes
|
|
149
|
+
- [ ] `/src/app.ts` - Version constant update
|
|
150
|
+
- [ ] `/src/router.ts` - Edge case handling
|
|
151
|
+
- [ ] `/apprun.d.ts` - TypeScript declaration fixes
|
|
152
|
+
|
|
153
|
+
### Secondary Files
|
|
154
|
+
- [ ] `/src/types.ts` - Type safety improvements
|
|
155
|
+
- [ ] `/src/component.ts` - Memory management fixes
|
|
156
|
+
|
|
157
|
+
### New Files
|
|
158
|
+
- [ ] Create version management utility
|
|
159
|
+
- [ ] Add cleanup utility functions
|
|
160
|
+
- [ ] Create router validation helpers
|
|
161
|
+
|
|
162
|
+
## Risk Assessment
|
|
163
|
+
|
|
164
|
+
### Low Risk
|
|
165
|
+
- Version synchronization
|
|
166
|
+
- Type safety improvements
|
|
167
|
+
- Performance optimizations
|
|
168
|
+
- TypeScript declaration fixes
|
|
169
|
+
|
|
170
|
+
### Medium Risk
|
|
171
|
+
- Router logic changes
|
|
172
|
+
- Memory management modifications
|
|
173
|
+
- Global state handling
|
|
174
|
+
|
|
175
|
+
### High Risk
|
|
176
|
+
- React integration changes (potential breaking changes)
|
|
177
|
+
- Event listener cleanup (could affect existing apps)
|
|
178
|
+
|
|
179
|
+
## Rollback Strategy
|
|
180
|
+
- [ ] Create backup of current working version
|
|
181
|
+
- [ ] Implement feature flags for major changes
|
|
182
|
+
- [ ] Maintain backward compatibility where possible
|
|
183
|
+
- [ ] Document any breaking changes clearly
|
|
184
|
+
|
|
185
|
+
## Success Criteria
|
|
186
|
+
- [ ] All identified bugs fixed without introducing new issues
|
|
187
|
+
- [ ] No breaking changes to public API
|
|
188
|
+
- [ ] Memory usage remains stable or improves
|
|
189
|
+
- [ ] Router functionality works correctly in all scenarios
|
|
190
|
+
- [ ] React integration works with all supported versions
|
|
191
|
+
- [ ] All tests pass including new regression tests
|
|
192
|
+
|
|
193
|
+
## Timeline Estimate
|
|
194
|
+
- Phase 1 (Critical): 2-3 days
|
|
195
|
+
- Phase 2 (Safety): 2-3 days
|
|
196
|
+
- Phase 3 (Polish): 1-2 days
|
|
197
|
+
- Testing & Validation: 1-2 days
|
|
198
|
+
- **Total Estimated Time: 6-10 days**
|
|
199
|
+
|
|
200
|
+
## Dependencies
|
|
201
|
+
- No external dependencies for core fixes
|
|
202
|
+
- May need to update build scripts for version management
|
|
203
|
+
- Testing framework should be available for validation
|
|
204
|
+
|
|
205
|
+
---
|
|
206
|
+
|
|
207
|
+
**Note**: This plan should be reviewed and approved before implementation begins. Each checkbox represents a discrete task that can be implemented and tested independently.
|
package/src/app.ts
CHANGED
|
@@ -3,16 +3,30 @@
|
|
|
3
3
|
*
|
|
4
4
|
* This file provides:
|
|
5
5
|
* 1. App class - The core event system implementation with pub/sub capabilities
|
|
6
|
-
* - on(): Subscribe to events
|
|
7
|
-
* - off(): Unsubscribe from events
|
|
8
|
-
* - run(): Publish events synchronously
|
|
9
|
-
* - runAsync(): Publish events asynchronously
|
|
10
|
-
* - query(): Alias for runAsync
|
|
6
|
+
* - on(): Subscribe to events with options (once, delay, global)
|
|
7
|
+
* - off(): Unsubscribe from events with proper cleanup
|
|
8
|
+
* - run(): Publish events synchronously with error handling
|
|
9
|
+
* - runAsync(): Publish events asynchronously with Promise support
|
|
10
|
+
* - query(): Alias for runAsync for backward compatibility
|
|
11
11
|
*
|
|
12
12
|
* 2. Default app singleton - Global event bus instance
|
|
13
13
|
* - Created once and reused across the application
|
|
14
|
-
* - Stored in global scope (window/global)
|
|
15
|
-
* -
|
|
14
|
+
* - Stored in global scope (window/global) with version tracking
|
|
15
|
+
* - Prevents duplicate instances across different versions
|
|
16
|
+
*
|
|
17
|
+
* Features:
|
|
18
|
+
* - Event wildcards support (events ending with '*')
|
|
19
|
+
* - Delayed event execution with timeout management
|
|
20
|
+
* - Once-only event subscriptions
|
|
21
|
+
* - Async event handling with Promise.all
|
|
22
|
+
* - Global event bus shared across components
|
|
23
|
+
* - Memory leak prevention with proper cleanup
|
|
24
|
+
*
|
|
25
|
+
* Type Safety Improvements (v3.35.1):
|
|
26
|
+
* - Added validation for event handler functions
|
|
27
|
+
* - Enhanced error handling in event execution
|
|
28
|
+
* - Improved null checks in delayed event handling
|
|
29
|
+
* - Better error reporting for invalid handlers
|
|
16
30
|
*
|
|
17
31
|
* Usage:
|
|
18
32
|
* ```ts
|
|
@@ -23,10 +37,16 @@
|
|
|
23
37
|
*
|
|
24
38
|
* // Publish events
|
|
25
39
|
* app.run('event-name', ...args);
|
|
40
|
+
*
|
|
41
|
+
* // Async events
|
|
42
|
+
* app.runAsync('async-event', data).then(results => {
|
|
43
|
+
* // Handle results
|
|
44
|
+
* });
|
|
26
45
|
* ```
|
|
27
46
|
*/
|
|
28
47
|
|
|
29
48
|
import { EventOptions } from './types'
|
|
49
|
+
import { APPRUN_VERSION_GLOBAL } from './version'
|
|
30
50
|
|
|
31
51
|
export class App {
|
|
32
52
|
|
|
@@ -69,10 +89,18 @@ export class App {
|
|
|
69
89
|
console.assert(subscribers && subscribers.length > 0, 'No subscriber for event: ' + name);
|
|
70
90
|
subscribers.forEach((sub) => {
|
|
71
91
|
const { fn, options } = sub;
|
|
92
|
+
if (!fn || typeof fn !== 'function') {
|
|
93
|
+
console.error(`AppRun event handler for '${name}' is not a function:`, fn);
|
|
94
|
+
return false;
|
|
95
|
+
}
|
|
72
96
|
if (options.delay) {
|
|
73
97
|
this.delay(name, fn, args, options);
|
|
74
98
|
} else {
|
|
75
|
-
|
|
99
|
+
try {
|
|
100
|
+
Object.keys(options).length > 0 ? fn.apply(this, [...args, options]) : fn.apply(this, args);
|
|
101
|
+
} catch (error) {
|
|
102
|
+
console.error(`Error in event handler for '${name}':`, error);
|
|
103
|
+
}
|
|
76
104
|
}
|
|
77
105
|
return !sub.options.once;
|
|
78
106
|
});
|
|
@@ -88,7 +116,11 @@ export class App {
|
|
|
88
116
|
if (options._t) clearTimeout(options._t);
|
|
89
117
|
options._t = setTimeout(() => {
|
|
90
118
|
clearTimeout(options._t);
|
|
91
|
-
|
|
119
|
+
try {
|
|
120
|
+
Object.keys(options).length > 0 ? fn.apply(this, [...args, options]) : fn.apply(this, args);
|
|
121
|
+
} catch (error) {
|
|
122
|
+
console.error(`Error in delayed event handler for '${name}':`, error);
|
|
123
|
+
}
|
|
92
124
|
}, options.delay);
|
|
93
125
|
}
|
|
94
126
|
|
|
@@ -97,7 +129,16 @@ export class App {
|
|
|
97
129
|
console.assert(subscribers && subscribers.length > 0, 'No subscriber for event: ' + name);
|
|
98
130
|
const promises = subscribers.map(sub => {
|
|
99
131
|
const { fn, options } = sub;
|
|
100
|
-
|
|
132
|
+
if (!fn || typeof fn !== 'function') {
|
|
133
|
+
console.error(`AppRun async event handler for '${name}' is not a function:`, fn);
|
|
134
|
+
return Promise.resolve(null);
|
|
135
|
+
}
|
|
136
|
+
try {
|
|
137
|
+
return Object.keys(options).length > 0 ? fn.apply(this, [...args, options]) : fn.apply(this, args);
|
|
138
|
+
} catch (error) {
|
|
139
|
+
console.error(`Error in async event handler for '${name}':`, error);
|
|
140
|
+
return Promise.reject(error);
|
|
141
|
+
}
|
|
101
142
|
});
|
|
102
143
|
return Promise.all(promises);
|
|
103
144
|
}
|
|
@@ -125,7 +166,7 @@ export class App {
|
|
|
125
166
|
}
|
|
126
167
|
}
|
|
127
168
|
|
|
128
|
-
const AppRunVersions =
|
|
169
|
+
const AppRunVersions = APPRUN_VERSION_GLOBAL;
|
|
129
170
|
let _app: App;
|
|
130
171
|
const root = (typeof window !== 'undefined' ? window :
|
|
131
172
|
typeof global !== 'undefined' ? global :
|
package/src/apprun-html.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import app from './apprun'
|
|
2
|
+
import { safeGlobalAssign, SafeGlobalContext } from './type-utils';
|
|
2
3
|
export {
|
|
3
4
|
app, Component, View, Action, Update, on, update, event, EventOptions,
|
|
4
5
|
customElement, CustomElementOptions,
|
|
@@ -14,8 +15,11 @@ app.Fragment = Fragment;
|
|
|
14
15
|
export default app;
|
|
15
16
|
|
|
16
17
|
if (typeof window === 'object') {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
18
|
+
const globalWindow = window as SafeGlobalContext;
|
|
19
|
+
safeGlobalAssign(globalWindow, {
|
|
20
|
+
'React': globalWindow['_React'] || app,
|
|
21
|
+
'html': html,
|
|
22
|
+
'svg': svg,
|
|
23
|
+
'run': run
|
|
24
|
+
});
|
|
21
25
|
}
|