@adaas/are 0.0.2 → 0.0.4

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.
Files changed (760) hide show
  1. package/.conf/tsconfig.base.json +25 -32
  2. package/.conf/tsconfig.browser.json +24 -32
  3. package/.conf/tsconfig.node.json +24 -33
  4. package/CHANGELOG.md +39 -0
  5. package/LICENSE +10 -19
  6. package/README.md +216 -2
  7. package/dist/browser/index.d.mts +1375 -727
  8. package/dist/browser/index.mjs +2812 -2170
  9. package/dist/browser/index.mjs.map +1 -1
  10. package/dist/node/Are.context-9Ija_fdC.d.ts +846 -0
  11. package/dist/node/Are.context-D7w32H1G.d.mts +846 -0
  12. package/dist/node/index.d.mts +32 -31
  13. package/dist/node/index.d.ts +32 -31
  14. package/dist/node/index.js +371 -42
  15. package/dist/node/index.mjs +61 -14
  16. package/dist/node/lib/AreAttribute/AreAttribute.constants.d.mts +24 -0
  17. package/dist/node/lib/AreAttribute/AreAttribute.constants.d.ts +24 -0
  18. package/dist/node/lib/AreAttribute/AreAttribute.constants.js +28 -0
  19. package/dist/node/lib/AreAttribute/AreAttribute.constants.js.map +1 -0
  20. package/dist/node/lib/AreAttribute/AreAttribute.constants.mjs +28 -0
  21. package/dist/node/lib/AreAttribute/AreAttribute.constants.mjs.map +1 -0
  22. package/dist/node/lib/AreAttribute/AreAttribute.entity.d.mts +14 -0
  23. package/dist/node/lib/AreAttribute/AreAttribute.entity.d.ts +14 -0
  24. package/dist/node/lib/AreAttribute/AreAttribute.entity.js +113 -0
  25. package/dist/node/lib/AreAttribute/AreAttribute.entity.js.map +1 -0
  26. package/dist/node/lib/AreAttribute/AreAttribute.entity.mjs +104 -0
  27. package/dist/node/lib/AreAttribute/AreAttribute.entity.mjs.map +1 -0
  28. package/dist/node/lib/AreAttribute/AreAttribute.types.d.mts +47 -0
  29. package/dist/node/lib/AreAttribute/AreAttribute.types.d.ts +47 -0
  30. package/dist/node/lib/AreAttribute/AreAttribute.types.js +4 -0
  31. package/dist/node/lib/AreAttribute/AreAttribute.types.js.map +1 -0
  32. package/dist/node/lib/AreAttribute/AreAttribute.types.mjs +3 -0
  33. package/dist/node/lib/AreAttribute/AreAttribute.types.mjs.map +1 -0
  34. package/dist/node/lib/AreCompiler/AreCompiler.component.d.mts +19 -224
  35. package/dist/node/lib/AreCompiler/AreCompiler.component.d.ts +19 -224
  36. package/dist/node/lib/AreCompiler/AreCompiler.component.js +31 -607
  37. package/dist/node/lib/AreCompiler/AreCompiler.component.js.map +1 -1
  38. package/dist/node/lib/AreCompiler/AreCompiler.component.mjs +29 -605
  39. package/dist/node/lib/AreCompiler/AreCompiler.component.mjs.map +1 -1
  40. package/dist/node/lib/AreComponent/Are.component.d.mts +59 -7
  41. package/dist/node/lib/AreComponent/Are.component.d.ts +59 -7
  42. package/dist/node/lib/AreComponent/Are.component.js +84 -25
  43. package/dist/node/lib/AreComponent/Are.component.js.map +1 -1
  44. package/dist/node/lib/AreComponent/Are.component.mjs +85 -26
  45. package/dist/node/lib/AreComponent/Are.component.mjs.map +1 -1
  46. package/dist/node/lib/AreComponent/Are.constants.d.mts +46 -30
  47. package/dist/node/lib/AreComponent/Are.constants.d.ts +46 -30
  48. package/dist/node/lib/AreComponent/Are.constants.js +58 -21
  49. package/dist/node/lib/AreComponent/Are.constants.js.map +1 -1
  50. package/dist/node/lib/AreComponent/Are.constants.mjs +58 -21
  51. package/dist/node/lib/AreComponent/Are.constants.mjs.map +1 -1
  52. package/dist/node/lib/AreComponent/Are.context.d.mts +13 -21
  53. package/dist/node/lib/AreComponent/Are.context.d.ts +13 -21
  54. package/dist/node/lib/AreComponent/Are.context.js +91 -2
  55. package/dist/node/lib/AreComponent/Are.context.js.map +1 -1
  56. package/dist/node/lib/AreComponent/Are.context.mjs +92 -3
  57. package/dist/node/lib/AreComponent/Are.context.mjs.map +1 -1
  58. package/dist/node/lib/AreComponent/Are.meta.d.mts +14 -0
  59. package/dist/node/lib/AreComponent/Are.meta.d.ts +14 -0
  60. package/dist/node/lib/AreComponent/Are.meta.js +10 -0
  61. package/dist/node/lib/AreComponent/Are.meta.js.map +1 -0
  62. package/dist/node/lib/AreComponent/Are.meta.mjs +9 -0
  63. package/dist/node/lib/AreComponent/Are.meta.mjs.map +1 -0
  64. package/dist/node/lib/AreComponent/Are.types.d.mts +30 -1
  65. package/dist/node/lib/AreComponent/Are.types.d.ts +30 -1
  66. package/dist/node/lib/AreEngine/AreEngine.component.d.mts +77 -0
  67. package/dist/node/lib/AreEngine/AreEngine.component.d.ts +77 -0
  68. package/dist/node/lib/AreEngine/AreEngine.component.js +259 -0
  69. package/dist/node/lib/AreEngine/AreEngine.component.js.map +1 -0
  70. package/dist/node/lib/AreEngine/AreEngine.component.mjs +249 -0
  71. package/dist/node/lib/AreEngine/AreEngine.component.mjs.map +1 -0
  72. package/dist/node/lib/AreEngine/AreEngine.constants.d.mts +7 -0
  73. package/dist/node/lib/AreEngine/AreEngine.constants.d.ts +7 -0
  74. package/dist/node/lib/AreEngine/AreEngine.constants.js +11 -0
  75. package/dist/node/lib/AreEngine/AreEngine.constants.js.map +1 -0
  76. package/dist/node/lib/AreEngine/AreEngine.constants.mjs +11 -0
  77. package/dist/node/lib/AreEngine/AreEngine.constants.mjs.map +1 -0
  78. package/dist/node/lib/AreEngine/AreEngine.error.d.mts +7 -0
  79. package/dist/node/lib/AreEngine/AreEngine.error.d.ts +7 -0
  80. package/dist/node/lib/AreEngine/AreEngine.error.js +11 -0
  81. package/dist/node/lib/AreEngine/AreEngine.error.js.map +1 -0
  82. package/dist/node/lib/AreEngine/AreEngine.error.mjs +10 -0
  83. package/dist/node/lib/AreEngine/AreEngine.error.mjs.map +1 -0
  84. package/dist/node/lib/AreEngine/AreEngine.types.d.mts +40 -0
  85. package/dist/node/lib/AreEngine/AreEngine.types.d.ts +40 -0
  86. package/dist/node/lib/AreEngine/AreEngine.types.js +4 -0
  87. package/dist/node/lib/AreEngine/AreEngine.types.js.map +1 -0
  88. package/dist/node/lib/AreEngine/AreEngine.types.mjs +3 -0
  89. package/dist/node/lib/AreEngine/AreEngine.types.mjs.map +1 -0
  90. package/dist/node/lib/AreEvent/AreEvent.context.d.mts +6 -8
  91. package/dist/node/lib/AreEvent/AreEvent.context.d.ts +6 -8
  92. package/dist/node/lib/AreEvent/AreEvent.context.js +2 -12
  93. package/dist/node/lib/AreEvent/AreEvent.context.js.map +1 -1
  94. package/dist/node/lib/AreEvent/AreEvent.context.mjs +2 -12
  95. package/dist/node/lib/AreEvent/AreEvent.context.mjs.map +1 -1
  96. package/dist/node/lib/AreInstruction/AreInstruction.constants.d.mts +21 -0
  97. package/dist/node/lib/AreInstruction/AreInstruction.constants.d.ts +21 -0
  98. package/dist/node/lib/AreInstruction/AreInstruction.constants.js +26 -0
  99. package/dist/node/lib/AreInstruction/AreInstruction.constants.js.map +1 -0
  100. package/dist/node/lib/AreInstruction/AreInstruction.constants.mjs +25 -0
  101. package/dist/node/lib/AreInstruction/AreInstruction.constants.mjs.map +1 -0
  102. package/dist/node/lib/AreInstruction/AreInstruction.entity.d.mts +14 -0
  103. package/dist/node/lib/AreInstruction/AreInstruction.entity.d.ts +14 -0
  104. package/dist/node/lib/AreInstruction/AreInstruction.entity.js +152 -0
  105. package/dist/node/lib/AreInstruction/AreInstruction.entity.js.map +1 -0
  106. package/dist/node/lib/AreInstruction/AreInstruction.entity.mjs +145 -0
  107. package/dist/node/lib/AreInstruction/AreInstruction.entity.mjs.map +1 -0
  108. package/dist/node/lib/AreInstruction/AreInstruction.error.d.mts +6 -0
  109. package/dist/node/lib/AreInstruction/AreInstruction.error.d.ts +6 -0
  110. package/dist/node/lib/AreInstruction/AreInstruction.error.js +10 -0
  111. package/dist/node/lib/AreInstruction/AreInstruction.error.js.map +1 -0
  112. package/dist/node/lib/AreInstruction/AreInstruction.error.mjs +9 -0
  113. package/dist/node/lib/AreInstruction/AreInstruction.error.mjs.map +1 -0
  114. package/dist/node/lib/AreInstruction/AreInstruction.types.d.mts +14 -0
  115. package/dist/node/lib/AreInstruction/AreInstruction.types.d.ts +14 -0
  116. package/dist/node/lib/AreInstruction/AreInstruction.types.js +4 -0
  117. package/dist/node/lib/AreInstruction/AreInstruction.types.js.map +1 -0
  118. package/dist/node/lib/AreInstruction/AreInstruction.types.mjs +3 -0
  119. package/dist/node/lib/AreInstruction/AreInstruction.types.mjs.map +1 -0
  120. package/dist/node/lib/AreInstruction/types/AreDeclaration.instruction.d.mts +14 -0
  121. package/dist/node/lib/AreInstruction/types/AreDeclaration.instruction.d.ts +14 -0
  122. package/dist/node/lib/AreInstruction/types/AreDeclaration.instruction.js +37 -0
  123. package/dist/node/lib/AreInstruction/types/AreDeclaration.instruction.js.map +1 -0
  124. package/dist/node/lib/AreInstruction/types/AreDeclaration.instruction.mjs +30 -0
  125. package/dist/node/lib/AreInstruction/types/AreDeclaration.instruction.mjs.map +1 -0
  126. package/dist/node/lib/AreInstruction/types/AreMutation.instruction.d.mts +14 -0
  127. package/dist/node/lib/AreInstruction/types/AreMutation.instruction.d.ts +14 -0
  128. package/dist/node/lib/AreInstruction/types/AreMutation.instruction.js +52 -0
  129. package/dist/node/lib/AreInstruction/types/AreMutation.instruction.js.map +1 -0
  130. package/dist/node/lib/AreInstruction/types/AreMutation.instruction.mjs +45 -0
  131. package/dist/node/lib/AreInstruction/types/AreMutation.instruction.mjs.map +1 -0
  132. package/dist/node/lib/AreInterpreter/AreInterpreter.component.d.mts +49 -0
  133. package/dist/node/lib/AreInterpreter/AreInterpreter.component.d.ts +49 -0
  134. package/dist/node/lib/AreInterpreter/AreInterpreter.component.js +164 -0
  135. package/dist/node/lib/AreInterpreter/AreInterpreter.component.js.map +1 -0
  136. package/dist/node/lib/AreInterpreter/AreInterpreter.component.mjs +154 -0
  137. package/dist/node/lib/AreInterpreter/AreInterpreter.component.mjs.map +1 -0
  138. package/dist/node/lib/AreInterpreter/AreInterpreter.constants.js +4 -0
  139. package/dist/node/lib/AreInterpreter/AreInterpreter.constants.js.map +1 -0
  140. package/dist/node/lib/AreInterpreter/AreInterpreter.constants.mjs +3 -0
  141. package/dist/node/lib/AreInterpreter/AreInterpreter.constants.mjs.map +1 -0
  142. package/dist/node/lib/AreInterpreter/AreInterpreter.error.d.mts +6 -0
  143. package/dist/node/lib/AreInterpreter/AreInterpreter.error.d.ts +6 -0
  144. package/dist/node/lib/AreInterpreter/AreInterpreter.error.js +10 -0
  145. package/dist/node/lib/AreInterpreter/AreInterpreter.error.js.map +1 -0
  146. package/dist/node/lib/AreInterpreter/AreInterpreter.error.mjs +9 -0
  147. package/dist/node/lib/AreInterpreter/AreInterpreter.error.mjs.map +1 -0
  148. package/dist/node/lib/AreInterpreter/AreInterpreter.types.js +4 -0
  149. package/dist/node/lib/AreInterpreter/AreInterpreter.types.js.map +1 -0
  150. package/dist/node/lib/AreInterpreter/AreInterpreter.types.mjs +3 -0
  151. package/dist/node/lib/AreInterpreter/AreInterpreter.types.mjs.map +1 -0
  152. package/dist/node/lib/AreLifecycle/AreLifecycle.component.d.mts +188 -0
  153. package/dist/node/lib/AreLifecycle/AreLifecycle.component.d.ts +188 -0
  154. package/dist/node/lib/AreLifecycle/AreLifecycle.component.js +349 -0
  155. package/dist/node/lib/AreLifecycle/AreLifecycle.component.js.map +1 -0
  156. package/dist/node/lib/AreLifecycle/AreLifecycle.component.mjs +339 -0
  157. package/dist/node/lib/AreLifecycle/AreLifecycle.component.mjs.map +1 -0
  158. package/dist/node/lib/AreLifecycle/AreLifecycle.constants.d.mts +2 -0
  159. package/dist/node/lib/AreLifecycle/AreLifecycle.constants.d.ts +2 -0
  160. package/dist/node/lib/AreLifecycle/AreLifecycle.constants.js +4 -0
  161. package/dist/node/lib/AreLifecycle/AreLifecycle.constants.js.map +1 -0
  162. package/dist/node/lib/AreLifecycle/AreLifecycle.constants.mjs +3 -0
  163. package/dist/node/lib/AreLifecycle/AreLifecycle.constants.mjs.map +1 -0
  164. package/dist/node/lib/AreLifecycle/AreLifecycle.error.d.mts +7 -0
  165. package/dist/node/lib/AreLifecycle/AreLifecycle.error.d.ts +7 -0
  166. package/dist/node/lib/AreLifecycle/AreLifecycle.error.js +11 -0
  167. package/dist/node/lib/AreLifecycle/AreLifecycle.error.js.map +1 -0
  168. package/dist/node/lib/AreLifecycle/AreLifecycle.error.mjs +10 -0
  169. package/dist/node/lib/AreLifecycle/AreLifecycle.error.mjs.map +1 -0
  170. package/dist/node/lib/AreLifecycle/AreLifecycle.types.d.mts +2 -0
  171. package/dist/node/lib/AreLifecycle/AreLifecycle.types.d.ts +2 -0
  172. package/dist/node/lib/AreLifecycle/AreLifecycle.types.js +4 -0
  173. package/dist/node/lib/AreLifecycle/AreLifecycle.types.js.map +1 -0
  174. package/dist/node/lib/AreLifecycle/AreLifecycle.types.mjs +3 -0
  175. package/dist/node/lib/AreLifecycle/AreLifecycle.types.mjs.map +1 -0
  176. package/dist/node/lib/AreLoader/AreLoader.component.d.mts +31 -0
  177. package/dist/node/lib/AreLoader/AreLoader.component.d.ts +31 -0
  178. package/dist/node/lib/AreLoader/AreLoader.component.js +64 -0
  179. package/dist/node/lib/AreLoader/AreLoader.component.js.map +1 -0
  180. package/dist/node/lib/AreLoader/AreLoader.component.mjs +54 -0
  181. package/dist/node/lib/AreLoader/AreLoader.component.mjs.map +1 -0
  182. package/dist/node/lib/AreLoader/AreLoader.constants.d.mts +2 -0
  183. package/dist/node/lib/AreLoader/AreLoader.constants.d.ts +2 -0
  184. package/dist/node/lib/AreLoader/AreLoader.constants.js +4 -0
  185. package/dist/node/lib/AreLoader/AreLoader.constants.js.map +1 -0
  186. package/dist/node/lib/AreLoader/AreLoader.constants.mjs +3 -0
  187. package/dist/node/lib/AreLoader/AreLoader.constants.mjs.map +1 -0
  188. package/dist/node/lib/AreLoader/AreLoader.error.d.mts +8 -0
  189. package/dist/node/lib/AreLoader/AreLoader.error.d.ts +8 -0
  190. package/dist/node/lib/AreLoader/AreLoader.error.js +12 -0
  191. package/dist/node/lib/AreLoader/AreLoader.error.js.map +1 -0
  192. package/dist/node/lib/AreLoader/AreLoader.error.mjs +11 -0
  193. package/dist/node/lib/AreLoader/AreLoader.error.mjs.map +1 -0
  194. package/dist/node/lib/AreLoader/AreLoader.types.d.mts +2 -0
  195. package/dist/node/lib/AreLoader/AreLoader.types.d.ts +2 -0
  196. package/dist/node/lib/AreLoader/AreLoader.types.js +4 -0
  197. package/dist/node/lib/AreLoader/AreLoader.types.js.map +1 -0
  198. package/dist/node/lib/AreLoader/AreLoader.types.mjs +3 -0
  199. package/dist/node/lib/AreLoader/AreLoader.types.mjs.map +1 -0
  200. package/dist/node/lib/AreNode/AreNode.constants.d.mts +87 -17
  201. package/dist/node/lib/AreNode/AreNode.constants.d.ts +87 -17
  202. package/dist/node/lib/AreNode/AreNode.constants.js +111 -11
  203. package/dist/node/lib/AreNode/AreNode.constants.js.map +1 -1
  204. package/dist/node/lib/AreNode/AreNode.constants.mjs +111 -12
  205. package/dist/node/lib/AreNode/AreNode.constants.mjs.map +1 -1
  206. package/dist/node/lib/AreNode/AreNode.entity.d.mts +12 -6
  207. package/dist/node/lib/AreNode/AreNode.entity.d.ts +12 -6
  208. package/dist/node/lib/AreNode/AreNode.entity.js +281 -49
  209. package/dist/node/lib/AreNode/AreNode.entity.js.map +1 -1
  210. package/dist/node/lib/AreNode/AreNode.entity.mjs +282 -50
  211. package/dist/node/lib/AreNode/AreNode.entity.mjs.map +1 -1
  212. package/dist/node/lib/AreNode/AreNode.types.d.mts +14 -13
  213. package/dist/node/lib/AreNode/AreNode.types.d.ts +14 -13
  214. package/dist/node/lib/AreScene/AreScene.constants.d.mts +7 -0
  215. package/dist/node/lib/AreScene/AreScene.constants.d.ts +7 -0
  216. package/dist/node/lib/AreScene/AreScene.constants.js +11 -0
  217. package/dist/node/lib/AreScene/AreScene.constants.js.map +1 -0
  218. package/dist/node/lib/AreScene/AreScene.constants.mjs +11 -0
  219. package/dist/node/lib/AreScene/AreScene.constants.mjs.map +1 -0
  220. package/dist/node/lib/AreScene/AreScene.context.d.mts +12 -6
  221. package/dist/node/lib/AreScene/AreScene.context.d.ts +12 -6
  222. package/dist/node/lib/AreScene/AreScene.context.js +284 -186
  223. package/dist/node/lib/AreScene/AreScene.context.js.map +1 -1
  224. package/dist/node/lib/AreScene/AreScene.context.mjs +277 -185
  225. package/dist/node/lib/AreScene/AreScene.context.mjs.map +1 -1
  226. package/dist/node/lib/AreScene/AreScene.error.d.mts +4 -0
  227. package/dist/node/lib/AreScene/AreScene.error.d.ts +4 -0
  228. package/dist/node/lib/AreScene/AreScene.error.js +4 -0
  229. package/dist/node/lib/AreScene/AreScene.error.js.map +1 -1
  230. package/dist/node/lib/AreScene/AreScene.error.mjs +4 -0
  231. package/dist/node/lib/AreScene/AreScene.error.mjs.map +1 -1
  232. package/dist/node/lib/AreScene/AreScene.types.d.mts +14 -9
  233. package/dist/node/lib/AreScene/AreScene.types.d.ts +14 -9
  234. package/dist/node/lib/AreSignals/AreSignal.entity.d.mts +6 -0
  235. package/dist/node/lib/AreSignals/AreSignal.entity.d.ts +6 -0
  236. package/dist/node/lib/AreSignals/AreSignal.entity.js +24 -0
  237. package/dist/node/lib/AreSignals/AreSignal.entity.js.map +1 -0
  238. package/dist/node/lib/AreSignals/AreSignal.entity.mjs +17 -0
  239. package/dist/node/lib/AreSignals/AreSignal.entity.mjs.map +1 -0
  240. package/dist/node/lib/AreSignals/AreSignals.component.d.mts +35 -0
  241. package/dist/node/lib/AreSignals/AreSignals.component.d.ts +35 -0
  242. package/dist/node/lib/AreSignals/AreSignals.component.js +90 -0
  243. package/dist/node/lib/AreSignals/AreSignals.component.js.map +1 -0
  244. package/dist/node/lib/AreSignals/AreSignals.component.mjs +80 -0
  245. package/dist/node/lib/AreSignals/AreSignals.component.mjs.map +1 -0
  246. package/dist/node/lib/AreSignals/AreSignals.constants.d.mts +2 -0
  247. package/dist/node/lib/AreSignals/AreSignals.constants.d.ts +2 -0
  248. package/dist/node/lib/AreSignals/AreSignals.constants.js +4 -0
  249. package/dist/node/lib/AreSignals/AreSignals.constants.js.map +1 -0
  250. package/dist/node/lib/AreSignals/AreSignals.constants.mjs +3 -0
  251. package/dist/node/lib/AreSignals/AreSignals.constants.mjs.map +1 -0
  252. package/dist/node/lib/AreSignals/AreSignals.context.d.mts +86 -0
  253. package/dist/node/lib/AreSignals/AreSignals.context.d.ts +86 -0
  254. package/dist/node/lib/AreSignals/AreSignals.context.js +153 -0
  255. package/dist/node/lib/AreSignals/AreSignals.context.js.map +1 -0
  256. package/dist/node/lib/AreSignals/AreSignals.context.mjs +146 -0
  257. package/dist/node/lib/AreSignals/AreSignals.context.mjs.map +1 -0
  258. package/dist/node/lib/AreSignals/AreSignals.meta.d.mts +15 -0
  259. package/dist/node/lib/AreSignals/AreSignals.meta.d.ts +15 -0
  260. package/dist/node/lib/AreSignals/AreSignals.meta.js +48 -0
  261. package/dist/node/lib/AreSignals/AreSignals.meta.js.map +1 -0
  262. package/dist/node/lib/AreSignals/AreSignals.meta.mjs +47 -0
  263. package/dist/node/lib/AreSignals/AreSignals.meta.mjs.map +1 -0
  264. package/dist/node/lib/AreSignals/AreSignals.types.d.mts +18 -0
  265. package/dist/node/lib/AreSignals/AreSignals.types.d.ts +18 -0
  266. package/dist/node/lib/AreSignals/AreSignals.types.js +4 -0
  267. package/dist/node/lib/AreSignals/AreSignals.types.js.map +1 -0
  268. package/dist/node/lib/AreSignals/AreSignals.types.mjs +3 -0
  269. package/dist/node/lib/AreSignals/AreSignals.types.mjs.map +1 -0
  270. package/dist/node/lib/AreSignals/entities/AreInit.signal.d.mts +8 -0
  271. package/dist/node/lib/AreSignals/entities/AreInit.signal.d.ts +8 -0
  272. package/dist/node/lib/AreSignals/entities/AreInit.signal.js +13 -0
  273. package/dist/node/lib/AreSignals/entities/AreInit.signal.js.map +1 -0
  274. package/dist/node/lib/AreSignals/entities/AreInit.signal.mjs +12 -0
  275. package/dist/node/lib/AreSignals/entities/AreInit.signal.mjs.map +1 -0
  276. package/dist/node/lib/AreSignals/entities/AreRoute.signal.d.mts +12 -0
  277. package/dist/node/lib/AreSignals/entities/AreRoute.signal.d.ts +12 -0
  278. package/dist/node/lib/AreSignals/entities/AreRoute.signal.js +25 -0
  279. package/dist/node/lib/AreSignals/entities/AreRoute.signal.js.map +1 -0
  280. package/dist/node/lib/AreSignals/entities/AreRoute.signal.mjs +24 -0
  281. package/dist/node/lib/AreSignals/entities/AreRoute.signal.mjs.map +1 -0
  282. package/dist/node/lib/AreStore/AreStore.constants.d.mts +5 -0
  283. package/dist/node/lib/AreStore/AreStore.constants.d.ts +5 -0
  284. package/dist/node/lib/AreStore/AreStore.constants.js +9 -0
  285. package/dist/node/lib/AreStore/AreStore.constants.js.map +1 -0
  286. package/dist/node/lib/AreStore/AreStore.constants.mjs +9 -0
  287. package/dist/node/lib/AreStore/AreStore.constants.mjs.map +1 -0
  288. package/dist/node/lib/AreStore/AreStore.context.d.mts +14 -10
  289. package/dist/node/lib/AreStore/AreStore.context.d.ts +14 -10
  290. package/dist/node/lib/AreStore/AreStore.context.js +162 -6
  291. package/dist/node/lib/AreStore/AreStore.context.js.map +1 -1
  292. package/dist/node/lib/AreStore/AreStore.context.mjs +162 -6
  293. package/dist/node/lib/AreStore/AreStore.context.mjs.map +1 -1
  294. package/dist/node/lib/AreStore/AreStore.types.d.mts +9 -0
  295. package/dist/node/lib/AreStore/AreStore.types.d.ts +9 -0
  296. package/dist/node/lib/AreStore/AreStore.types.js +4 -0
  297. package/dist/node/lib/AreStore/AreStore.types.js.map +1 -0
  298. package/dist/node/lib/AreStore/AreStore.types.mjs +3 -0
  299. package/dist/node/lib/AreStore/AreStore.types.mjs.map +1 -0
  300. package/dist/node/lib/AreSyntax/AreSyntax.constants.d.mts +2 -0
  301. package/dist/node/lib/AreSyntax/AreSyntax.constants.d.ts +2 -0
  302. package/dist/node/lib/AreSyntax/AreSyntax.constants.js +4 -0
  303. package/dist/node/lib/AreSyntax/AreSyntax.constants.js.map +1 -0
  304. package/dist/node/lib/AreSyntax/AreSyntax.constants.mjs +3 -0
  305. package/dist/node/lib/AreSyntax/AreSyntax.constants.mjs.map +1 -0
  306. package/dist/node/lib/AreSyntax/AreSyntax.context.d.mts +99 -51
  307. package/dist/node/lib/AreSyntax/AreSyntax.context.d.ts +99 -51
  308. package/dist/node/lib/AreSyntax/AreSyntax.context.js +305 -73
  309. package/dist/node/lib/AreSyntax/AreSyntax.context.js.map +1 -1
  310. package/dist/node/lib/AreSyntax/AreSyntax.context.mjs +306 -74
  311. package/dist/node/lib/AreSyntax/AreSyntax.context.mjs.map +1 -1
  312. package/dist/node/lib/AreSyntax/AreSyntax.types.d.mts +14 -132
  313. package/dist/node/lib/AreSyntax/AreSyntax.types.d.ts +14 -132
  314. package/dist/node/lib/AreSyntax/AreSyntax.types.js.map +1 -1
  315. package/dist/node/lib/AreSyntax/AreSyntax.types.mjs.map +1 -1
  316. package/dist/node/lib/AreTokenizer/AreTokenizer.component.d.mts +43 -0
  317. package/dist/node/lib/AreTokenizer/AreTokenizer.component.d.ts +43 -0
  318. package/dist/node/lib/AreTokenizer/AreTokenizer.component.js +238 -0
  319. package/dist/node/lib/AreTokenizer/AreTokenizer.component.js.map +1 -0
  320. package/dist/node/lib/AreTokenizer/AreTokenizer.component.mjs +228 -0
  321. package/dist/node/lib/AreTokenizer/AreTokenizer.component.mjs.map +1 -0
  322. package/dist/node/lib/AreTokenizer/AreTokenizer.error.d.mts +6 -0
  323. package/dist/node/lib/AreTokenizer/AreTokenizer.error.d.ts +6 -0
  324. package/dist/node/lib/AreTokenizer/AreTokenizer.error.js +10 -0
  325. package/dist/node/lib/AreTokenizer/AreTokenizer.error.js.map +1 -0
  326. package/dist/node/lib/AreTokenizer/AreTokenizer.error.mjs +9 -0
  327. package/dist/node/lib/AreTokenizer/AreTokenizer.error.mjs.map +1 -0
  328. package/dist/node/lib/AreTransformer/AreTransformer.component.d.mts +20 -0
  329. package/dist/node/lib/AreTransformer/AreTransformer.component.d.ts +20 -0
  330. package/dist/node/lib/AreTransformer/AreTransformer.component.js +48 -0
  331. package/dist/node/lib/AreTransformer/AreTransformer.component.js.map +1 -0
  332. package/dist/node/lib/AreTransformer/AreTransformer.component.mjs +38 -0
  333. package/dist/node/lib/AreTransformer/AreTransformer.component.mjs.map +1 -0
  334. package/dist/node/lib/AreTransformer/AreTransformer.constants.d.mts +2 -0
  335. package/dist/node/lib/AreTransformer/AreTransformer.constants.d.ts +2 -0
  336. package/dist/node/lib/AreTransformer/AreTransformer.constants.js +4 -0
  337. package/dist/node/lib/AreTransformer/AreTransformer.constants.js.map +1 -0
  338. package/dist/node/lib/AreTransformer/AreTransformer.constants.mjs +3 -0
  339. package/dist/node/lib/AreTransformer/AreTransformer.constants.mjs.map +1 -0
  340. package/dist/node/lib/AreTransformer/AreTransformer.types.d.mts +2 -0
  341. package/dist/node/lib/AreTransformer/AreTransformer.types.d.ts +2 -0
  342. package/dist/node/lib/AreTransformer/AreTransformer.types.js +4 -0
  343. package/dist/node/lib/AreTransformer/AreTransformer.types.js.map +1 -0
  344. package/dist/node/lib/AreTransformer/AreTransformer.types.mjs +3 -0
  345. package/dist/node/lib/AreTransformer/AreTransformer.types.mjs.map +1 -0
  346. package/dist/node/lib/AreWatcher/AreWatcher.component.d.mts +18 -0
  347. package/dist/node/lib/AreWatcher/AreWatcher.component.d.ts +18 -0
  348. package/dist/node/lib/AreWatcher/AreWatcher.component.js +78 -0
  349. package/dist/node/lib/AreWatcher/AreWatcher.component.js.map +1 -0
  350. package/dist/node/lib/AreWatcher/AreWatcher.component.mjs +71 -0
  351. package/dist/node/lib/AreWatcher/AreWatcher.component.mjs.map +1 -0
  352. package/dist/node/lib/AreWatcher/AreWatcher.constants.d.mts +2 -0
  353. package/dist/node/lib/AreWatcher/AreWatcher.constants.d.ts +2 -0
  354. package/dist/node/lib/AreWatcher/AreWatcher.constants.js +4 -0
  355. package/dist/node/lib/AreWatcher/AreWatcher.constants.js.map +1 -0
  356. package/dist/node/lib/AreWatcher/AreWatcher.constants.mjs +3 -0
  357. package/dist/node/lib/AreWatcher/AreWatcher.constants.mjs.map +1 -0
  358. package/dist/node/lib/AreWatcher/AreWatcher.context.d.mts +2 -0
  359. package/dist/node/lib/AreWatcher/AreWatcher.context.d.ts +2 -0
  360. package/dist/node/lib/AreWatcher/AreWatcher.context.js +4 -0
  361. package/dist/node/lib/AreWatcher/AreWatcher.context.js.map +1 -0
  362. package/dist/node/lib/AreWatcher/AreWatcher.context.mjs +3 -0
  363. package/dist/node/lib/AreWatcher/AreWatcher.context.mjs.map +1 -0
  364. package/dist/node/lib/AreWatcher/AreWatcher.types.d.mts +2 -0
  365. package/dist/node/lib/AreWatcher/AreWatcher.types.d.ts +2 -0
  366. package/dist/node/lib/AreWatcher/AreWatcher.types.js +4 -0
  367. package/dist/node/lib/AreWatcher/AreWatcher.types.js.map +1 -0
  368. package/dist/node/lib/AreWatcher/AreWatcher.types.mjs +3 -0
  369. package/dist/node/lib/AreWatcher/AreWatcher.types.mjs.map +1 -0
  370. package/jest.config.ts +30 -19
  371. package/package.json +39 -23
  372. package/src/index.ts +92 -15
  373. package/src/lib/AreAttribute/AreAttribute.constants.ts +22 -0
  374. package/src/lib/AreAttribute/AreAttribute.entity.ts +136 -0
  375. package/src/lib/AreAttribute/AreAttribute.types.ts +51 -0
  376. package/src/lib/AreCompiler/AreCompiler.component.ts +48 -980
  377. package/src/lib/AreComponent/Are.component.ts +102 -50
  378. package/src/lib/AreComponent/Are.constants.ts +59 -39
  379. package/src/lib/AreComponent/Are.context.ts +120 -8
  380. package/src/lib/AreComponent/Are.meta.ts +16 -0
  381. package/src/lib/AreComponent/Are.types.ts +30 -0
  382. package/src/lib/AreEngine/AreEngine.component.ts +317 -0
  383. package/src/lib/AreEngine/AreEngine.constants.ts +7 -0
  384. package/src/lib/AreEngine/AreEngine.error.ts +9 -0
  385. package/src/lib/AreEngine/AreEngine.types.ts +24 -0
  386. package/src/lib/AreEvent/AreEvent.context.ts +3 -27
  387. package/src/lib/AreInstruction/AreInstruction.constants.ts +23 -0
  388. package/src/lib/AreInstruction/AreInstruction.entity.ts +207 -0
  389. package/src/lib/AreInstruction/AreInstruction.error.ts +7 -0
  390. package/src/lib/AreInstruction/AreInstruction.types.ts +63 -0
  391. package/src/lib/AreInstruction/types/AreDeclaration.instruction.ts +77 -0
  392. package/src/lib/AreInstruction/types/AreMutation.instruction.ts +87 -0
  393. package/src/lib/AreInterpreter/AreInterpreter.component.ts +208 -0
  394. package/src/lib/AreInterpreter/AreInterpreter.error.ts +6 -0
  395. package/src/lib/AreLifecycle/AreLifecycle.component.ts +638 -0
  396. package/src/lib/AreLifecycle/AreLifecycle.constants.ts +0 -0
  397. package/src/lib/AreLifecycle/AreLifecycle.error.ts +9 -0
  398. package/src/lib/AreLifecycle/AreLifecycle.types.ts +0 -0
  399. package/src/lib/AreLoader/AreLoader.component.ts +89 -0
  400. package/src/lib/AreLoader/AreLoader.constants.ts +0 -0
  401. package/src/lib/AreLoader/AreLoader.error.ts +10 -0
  402. package/src/lib/AreLoader/AreLoader.types.ts +0 -0
  403. package/src/lib/AreNode/AreNode.constants.ts +111 -16
  404. package/src/lib/AreNode/AreNode.entity.ts +380 -91
  405. package/src/lib/AreNode/AreNode.types.ts +7 -11
  406. package/src/lib/AreScene/AreScene.constants.ts +7 -0
  407. package/src/lib/AreScene/AreScene.context.ts +305 -284
  408. package/src/lib/AreScene/AreScene.error.ts +9 -1
  409. package/src/lib/AreScene/AreScene.types.ts +21 -3
  410. package/src/lib/AreSignals/AreSignal.entity.ts +17 -0
  411. package/src/lib/AreSignals/AreSignals.component.ts +98 -0
  412. package/src/lib/AreSignals/AreSignals.constants.ts +0 -0
  413. package/src/lib/AreSignals/AreSignals.context.ts +196 -0
  414. package/src/lib/AreSignals/AreSignals.meta.ts +75 -0
  415. package/src/lib/AreSignals/AreSignals.types.ts +18 -0
  416. package/src/lib/AreSignals/entities/AreInit.signal.ts +7 -0
  417. package/src/lib/AreSignals/entities/AreRoute.signal.ts +27 -0
  418. package/src/lib/AreStore/AreStore.constants.ts +6 -0
  419. package/src/lib/AreStore/AreStore.context.ts +243 -14
  420. package/src/lib/AreStore/AreStore.types.ts +19 -0
  421. package/src/lib/AreSyntax/AreSyntax.constants.ts +0 -0
  422. package/src/lib/AreSyntax/AreSyntax.context.ts +352 -78
  423. package/src/lib/AreSyntax/AreSyntax.types.ts +75 -139
  424. package/src/lib/AreTokenizer/AreTokenizer.component.ts +289 -0
  425. package/src/lib/AreTokenizer/AreTokenizer.error.ts +7 -0
  426. package/src/lib/AreTransformer/AreTransformer.component.ts +46 -0
  427. package/src/lib/AreTransformer/AreTransformer.constants.ts +0 -0
  428. package/src/lib/AreTransformer/AreTransformer.types.ts +0 -0
  429. package/src/lib/AreWatcher/AreWatcher.component.ts +84 -0
  430. package/src/lib/AreWatcher/AreWatcher.constants.ts +0 -0
  431. package/src/lib/AreWatcher/AreWatcher.context.ts +0 -0
  432. package/src/lib/AreWatcher/AreWatcher.types.ts +0 -0
  433. package/tests/AreInstruction.test.ts +73 -0
  434. package/tests/AreScene.test.ts +62 -0
  435. package/tests/AreSignals.test.ts +55 -0
  436. package/tests/AreTokenizer.test.ts +254 -0
  437. package/tests/jest.setup.ts +30 -0
  438. package/tsconfig.json +19 -19
  439. package/tsup.config.ts +6 -0
  440. package/dist/node/engines/html/AreHTML.compiler.d.mts +0 -114
  441. package/dist/node/engines/html/AreHTML.compiler.d.ts +0 -114
  442. package/dist/node/engines/html/AreHTML.compiler.js +0 -408
  443. package/dist/node/engines/html/AreHTML.compiler.js.map +0 -1
  444. package/dist/node/engines/html/AreHTML.compiler.mjs +0 -398
  445. package/dist/node/engines/html/AreHTML.compiler.mjs.map +0 -1
  446. package/dist/node/engines/html/AreHTML.engine.d.mts +0 -36
  447. package/dist/node/engines/html/AreHTML.engine.d.ts +0 -36
  448. package/dist/node/engines/html/AreHTML.engine.js +0 -122
  449. package/dist/node/engines/html/AreHTML.engine.js.map +0 -1
  450. package/dist/node/engines/html/AreHTML.engine.mjs +0 -112
  451. package/dist/node/engines/html/AreHTML.engine.mjs.map +0 -1
  452. package/dist/node/engines/html/index.d.mts +0 -26
  453. package/dist/node/engines/html/index.d.ts +0 -26
  454. package/dist/node/engines/html/index.js +0 -17
  455. package/dist/node/engines/html/index.js.map +0 -1
  456. package/dist/node/engines/html/index.mjs +0 -5
  457. package/dist/node/engines/html/index.mjs.map +0 -1
  458. package/dist/node/engines/json/AreJSON.compiler.d.mts +0 -21
  459. package/dist/node/engines/json/AreJSON.compiler.d.ts +0 -21
  460. package/dist/node/engines/json/AreJSON.compiler.js +0 -24
  461. package/dist/node/engines/json/AreJSON.compiler.js.map +0 -1
  462. package/dist/node/engines/json/AreJSON.compiler.mjs +0 -17
  463. package/dist/node/engines/json/AreJSON.compiler.mjs.map +0 -1
  464. package/dist/node/index-BD-6iOuR.d.ts +0 -238
  465. package/dist/node/index-DMXWCL7R.d.mts +0 -238
  466. package/dist/node/lib/AreApp/AreApp.container.d.mts +0 -22
  467. package/dist/node/lib/AreApp/AreApp.container.d.ts +0 -22
  468. package/dist/node/lib/AreApp/AreApp.container.js +0 -60
  469. package/dist/node/lib/AreApp/AreApp.container.js.map +0 -1
  470. package/dist/node/lib/AreApp/AreApp.container.mjs +0 -48
  471. package/dist/node/lib/AreApp/AreApp.container.mjs.map +0 -1
  472. package/dist/node/lib/AreApp/AreApp.env.js +0 -4
  473. package/dist/node/lib/AreApp/AreApp.env.js.map +0 -1
  474. package/dist/node/lib/AreApp/AreApp.env.mjs +0 -3
  475. package/dist/node/lib/AreApp/AreApp.env.mjs.map +0 -1
  476. package/dist/node/lib/AreApp/AreApp.error.d.mts +0 -6
  477. package/dist/node/lib/AreApp/AreApp.error.d.ts +0 -6
  478. package/dist/node/lib/AreApp/AreApp.error.js +0 -10
  479. package/dist/node/lib/AreApp/AreApp.error.js.map +0 -1
  480. package/dist/node/lib/AreApp/AreApp.error.mjs +0 -9
  481. package/dist/node/lib/AreApp/AreApp.error.mjs.map +0 -1
  482. package/dist/node/lib/AreApp/AreApp.types.js +0 -4
  483. package/dist/node/lib/AreApp/AreApp.types.js.map +0 -1
  484. package/dist/node/lib/AreApp/AreApp.types.mjs +0 -3
  485. package/dist/node/lib/AreApp/AreApp.types.mjs.map +0 -1
  486. package/dist/node/lib/AreApp/index.d.mts +0 -17
  487. package/dist/node/lib/AreApp/index.d.ts +0 -17
  488. package/dist/node/lib/AreApp/index.js +0 -24
  489. package/dist/node/lib/AreApp/index.js.map +0 -1
  490. package/dist/node/lib/AreApp/index.mjs +0 -6
  491. package/dist/node/lib/AreApp/index.mjs.map +0 -1
  492. package/dist/node/lib/AreCompiler/index.d.mts +0 -17
  493. package/dist/node/lib/AreCompiler/index.d.ts +0 -17
  494. package/dist/node/lib/AreCompiler/index.js +0 -24
  495. package/dist/node/lib/AreCompiler/index.js.map +0 -1
  496. package/dist/node/lib/AreCompiler/index.mjs +0 -6
  497. package/dist/node/lib/AreCompiler/index.mjs.map +0 -1
  498. package/dist/node/lib/AreComponent/index.d.mts +0 -11
  499. package/dist/node/lib/AreComponent/index.d.ts +0 -11
  500. package/dist/node/lib/AreComponent/index.js +0 -31
  501. package/dist/node/lib/AreComponent/index.js.map +0 -1
  502. package/dist/node/lib/AreComponent/index.mjs +0 -7
  503. package/dist/node/lib/AreComponent/index.mjs.map +0 -1
  504. package/dist/node/lib/AreEvent/index.d.mts +0 -8
  505. package/dist/node/lib/AreEvent/index.d.ts +0 -8
  506. package/dist/node/lib/AreEvent/index.js +0 -19
  507. package/dist/node/lib/AreEvent/index.js.map +0 -1
  508. package/dist/node/lib/AreEvent/index.mjs +0 -5
  509. package/dist/node/lib/AreEvent/index.mjs.map +0 -1
  510. package/dist/node/lib/AreIndex/AreIndex.context.d.mts +0 -8
  511. package/dist/node/lib/AreIndex/AreIndex.context.d.ts +0 -8
  512. package/dist/node/lib/AreIndex/AreIndex.context.js +0 -142
  513. package/dist/node/lib/AreIndex/AreIndex.context.js.map +0 -1
  514. package/dist/node/lib/AreIndex/AreIndex.context.mjs +0 -141
  515. package/dist/node/lib/AreIndex/AreIndex.context.mjs.map +0 -1
  516. package/dist/node/lib/AreIndex/index.d.mts +0 -8
  517. package/dist/node/lib/AreIndex/index.d.ts +0 -8
  518. package/dist/node/lib/AreIndex/index.js +0 -12
  519. package/dist/node/lib/AreIndex/index.js.map +0 -1
  520. package/dist/node/lib/AreIndex/index.mjs +0 -4
  521. package/dist/node/lib/AreIndex/index.mjs.map +0 -1
  522. package/dist/node/lib/AreNode/index.d.mts +0 -9
  523. package/dist/node/lib/AreNode/index.d.ts +0 -9
  524. package/dist/node/lib/AreNode/index.js +0 -26
  525. package/dist/node/lib/AreNode/index.js.map +0 -1
  526. package/dist/node/lib/AreNode/index.mjs +0 -6
  527. package/dist/node/lib/AreNode/index.mjs.map +0 -1
  528. package/dist/node/lib/AreProps/AreProps.context.d.mts +0 -9
  529. package/dist/node/lib/AreProps/AreProps.context.d.ts +0 -9
  530. package/dist/node/lib/AreProps/AreProps.context.js +0 -32
  531. package/dist/node/lib/AreProps/AreProps.context.js.map +0 -1
  532. package/dist/node/lib/AreProps/AreProps.context.mjs +0 -25
  533. package/dist/node/lib/AreProps/AreProps.context.mjs.map +0 -1
  534. package/dist/node/lib/AreProps/index.d.mts +0 -3
  535. package/dist/node/lib/AreProps/index.d.ts +0 -3
  536. package/dist/node/lib/AreProps/index.js +0 -12
  537. package/dist/node/lib/AreProps/index.js.map +0 -1
  538. package/dist/node/lib/AreProps/index.mjs +0 -4
  539. package/dist/node/lib/AreProps/index.mjs.map +0 -1
  540. package/dist/node/lib/AreRoot/AreRoot.component.d.mts +0 -18
  541. package/dist/node/lib/AreRoot/AreRoot.component.d.ts +0 -18
  542. package/dist/node/lib/AreRoot/AreRoot.component.js +0 -53
  543. package/dist/node/lib/AreRoot/AreRoot.component.js.map +0 -1
  544. package/dist/node/lib/AreRoot/AreRoot.component.mjs +0 -41
  545. package/dist/node/lib/AreRoot/AreRoot.component.mjs.map +0 -1
  546. package/dist/node/lib/AreRoot/index.d.mts +0 -11
  547. package/dist/node/lib/AreRoot/index.d.ts +0 -11
  548. package/dist/node/lib/AreRoot/index.js +0 -12
  549. package/dist/node/lib/AreRoot/index.js.map +0 -1
  550. package/dist/node/lib/AreRoot/index.mjs +0 -4
  551. package/dist/node/lib/AreRoot/index.mjs.map +0 -1
  552. package/dist/node/lib/AreRouter/AreRouter.componeent.d.mts +0 -17
  553. package/dist/node/lib/AreRouter/AreRouter.componeent.d.ts +0 -17
  554. package/dist/node/lib/AreRouter/AreRouter.componeent.js +0 -37
  555. package/dist/node/lib/AreRouter/AreRouter.componeent.js.map +0 -1
  556. package/dist/node/lib/AreRouter/AreRouter.componeent.mjs +0 -25
  557. package/dist/node/lib/AreRouter/AreRouter.componeent.mjs.map +0 -1
  558. package/dist/node/lib/AreRouter/index.d.mts +0 -12
  559. package/dist/node/lib/AreRouter/index.d.ts +0 -12
  560. package/dist/node/lib/AreRouter/index.js +0 -12
  561. package/dist/node/lib/AreRouter/index.js.map +0 -1
  562. package/dist/node/lib/AreRouter/index.mjs +0 -4
  563. package/dist/node/lib/AreRouter/index.mjs.map +0 -1
  564. package/dist/node/lib/AreScene/index.d.mts +0 -9
  565. package/dist/node/lib/AreScene/index.d.ts +0 -9
  566. package/dist/node/lib/AreScene/index.js +0 -24
  567. package/dist/node/lib/AreScene/index.js.map +0 -1
  568. package/dist/node/lib/AreScene/index.mjs +0 -6
  569. package/dist/node/lib/AreScene/index.mjs.map +0 -1
  570. package/dist/node/lib/AreSceneInstruction/AreSceneInstruction.constants.d.mts +0 -7
  571. package/dist/node/lib/AreSceneInstruction/AreSceneInstruction.constants.d.ts +0 -7
  572. package/dist/node/lib/AreSceneInstruction/AreSceneInstruction.constants.js +0 -12
  573. package/dist/node/lib/AreSceneInstruction/AreSceneInstruction.constants.js.map +0 -1
  574. package/dist/node/lib/AreSceneInstruction/AreSceneInstruction.constants.mjs +0 -12
  575. package/dist/node/lib/AreSceneInstruction/AreSceneInstruction.constants.mjs.map +0 -1
  576. package/dist/node/lib/AreSceneInstruction/AreSceneInstruction.entity.d.mts +0 -8
  577. package/dist/node/lib/AreSceneInstruction/AreSceneInstruction.entity.d.ts +0 -8
  578. package/dist/node/lib/AreSceneInstruction/AreSceneInstruction.entity.js +0 -95
  579. package/dist/node/lib/AreSceneInstruction/AreSceneInstruction.entity.js.map +0 -1
  580. package/dist/node/lib/AreSceneInstruction/AreSceneInstruction.entity.mjs +0 -94
  581. package/dist/node/lib/AreSceneInstruction/AreSceneInstruction.entity.mjs.map +0 -1
  582. package/dist/node/lib/AreSceneInstruction/AreSceneInstruction.types.d.mts +0 -8
  583. package/dist/node/lib/AreSceneInstruction/AreSceneInstruction.types.d.ts +0 -8
  584. package/dist/node/lib/AreSceneInstruction/AreSceneInstruction.types.js +0 -4
  585. package/dist/node/lib/AreSceneInstruction/AreSceneInstruction.types.js.map +0 -1
  586. package/dist/node/lib/AreSceneInstruction/AreSceneInstruction.types.mjs +0 -3
  587. package/dist/node/lib/AreSceneInstruction/AreSceneInstruction.types.mjs.map +0 -1
  588. package/dist/node/lib/AreSceneInstruction/index.d.mts +0 -19
  589. package/dist/node/lib/AreSceneInstruction/index.d.ts +0 -19
  590. package/dist/node/lib/AreSceneInstruction/index.js +0 -33
  591. package/dist/node/lib/AreSceneInstruction/index.js.map +0 -1
  592. package/dist/node/lib/AreSceneInstruction/index.mjs +0 -7
  593. package/dist/node/lib/AreSceneInstruction/index.mjs.map +0 -1
  594. package/dist/node/lib/AreSceneInstruction/types/AddAttribute.instruction.d.mts +0 -19
  595. package/dist/node/lib/AreSceneInstruction/types/AddAttribute.instruction.d.ts +0 -19
  596. package/dist/node/lib/AreSceneInstruction/types/AddAttribute.instruction.js +0 -27
  597. package/dist/node/lib/AreSceneInstruction/types/AddAttribute.instruction.js.map +0 -1
  598. package/dist/node/lib/AreSceneInstruction/types/AddAttribute.instruction.mjs +0 -26
  599. package/dist/node/lib/AreSceneInstruction/types/AddAttribute.instruction.mjs.map +0 -1
  600. package/dist/node/lib/AreSceneInstruction/types/AddDirective.instruction.d.mts +0 -20
  601. package/dist/node/lib/AreSceneInstruction/types/AddDirective.instruction.d.ts +0 -20
  602. package/dist/node/lib/AreSceneInstruction/types/AddDirective.instruction.js +0 -27
  603. package/dist/node/lib/AreSceneInstruction/types/AddDirective.instruction.js.map +0 -1
  604. package/dist/node/lib/AreSceneInstruction/types/AddDirective.instruction.mjs +0 -26
  605. package/dist/node/lib/AreSceneInstruction/types/AddDirective.instruction.mjs.map +0 -1
  606. package/dist/node/lib/AreSceneInstruction/types/AddStyle.instruction.d.mts +0 -17
  607. package/dist/node/lib/AreSceneInstruction/types/AddStyle.instruction.d.ts +0 -17
  608. package/dist/node/lib/AreSceneInstruction/types/AddStyle.instruction.js +0 -23
  609. package/dist/node/lib/AreSceneInstruction/types/AddStyle.instruction.js.map +0 -1
  610. package/dist/node/lib/AreSceneInstruction/types/AddStyle.instruction.mjs +0 -22
  611. package/dist/node/lib/AreSceneInstruction/types/AddStyle.instruction.mjs.map +0 -1
  612. package/dist/node/lib/AreSceneInstruction/types/AddStyleProperty.instruction.d.mts +0 -19
  613. package/dist/node/lib/AreSceneInstruction/types/AddStyleProperty.instruction.d.ts +0 -19
  614. package/dist/node/lib/AreSceneInstruction/types/AddStyleProperty.instruction.js +0 -27
  615. package/dist/node/lib/AreSceneInstruction/types/AddStyleProperty.instruction.js.map +0 -1
  616. package/dist/node/lib/AreSceneInstruction/types/AddStyleProperty.instruction.mjs +0 -26
  617. package/dist/node/lib/AreSceneInstruction/types/AddStyleProperty.instruction.mjs.map +0 -1
  618. package/dist/node/lib/AreSceneInstruction/types/AttachListener.instruction.d.mts +0 -23
  619. package/dist/node/lib/AreSceneInstruction/types/AttachListener.instruction.d.ts +0 -23
  620. package/dist/node/lib/AreSceneInstruction/types/AttachListener.instruction.js +0 -41
  621. package/dist/node/lib/AreSceneInstruction/types/AttachListener.instruction.js.map +0 -1
  622. package/dist/node/lib/AreSceneInstruction/types/AttachListener.instruction.mjs +0 -40
  623. package/dist/node/lib/AreSceneInstruction/types/AttachListener.instruction.mjs.map +0 -1
  624. package/dist/node/lib/AreSceneInstruction/types/AttachRootNode.instruction.d.mts +0 -15
  625. package/dist/node/lib/AreSceneInstruction/types/AttachRootNode.instruction.d.ts +0 -15
  626. package/dist/node/lib/AreSceneInstruction/types/AttachRootNode.instruction.js +0 -21
  627. package/dist/node/lib/AreSceneInstruction/types/AttachRootNode.instruction.js.map +0 -1
  628. package/dist/node/lib/AreSceneInstruction/types/AttachRootNode.instruction.mjs +0 -20
  629. package/dist/node/lib/AreSceneInstruction/types/AttachRootNode.instruction.mjs.map +0 -1
  630. package/dist/node/lib/AreSceneInstruction/types/MountNode.instruction.d.mts +0 -17
  631. package/dist/node/lib/AreSceneInstruction/types/MountNode.instruction.d.ts +0 -17
  632. package/dist/node/lib/AreSceneInstruction/types/MountNode.instruction.js +0 -23
  633. package/dist/node/lib/AreSceneInstruction/types/MountNode.instruction.js.map +0 -1
  634. package/dist/node/lib/AreSceneInstruction/types/MountNode.instruction.mjs +0 -22
  635. package/dist/node/lib/AreSceneInstruction/types/MountNode.instruction.mjs.map +0 -1
  636. package/dist/node/lib/AreSceneInstruction/types/ReplaceInterpolation.instruction.d.mts +0 -23
  637. package/dist/node/lib/AreSceneInstruction/types/ReplaceInterpolation.instruction.d.ts +0 -23
  638. package/dist/node/lib/AreSceneInstruction/types/ReplaceInterpolation.instruction.js +0 -34
  639. package/dist/node/lib/AreSceneInstruction/types/ReplaceInterpolation.instruction.js.map +0 -1
  640. package/dist/node/lib/AreSceneInstruction/types/ReplaceInterpolation.instruction.mjs +0 -33
  641. package/dist/node/lib/AreSceneInstruction/types/ReplaceInterpolation.instruction.mjs.map +0 -1
  642. package/dist/node/lib/AreSceneInstruction/types/UnmountNode.instruction.d.mts +0 -16
  643. package/dist/node/lib/AreSceneInstruction/types/UnmountNode.instruction.d.ts +0 -16
  644. package/dist/node/lib/AreSceneInstruction/types/UnmountNode.instruction.js +0 -20
  645. package/dist/node/lib/AreSceneInstruction/types/UnmountNode.instruction.js.map +0 -1
  646. package/dist/node/lib/AreSceneInstruction/types/UnmountNode.instruction.mjs +0 -19
  647. package/dist/node/lib/AreSceneInstruction/types/UnmountNode.instruction.mjs.map +0 -1
  648. package/dist/node/lib/AreSceneInstruction/types/index.d.mts +0 -18
  649. package/dist/node/lib/AreSceneInstruction/types/index.d.ts +0 -18
  650. package/dist/node/lib/AreSceneInstruction/types/index.js +0 -52
  651. package/dist/node/lib/AreSceneInstruction/types/index.js.map +0 -1
  652. package/dist/node/lib/AreSceneInstruction/types/index.mjs +0 -12
  653. package/dist/node/lib/AreSceneInstruction/types/index.mjs.map +0 -1
  654. package/dist/node/lib/AreSlot/AreSlot.component.d.mts +0 -8
  655. package/dist/node/lib/AreSlot/AreSlot.component.d.ts +0 -8
  656. package/dist/node/lib/AreSlot/AreSlot.component.js +0 -37
  657. package/dist/node/lib/AreSlot/AreSlot.component.js.map +0 -1
  658. package/dist/node/lib/AreSlot/AreSlot.component.mjs +0 -36
  659. package/dist/node/lib/AreSlot/AreSlot.component.mjs.map +0 -1
  660. package/dist/node/lib/AreStore/index.d.mts +0 -3
  661. package/dist/node/lib/AreStore/index.d.ts +0 -3
  662. package/dist/node/lib/AreStore/index.js +0 -12
  663. package/dist/node/lib/AreStore/index.js.map +0 -1
  664. package/dist/node/lib/AreStore/index.mjs +0 -4
  665. package/dist/node/lib/AreStore/index.mjs.map +0 -1
  666. package/dist/node/lib/AreSyntax/AreSyntax.component.d.mts +0 -89
  667. package/dist/node/lib/AreSyntax/AreSyntax.component.d.ts +0 -89
  668. package/dist/node/lib/AreSyntax/AreSyntax.component.js +0 -241
  669. package/dist/node/lib/AreSyntax/AreSyntax.component.js.map +0 -1
  670. package/dist/node/lib/AreSyntax/AreSyntax.component.mjs +0 -232
  671. package/dist/node/lib/AreSyntax/AreSyntax.component.mjs.map +0 -1
  672. package/dist/node/lib/AreSyntax/index.d.mts +0 -12
  673. package/dist/node/lib/AreSyntax/index.d.ts +0 -12
  674. package/dist/node/lib/AreSyntax/index.js +0 -29
  675. package/dist/node/lib/AreSyntax/index.js.map +0 -1
  676. package/dist/node/lib/AreSyntax/index.mjs +0 -7
  677. package/dist/node/lib/AreSyntax/index.mjs.map +0 -1
  678. package/dist/node/signals/AreInit.signal.d.mts +0 -7
  679. package/dist/node/signals/AreInit.signal.d.ts +0 -7
  680. package/dist/node/signals/AreInit.signal.js +0 -13
  681. package/dist/node/signals/AreInit.signal.js.map +0 -1
  682. package/dist/node/signals/AreInit.signal.mjs +0 -12
  683. package/dist/node/signals/AreInit.signal.mjs.map +0 -1
  684. package/dist/node/signals/AreRoute.signal.d.mts +0 -12
  685. package/dist/node/signals/AreRoute.signal.d.ts +0 -12
  686. package/dist/node/signals/AreRoute.signal.js +0 -24
  687. package/dist/node/signals/AreRoute.signal.js.map +0 -1
  688. package/dist/node/signals/AreRoute.signal.mjs +0 -23
  689. package/dist/node/signals/AreRoute.signal.mjs.map +0 -1
  690. package/dist/node/signals/index.d.mts +0 -4
  691. package/dist/node/signals/index.d.ts +0 -4
  692. package/dist/node/signals/index.js +0 -17
  693. package/dist/node/signals/index.js.map +0 -1
  694. package/dist/node/signals/index.mjs +0 -5
  695. package/dist/node/signals/index.mjs.map +0 -1
  696. package/examples/jumpstart/concept.ts +0 -60
  697. package/examples/jumpstart/containers/UI.container.ts +0 -172
  698. package/examples/jumpstart/dist/index.html +0 -22
  699. package/examples/jumpstart/dist/mls3rrlq-lofs95.js +0 -129
  700. package/examples/jumpstart/dist/static/css/main.css +0 -40
  701. package/examples/jumpstart/dist/static/img/test.png +0 -0
  702. package/examples/jumpstart/public/index.html +0 -22
  703. package/examples/jumpstart/public/static/css/main.css +0 -40
  704. package/examples/jumpstart/public/static/img/test.png +0 -0
  705. package/examples/jumpstart/src/components/A-Btn.component.ts +0 -124
  706. package/examples/jumpstart/src/components/A-Input.component.ts +0 -78
  707. package/examples/jumpstart/src/components/A-Navigation.component.ts +0 -167
  708. package/examples/jumpstart/src/components/SignInComponent.component.ts +0 -127
  709. package/examples/jumpstart/src/concept.ts +0 -92
  710. package/src/engines/html/AreHTML.compiler.ts +0 -657
  711. package/src/engines/html/AreHTML.engine.ts +0 -62
  712. package/src/engines/html/index.ts +0 -2
  713. package/src/engines/json/AreJSON.compiler.ts +0 -13
  714. package/src/lib/AreApp/AreApp.container.ts +0 -77
  715. package/src/lib/AreApp/AreApp.error.ts +0 -7
  716. package/src/lib/AreApp/index.ts +0 -4
  717. package/src/lib/AreCompiler/index.ts +0 -3
  718. package/src/lib/AreComponent/index.ts +0 -4
  719. package/src/lib/AreEvent/index.ts +0 -2
  720. package/src/lib/AreIndex/AreIndex.context.ts +0 -174
  721. package/src/lib/AreIndex/index.ts +0 -1
  722. package/src/lib/AreNode/index.ts +0 -4
  723. package/src/lib/AreProps/AreProps.context.ts +0 -26
  724. package/src/lib/AreProps/index.ts +0 -1
  725. package/src/lib/AreRoot/AreRoot.component.ts +0 -54
  726. package/src/lib/AreRoot/index.ts +0 -1
  727. package/src/lib/AreRouter/AreRouter.componeent.ts +0 -24
  728. package/src/lib/AreRouter/index.ts +0 -1
  729. package/src/lib/AreScene/index.ts +0 -3
  730. package/src/lib/AreSceneInstruction/AreSceneInstruction.constants.ts +0 -7
  731. package/src/lib/AreSceneInstruction/AreSceneInstruction.entity.ts +0 -156
  732. package/src/lib/AreSceneInstruction/AreSceneInstruction.types.ts +0 -8
  733. package/src/lib/AreSceneInstruction/index.ts +0 -4
  734. package/src/lib/AreSceneInstruction/types/AddAttribute.instruction.ts +0 -34
  735. package/src/lib/AreSceneInstruction/types/AddDirective.instruction.ts +0 -36
  736. package/src/lib/AreSceneInstruction/types/AddStyle.instruction.ts +0 -26
  737. package/src/lib/AreSceneInstruction/types/AddStyleProperty.instruction.ts +0 -32
  738. package/src/lib/AreSceneInstruction/types/AttachListener.instruction.ts +0 -57
  739. package/src/lib/AreSceneInstruction/types/AttachRootNode.instruction.ts +0 -23
  740. package/src/lib/AreSceneInstruction/types/MountNode.instruction.ts +0 -29
  741. package/src/lib/AreSceneInstruction/types/ReplaceInterpolation.instruction.ts +0 -45
  742. package/src/lib/AreSceneInstruction/types/UnmountNode.instruction.ts +0 -22
  743. package/src/lib/AreSceneInstruction/types/index.ts +0 -10
  744. package/src/lib/AreSlot/AreSlot.component.ts +0 -48
  745. package/src/lib/AreStore/index.ts +0 -1
  746. package/src/lib/AreSyntax/AreSyntax.component.ts +0 -378
  747. package/src/lib/AreSyntax/index.ts +0 -4
  748. package/src/signals/AreInit.signal.ts +0 -7
  749. package/src/signals/AreRoute.signal.ts +0 -25
  750. package/src/signals/index.ts +0 -2
  751. package/tests/A-HttpChannel.test.ts +0 -204
  752. package/tests/A-HttpServerError.test.ts +0 -204
  753. package/tests/A-Request.test.ts +0 -742
  754. package/tests/A-Service.test.ts +0 -18
  755. /package/dist/node/lib/{AreApp/AreApp.env.d.mts → AreInterpreter/AreInterpreter.constants.d.mts} +0 -0
  756. /package/dist/node/lib/{AreApp/AreApp.env.d.ts → AreInterpreter/AreInterpreter.constants.d.ts} +0 -0
  757. /package/dist/node/lib/{AreApp/AreApp.types.d.mts → AreInterpreter/AreInterpreter.types.d.mts} +0 -0
  758. /package/dist/node/lib/{AreApp/AreApp.types.d.ts → AreInterpreter/AreInterpreter.types.d.ts} +0 -0
  759. /package/src/lib/{AreApp/AreApp.env.ts → AreInterpreter/AreInterpreter.constants.ts} +0 -0
  760. /package/src/lib/{AreApp/AreApp.types.ts → AreInterpreter/AreInterpreter.types.ts} +0 -0
@@ -11,107 +11,339 @@ var __decorateClass = (decorators, target, key, kind) => {
11
11
  result = (decorator(result)) || result;
12
12
  return result;
13
13
  };
14
- exports.AreSyntaxContext = class AreSyntaxContext extends aConcept.A_Fragment {
15
- constructor(config = {}) {
16
- super({ name: "AreSyntaxContext" });
17
- this.config = config;
14
+ exports.AreSyntax = class AreSyntax extends aConcept.A_Fragment {
15
+ constructor(config) {
16
+ super({ name: "AreSyntax" });
17
+ /**
18
+ * Max allowed length of an expression string to prevent excessively long inputs that could lead to performance issues or abuse.
19
+ */
20
+ this.MAX_LENGTH = 500;
21
+ /**
22
+ * Max allowed nesting depth of parentheses, brackets, and braces in expressions to prevent excessively complex inputs that could lead to performance issues or abuse. Default is 5 levels of nesting.
23
+ */
24
+ this.MAX_DEPTH = 5;
25
+ /**
26
+ * List of regex patterns that are blocked in expressions to prevent access to unsafe or sensitive features. This includes patterns for global objects, functions, and syntax that could be used for malicious purposes (e.g. "eval", "Function", "fetch", "XMLHttpRequest", "import", "require", "document", "window", "globalThis", "global", "process", "__proto__", "constructor", "prototype"). Expressions containing any of these patterns will be rejected during validation.
27
+ */
28
+ this.BLOCKED_PATTERNS = [
29
+ /\beval\b/,
30
+ /\bFunction\b/,
31
+ /\bfetch\b/,
32
+ /\bXMLHttpRequest\b/,
33
+ /\bimport\b/,
34
+ /\brequire\b/,
35
+ /\bdocument\b/,
36
+ /\bwindow\b/,
37
+ /\bglobalThis\b/,
38
+ /\bglobal\b/,
39
+ /\bprocess\b/,
40
+ /\b__proto__\b/,
41
+ /\bprototype\b/,
42
+ /\bconstructor\b/,
43
+ /\bObject\s*\.\s*assign\b/,
44
+ /\bObject\s*\.\s*defineProperty\b/,
45
+ /\bsetTimeout\b/,
46
+ /\bsetInterval\b/,
47
+ /\blocalStorage\b/,
48
+ /\bsessionStorage\b/,
49
+ /\bcookie\b/,
50
+ /\bWebSocket\b/,
51
+ /\bWorker\b/
52
+ ];
53
+ /**
54
+ * Set of global identifiers that are blocked in expressions to prevent access to unsafe or sensitive features. This includes global objects and functions that could be used for malicious purposes (e.g. "eval", "Function", "fetch", "XMLHttpRequest", "document", "window", "globalThis", "global", "process", "setTimeout", "setInterval", "localStorage", "sessionStorage", "indexedDB", "WebSocket", "Worker"). Accessing any of these identifiers in an expression will be rejected during validation.
55
+ */
56
+ this.BLOCKED_GLOBALS = /* @__PURE__ */ new Set([
57
+ "eval",
58
+ "Function",
59
+ "fetch",
60
+ "XMLHttpRequest",
61
+ "document",
62
+ "window",
63
+ "globalThis",
64
+ "global",
65
+ "process",
66
+ "setTimeout",
67
+ "setInterval",
68
+ "clearTimeout",
69
+ "clearInterval",
70
+ "localStorage",
71
+ "sessionStorage",
72
+ "indexedDB",
73
+ "WebSocket",
74
+ "Worker",
75
+ "Blob",
76
+ "File",
77
+ "require",
78
+ "module",
79
+ "exports",
80
+ "alert",
81
+ "confirm",
82
+ "prompt"
83
+ ]);
84
+ /**
85
+ * Regex pattern that defines the allowed characters in expressions. This pattern allows letters, digits, whitespace, and common operators and punctuation used in JavaScript expressions. Expressions containing characters that do not match this pattern will be rejected during validation to prevent injection of potentially harmful code.
86
+ */
87
+ this.ALLOWED_CHARS = /^[\w\s\d\.\[\]()=><|&!+\-*/%?:,'"`;~^$]+$/;
88
+ /**
89
+ * Simple dot-path identifier pattern (e.g. "name", "user.name", "user.profile.name").
90
+ * Matches strings that consist solely of identifier characters separated by dots.
91
+ */
92
+ this.SIMPLE_PATH = /^[a-zA-Z_$][\w$]*(?:\.[a-zA-Z_$][\w$]*)*$/;
93
+ this._trimWhitespace = config?.trimWhitespace !== false;
94
+ this._strictMode = config?.strictMode !== false;
95
+ this._rules = [...config?.rules ?? []].sort(
96
+ (a, b) => (b.priority ?? 0) - (a.priority ?? 0)
97
+ );
18
98
  }
19
99
  /**
20
- * identifier of the root tag to use when compiling in browser context.
21
- *
22
- * @return {string} The root tag identifier.
100
+ * Get the array of token rules that define the syntax for parsing templates. Each rule specifies how to identify and process a particular type of token (e.g. interpolation, directive, comment) within templates. The rules are checked in order of priority, allowing for flexible and customizable parsing behavior.
23
101
  */
24
- get rootTag() {
25
- return this.config.rootTag || "are-root";
102
+ get rules() {
103
+ return this._rules;
26
104
  }
27
105
  /**
28
- * List of standard HTML tags to recognize.
29
- * [!] This is a set of tags that can be ignored when determining if a node is a custom component.
30
- *
31
- * @return {Set<string>} A set of standard HTML tag names.
106
+ * Indicates whether leading and trailing whitespace should be trimmed from token content. When enabled, any whitespace at the start or end of the content captured by a token will be removed before further processing. This can help prevent issues with unintended spaces affecting rendering or logic, especially in cases like interpolations or directives where extra whitespace may be common. Default is true.
32
107
  */
33
- get standardTags() {
34
- return new Set(this.config.standardTags || []);
108
+ get trimWhitespace() {
109
+ return this._trimWhitespace;
35
110
  }
36
111
  /**
37
- * Enable or disable debug mode for syntax parsing.
38
- * When enabled, additional debug information will be logged during parsing.
39
- *
40
- * @return {boolean} True if debug mode is enabled, false otherwise.
112
+ * Indicates whether the parser should throw an error when it encounters unclosed tokens. When enabled, if the parser finds an opening delimiter without a corresponding closing delimiter (e.g. an unclosed interpolation or directive), it will throw an error instead of silently ignoring it. This can help catch syntax errors and ensure that templates are well-formed. Default is true.
41
113
  */
42
- get debugMode() {
43
- return this.config.debugMode || false;
114
+ get strictMode() {
115
+ return this._strictMode;
44
116
  }
45
117
  /**
46
- * Custom interpolation delimiters for template parsing.
47
- * Default is ['{{', '}}'].
48
- *
49
- * @return {[string, string]} The opening and closing interpolation delimiters.
118
+ * Compiles an expression string into a reusable executor.
119
+ * Performs validation and Function construction once.
120
+ * Use when the same expression will be evaluated multiple times
121
+ * e.g. event handlers, instructions that re-apply on store changes.
122
+ *
123
+ * @example
124
+ * // compile once at apply() time
125
+ * const compiled = AreCommonHelper.compile('(e) => !!pageTitle ? $testHandler(e, item) : null')
126
+ *
127
+ * // execute on every click — no re-parsing, no re-validation
128
+ * element.addEventListener('click', (e) => {
129
+ * const fn = compiled.execute(store, { $testHandler: handler, item })
130
+ * if (typeof fn === 'function') fn(e)
131
+ * })
50
132
  */
51
- get interpolationDelimiters() {
52
- return this.config.interpolationDelimiters || ["{{", "}}"];
133
+ compile(expr) {
134
+ const trimmed = expr.trim();
135
+ this.validate(trimmed);
136
+ const isCallable = this.isCallableExpression(trimmed);
137
+ const isSimplePath = this.SIMPLE_PATH.test(trimmed);
138
+ let compiled = null;
139
+ if (!isSimplePath) {
140
+ try {
141
+ compiled = new Function("scope", `"use strict"; with(scope) { return (${trimmed}) }`);
142
+ } catch (e) {
143
+ throw new Error(`Expression syntax error in "${trimmed}": ${e.message}`);
144
+ }
145
+ }
146
+ const createSandboxFn = this.createSandbox.bind(this);
147
+ return {
148
+ isCallable,
149
+ execute(store, scope) {
150
+ if (isSimplePath) {
151
+ if (scope && trimmed in scope) return scope[trimmed];
152
+ const value = store.get(trimmed);
153
+ if (value !== void 0) return value;
154
+ }
155
+ const sandbox = createSandboxFn(store, scope);
156
+ let result;
157
+ try {
158
+ result = compiled ? compiled(sandbox) : new Function("scope", `"use strict"; with(scope) { return (${trimmed}) }`)(sandbox);
159
+ } catch (e) {
160
+ throw new Error(`Expression evaluation error in "${trimmed}": ${e.message}`);
161
+ }
162
+ if (isCallable && typeof result !== "function") {
163
+ throw new Error(
164
+ `Expression "${trimmed}" was expected to be callable \u2014 got ${result === null ? "null" : typeof result}`
165
+ );
166
+ }
167
+ return result;
168
+ }
169
+ };
53
170
  }
54
171
  /**
55
- * Custom binding delimiter for data binding parsing.
56
- * Default is ':'.
57
- * @return {string} The binding delimiter.
172
+ * Evaluates an expression string against the provided store.
173
+ * Automatically determines whether the result should be callable
174
+ * based on the shape of the expression.
175
+ *
176
+ * Returns the raw value for plain expressions (interpolations, bindings).
177
+ * Returns a bound function for callable expressions (event handlers).
178
+ *
179
+ * @param expr Expression string to evaluate.
180
+ * @param store AreStore used for identifier resolution.
181
+ * @param scope Optional extra bindings checked **before** the store.
182
+ * Useful for injecting event-specific values (`$event`, `element`)
183
+ * or emit wrappers (`$handleClick`).
184
+ *
185
+ * @example
186
+ * // simple value
187
+ * evaluate('user.name', store)
188
+ *
189
+ * // with emit wrapper
190
+ * evaluate('$handleClick($event, user.name)', store, {
191
+ * $event: domEvent,
192
+ * $handleClick: (...args) => node.emit(new AreEvent('handleClick', args)),
193
+ * })
194
+ *
195
+ * // arrow with conditional
196
+ * evaluate('(e) => isValid(user.name) ? $handleClick(e) : null', store, {
197
+ * $handleClick: (...args) => node.emit(new AreEvent('handleClick', args)),
198
+ * })
58
199
  */
59
- get bindingDelimiter() {
60
- return this.config.bindingDelimiter || ":";
200
+ evaluate(expr, store, scope) {
201
+ const trimmed = expr.trim();
202
+ this.validate(trimmed);
203
+ if (this.SIMPLE_PATH.test(trimmed)) {
204
+ if (scope && trimmed in scope) return scope[trimmed];
205
+ const value = store.get(trimmed);
206
+ if (value !== void 0) return value;
207
+ }
208
+ const sandbox = this.createSandbox(store, scope);
209
+ const result = this.execute(trimmed, sandbox);
210
+ if (this.isCallableExpression(trimmed)) {
211
+ if (typeof result !== "function") {
212
+ throw new Error(
213
+ `Expression "${trimmed}" was expected to be callable \u2014 got ${result === null ? "null" : typeof result}`
214
+ );
215
+ }
216
+ }
217
+ return result;
61
218
  }
62
219
  /**
63
- * Custom listener delimiter for event binding parsing.
64
- * Default is '@'.
65
- *
66
- * @return {string} The listener delimiter.
220
+ * Extracts $-prefixed handler names from an expression.
221
+ * These represent event emission targets, not store references.
222
+ *
223
+ * Examples:
224
+ * "$handleClick" → Set(["handleClick"])
225
+ * "$handleClick(user.name)" → Set(["handleClick"])
226
+ * "(e) => isValid(user.name) ? $handleClick(e) : null" → Set(["handleClick"])
67
227
  */
68
- get listenerDelimiter() {
69
- return this.config.listenerDelimiter || "@";
228
+ extractEmitHandlers(expr) {
229
+ const stripped = expr.trim().replace(/'[^']*'|"[^"]*"|`[^`]*`/g, '""');
230
+ const handlers = /* @__PURE__ */ new Set();
231
+ const pattern = /\$([a-zA-Z_][\w$]*)/g;
232
+ let match;
233
+ while ((match = pattern.exec(stripped)) !== null) {
234
+ handlers.add(match[1]);
235
+ }
236
+ return handlers;
70
237
  }
71
- /**
72
- * Enable or disable strict mode for syntax parsing.
73
- * When enabled, the parser will throw errors for any syntax violations.
74
- * Default is true.
75
- *
76
- * @return {boolean} True if strict mode is enabled, false otherwise.
77
- */
78
- get strictMode() {
79
- return this.config.strictMode !== false;
238
+ // ── Classification ────────────────────────────────────────────────────────
239
+ isCallableExpression(expr) {
240
+ if (/^\(?[\w\s,]*\)?\s*=>/.test(expr)) return true;
241
+ if (/^function\s*\(/.test(expr)) return true;
242
+ return false;
80
243
  }
81
- /**
82
- * Enable or disable whitespace trimming in templates.
83
- * When enabled, leading and trailing whitespace in template expressions will be trimmed.
84
- * Default is true.
85
- *
86
- * @return {boolean} True if whitespace trimming is enabled, false otherwise.
87
- */
88
- get trimWhitespace() {
89
- return this.config.trimWhitespace !== false;
244
+ // ── Validation ────────────────────────────────────────────────────────────
245
+ validate(expr) {
246
+ if (expr.length > this.MAX_LENGTH) {
247
+ throw new Error(
248
+ `Expression exceeds maximum length of ${this.MAX_LENGTH} characters`
249
+ );
250
+ }
251
+ for (const pattern of this.BLOCKED_PATTERNS) {
252
+ if (pattern.test(expr)) {
253
+ throw new Error(`Expression contains blocked pattern: ${pattern.source}`);
254
+ }
255
+ }
256
+ if (!this.ALLOWED_CHARS.test(expr)) {
257
+ throw new Error(`Expression contains disallowed characters`);
258
+ }
259
+ this.checkDepth(expr);
90
260
  }
91
- /**
92
- * Custom directive delimiter for directive parsing.
93
- * Default is '$'.
94
- *
95
- * @return {string} The directive delimiter.
96
- */
97
- get directiveDelimiter() {
98
- return this.config.directiveDelimiter || "$";
261
+ checkDepth(expr) {
262
+ let depth = 0;
263
+ let max = 0;
264
+ for (const ch of expr) {
265
+ if (ch === "(" || ch === "[" || ch === "{") {
266
+ depth++;
267
+ max = Math.max(max, depth);
268
+ }
269
+ if (ch === ")" || ch === "]" || ch === "}") depth--;
270
+ }
271
+ if (max > this.MAX_DEPTH) {
272
+ throw new Error(`Expression exceeds maximum nesting depth of ${this.MAX_DEPTH}`);
273
+ }
99
274
  }
100
- /*
101
- * A list of custom directives to be recognized by the syntax parser.
102
- * Each directive should be a string representing the directive name.
103
- * Default is an empty array.
104
- */
105
- get customDirectives() {
106
- return this.config.customDirectives || [];
275
+ // ── Sandbox ───────────────────────────────────────────────────────────────
276
+ createSandbox(store, scope) {
277
+ return new Proxy({}, {
278
+ has: (_, key) => {
279
+ if (typeof key === "string" && this.BLOCKED_GLOBALS.has(key)) return false;
280
+ return true;
281
+ },
282
+ get: (_, key) => {
283
+ if (typeof key !== "string") return void 0;
284
+ if (scope && key in scope) return scope[key];
285
+ this.assertSafeKey(key);
286
+ const value = store.get(key);
287
+ if (typeof value === "function") return value.bind(store);
288
+ if (value !== null && typeof value === "object" && value !== void 0) {
289
+ return new Proxy(value, this.nestedHandler(key, store));
290
+ }
291
+ return value;
292
+ },
293
+ set: () => {
294
+ throw new Error("Expression scope is read-only");
295
+ }
296
+ });
297
+ }
298
+ nestedHandler(prefix, store) {
299
+ return {
300
+ has: () => true,
301
+ get: (target, key) => {
302
+ if (typeof key !== "string") return void 0;
303
+ this.assertSafeKey(key);
304
+ const fullKey = `${prefix}.${key}`;
305
+ const value = store.get(fullKey);
306
+ if (value === void 0) return target[key];
307
+ if (typeof value === "function") return value.bind(store);
308
+ if (value !== null && typeof value === "object") {
309
+ return new Proxy(value, this.nestedHandler(fullKey, store));
310
+ }
311
+ return value;
312
+ },
313
+ set: () => {
314
+ throw new Error("Expression scope is read-only");
315
+ }
316
+ };
317
+ }
318
+ assertSafeKey(key) {
319
+ if (key === "__proto__" || key === "constructor" || key === "prototype") {
320
+ throw new Error(`Access to "${key}" is not allowed in expressions`);
321
+ }
322
+ if (this.BLOCKED_GLOBALS.has(key)) {
323
+ throw new Error(`Access to "${key}" is not allowed in expressions`);
324
+ }
325
+ }
326
+ // ── Execution ─────────────────────────────────────────────────────────────
327
+ execute(expr, sandbox) {
328
+ let fn;
329
+ try {
330
+ fn = new Function("scope", `with(scope) { return (${expr}) }`);
331
+ } catch (e) {
332
+ throw new Error(`Expression syntax error in "${expr}": ${e.message}`);
333
+ }
334
+ try {
335
+ return fn(sandbox);
336
+ } catch (e) {
337
+ throw new Error(`Expression evaluation error in "${expr}": ${e.message}`);
338
+ }
107
339
  }
108
340
  };
109
- exports.AreSyntaxContext = __decorateClass([
341
+ exports.AreSyntax = __decorateClass([
110
342
  aFrame.A_Frame.Fragment({
111
343
  namespace: "A-ARE",
112
344
  name: "AreSyntaxContext",
113
345
  description: "Context that defines the syntax rules and structures for the A-Concept Rendering Engine (ARE). It provides mechanisms for parsing and interpreting templates, attributes, directives, interpolations, and event listeners, enabling dynamic and interactive UI rendering within the ARE framework."
114
346
  })
115
- ], exports.AreSyntaxContext);
347
+ ], exports.AreSyntax);
116
348
  //# sourceMappingURL=AreSyntax.context.js.map
117
349
  //# sourceMappingURL=AreSyntax.context.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/lib/AreSyntax/AreSyntax.context.ts"],"names":["AreSyntaxContext","A_Fragment","A_Frame"],"mappings":";;;;;;;;;;;;;AASaA,wBAAA,GAAN,+BAA+BC,mBAAA,CAAW;AAAA,EAG7C,WAAA,CAIuB,MAAA,GAAwC,EAAC,EAC9D;AACE,IAAA,KAAA,CAAM,EAAE,IAAA,EAAM,kBAAA,EAAoB,CAAA;AAFf,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAAA,EAIvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,IAAI,OAAA,GAAkB;AAClB,IAAA,OAAO,IAAA,CAAK,OAAO,OAAA,IAAW,UAAA;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,YAAA,GAA4B;AAC5B,IAAA,OAAO,IAAI,GAAA,CAAI,IAAA,CAAK,MAAA,CAAO,YAAA,IAAgB,EAAE,CAAA;AAAA,EACjD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,SAAA,GAAqB;AACrB,IAAA,OAAO,IAAA,CAAK,OAAO,SAAA,IAAa,KAAA;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,uBAAA,GAA4C;AAC5C,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,uBAAA,IAA2B,CAAC,MAAM,IAAI,CAAA;AAAA,EAC7D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,gBAAA,GAA2B;AAC3B,IAAA,OAAO,IAAA,CAAK,OAAO,gBAAA,IAAoB,GAAA;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,iBAAA,GAA4B;AAC5B,IAAA,OAAO,IAAA,CAAK,OAAO,iBAAA,IAAqB,GAAA;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,IAAI,UAAA,GAAsB;AACtB,IAAA,OAAO,IAAA,CAAK,OAAO,UAAA,KAAe,KAAA;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,IAAI,cAAA,GAA0B;AAC1B,IAAA,OAAO,IAAA,CAAK,OAAO,cAAA,KAAmB,KAAA;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,kBAAA,GAA6B;AAC7B,IAAA,OAAO,IAAA,CAAK,OAAO,kBAAA,IAAsB,GAAA;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,gBAAA,GAA6B;AAC7B,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,gBAAA,IAAoB,EAAC;AAAA,EAC5C;AACJ;AAxGaD,wBAAA,GAAN,eAAA,CAAA;AAAA,EALNE,eAAQ,QAAA,CAAS;AAAA,IACd,SAAA,EAAW,OAAA;AAAA,IACX,IAAA,EAAM,kBAAA;AAAA,IACN,WAAA,EAAa;AAAA,GAChB;AAAA,CAAA,EACYF,wBAAA,CAAA","file":"AreSyntax.context.js","sourcesContent":["import { A_Fragment } from \"@adaas/a-concept\";\nimport { A_Frame } from \"@adaas/a-frame\";\nimport { AreSyntaxInitOptions } from \"./AreSyntax.types\";\n\n@A_Frame.Fragment({\n namespace: 'A-ARE',\n name: 'AreSyntaxContext',\n description: 'Context that defines the syntax rules and structures for the A-Concept Rendering Engine (ARE). It provides mechanisms for parsing and interpreting templates, attributes, directives, interpolations, and event listeners, enabling dynamic and interactive UI rendering within the ARE framework.'\n})\nexport class AreSyntaxContext extends A_Fragment {\n\n\n constructor(\n /**\n * Initialization options for configuring the AreSyntax context.\n */\n protected readonly config: Partial<AreSyntaxInitOptions> = {}\n ) {\n super({ name: 'AreSyntaxContext' });\n\n }\n\n\n /**\n * identifier of the root tag to use when compiling in browser context.\n * \n * @return {string} The root tag identifier.\n */\n get rootTag(): string {\n return this.config.rootTag || 'are-root';\n }\n /**\n * List of standard HTML tags to recognize.\n * [!] This is a set of tags that can be ignored when determining if a node is a custom component.\n * \n * @return {Set<string>} A set of standard HTML tag names.\n */\n get standardTags(): Set<string> {\n return new Set(this.config.standardTags || [])\n };\n /**\n * Enable or disable debug mode for syntax parsing.\n * When enabled, additional debug information will be logged during parsing.\n * \n * @return {boolean} True if debug mode is enabled, false otherwise.\n */\n get debugMode(): boolean {\n return this.config.debugMode || false;\n }\n /**\n * Custom interpolation delimiters for template parsing.\n * Default is ['{{', '}}'].\n * \n * @return {[string, string]} The opening and closing interpolation delimiters.\n */\n get interpolationDelimiters(): [string, string] {\n return this.config.interpolationDelimiters || ['{{', '}}'];\n }\n /**\n * Custom binding delimiter for data binding parsing.\n * Default is ':'.\n * @return {string} The binding delimiter.\n */\n get bindingDelimiter(): string {\n return this.config.bindingDelimiter || ':';\n }\n /**\n * Custom listener delimiter for event binding parsing.\n * Default is '@'.\n * \n * @return {string} The listener delimiter.\n */\n get listenerDelimiter(): string {\n return this.config.listenerDelimiter || '@';\n }\n /**\n * Enable or disable strict mode for syntax parsing.\n * When enabled, the parser will throw errors for any syntax violations.\n * Default is true.\n * \n * @return {boolean} True if strict mode is enabled, false otherwise.\n */\n get strictMode(): boolean {\n return this.config.strictMode !== false;\n }\n /**\n * Enable or disable whitespace trimming in templates.\n * When enabled, leading and trailing whitespace in template expressions will be trimmed.\n * Default is true.\n * \n * @return {boolean} True if whitespace trimming is enabled, false otherwise.\n */\n get trimWhitespace(): boolean {\n return this.config.trimWhitespace !== false;\n }\n /**\n * Custom directive delimiter for directive parsing.\n * Default is '$'.\n * \n * @return {string} The directive delimiter.\n */\n get directiveDelimiter(): string {\n return this.config.directiveDelimiter || '$';\n }\n\n /*\n * A list of custom directives to be recognized by the syntax parser.\n * Each directive should be a string representing the directive name.\n * Default is an empty array.\n */\n get customDirectives(): string[] {\n return this.config.customDirectives || [];\n }\n}"]}
1
+ {"version":3,"sources":["../../../../src/lib/AreSyntax/AreSyntax.context.ts"],"names":["AreSyntax","A_Fragment","A_Frame"],"mappings":"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","file":"AreSyntax.context.js","sourcesContent":["import { A_Fragment } from \"@adaas/a-concept\";\nimport { A_Frame } from \"@adaas/a-frame\";\nimport { AreSyntaxCompiledExpression, AreSyntaxInitOptions, AreSyntaxTokenRules } from \"./AreSyntax.types\";\nimport { AreStore } from \"@adaas/are/store/AreStore.context\";\n\n@A_Frame.Fragment({\n namespace: 'A-ARE',\n name: 'AreSyntaxContext',\n description: 'Context that defines the syntax rules and structures for the A-Concept Rendering Engine (ARE). It provides mechanisms for parsing and interpreting templates, attributes, directives, interpolations, and event listeners, enabling dynamic and interactive UI rendering within the ARE framework.'\n})\nexport class AreSyntax extends A_Fragment {\n /**\n * Max allowed length of an expression string to prevent excessively long inputs that could lead to performance issues or abuse.\n */\n private readonly MAX_LENGTH = 500\n /**\n * Max allowed nesting depth of parentheses, brackets, and braces in expressions to prevent excessively complex inputs that could lead to performance issues or abuse. Default is 5 levels of nesting.\n */\n private readonly MAX_DEPTH = 5\n /**\n * List of regex patterns that are blocked in expressions to prevent access to unsafe or sensitive features. This includes patterns for global objects, functions, and syntax that could be used for malicious purposes (e.g. \"eval\", \"Function\", \"fetch\", \"XMLHttpRequest\", \"import\", \"require\", \"document\", \"window\", \"globalThis\", \"global\", \"process\", \"__proto__\", \"constructor\", \"prototype\"). Expressions containing any of these patterns will be rejected during validation.\n */\n private readonly BLOCKED_PATTERNS: RegExp[] = [\n /\\beval\\b/,\n /\\bFunction\\b/,\n /\\bfetch\\b/,\n /\\bXMLHttpRequest\\b/,\n /\\bimport\\b/,\n /\\brequire\\b/,\n /\\bdocument\\b/,\n /\\bwindow\\b/,\n /\\bglobalThis\\b/,\n /\\bglobal\\b/,\n /\\bprocess\\b/,\n /\\b__proto__\\b/,\n /\\bprototype\\b/,\n /\\bconstructor\\b/,\n /\\bObject\\s*\\.\\s*assign\\b/,\n /\\bObject\\s*\\.\\s*defineProperty\\b/,\n /\\bsetTimeout\\b/,\n /\\bsetInterval\\b/,\n /\\blocalStorage\\b/,\n /\\bsessionStorage\\b/,\n /\\bcookie\\b/,\n /\\bWebSocket\\b/,\n /\\bWorker\\b/,\n ]\n /**\n * Set of global identifiers that are blocked in expressions to prevent access to unsafe or sensitive features. This includes global objects and functions that could be used for malicious purposes (e.g. \"eval\", \"Function\", \"fetch\", \"XMLHttpRequest\", \"document\", \"window\", \"globalThis\", \"global\", \"process\", \"setTimeout\", \"setInterval\", \"localStorage\", \"sessionStorage\", \"indexedDB\", \"WebSocket\", \"Worker\"). Accessing any of these identifiers in an expression will be rejected during validation.\n */\n private readonly BLOCKED_GLOBALS = new Set([\n 'eval', 'Function', 'fetch', 'XMLHttpRequest',\n 'document', 'window', 'globalThis', 'global', 'process',\n 'setTimeout', 'setInterval', 'clearTimeout', 'clearInterval',\n 'localStorage', 'sessionStorage', 'indexedDB',\n 'WebSocket', 'Worker', 'Blob', 'File',\n 'require', 'module', 'exports',\n 'alert', 'confirm', 'prompt',\n ])\n /**\n * Regex pattern that defines the allowed characters in expressions. This pattern allows letters, digits, whitespace, and common operators and punctuation used in JavaScript expressions. Expressions containing characters that do not match this pattern will be rejected during validation to prevent injection of potentially harmful code.\n */\n private readonly ALLOWED_CHARS = /^[\\w\\s\\d\\.\\[\\]()=><|&!+\\-*/%?:,'\"`;~^$]+$/\n /**\n * Simple dot-path identifier pattern (e.g. \"name\", \"user.name\", \"user.profile.name\").\n * Matches strings that consist solely of identifier characters separated by dots.\n */\n private readonly SIMPLE_PATH = /^[a-zA-Z_$][\\w$]*(?:\\.[a-zA-Z_$][\\w$]*)*$/\n /**\n * Compiled expression — a pre-parsed function ready for repeated execution.\n * Created once via compile(), reused on every apply/click.\n */\n\n private readonly _rules: AreSyntaxTokenRules[]\n private readonly _trimWhitespace: boolean\n private readonly _strictMode: boolean\n\n constructor(config?: Partial<AreSyntaxInitOptions>) {\n super({ name: 'AreSyntax' })\n\n this._trimWhitespace = config?.trimWhitespace !== false\n this._strictMode = config?.strictMode !== false\n this._rules = [...(config?.rules ?? [])].sort((a, b) =>\n (b.priority ?? 0) - (a.priority ?? 0)\n )\n }\n /**\n * Get the array of token rules that define the syntax for parsing templates. Each rule specifies how to identify and process a particular type of token (e.g. interpolation, directive, comment) within templates. The rules are checked in order of priority, allowing for flexible and customizable parsing behavior.\n */\n get rules() {\n return this._rules\n }\n /**\n * Indicates whether leading and trailing whitespace should be trimmed from token content. When enabled, any whitespace at the start or end of the content captured by a token will be removed before further processing. This can help prevent issues with unintended spaces affecting rendering or logic, especially in cases like interpolations or directives where extra whitespace may be common. Default is true.\n */\n get trimWhitespace() {\n return this._trimWhitespace\n }\n /**\n * Indicates whether the parser should throw an error when it encounters unclosed tokens. When enabled, if the parser finds an opening delimiter without a corresponding closing delimiter (e.g. an unclosed interpolation or directive), it will throw an error instead of silently ignoring it. This can help catch syntax errors and ensure that templates are well-formed. Default is true.\n */\n get strictMode() {\n return this._strictMode\n }\n\n\n\n /**\n * Compiles an expression string into a reusable executor.\n * Performs validation and Function construction once.\n * Use when the same expression will be evaluated multiple times\n * e.g. event handlers, instructions that re-apply on store changes.\n *\n * @example\n * // compile once at apply() time\n * const compiled = AreCommonHelper.compile('(e) => !!pageTitle ? $testHandler(e, item) : null')\n *\n * // execute on every click — no re-parsing, no re-validation\n * element.addEventListener('click', (e) => {\n * const fn = compiled.execute(store, { $testHandler: handler, item })\n * if (typeof fn === 'function') fn(e)\n * })\n */\n compile(expr: string): AreSyntaxCompiledExpression {\n const trimmed = expr.trim()\n\n // validate once — throws if expression is unsafe or malformed\n this.validate(trimmed)\n\n const isCallable = this.isCallableExpression(trimmed)\n const isSimplePath = this.SIMPLE_PATH.test(trimmed)\n\n // pre-build the Function once — most expensive part\n let compiled: Function | null = null\n\n if (!isSimplePath) {\n try {\n compiled = new Function('scope', `\"use strict\"; with(scope) { return (${trimmed}) }`)\n } catch (e) {\n throw new Error(`Expression syntax error in \"${trimmed}\": ${(e as Error).message}`)\n }\n }\n\n const createSandboxFn = this.createSandbox.bind(this)\n\n return {\n isCallable,\n\n execute(store: AreStore, scope?: Record<string, any>): any {\n // fast path — simple property path, no sandbox needed\n if (isSimplePath) {\n if (scope && trimmed in scope) return scope[trimmed]\n const value = store.get(trimmed)\n if (value !== undefined) return value\n // fall through to sandbox if store didn't resolve it\n }\n\n const sandbox = createSandboxFn(store, scope)\n\n let result: any\n try {\n result = compiled\n ? compiled(sandbox)\n : new Function('scope', `\"use strict\"; with(scope) { return (${trimmed}) }`)(sandbox)\n } catch (e) {\n throw new Error(`Expression evaluation error in \"${trimmed}\": ${(e as Error).message}`)\n }\n\n if (isCallable && typeof result !== 'function') {\n throw new Error(\n `Expression \"${trimmed}\" was expected to be callable — got ${result === null ? 'null' : typeof result}`\n )\n }\n\n return result\n }\n }\n }\n /**\n * Evaluates an expression string against the provided store.\n * Automatically determines whether the result should be callable\n * based on the shape of the expression.\n *\n * Returns the raw value for plain expressions (interpolations, bindings).\n * Returns a bound function for callable expressions (event handlers).\n *\n * @param expr Expression string to evaluate.\n * @param store AreStore used for identifier resolution.\n * @param scope Optional extra bindings checked **before** the store.\n * Useful for injecting event-specific values (`$event`, `element`)\n * or emit wrappers (`$handleClick`).\n *\n * @example\n * // simple value\n * evaluate('user.name', store)\n *\n * // with emit wrapper\n * evaluate('$handleClick($event, user.name)', store, {\n * $event: domEvent,\n * $handleClick: (...args) => node.emit(new AreEvent('handleClick', args)),\n * })\n *\n * // arrow with conditional\n * evaluate('(e) => isValid(user.name) ? $handleClick(e) : null', store, {\n * $handleClick: (...args) => node.emit(new AreEvent('handleClick', args)),\n * })\n */\n evaluate(expr: string, store: AreStore, scope?: Record<string, any>): any {\n const trimmed = expr.trim()\n\n this.validate(trimmed)\n\n /**\n * Fast path: if the expression is a simple property path (e.g. \"name\", \"user.name\"),\n * resolve it directly — first from scope, then from the store — without going\n * through the sandbox/Function constructor.\n */\n if (this.SIMPLE_PATH.test(trimmed)) {\n if (scope && trimmed in scope) return scope[trimmed]\n\n const value = store.get(trimmed)\n if (value !== undefined) return value\n\n /**\n * If the full dot-path didn't resolve, fall back to the sandbox approach\n * in case the store holds a nested object under the first key.\n */\n }\n\n const sandbox = this.createSandbox(store, scope)\n const result = this.execute(trimmed, sandbox)\n\n if (this.isCallableExpression(trimmed)) {\n if (typeof result !== 'function') {\n throw new Error(\n `Expression \"${trimmed}\" was expected to be callable — got ${result === null ? 'null' : typeof result}`\n )\n }\n }\n\n return result\n }\n\n /**\n * Extracts $-prefixed handler names from an expression.\n * These represent event emission targets, not store references.\n *\n * Examples:\n * \"$handleClick\" → Set([\"handleClick\"])\n * \"$handleClick(user.name)\" → Set([\"handleClick\"])\n * \"(e) => isValid(user.name) ? $handleClick(e) : null\" → Set([\"handleClick\"])\n */\n extractEmitHandlers(expr: string): Set<string> {\n const stripped = expr.trim().replace(/'[^']*'|\"[^\"]*\"|`[^`]*`/g, '\"\"')\n const handlers = new Set<string>()\n const pattern = /\\$([a-zA-Z_][\\w$]*)/g\n let match: RegExpExecArray | null\n\n while ((match = pattern.exec(stripped)) !== null) {\n handlers.add(match[1])\n }\n\n return handlers\n }\n\n // ── Classification ────────────────────────────────────────────────────────\n\n private isCallableExpression(expr: string): boolean {\n // arrow function: () => ... or x => ...\n if (/^\\(?[\\w\\s,]*\\)?\\s*=>/.test(expr)) return true\n\n // function keyword: function(...) { }\n if (/^function\\s*\\(/.test(expr)) return true\n\n // plain identifier with no operators — could be a function ref\n // but only if it resolves to a function — we let the guard handle it\n // so we don't classify this as callable upfront\n return false\n }\n\n // ── Validation ────────────────────────────────────────────────────────────\n\n private validate(expr: string): void {\n if (expr.length > this.MAX_LENGTH) {\n throw new Error(\n `Expression exceeds maximum length of ${this.MAX_LENGTH} characters`\n )\n }\n\n for (const pattern of this.BLOCKED_PATTERNS) {\n if (pattern.test(expr)) {\n throw new Error(`Expression contains blocked pattern: ${pattern.source}`)\n }\n }\n\n if (!this.ALLOWED_CHARS.test(expr)) {\n throw new Error(`Expression contains disallowed characters`)\n }\n\n this.checkDepth(expr)\n }\n\n private checkDepth(expr: string): void {\n let depth = 0\n let max = 0\n for (const ch of expr) {\n if (ch === '(' || ch === '[' || ch === '{') { depth++; max = Math.max(max, depth) }\n if (ch === ')' || ch === ']' || ch === '}') depth--\n }\n if (max > this.MAX_DEPTH) {\n throw new Error(`Expression exceeds maximum nesting depth of ${this.MAX_DEPTH}`)\n }\n }\n\n // ── Sandbox ───────────────────────────────────────────────────────────────\n\n private createSandbox(store: AreStore, scope?: Record<string, any>): object {\n return new Proxy({}, {\n has: (_, key) => {\n if (typeof key === 'string' && this.BLOCKED_GLOBALS.has(key)) return false\n return true\n },\n get: (_, key) => {\n if (typeof key !== 'string') return undefined\n\n // Scope bindings take priority over the store\n if (scope && key in scope) return scope[key]\n\n this.assertSafeKey(key)\n\n const value = store.get(key)\n if (typeof value === 'function') return value.bind(store)\n if (value !== null && typeof value === 'object' && value !== undefined) {\n return new Proxy(value as object, this.nestedHandler(key, store))\n }\n return value\n },\n set: () => { throw new Error('Expression scope is read-only') },\n })\n }\n\n private nestedHandler(prefix: string, store: AreStore): ProxyHandler<object> {\n return {\n has: () => true,\n get: (target, key) => {\n if (typeof key !== 'string') return undefined\n this.assertSafeKey(key)\n\n const fullKey = `${prefix}.${key}`\n const value = store.get(fullKey)\n\n if (value === undefined) return (target as any)[key]\n if (typeof value === 'function') return value.bind(store)\n if (value !== null && typeof value === 'object') {\n return new Proxy(value as object, this.nestedHandler(fullKey, store))\n }\n return value\n },\n set: () => { throw new Error('Expression scope is read-only') },\n }\n }\n\n private assertSafeKey(key: string): void {\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n throw new Error(`Access to \"${key}\" is not allowed in expressions`)\n }\n if (this.BLOCKED_GLOBALS.has(key)) {\n throw new Error(`Access to \"${key}\" is not allowed in expressions`)\n }\n }\n\n // ── Execution ─────────────────────────────────────────────────────────────\n\n private execute(expr: string, sandbox: object): any {\n let fn: Function\n try {\n fn = new Function('scope', `with(scope) { return (${expr}) }`)\n } catch (e) {\n throw new Error(`Expression syntax error in \"${expr}\": ${(e as Error).message}`)\n }\n\n try {\n return fn(sandbox)\n } catch (e) {\n throw new Error(`Expression evaluation error in \"${expr}\": ${(e as Error).message}`)\n }\n }\n}"]}