xmlui 0.4.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.
Files changed (308) hide show
  1. package/dist/Pdf-DeGhSMXe.mjs +19537 -0
  2. package/dist/Pdf.css +1 -0
  3. package/dist/apiInterceptorWorker-CwuUhYyc.mjs +9229 -0
  4. package/dist/array-USo-Szhp.mjs +12 -0
  5. package/dist/index-C24dkfpd.mjs +1434 -0
  6. package/dist/index-ao27SnVp.mjs +145185 -0
  7. package/dist/index.css +1 -0
  8. package/dist/nivo-bar.es-CWh0ZlxB.mjs +1666 -0
  9. package/dist/nivo-geo.es-BTqNt5Db.mjs +1579 -0
  10. package/dist/nivo-legends.es-BuIxHGSU.mjs +6916 -0
  11. package/dist/nivo-pie.es-BvCBFA0L.mjs +700 -0
  12. package/dist/react-apexcharts.min-DqWuDOyO.mjs +8881 -0
  13. package/dist/scripts/bin/bootstrap.js +11 -0
  14. package/dist/scripts/bin/build.js +256 -0
  15. package/dist/scripts/bin/index.js +88 -0
  16. package/dist/scripts/bin/preview.js +27 -0
  17. package/dist/scripts/bin/start.js +41 -0
  18. package/dist/scripts/bin/vite-ueml-plugin.js +113 -0
  19. package/dist/scripts/bin/viteConfig.js +112 -0
  20. package/dist/scripts/src/abstractions/ActionDefs.js +2 -0
  21. package/dist/scripts/src/abstractions/AppContextDefs.js +2 -0
  22. package/dist/scripts/src/abstractions/BlockScope.js +4 -0
  23. package/dist/scripts/src/abstractions/ComponentDefs.js +2 -0
  24. package/dist/scripts/src/abstractions/ComponentDescriptorDefs.js +2 -0
  25. package/dist/scripts/src/abstractions/ContainerDefs.js +2 -0
  26. package/dist/scripts/src/abstractions/FunctionDefs.js +2 -0
  27. package/dist/scripts/src/abstractions/RendererDefs.js +2 -0
  28. package/dist/scripts/src/abstractions/scripting/ScriptParserError.js +2 -0
  29. package/dist/scripts/src/abstractions/scripting/ScriptingSourceTree.js +2 -0
  30. package/dist/scripts/src/abstractions/scripting/Token.js +110 -0
  31. package/dist/scripts/src/components/App/App.js +253 -0
  32. package/dist/scripts/src/components/App/AppLayoutContext.js +9 -0
  33. package/dist/scripts/src/components/App/AppStateContext.js +9 -0
  34. package/dist/scripts/src/components/App/Sheet.js +89 -0
  35. package/dist/scripts/src/components/AppHeader/AppHeader.js +121 -0
  36. package/dist/scripts/src/components/AppState/AppState.js +29 -0
  37. package/dist/scripts/src/components/Avatar/Avatar.js +81 -0
  38. package/dist/scripts/src/components/Badge/Badge.js +56 -0
  39. package/dist/scripts/src/components/BarChart/BarChart.js +199 -0
  40. package/dist/scripts/src/components/Bookmark/Bookmark.js +11 -0
  41. package/dist/scripts/src/components/Button/Button.js +196 -0
  42. package/dist/scripts/src/components/Card/Card.js +65 -0
  43. package/dist/scripts/src/components/ChangeListener/ChangeListener.js +43 -0
  44. package/dist/scripts/src/components/Chart/Chart.js +158 -0
  45. package/dist/scripts/src/components/Checkbox/Checkbox.js +43 -0
  46. package/dist/scripts/src/components/Combobox/Combobox.js +145 -0
  47. package/dist/scripts/src/components/ComponentProvider.js +357 -0
  48. package/dist/scripts/src/components/ContentSeparator/ContentSeparator.js +40 -0
  49. package/dist/scripts/src/components/DatePicker/DatePicker.js +196 -0
  50. package/dist/scripts/src/components/DropdownMenu/DropdownMenu.js +175 -0
  51. package/dist/scripts/src/components/EmojiSelector/EmojiSelector.js +56 -0
  52. package/dist/scripts/src/components/FileInput/FileInput.js +127 -0
  53. package/dist/scripts/src/components/FileUploadDropZone/FileUploadDropZone.js +106 -0
  54. package/dist/scripts/src/components/FlowLayout/FlowLayout.js +139 -0
  55. package/dist/scripts/src/components/Footer/Footer.js +42 -0
  56. package/dist/scripts/src/components/Form/Form.js +320 -0
  57. package/dist/scripts/src/components/Form/FormContext.js +9 -0
  58. package/dist/scripts/src/components/Form/formActions.js +86 -0
  59. package/dist/scripts/src/components/FormItem/FormItem.js +204 -0
  60. package/dist/scripts/src/components/FormItem/HelperText.js +27 -0
  61. package/dist/scripts/src/components/FormItem/ItemWithLabel.js +39 -0
  62. package/dist/scripts/src/components/FormItem/Validations.js +346 -0
  63. package/dist/scripts/src/components/FormSection/FormSection.js +45 -0
  64. package/dist/scripts/src/components/Heading/Heading.js +206 -0
  65. package/dist/scripts/src/components/HoverCard/HoverCard.js +45 -0
  66. package/dist/scripts/src/components/Icon/ApiIcon.js +10 -0
  67. package/dist/scripts/src/components/Icon/Attach.js +10 -0
  68. package/dist/scripts/src/components/Icon/Binding.js +11 -0
  69. package/dist/scripts/src/components/Icon/BoardIcon.js +7 -0
  70. package/dist/scripts/src/components/Icon/BoxIcon.js +10 -0
  71. package/dist/scripts/src/components/Icon/CheckIcon.js +7 -0
  72. package/dist/scripts/src/components/Icon/ChevronDownIcon.js +7 -0
  73. package/dist/scripts/src/components/Icon/ChevronLeft.js +7 -0
  74. package/dist/scripts/src/components/Icon/ChevronRight.js +7 -0
  75. package/dist/scripts/src/components/Icon/ChevronUpIcon.js +7 -0
  76. package/dist/scripts/src/components/Icon/CodeFileIcon.js +10 -0
  77. package/dist/scripts/src/components/Icon/CodeSandbox.js +10 -0
  78. package/dist/scripts/src/components/Icon/CompactListIcon.js +7 -0
  79. package/dist/scripts/src/components/Icon/ContentCopyIcon.js +7 -0
  80. package/dist/scripts/src/components/Icon/DatabaseIcon.js +11 -0
  81. package/dist/scripts/src/components/Icon/DocFileIcon.js +10 -0
  82. package/dist/scripts/src/components/Icon/DocIcon.js +10 -0
  83. package/dist/scripts/src/components/Icon/DotMenuHorizontalIcon.js +7 -0
  84. package/dist/scripts/src/components/Icon/DotMenuIcon.js +7 -0
  85. package/dist/scripts/src/components/Icon/EmailIcon.js +7 -0
  86. package/dist/scripts/src/components/Icon/EmptyFolderIcon.js +10 -0
  87. package/dist/scripts/src/components/Icon/ErrorIcon.js +7 -0
  88. package/dist/scripts/src/components/Icon/ExpressionIcon.js +10 -0
  89. package/dist/scripts/src/components/Icon/FillPlusCricleIcon.js +7 -0
  90. package/dist/scripts/src/components/Icon/FilterIcon.js +10 -0
  91. package/dist/scripts/src/components/Icon/FolderIcon.js +10 -0
  92. package/dist/scripts/src/components/Icon/GlobeIcon.js +7 -0
  93. package/dist/scripts/src/components/Icon/HomeIcon.js +7 -0
  94. package/dist/scripts/src/components/Icon/HyperLinkIcon.js +7 -0
  95. package/dist/scripts/src/components/Icon/Icon.js +101 -0
  96. package/dist/scripts/src/components/Icon/ImageFileIcon.js +10 -0
  97. package/dist/scripts/src/components/Icon/LinkIcon.js +7 -0
  98. package/dist/scripts/src/components/Icon/ListIcon.js +7 -0
  99. package/dist/scripts/src/components/Icon/LooseListIcon.js +7 -0
  100. package/dist/scripts/src/components/Icon/MoonIcon.js +10 -0
  101. package/dist/scripts/src/components/Icon/MoreOptionsIcon.js +7 -0
  102. package/dist/scripts/src/components/Icon/PDFIcon.js +10 -0
  103. package/dist/scripts/src/components/Icon/PenIcon.js +7 -0
  104. package/dist/scripts/src/components/Icon/PhoneIcon.js +7 -0
  105. package/dist/scripts/src/components/Icon/PhotoIcon.js +10 -0
  106. package/dist/scripts/src/components/Icon/PlusIcon.js +7 -0
  107. package/dist/scripts/src/components/Icon/SearchIcon.js +7 -0
  108. package/dist/scripts/src/components/Icon/ShareIcon.js +10 -0
  109. package/dist/scripts/src/components/Icon/SunIcon.js +10 -0
  110. package/dist/scripts/src/components/Icon/TrashIcon.js +7 -0
  111. package/dist/scripts/src/components/Icon/TxtIcon.js +10 -0
  112. package/dist/scripts/src/components/Icon/UnknownFileIcon.js +10 -0
  113. package/dist/scripts/src/components/Icon/UnlinkIcon.js +10 -0
  114. package/dist/scripts/src/components/Icon/UserIcon.js +7 -0
  115. package/dist/scripts/src/components/Icon/WarningIcon.js +7 -0
  116. package/dist/scripts/src/components/Icon/XlsIcon.js +10 -0
  117. package/dist/scripts/src/components/IconProvider.js +249 -0
  118. package/dist/scripts/src/components/IconRegistryContext.js +307 -0
  119. package/dist/scripts/src/components/Image/Image.js +34 -0
  120. package/dist/scripts/src/components/Input/InputAdornment.js +14 -0
  121. package/dist/scripts/src/components/Input/input-abstractions.js +44 -0
  122. package/dist/scripts/src/components/Items/Items.js +48 -0
  123. package/dist/scripts/src/components/Link/Link.js +72 -0
  124. package/dist/scripts/src/components/List/List.js +442 -0
  125. package/dist/scripts/src/components/Logo/Logo.js +25 -0
  126. package/dist/scripts/src/components/Map/Map.js +60 -0
  127. package/dist/scripts/src/components/Map/world_countries.json +45307 -0
  128. package/dist/scripts/src/components/Markdown/Markdown.js +120 -0
  129. package/dist/scripts/src/components/ModalDialog/ConfirmationModalContextProvider.js +106 -0
  130. package/dist/scripts/src/components/ModalDialog/Dialog.js +20 -0
  131. package/dist/scripts/src/components/ModalDialog/ModalDialog.js +145 -0
  132. package/dist/scripts/src/components/MultiCombobox/MultiCombobox.js +249 -0
  133. package/dist/scripts/src/components/MultiSelect/MultiSelect.js +192 -0
  134. package/dist/scripts/src/components/NavGroup/NavGroup.js +113 -0
  135. package/dist/scripts/src/components/NavLink/NavLink.js +115 -0
  136. package/dist/scripts/src/components/NavPanel/NavPanel.js +101 -0
  137. package/dist/scripts/src/components/NoResult/NoResult.js +39 -0
  138. package/dist/scripts/src/components/NumberBox/NumberBox.js +373 -0
  139. package/dist/scripts/src/components/Option/Option.js +41 -0
  140. package/dist/scripts/src/components/PageMetaTitle/PageMetaTitle.js +22 -0
  141. package/dist/scripts/src/components/Pages/Pages.js +74 -0
  142. package/dist/scripts/src/components/Pdf/LazyPdf.js +44 -0
  143. package/dist/scripts/src/components/Pdf/Pdf.js +19 -0
  144. package/dist/scripts/src/components/PieChart/PieChart.js +184 -0
  145. package/dist/scripts/src/components/PositionedContainer/PositionedContainer.js +29 -0
  146. package/dist/scripts/src/components/ProgressBar/ProgressBar.js +38 -0
  147. package/dist/scripts/src/components/Queue/Queue.js +286 -0
  148. package/dist/scripts/src/components/Queue/queueActions.js +87 -0
  149. package/dist/scripts/src/components/RadioGroup/RadioGroup.js +144 -0
  150. package/dist/scripts/src/components/RealTimeAdapter/RealTimeAdapter.js +147 -0
  151. package/dist/scripts/src/components/Redirect/Redirect.js +10 -0
  152. package/dist/scripts/src/components/Select/Select.js +139 -0
  153. package/dist/scripts/src/components/Select/SelectContext.js +45 -0
  154. package/dist/scripts/src/components/SelectionStore/SelectionStore.js +88 -0
  155. package/dist/scripts/src/components/SpaceFiller/SpaceFiller.js +22 -0
  156. package/dist/scripts/src/components/Spinner/Spinner.js +59 -0
  157. package/dist/scripts/src/components/Splitter/Splitter.js +205 -0
  158. package/dist/scripts/src/components/Splitter/utils.js +17 -0
  159. package/dist/scripts/src/components/Stack/Stack.js +117 -0
  160. package/dist/scripts/src/components/StickyBox/StickyBox.js +33 -0
  161. package/dist/scripts/src/components/Switch/Switch.js +50 -0
  162. package/dist/scripts/src/components/Table/Table.js +499 -0
  163. package/dist/scripts/src/components/Table/useRowSelection.js +169 -0
  164. package/dist/scripts/src/components/TableColumnDef/TableColumnDef.js +44 -0
  165. package/dist/scripts/src/components/TableColumnDef/TableContext.js +12 -0
  166. package/dist/scripts/src/components/Tabs/Tabs.js +85 -0
  167. package/dist/scripts/src/components/Text/Text.js +175 -0
  168. package/dist/scripts/src/components/TextArea/TextArea.js +194 -0
  169. package/dist/scripts/src/components/TextArea/TextAreaResizable.js +63 -0
  170. package/dist/scripts/src/components/TextArea/useComposedRef.js +50 -0
  171. package/dist/scripts/src/components/TextBox/TextBox.js +145 -0
  172. package/dist/scripts/src/components/Theme/NotificationToast.js +39 -0
  173. package/dist/scripts/src/components/Theme/Theme.js +153 -0
  174. package/dist/scripts/src/components/ThemeChanger/ThemeChanger.js +125 -0
  175. package/dist/scripts/src/components/Toggle/Toggle.js +88 -0
  176. package/dist/scripts/src/components/Tree/TreeComponent.js +79 -0
  177. package/dist/scripts/src/components/ValidationSummary/ValidationSummary.js +59 -0
  178. package/dist/scripts/src/components/ViewComponentRegistryContext.js +34 -0
  179. package/dist/scripts/src/components/abstractions.js +2 -0
  180. package/dist/scripts/src/components/chart-color-schemes.js +43 -0
  181. package/dist/scripts/src/components/component-utils.js +32 -0
  182. package/dist/scripts/src/components/container-helpers.js +18 -0
  183. package/dist/scripts/src/components-core/ApiBoundComponent.js +189 -0
  184. package/dist/scripts/src/components-core/AppContext.js +17 -0
  185. package/dist/scripts/src/components-core/ChildrenSlot.js +10 -0
  186. package/dist/scripts/src/components-core/Component.js +280 -0
  187. package/dist/scripts/src/components-core/ComponentDecorator.js +63 -0
  188. package/dist/scripts/src/components-core/CompoundComponent.js +132 -0
  189. package/dist/scripts/src/components-core/EngineError.js +91 -0
  190. package/dist/scripts/src/components-core/ErrorBoundary.js +58 -0
  191. package/dist/scripts/src/components-core/Fragment.js +14 -0
  192. package/dist/scripts/src/components-core/InvalidComponent.js +15 -0
  193. package/dist/scripts/src/components-core/LoaderComponent.js +78 -0
  194. package/dist/scripts/src/components-core/RestApiProxy.js +341 -0
  195. package/dist/scripts/src/components-core/RootComponent.js +272 -0
  196. package/dist/scripts/src/components-core/RouteContext.js +45 -0
  197. package/dist/scripts/src/components-core/ScrollContext.js +9 -0
  198. package/dist/scripts/src/components-core/UnknownComponent.js +15 -0
  199. package/dist/scripts/src/components-core/abstractions/ComponentRenderer.js +2 -0
  200. package/dist/scripts/src/components-core/abstractions/LoaderRenderer.js +2 -0
  201. package/dist/scripts/src/components-core/abstractions/containers.js +18 -0
  202. package/dist/scripts/src/components-core/abstractions/treeAbstractions.js +2 -0
  203. package/dist/scripts/src/components-core/action/ApiAction.js +276 -0
  204. package/dist/scripts/src/components-core/action/DownloadFileAction.js +80 -0
  205. package/dist/scripts/src/components-core/action/NavigateAction.js +20 -0
  206. package/dist/scripts/src/components-core/action/TimedAction.js +21 -0
  207. package/dist/scripts/src/components-core/action/UploadAction.js +88 -0
  208. package/dist/scripts/src/components-core/action/actions.js +15 -0
  209. package/dist/scripts/src/components-core/appContext/date-functions.js +19 -0
  210. package/dist/scripts/src/components-core/appContext/misc-utils.js +12 -0
  211. package/dist/scripts/src/components-core/component-hooks.js +25 -0
  212. package/dist/scripts/src/components-core/constants.js +18 -0
  213. package/dist/scripts/src/components-core/container/Container.js +1110 -0
  214. package/dist/scripts/src/components-core/container/ContainerComponentDef.js +16 -0
  215. package/dist/scripts/src/components-core/container/buildProxy.js +54 -0
  216. package/dist/scripts/src/components-core/container/collectFnVarDeps.js +26 -0
  217. package/dist/scripts/src/components-core/container/valueExtractor.js +195 -0
  218. package/dist/scripts/src/components-core/descriptorHelper.js +75 -0
  219. package/dist/scripts/src/components-core/interception/abstractions.js +2 -0
  220. package/dist/scripts/src/components-core/interception/useApiInterceptorContext.js +9 -0
  221. package/dist/scripts/src/components-core/loader/ApiLoader.js +46 -0
  222. package/dist/scripts/src/components-core/loader/DataLoader.js +160 -0
  223. package/dist/scripts/src/components-core/loader/ExternalDataLoader.js +52 -0
  224. package/dist/scripts/src/components-core/loader/Loader.js +115 -0
  225. package/dist/scripts/src/components-core/loader/MockLoaderRenderer.js +32 -0
  226. package/dist/scripts/src/components-core/loader/PageableLoader.js +240 -0
  227. package/dist/scripts/src/components-core/renderers.js +45 -0
  228. package/dist/scripts/src/components-core/reportEngineError.js +59 -0
  229. package/dist/scripts/src/components-core/script-runner/BindingTreeEvaluationContext.js +35 -0
  230. package/dist/scripts/src/components-core/script-runner/ICustomOperations.js +34 -0
  231. package/dist/scripts/src/components-core/script-runner/LogicalThread.js +2 -0
  232. package/dist/scripts/src/components-core/script-runner/LoopScope.js +2 -0
  233. package/dist/scripts/src/components-core/script-runner/ParameterParser.js +117 -0
  234. package/dist/scripts/src/components-core/script-runner/TryScope.js +2 -0
  235. package/dist/scripts/src/components-core/script-runner/asyncProxy.js +96 -0
  236. package/dist/scripts/src/components-core/script-runner/bannedFunctions.js +34 -0
  237. package/dist/scripts/src/components-core/script-runner/custom-operations-registry.js +40 -0
  238. package/dist/scripts/src/components-core/script-runner/custom-ui-data.js +40 -0
  239. package/dist/scripts/src/components-core/script-runner/eval-tree-async.js +551 -0
  240. package/dist/scripts/src/components-core/script-runner/eval-tree-common.js +498 -0
  241. package/dist/scripts/src/components-core/script-runner/eval-tree-sync.js +434 -0
  242. package/dist/scripts/src/components-core/script-runner/modules.js +250 -0
  243. package/dist/scripts/src/components-core/script-runner/process-statement-async.js +818 -0
  244. package/dist/scripts/src/components-core/script-runner/process-statement-common.js +193 -0
  245. package/dist/scripts/src/components-core/script-runner/process-statement-sync.js +740 -0
  246. package/dist/scripts/src/components-core/script-runner/statement-queue.js +62 -0
  247. package/dist/scripts/src/components-core/script-runner/visitors.js +352 -0
  248. package/dist/scripts/src/components-core/theming/ThemeContext.js +43 -0
  249. package/dist/scripts/src/components-core/theming/ThemeProvider.js +334 -0
  250. package/dist/scripts/src/components-core/theming/abstractions.js +11 -0
  251. package/dist/scripts/src/components-core/theming/extendThemeUtils.js +114 -0
  252. package/dist/scripts/src/components-core/theming/hvar.js +105 -0
  253. package/dist/scripts/src/components-core/theming/themeVars.js +62 -0
  254. package/dist/scripts/src/components-core/theming/themes/base-utils.js +31 -0
  255. package/dist/scripts/src/components-core/theming/themes/palette.js +53 -0
  256. package/dist/scripts/src/components-core/theming/themes/root.js +257 -0
  257. package/dist/scripts/src/components-core/theming/themes/solid.js +16 -0
  258. package/dist/scripts/src/components-core/theming/themes/theme-colors.js +407 -0
  259. package/dist/scripts/src/components-core/theming/themes/xmlui.js +32 -0
  260. package/dist/scripts/src/components-core/theming/transformThemeVars.js +286 -0
  261. package/dist/scripts/src/components-core/utils/DataLoaderQueryKeyGenerator.js +34 -0
  262. package/dist/scripts/src/components-core/utils/LruCache.js +184 -0
  263. package/dist/scripts/src/components-core/utils/actionUtils.js +32 -0
  264. package/dist/scripts/src/components-core/utils/classnames.js +58 -0
  265. package/dist/scripts/src/components-core/utils/css-utils.js +127 -0
  266. package/dist/scripts/src/components-core/utils/date-utils.js +78 -0
  267. package/dist/scripts/src/components-core/utils/extractParam.js +148 -0
  268. package/dist/scripts/src/components-core/utils/hooks.js +221 -0
  269. package/dist/scripts/src/components-core/utils/mergeProps.js +45 -0
  270. package/dist/scripts/src/components-core/utils/misc.js +460 -0
  271. package/dist/scripts/src/components-core/utils/statementUtils.js +205 -0
  272. package/dist/scripts/src/components-core/utils/treeUtils.js +48 -0
  273. package/dist/scripts/src/components-core/xmlui-parser.js +52 -0
  274. package/dist/scripts/src/parsers/scripting/InputStream.js +59 -0
  275. package/dist/scripts/src/parsers/scripting/Lexer.js +1028 -0
  276. package/dist/scripts/src/parsers/scripting/Parser.js +2647 -0
  277. package/dist/scripts/src/parsers/scripting/ParserError.js +46 -0
  278. package/dist/scripts/src/parsers/scripting/TokenTrait.js +109 -0
  279. package/dist/scripts/src/parsers/scripting/code-behind-collect.js +118 -0
  280. package/dist/scripts/src/parsers/scripting/tree-visitor.js +602 -0
  281. package/dist/scripts/src/parsers/style-parser/StyleInputStream.js +39 -0
  282. package/dist/scripts/src/parsers/style-parser/StyleLexer.js +621 -0
  283. package/dist/scripts/src/parsers/style-parser/StyleParser.js +1000 -0
  284. package/dist/scripts/src/parsers/style-parser/errors.js +37 -0
  285. package/dist/scripts/src/parsers/style-parser/source-tree.js +2 -0
  286. package/dist/scripts/src/parsers/style-parser/style-compiler.js +513 -0
  287. package/dist/scripts/src/parsers/style-parser/tokens.js +42 -0
  288. package/dist/scripts/src/parsers/ueml/ParserError.js +54 -0
  289. package/dist/scripts/src/parsers/ueml/UemlHelper.js +579 -0
  290. package/dist/scripts/src/parsers/ueml/UemlInputStream.js +59 -0
  291. package/dist/scripts/src/parsers/ueml/UemlLexer.js +868 -0
  292. package/dist/scripts/src/parsers/ueml/UemlParser.js +1439 -0
  293. package/dist/scripts/src/parsers/ueml/UemlToken.js +24 -0
  294. package/dist/scripts/src/parsers/ueml/fileExtensions.js +6 -0
  295. package/dist/scripts/src/parsers/ueml/source-tree.js +2 -0
  296. package/dist/scripts/src/parsers/ueml/ueml-tree.js +2 -0
  297. package/dist/scripts/src/parsers/xmlui-parser/CharacterCodes.js +136 -0
  298. package/dist/scripts/src/parsers/xmlui-parser/diagnostics.js +100 -0
  299. package/dist/scripts/src/parsers/xmlui-parser/parser.js +476 -0
  300. package/dist/scripts/src/parsers/xmlui-parser/scanner.js +415 -0
  301. package/dist/scripts/src/parsers/xmlui-parser/syntax-kind.js +106 -0
  302. package/dist/scripts/src/parsers/xmlui-parser/syntax-node.js +2 -0
  303. package/dist/scripts/src/parsers/xmlui-parser/transform.js +922 -0
  304. package/dist/scripts/src/parsers/xmlui-parser/utils.js +83 -0
  305. package/dist/xmlui.es.d.ts +1667 -0
  306. package/dist/xmlui.es.js +17 -0
  307. package/dist/xmlui.umd.js +1589 -0
  308. package/package.json +175 -0
@@ -0,0 +1,551 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.evalBindingAsync = evalBindingAsync;
16
+ exports.executeArrowExpression = executeArrowExpression;
17
+ exports.isConstVar = isConstVar;
18
+ const isPlainObject_1 = __importDefault(require("lodash/isPlainObject")); //doesn't work when we import it through lodash-es (build.ts uses it...)
19
+ const process_statement_async_1 = require("./process-statement-async");
20
+ const eval_tree_common_1 = require("./eval-tree-common");
21
+ const process_statement_common_1 = require("./process-statement-common");
22
+ const asyncProxy_1 = require("./asyncProxy");
23
+ const bannedFunctions_1 = require("./bannedFunctions");
24
+ /**
25
+ * Evaluates a binding represented by the specified expression
26
+ * @param expr Expression to evaluate
27
+ * @param evalContext Evaluation context to use
28
+ * @param thread The logical thread to use for evaluation
29
+ * @param onStatementCompleted Execute this function when a statement is completed
30
+ */
31
+ function evalBindingAsync(expr, evalContext, thread, onStatementCompleted) {
32
+ return __awaiter(this, void 0, void 0, function* () {
33
+ const thisStack = [];
34
+ (0, process_statement_common_1.ensureMainThread)(evalContext);
35
+ thread !== null && thread !== void 0 ? thread : (thread = evalContext.mainThread);
36
+ return yield evalBindingExpressionTreeAsync(thisStack, expr, evalContext, thread !== null && thread !== void 0 ? thread : evalContext.mainThread, onStatementCompleted);
37
+ });
38
+ }
39
+ /**
40
+ * Executes the specified arrow function
41
+ * @param expr Arrow function expression to run
42
+ * @param evalContext Evaluation context to use
43
+ * @param onStatementCompleted Execute this function when a statement is completed
44
+ * @param thread The logical thread to use for evaluation
45
+ * @param args Arguments of the arrow function to execute
46
+ */
47
+ function executeArrowExpression(expr, evalContext, onStatementCompleted, thread, ...args) {
48
+ return __awaiter(this, void 0, void 0, function* () {
49
+ // --- Just an extra safety check
50
+ if (expr.type !== "ArrowE") {
51
+ throw new Error("executeArrowExpression expects an 'ArrowExpression' object.");
52
+ }
53
+ // --- This is the evaluator that an arrow expression uses internally
54
+ const evaluator = evalBindingExpressionTreeAsync;
55
+ // --- Compiles the Arrow function to a JavaScript function
56
+ const nativeFunction = yield createArrowFunctionAsync(evaluator, expr);
57
+ // --- Run the compiled arrow function. Note, we have two prefix arguments:
58
+ // --- #1: The names of arrow function arguments
59
+ // --- #2: The evaluation context the arrow function runs in
60
+ // --- #others: The real arguments of the arrow function
61
+ return yield nativeFunction(expr.args, evalContext, thread !== null && thread !== void 0 ? thread : evalContext.mainThread, onStatementCompleted, ...args);
62
+ });
63
+ }
64
+ /**
65
+ * Evaluates the specified binding expression tree and retrieves the evaluated value
66
+ * @param expr Binding tree expression
67
+ * @param thisStack Stack of "this" object to use with function calls
68
+ * @param evalContext Evaluation context
69
+ * @param thread The logical thread to use for evaluation
70
+ * @param onStatementCompleted Execute this function when a statement is completed
71
+ * This code uses the JavaScript semantics and errors when evaluating the code.
72
+ * We use `thisStack` to keep track of the partial results of the evaluation tree so that we can set
73
+ * the real `this` context when invoking a function.
74
+ */
75
+ function evalBindingExpressionTreeAsync(thisStack, expr, evalContext, thread, onStatementCompleted) {
76
+ return __awaiter(this, void 0, void 0, function* () {
77
+ if (!evalContext.options) {
78
+ evalContext.options = { defaultToOptionalMemberAccess: true };
79
+ }
80
+ // --- Prepare evaluation
81
+ let customOp = null;
82
+ const evaluator = evalBindingExpressionTreeAsync;
83
+ // --- Reset the expression scope
84
+ expr.valueScope = expr.valueIndex = undefined;
85
+ // --- Process the expression according to its type
86
+ try {
87
+ switch (expr.type) {
88
+ case "LitE":
89
+ return (0, eval_tree_common_1.evalLiteral)(thisStack, expr);
90
+ case "IdE":
91
+ return (0, eval_tree_common_1.evalIdentifier)(thisStack, expr, evalContext, thread);
92
+ case "MembE":
93
+ return yield evalMemberAccessAsync(evaluator, thisStack, expr, evalContext, thread, onStatementCompleted);
94
+ case "CMembE":
95
+ return yield evalCalculatedMemberAccessAsync(evaluator, thisStack, expr, evalContext, thread, onStatementCompleted);
96
+ case "SeqE":
97
+ return yield evalSequenceAsync(evaluator, thisStack, expr, evalContext, thread, onStatementCompleted);
98
+ case "ALitE":
99
+ return yield evalArrayLiteralAsync(evaluator, thisStack, expr, evalContext, thread, onStatementCompleted);
100
+ case "OLitE":
101
+ return yield evalObjectLiteralAsync(evaluator, thisStack, expr, evalContext, thread, onStatementCompleted);
102
+ case "UnaryE":
103
+ return yield evalUnaryAsync(evaluator, thisStack, customOp, expr, evalContext, thread, onStatementCompleted);
104
+ case "BinaryE":
105
+ return yield evalBinaryAsync(evaluator, thisStack, customOp, expr, evalContext, thread, onStatementCompleted);
106
+ case "CondE":
107
+ return yield evalConditionalAsync(evaluator, thisStack, expr, evalContext, thread, onStatementCompleted);
108
+ case "AsgnE":
109
+ return yield evalAssignmentAsync(evaluator, thisStack, expr, evalContext, thread, onStatementCompleted);
110
+ case "PrefE":
111
+ case "PostfE":
112
+ return yield evalPreOrPostAsync(evaluator, thisStack, expr, evalContext, thread, onStatementCompleted);
113
+ case "InvokeE":
114
+ // --- Special async handling
115
+ return yield evalFunctionInvocationAsync(evaluator, thisStack, expr, evalContext, thread, onStatementCompleted);
116
+ case "ArrowE":
117
+ return (0, eval_tree_common_1.evalArrow)(thisStack, expr, thread);
118
+ case "SpreadE":
119
+ throw new Error("Cannot use spread expression (...) with the current intermediate value.");
120
+ default:
121
+ throw new Error(`Unknown expression tree node: ${expr.type}`);
122
+ }
123
+ }
124
+ catch (e) {
125
+ //TODO decorate error with expression details (startColumn, startLine, startPosition, etc.)
126
+ throw e;
127
+ }
128
+ });
129
+ }
130
+ function evalMemberAccessAsync(evaluator, thisStack, expr, evalContext, thread, onStatementCompleted) {
131
+ return __awaiter(this, void 0, void 0, function* () {
132
+ const parentObj = yield evaluator(thisStack, expr.object, evalContext, thread, onStatementCompleted);
133
+ return (0, eval_tree_common_1.evalMemberAccessCore)(parentObj, thisStack, expr, evalContext);
134
+ });
135
+ }
136
+ function evalCalculatedMemberAccessAsync(evaluator, thisStack, expr, evalContext, thread, onStatementCompleted) {
137
+ return __awaiter(this, void 0, void 0, function* () {
138
+ const parentObj = yield evaluator(thisStack, expr.object, evalContext, thread, onStatementCompleted);
139
+ // --- At this point we definitely keep the parent object on `thisStack`, as it will be the context object
140
+ // --- of a FunctionInvocationExpression, if that follows the MemberAccess. Other operations would call
141
+ // --- `thisStack.pop()` to remove the result from the previous `evalBindingExpressionTree` call.
142
+ const memberObj = yield evaluator(thisStack, expr.member, evalContext, thread, onStatementCompleted);
143
+ thisStack.pop();
144
+ return (0, eval_tree_common_1.evalCalculatedMemberAccessCore)(parentObj, memberObj, thisStack, expr, evalContext);
145
+ });
146
+ }
147
+ function evalSequenceAsync(evaluator, thisStack, expr, evalContext, thread, onStatementCompleted) {
148
+ return __awaiter(this, void 0, void 0, function* () {
149
+ if (!expr.expressions || expr.expressions.length === 0) {
150
+ throw new Error(`Missing expression sequence`);
151
+ }
152
+ const result = expr.expressions.map((e) => __awaiter(this, void 0, void 0, function* () {
153
+ const exprValue = yield evaluator(thisStack, e, evalContext, thread, onStatementCompleted);
154
+ thisStack.pop();
155
+ return exprValue;
156
+ }));
157
+ const lastObj = result[result.length - 1];
158
+ thisStack.push(lastObj);
159
+ return lastObj;
160
+ });
161
+ }
162
+ function evalArrayLiteralAsync(evaluator, thisStack, expr, evalContext, thread, onStatementCompleted) {
163
+ return __awaiter(this, void 0, void 0, function* () {
164
+ const arrayValue = [];
165
+ for (const item of expr.items) {
166
+ if (item.type === "SpreadE") {
167
+ const spreadArray = yield evaluator(thisStack, item.operand, evalContext, thread, onStatementCompleted);
168
+ thisStack.pop();
169
+ if (!Array.isArray(spreadArray)) {
170
+ throw new Error("Spread operator within an array literal expects an array operand.");
171
+ }
172
+ arrayValue.push(...spreadArray);
173
+ }
174
+ else {
175
+ arrayValue.push(yield evaluator(thisStack, item, evalContext, thread, onStatementCompleted));
176
+ thisStack.pop();
177
+ thisStack.push(arrayValue);
178
+ }
179
+ }
180
+ return arrayValue;
181
+ });
182
+ }
183
+ function evalObjectLiteralAsync(evaluator, thisStack, expr, evalContext, thread, onStatementCompleted) {
184
+ return __awaiter(this, void 0, void 0, function* () {
185
+ const objectHash = {};
186
+ for (const prop of expr.props) {
187
+ if (!Array.isArray(prop)) {
188
+ // --- We're using a spread expression
189
+ const spreadItems = yield evaluator(thisStack, prop.operand, evalContext, thread, onStatementCompleted);
190
+ thisStack.pop();
191
+ if (Array.isArray(spreadItems)) {
192
+ // --- Spread of an array
193
+ for (let i = 0; i < spreadItems.length; i++) {
194
+ objectHash[i] = spreadItems[i];
195
+ }
196
+ }
197
+ else if (typeof spreadItems === "object") {
198
+ // --- Spread of a hash object
199
+ for (const [key, value] of Object.entries(spreadItems)) {
200
+ objectHash[key] = value;
201
+ }
202
+ }
203
+ continue;
204
+ }
205
+ // --- We're using key/[value] pairs
206
+ let key;
207
+ switch (prop[0].type) {
208
+ case "LitE":
209
+ key = prop[0].value;
210
+ break;
211
+ case "IdE":
212
+ key = prop[0].name;
213
+ break;
214
+ default:
215
+ key = yield evaluator(thisStack, prop[0], evalContext, thread, onStatementCompleted);
216
+ thisStack.pop();
217
+ break;
218
+ }
219
+ objectHash[key] = yield evaluator(thisStack, prop[1], evalContext, thread, onStatementCompleted);
220
+ thisStack.pop();
221
+ }
222
+ thisStack.push(objectHash);
223
+ return objectHash;
224
+ });
225
+ }
226
+ function evalUnaryAsync(evaluator, thisStack, customOp, expr, evalContext, thread, onStatementCompleted) {
227
+ return __awaiter(this, void 0, void 0, function* () {
228
+ const operand = yield evaluator(thisStack, expr.operand, evalContext, thread, onStatementCompleted);
229
+ thisStack.pop();
230
+ return (0, eval_tree_common_1.evalUnaryCore)(expr, operand, thisStack, customOp);
231
+ });
232
+ }
233
+ function evalBinaryAsync(evaluator, thisStack, customOp, expr, evalContext, thread, onStatementCompleted) {
234
+ return __awaiter(this, void 0, void 0, function* () {
235
+ const l = yield evaluator(thisStack, expr.left, evalContext, thread, onStatementCompleted);
236
+ thisStack.pop();
237
+ if (expr.operator === "&&" && !l) {
238
+ thisStack.push(l);
239
+ return l;
240
+ }
241
+ if (expr.operator === "||" && l) {
242
+ thisStack.push(l);
243
+ return l;
244
+ }
245
+ const r = yield evaluator(thisStack, expr.right, evalContext, thread, onStatementCompleted);
246
+ thisStack.pop();
247
+ return (0, eval_tree_common_1.evalBinaryCore)(l, r, thisStack, customOp, expr.operator);
248
+ });
249
+ }
250
+ function evalConditionalAsync(evaluator, thisStack, expr, evalContext, thread, onStatementCompleted) {
251
+ return __awaiter(this, void 0, void 0, function* () {
252
+ const condition = yield evaluator(thisStack, expr.condition, evalContext, thread, onStatementCompleted);
253
+ thisStack.pop();
254
+ return yield evaluator(thisStack, condition ? expr.consequent : expr.alternate, evalContext, thread, onStatementCompleted);
255
+ });
256
+ }
257
+ function runAssignment(evalContext, doAssignment) {
258
+ return __awaiter(this, void 0, void 0, function* () {
259
+ const updateHook = evalContext.onUpdateHook || ((updateFn) => __awaiter(this, void 0, void 0, function* () { return yield updateFn(); }));
260
+ return yield updateHook(() => __awaiter(this, void 0, void 0, function* () {
261
+ return yield doAssignment();
262
+ }));
263
+ });
264
+ }
265
+ function evalAssignmentAsync(evaluator, thisStack, expr, evalContext, thread, onStatementCompleted) {
266
+ return __awaiter(this, void 0, void 0, function* () {
267
+ return runAssignment(evalContext, () => __awaiter(this, void 0, void 0, function* () {
268
+ const leftValue = expr.leftValue;
269
+ yield evaluator(thisStack, leftValue, evalContext, thread, onStatementCompleted);
270
+ thisStack.pop();
271
+ const newValue = yield evaluator(thisStack, expr.operand, evalContext, thread, onStatementCompleted);
272
+ thisStack.pop();
273
+ return (0, eval_tree_common_1.evalAssignmentCore)(leftValue, newValue, thisStack, expr, thread);
274
+ }));
275
+ });
276
+ }
277
+ function evalPreOrPostAsync(evaluator, thisStack, expr, evalContext, thread, onStatementCompleted) {
278
+ return __awaiter(this, void 0, void 0, function* () {
279
+ return runAssignment(evalContext, () => __awaiter(this, void 0, void 0, function* () {
280
+ const operand = expr.operand;
281
+ yield evaluator(thisStack, operand, evalContext, thread, onStatementCompleted);
282
+ thisStack.pop();
283
+ return (0, eval_tree_common_1.evalPreOrPostCore)(operand, thisStack, expr, evalContext, thread);
284
+ }));
285
+ });
286
+ }
287
+ function evalFunctionInvocationAsync(evaluator, thisStack, expr, evalContext, thread, onStatementCompleted) {
288
+ return __awaiter(this, void 0, void 0, function* () {
289
+ var _a, _b, _c, _d;
290
+ let functionObj;
291
+ let implicitContextObject = null;
292
+ let hostObject;
293
+ // --- Check for contexted object
294
+ if (expr.object.type === "MembE") {
295
+ hostObject = yield evaluator(thisStack, expr.object.object, evalContext, thread, onStatementCompleted);
296
+ functionObj = (0, eval_tree_common_1.evalMemberAccessCore)(hostObject, thisStack, expr.object, evalContext);
297
+ if (expr.object.object.type === "IdE" && (hostObject === null || hostObject === void 0 ? void 0 : hostObject._SUPPORT_IMPLICIT_CONTEXT)) {
298
+ implicitContextObject = hostObject;
299
+ }
300
+ }
301
+ else {
302
+ // --- Get the object on which to invoke the function
303
+ functionObj = yield evaluator(thisStack, expr.object, evalContext, thread, onStatementCompleted);
304
+ }
305
+ thisStack.pop();
306
+ // --- Keep function arguments here, we pass it to the function later
307
+ const functionArgs = [];
308
+ // --- The functionObj may be an ArrowExpression. In this care we need to create the invokable arrow function
309
+ if (functionObj === null || functionObj === void 0 ? void 0 : functionObj._ARROW_EXPR_) {
310
+ functionArgs.push(functionObj.args, evalContext, thread, onStatementCompleted, ...expr.arguments.map((a) => (Object.assign(Object.assign({}, a), { _EXPRESSION_: true }))));
311
+ functionObj = yield createArrowFunctionAsync(evaluator, functionObj);
312
+ }
313
+ else if (expr.object.type === "ArrowE") {
314
+ // --- We delay evaluating expression values. We pass the argument names as the first parameter, and then
315
+ // --- all parameter expressions
316
+ functionArgs.push(expr.object.args.map((a) => a.name), evalContext, thread, onStatementCompleted, ...expr.arguments.map((a) => (Object.assign(Object.assign({}, a), { _EXPRESSION_: true }))));
317
+ }
318
+ else {
319
+ // --- We evaluate the argument values to pass to a JavaScript function
320
+ for (let i = 0; i < expr.arguments.length; i++) {
321
+ const arg = expr.arguments[i];
322
+ if (arg.type === "SpreadE") {
323
+ const funcArg = yield evaluator([], arg.operand, evalContext, thread, onStatementCompleted);
324
+ if (!Array.isArray(funcArg)) {
325
+ throw new Error("Spread operator within a function invocation expects an array operand.");
326
+ }
327
+ functionArgs.push(...funcArg);
328
+ }
329
+ else {
330
+ if (arg.type === "ArrowE") {
331
+ const funcArg = yield createArrowFunctionAsync(evaluator, arg);
332
+ const wrappedFunc = (...args) => __awaiter(this, void 0, void 0, function* () {
333
+ return funcArg(arg.args, evalContext, thread, onStatementCompleted, ...args);
334
+ });
335
+ functionArgs.push(wrappedFunc);
336
+ }
337
+ else {
338
+ const funcArg = yield evaluator([], arg, evalContext, thread, onStatementCompleted);
339
+ if (funcArg === null || funcArg === void 0 ? void 0 : funcArg._ARROW_EXPR_) {
340
+ const wrappedFuncArg = yield createArrowFunctionAsync(evaluator, funcArg);
341
+ const wrappedFunc = (...args) => wrappedFuncArg(funcArg.args, evalContext, thread, onStatementCompleted, ...args);
342
+ functionArgs.push(wrappedFunc);
343
+ }
344
+ else {
345
+ functionArgs.push(funcArg);
346
+ }
347
+ }
348
+ }
349
+ }
350
+ // --- We can pass implicit arguments to JavaScript function
351
+ if (implicitContextObject) {
352
+ // --- Let's obtain the implicit context
353
+ if (evalContext.implicitContextGetter) {
354
+ const implicitContext = evalContext.implicitContextGetter(implicitContextObject);
355
+ functionArgs.unshift(implicitContext);
356
+ }
357
+ else {
358
+ throw new Error("Cannot use implicitContextGetter, it is undefined");
359
+ }
360
+ }
361
+ }
362
+ // --- Check if the function is banned from running
363
+ const bannedInfo = (0, bannedFunctions_1.isBannedFunction)(functionObj);
364
+ if (bannedInfo.banned) {
365
+ throw new Error(`Function ${(_b = (_a = bannedInfo.func) === null || _a === void 0 ? void 0 : _a.name) !== null && _b !== void 0 ? _b : "unknown"} is not allowed to call. ${(_c = bannedInfo === null || bannedInfo === void 0 ? void 0 : bannedInfo.help) !== null && _c !== void 0 ? _c : ""}`);
366
+ }
367
+ // --- We use context for "this"
368
+ const currentContext = thisStack.length > 0 ? thisStack.pop() : evalContext.localContext;
369
+ // --- We need to use proxies for JavaScript functions (such as Array.prototype.filter) not supporting
370
+ // --- async arguments
371
+ functionObj = (0, asyncProxy_1.getAsyncProxy)(functionObj, functionArgs, currentContext);
372
+ // --- Now, invoke the function
373
+ try {
374
+ const value = ((_d = evalContext.options) === null || _d === void 0 ? void 0 : _d.defaultToOptionalMemberAccess)
375
+ ? functionObj === null || functionObj === void 0 ? void 0 : functionObj.call(currentContext, ...functionArgs)
376
+ : functionObj.call(currentContext, ...functionArgs);
377
+ let returnValue = yield completePromise(value);
378
+ thisStack.push(returnValue);
379
+ return returnValue;
380
+ }
381
+ catch (err) {
382
+ console.log(typeof functionObj, functionObj);
383
+ throw err;
384
+ }
385
+ });
386
+ }
387
+ function createArrowFunctionAsync(evaluator, expr) {
388
+ return __awaiter(this, void 0, void 0, function* () {
389
+ // --- Use this function, it evaluates the arrow function
390
+ return (...args) => __awaiter(this, void 0, void 0, function* () {
391
+ var _a;
392
+ // --- Prepare the variables to pass
393
+ const runTimeEvalContext = args[1];
394
+ const runtimeThread = args[2];
395
+ const runTimeOnStatementCompleted = args[3];
396
+ // --- Create the thread that runs the arrow function
397
+ const workingThread = {
398
+ parent: runtimeThread,
399
+ childThreads: [],
400
+ blocks: [{ vars: {} }],
401
+ loops: [],
402
+ breakLabelValue: -1,
403
+ closures: expr.closureContext,
404
+ };
405
+ runtimeThread.childThreads.push(workingThread);
406
+ // --- Assign argument values to names
407
+ const arrowBlock = { vars: {} };
408
+ (_a = workingThread.blocks) !== null && _a !== void 0 ? _a : (workingThread.blocks = []);
409
+ workingThread.blocks.push(arrowBlock);
410
+ const argSpecs = args[0];
411
+ for (let i = 0; i < argSpecs.length; i++) {
412
+ // --- Turn argument specification into processable variable declarations
413
+ const argSpec = argSpecs[i];
414
+ let decl;
415
+ switch (argSpec.type) {
416
+ case "IdE": {
417
+ decl = {
418
+ type: "VarD",
419
+ id: argSpec.name,
420
+ };
421
+ break;
422
+ }
423
+ case "Destr": {
424
+ decl = {
425
+ type: "VarD",
426
+ id: argSpec.id,
427
+ arrayDestruct: argSpec.arrayDestruct,
428
+ objectDestruct: argSpec.objectDestruct,
429
+ };
430
+ break;
431
+ }
432
+ default:
433
+ throw new Error("Unexpected arrow argument specification");
434
+ }
435
+ if (decl) {
436
+ // --- Get the actual value to work with
437
+ let argVal = args[i + 4];
438
+ if (argVal === null || argVal === void 0 ? void 0 : argVal._EXPRESSION_) {
439
+ argVal = yield evaluator([], argVal, runTimeEvalContext, runtimeThread, runTimeOnStatementCompleted);
440
+ }
441
+ yield (0, process_statement_async_1.processDeclarationsAsync)(arrowBlock, runTimeEvalContext, runtimeThread, runTimeOnStatementCompleted, [decl], false, true, argVal);
442
+ }
443
+ }
444
+ // --- Evaluate the arrow expression body
445
+ let returnValue;
446
+ let statements;
447
+ switch (expr.statement.type) {
448
+ case "EmptyS":
449
+ statements = [];
450
+ break;
451
+ case "ExprS":
452
+ // --- Create a new thread for the call
453
+ statements = [
454
+ {
455
+ type: "RetS",
456
+ expression: expr.statement.expression,
457
+ },
458
+ ];
459
+ break;
460
+ case "BlockS":
461
+ // --- Create a new thread for the call
462
+ statements = expr.statement.statements;
463
+ break;
464
+ default:
465
+ throw new Error(`Arrow expression with a body of '${expr.statement.type}' is not supported yet.`);
466
+ }
467
+ // --- Process the statement with a new processor
468
+ yield (0, process_statement_async_1.processStatementQueueAsync)(statements, runTimeEvalContext, workingThread, runTimeOnStatementCompleted);
469
+ // --- Return value is in a return value slot
470
+ returnValue = workingThread.returnValue;
471
+ // --- Remove the current working thread
472
+ const workingIndex = runtimeThread.childThreads.indexOf(workingThread);
473
+ if (workingIndex < 0) {
474
+ throw new Error("Cannot find thread to remove.");
475
+ }
476
+ runtimeThread.childThreads.splice(workingIndex, 1);
477
+ // --- Remove the function level block
478
+ workingThread.blocks.pop();
479
+ // --- Return the function value
480
+ return returnValue;
481
+ });
482
+ });
483
+ }
484
+ // --- Completes all promises within the input
485
+ function completePromise(input) {
486
+ return __awaiter(this, void 0, void 0, function* () {
487
+ const visited = new Map();
488
+ return completePromiseInternal(input);
489
+ function completePromiseInternal(input) {
490
+ return __awaiter(this, void 0, void 0, function* () {
491
+ // --- No need to resolve undefined or null
492
+ if (input === undefined || input === null)
493
+ return input;
494
+ // --- Already visited?
495
+ const resolved = visited.get(input);
496
+ if (resolved)
497
+ return resolved;
498
+ // --- Resolve the chain of promises
499
+ if ((0, eval_tree_common_1.isPromise)(input)) {
500
+ const awaited = yield input;
501
+ visited.set(input, awaited);
502
+ return completePromiseInternal(awaited);
503
+ }
504
+ // --- In any other cases, we keep the input reference
505
+ visited.set(input, input);
506
+ // --- Resolve promises within an array
507
+ if (Array.isArray(input)) {
508
+ for (let i = 0; i < input.length; i++) {
509
+ const completedPromise = yield completePromiseInternal(input[i]);
510
+ if (input[i] !== completedPromise) {
511
+ //prevent write if it's the same reference (can cause problems in frozen objects)
512
+ input.splice(i, 1, completedPromise);
513
+ }
514
+ }
515
+ return input;
516
+ }
517
+ // --- Resolve promises in object properties
518
+ if ((0, isPlainObject_1.default)(input)) {
519
+ for (const key of Object.keys(input)) {
520
+ let completedPromise = yield completePromiseInternal(input[key]);
521
+ if (input[key] !== completedPromise) {
522
+ //prevent write if it's the same reference (can cause problems in frozen objects)
523
+ input[key] = completedPromise;
524
+ }
525
+ }
526
+ return input;
527
+ }
528
+ // --- Done.
529
+ return input;
530
+ });
531
+ }
532
+ });
533
+ }
534
+ /**
535
+ * Gets the context of the variable
536
+ * @param id Identifier to test
537
+ * @param thread Thread to use for evaluation
538
+ */
539
+ function isConstVar(id, thread) {
540
+ var _a;
541
+ // --- Start search the block context
542
+ if (thread.blocks) {
543
+ for (let idx = thread.blocks.length; idx >= 0; idx--) {
544
+ const constContext = (_a = thread.blocks[idx]) === null || _a === void 0 ? void 0 : _a.constVars;
545
+ if (constContext && constContext.has(id))
546
+ return true;
547
+ }
548
+ }
549
+ // --- Not in block context
550
+ return false;
551
+ }