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.
- package/dist/Pdf-DeGhSMXe.mjs +19537 -0
- package/dist/Pdf.css +1 -0
- package/dist/apiInterceptorWorker-CwuUhYyc.mjs +9229 -0
- package/dist/array-USo-Szhp.mjs +12 -0
- package/dist/index-C24dkfpd.mjs +1434 -0
- package/dist/index-ao27SnVp.mjs +145185 -0
- package/dist/index.css +1 -0
- package/dist/nivo-bar.es-CWh0ZlxB.mjs +1666 -0
- package/dist/nivo-geo.es-BTqNt5Db.mjs +1579 -0
- package/dist/nivo-legends.es-BuIxHGSU.mjs +6916 -0
- package/dist/nivo-pie.es-BvCBFA0L.mjs +700 -0
- package/dist/react-apexcharts.min-DqWuDOyO.mjs +8881 -0
- package/dist/scripts/bin/bootstrap.js +11 -0
- package/dist/scripts/bin/build.js +256 -0
- package/dist/scripts/bin/index.js +88 -0
- package/dist/scripts/bin/preview.js +27 -0
- package/dist/scripts/bin/start.js +41 -0
- package/dist/scripts/bin/vite-ueml-plugin.js +113 -0
- package/dist/scripts/bin/viteConfig.js +112 -0
- package/dist/scripts/src/abstractions/ActionDefs.js +2 -0
- package/dist/scripts/src/abstractions/AppContextDefs.js +2 -0
- package/dist/scripts/src/abstractions/BlockScope.js +4 -0
- package/dist/scripts/src/abstractions/ComponentDefs.js +2 -0
- package/dist/scripts/src/abstractions/ComponentDescriptorDefs.js +2 -0
- package/dist/scripts/src/abstractions/ContainerDefs.js +2 -0
- package/dist/scripts/src/abstractions/FunctionDefs.js +2 -0
- package/dist/scripts/src/abstractions/RendererDefs.js +2 -0
- package/dist/scripts/src/abstractions/scripting/ScriptParserError.js +2 -0
- package/dist/scripts/src/abstractions/scripting/ScriptingSourceTree.js +2 -0
- package/dist/scripts/src/abstractions/scripting/Token.js +110 -0
- package/dist/scripts/src/components/App/App.js +253 -0
- package/dist/scripts/src/components/App/AppLayoutContext.js +9 -0
- package/dist/scripts/src/components/App/AppStateContext.js +9 -0
- package/dist/scripts/src/components/App/Sheet.js +89 -0
- package/dist/scripts/src/components/AppHeader/AppHeader.js +121 -0
- package/dist/scripts/src/components/AppState/AppState.js +29 -0
- package/dist/scripts/src/components/Avatar/Avatar.js +81 -0
- package/dist/scripts/src/components/Badge/Badge.js +56 -0
- package/dist/scripts/src/components/BarChart/BarChart.js +199 -0
- package/dist/scripts/src/components/Bookmark/Bookmark.js +11 -0
- package/dist/scripts/src/components/Button/Button.js +196 -0
- package/dist/scripts/src/components/Card/Card.js +65 -0
- package/dist/scripts/src/components/ChangeListener/ChangeListener.js +43 -0
- package/dist/scripts/src/components/Chart/Chart.js +158 -0
- package/dist/scripts/src/components/Checkbox/Checkbox.js +43 -0
- package/dist/scripts/src/components/Combobox/Combobox.js +145 -0
- package/dist/scripts/src/components/ComponentProvider.js +357 -0
- package/dist/scripts/src/components/ContentSeparator/ContentSeparator.js +40 -0
- package/dist/scripts/src/components/DatePicker/DatePicker.js +196 -0
- package/dist/scripts/src/components/DropdownMenu/DropdownMenu.js +175 -0
- package/dist/scripts/src/components/EmojiSelector/EmojiSelector.js +56 -0
- package/dist/scripts/src/components/FileInput/FileInput.js +127 -0
- package/dist/scripts/src/components/FileUploadDropZone/FileUploadDropZone.js +106 -0
- package/dist/scripts/src/components/FlowLayout/FlowLayout.js +139 -0
- package/dist/scripts/src/components/Footer/Footer.js +42 -0
- package/dist/scripts/src/components/Form/Form.js +320 -0
- package/dist/scripts/src/components/Form/FormContext.js +9 -0
- package/dist/scripts/src/components/Form/formActions.js +86 -0
- package/dist/scripts/src/components/FormItem/FormItem.js +204 -0
- package/dist/scripts/src/components/FormItem/HelperText.js +27 -0
- package/dist/scripts/src/components/FormItem/ItemWithLabel.js +39 -0
- package/dist/scripts/src/components/FormItem/Validations.js +346 -0
- package/dist/scripts/src/components/FormSection/FormSection.js +45 -0
- package/dist/scripts/src/components/Heading/Heading.js +206 -0
- package/dist/scripts/src/components/HoverCard/HoverCard.js +45 -0
- package/dist/scripts/src/components/Icon/ApiIcon.js +10 -0
- package/dist/scripts/src/components/Icon/Attach.js +10 -0
- package/dist/scripts/src/components/Icon/Binding.js +11 -0
- package/dist/scripts/src/components/Icon/BoardIcon.js +7 -0
- package/dist/scripts/src/components/Icon/BoxIcon.js +10 -0
- package/dist/scripts/src/components/Icon/CheckIcon.js +7 -0
- package/dist/scripts/src/components/Icon/ChevronDownIcon.js +7 -0
- package/dist/scripts/src/components/Icon/ChevronLeft.js +7 -0
- package/dist/scripts/src/components/Icon/ChevronRight.js +7 -0
- package/dist/scripts/src/components/Icon/ChevronUpIcon.js +7 -0
- package/dist/scripts/src/components/Icon/CodeFileIcon.js +10 -0
- package/dist/scripts/src/components/Icon/CodeSandbox.js +10 -0
- package/dist/scripts/src/components/Icon/CompactListIcon.js +7 -0
- package/dist/scripts/src/components/Icon/ContentCopyIcon.js +7 -0
- package/dist/scripts/src/components/Icon/DatabaseIcon.js +11 -0
- package/dist/scripts/src/components/Icon/DocFileIcon.js +10 -0
- package/dist/scripts/src/components/Icon/DocIcon.js +10 -0
- package/dist/scripts/src/components/Icon/DotMenuHorizontalIcon.js +7 -0
- package/dist/scripts/src/components/Icon/DotMenuIcon.js +7 -0
- package/dist/scripts/src/components/Icon/EmailIcon.js +7 -0
- package/dist/scripts/src/components/Icon/EmptyFolderIcon.js +10 -0
- package/dist/scripts/src/components/Icon/ErrorIcon.js +7 -0
- package/dist/scripts/src/components/Icon/ExpressionIcon.js +10 -0
- package/dist/scripts/src/components/Icon/FillPlusCricleIcon.js +7 -0
- package/dist/scripts/src/components/Icon/FilterIcon.js +10 -0
- package/dist/scripts/src/components/Icon/FolderIcon.js +10 -0
- package/dist/scripts/src/components/Icon/GlobeIcon.js +7 -0
- package/dist/scripts/src/components/Icon/HomeIcon.js +7 -0
- package/dist/scripts/src/components/Icon/HyperLinkIcon.js +7 -0
- package/dist/scripts/src/components/Icon/Icon.js +101 -0
- package/dist/scripts/src/components/Icon/ImageFileIcon.js +10 -0
- package/dist/scripts/src/components/Icon/LinkIcon.js +7 -0
- package/dist/scripts/src/components/Icon/ListIcon.js +7 -0
- package/dist/scripts/src/components/Icon/LooseListIcon.js +7 -0
- package/dist/scripts/src/components/Icon/MoonIcon.js +10 -0
- package/dist/scripts/src/components/Icon/MoreOptionsIcon.js +7 -0
- package/dist/scripts/src/components/Icon/PDFIcon.js +10 -0
- package/dist/scripts/src/components/Icon/PenIcon.js +7 -0
- package/dist/scripts/src/components/Icon/PhoneIcon.js +7 -0
- package/dist/scripts/src/components/Icon/PhotoIcon.js +10 -0
- package/dist/scripts/src/components/Icon/PlusIcon.js +7 -0
- package/dist/scripts/src/components/Icon/SearchIcon.js +7 -0
- package/dist/scripts/src/components/Icon/ShareIcon.js +10 -0
- package/dist/scripts/src/components/Icon/SunIcon.js +10 -0
- package/dist/scripts/src/components/Icon/TrashIcon.js +7 -0
- package/dist/scripts/src/components/Icon/TxtIcon.js +10 -0
- package/dist/scripts/src/components/Icon/UnknownFileIcon.js +10 -0
- package/dist/scripts/src/components/Icon/UnlinkIcon.js +10 -0
- package/dist/scripts/src/components/Icon/UserIcon.js +7 -0
- package/dist/scripts/src/components/Icon/WarningIcon.js +7 -0
- package/dist/scripts/src/components/Icon/XlsIcon.js +10 -0
- package/dist/scripts/src/components/IconProvider.js +249 -0
- package/dist/scripts/src/components/IconRegistryContext.js +307 -0
- package/dist/scripts/src/components/Image/Image.js +34 -0
- package/dist/scripts/src/components/Input/InputAdornment.js +14 -0
- package/dist/scripts/src/components/Input/input-abstractions.js +44 -0
- package/dist/scripts/src/components/Items/Items.js +48 -0
- package/dist/scripts/src/components/Link/Link.js +72 -0
- package/dist/scripts/src/components/List/List.js +442 -0
- package/dist/scripts/src/components/Logo/Logo.js +25 -0
- package/dist/scripts/src/components/Map/Map.js +60 -0
- package/dist/scripts/src/components/Map/world_countries.json +45307 -0
- package/dist/scripts/src/components/Markdown/Markdown.js +120 -0
- package/dist/scripts/src/components/ModalDialog/ConfirmationModalContextProvider.js +106 -0
- package/dist/scripts/src/components/ModalDialog/Dialog.js +20 -0
- package/dist/scripts/src/components/ModalDialog/ModalDialog.js +145 -0
- package/dist/scripts/src/components/MultiCombobox/MultiCombobox.js +249 -0
- package/dist/scripts/src/components/MultiSelect/MultiSelect.js +192 -0
- package/dist/scripts/src/components/NavGroup/NavGroup.js +113 -0
- package/dist/scripts/src/components/NavLink/NavLink.js +115 -0
- package/dist/scripts/src/components/NavPanel/NavPanel.js +101 -0
- package/dist/scripts/src/components/NoResult/NoResult.js +39 -0
- package/dist/scripts/src/components/NumberBox/NumberBox.js +373 -0
- package/dist/scripts/src/components/Option/Option.js +41 -0
- package/dist/scripts/src/components/PageMetaTitle/PageMetaTitle.js +22 -0
- package/dist/scripts/src/components/Pages/Pages.js +74 -0
- package/dist/scripts/src/components/Pdf/LazyPdf.js +44 -0
- package/dist/scripts/src/components/Pdf/Pdf.js +19 -0
- package/dist/scripts/src/components/PieChart/PieChart.js +184 -0
- package/dist/scripts/src/components/PositionedContainer/PositionedContainer.js +29 -0
- package/dist/scripts/src/components/ProgressBar/ProgressBar.js +38 -0
- package/dist/scripts/src/components/Queue/Queue.js +286 -0
- package/dist/scripts/src/components/Queue/queueActions.js +87 -0
- package/dist/scripts/src/components/RadioGroup/RadioGroup.js +144 -0
- package/dist/scripts/src/components/RealTimeAdapter/RealTimeAdapter.js +147 -0
- package/dist/scripts/src/components/Redirect/Redirect.js +10 -0
- package/dist/scripts/src/components/Select/Select.js +139 -0
- package/dist/scripts/src/components/Select/SelectContext.js +45 -0
- package/dist/scripts/src/components/SelectionStore/SelectionStore.js +88 -0
- package/dist/scripts/src/components/SpaceFiller/SpaceFiller.js +22 -0
- package/dist/scripts/src/components/Spinner/Spinner.js +59 -0
- package/dist/scripts/src/components/Splitter/Splitter.js +205 -0
- package/dist/scripts/src/components/Splitter/utils.js +17 -0
- package/dist/scripts/src/components/Stack/Stack.js +117 -0
- package/dist/scripts/src/components/StickyBox/StickyBox.js +33 -0
- package/dist/scripts/src/components/Switch/Switch.js +50 -0
- package/dist/scripts/src/components/Table/Table.js +499 -0
- package/dist/scripts/src/components/Table/useRowSelection.js +169 -0
- package/dist/scripts/src/components/TableColumnDef/TableColumnDef.js +44 -0
- package/dist/scripts/src/components/TableColumnDef/TableContext.js +12 -0
- package/dist/scripts/src/components/Tabs/Tabs.js +85 -0
- package/dist/scripts/src/components/Text/Text.js +175 -0
- package/dist/scripts/src/components/TextArea/TextArea.js +194 -0
- package/dist/scripts/src/components/TextArea/TextAreaResizable.js +63 -0
- package/dist/scripts/src/components/TextArea/useComposedRef.js +50 -0
- package/dist/scripts/src/components/TextBox/TextBox.js +145 -0
- package/dist/scripts/src/components/Theme/NotificationToast.js +39 -0
- package/dist/scripts/src/components/Theme/Theme.js +153 -0
- package/dist/scripts/src/components/ThemeChanger/ThemeChanger.js +125 -0
- package/dist/scripts/src/components/Toggle/Toggle.js +88 -0
- package/dist/scripts/src/components/Tree/TreeComponent.js +79 -0
- package/dist/scripts/src/components/ValidationSummary/ValidationSummary.js +59 -0
- package/dist/scripts/src/components/ViewComponentRegistryContext.js +34 -0
- package/dist/scripts/src/components/abstractions.js +2 -0
- package/dist/scripts/src/components/chart-color-schemes.js +43 -0
- package/dist/scripts/src/components/component-utils.js +32 -0
- package/dist/scripts/src/components/container-helpers.js +18 -0
- package/dist/scripts/src/components-core/ApiBoundComponent.js +189 -0
- package/dist/scripts/src/components-core/AppContext.js +17 -0
- package/dist/scripts/src/components-core/ChildrenSlot.js +10 -0
- package/dist/scripts/src/components-core/Component.js +280 -0
- package/dist/scripts/src/components-core/ComponentDecorator.js +63 -0
- package/dist/scripts/src/components-core/CompoundComponent.js +132 -0
- package/dist/scripts/src/components-core/EngineError.js +91 -0
- package/dist/scripts/src/components-core/ErrorBoundary.js +58 -0
- package/dist/scripts/src/components-core/Fragment.js +14 -0
- package/dist/scripts/src/components-core/InvalidComponent.js +15 -0
- package/dist/scripts/src/components-core/LoaderComponent.js +78 -0
- package/dist/scripts/src/components-core/RestApiProxy.js +341 -0
- package/dist/scripts/src/components-core/RootComponent.js +272 -0
- package/dist/scripts/src/components-core/RouteContext.js +45 -0
- package/dist/scripts/src/components-core/ScrollContext.js +9 -0
- package/dist/scripts/src/components-core/UnknownComponent.js +15 -0
- package/dist/scripts/src/components-core/abstractions/ComponentRenderer.js +2 -0
- package/dist/scripts/src/components-core/abstractions/LoaderRenderer.js +2 -0
- package/dist/scripts/src/components-core/abstractions/containers.js +18 -0
- package/dist/scripts/src/components-core/abstractions/treeAbstractions.js +2 -0
- package/dist/scripts/src/components-core/action/ApiAction.js +276 -0
- package/dist/scripts/src/components-core/action/DownloadFileAction.js +80 -0
- package/dist/scripts/src/components-core/action/NavigateAction.js +20 -0
- package/dist/scripts/src/components-core/action/TimedAction.js +21 -0
- package/dist/scripts/src/components-core/action/UploadAction.js +88 -0
- package/dist/scripts/src/components-core/action/actions.js +15 -0
- package/dist/scripts/src/components-core/appContext/date-functions.js +19 -0
- package/dist/scripts/src/components-core/appContext/misc-utils.js +12 -0
- package/dist/scripts/src/components-core/component-hooks.js +25 -0
- package/dist/scripts/src/components-core/constants.js +18 -0
- package/dist/scripts/src/components-core/container/Container.js +1110 -0
- package/dist/scripts/src/components-core/container/ContainerComponentDef.js +16 -0
- package/dist/scripts/src/components-core/container/buildProxy.js +54 -0
- package/dist/scripts/src/components-core/container/collectFnVarDeps.js +26 -0
- package/dist/scripts/src/components-core/container/valueExtractor.js +195 -0
- package/dist/scripts/src/components-core/descriptorHelper.js +75 -0
- package/dist/scripts/src/components-core/interception/abstractions.js +2 -0
- package/dist/scripts/src/components-core/interception/useApiInterceptorContext.js +9 -0
- package/dist/scripts/src/components-core/loader/ApiLoader.js +46 -0
- package/dist/scripts/src/components-core/loader/DataLoader.js +160 -0
- package/dist/scripts/src/components-core/loader/ExternalDataLoader.js +52 -0
- package/dist/scripts/src/components-core/loader/Loader.js +115 -0
- package/dist/scripts/src/components-core/loader/MockLoaderRenderer.js +32 -0
- package/dist/scripts/src/components-core/loader/PageableLoader.js +240 -0
- package/dist/scripts/src/components-core/renderers.js +45 -0
- package/dist/scripts/src/components-core/reportEngineError.js +59 -0
- package/dist/scripts/src/components-core/script-runner/BindingTreeEvaluationContext.js +35 -0
- package/dist/scripts/src/components-core/script-runner/ICustomOperations.js +34 -0
- package/dist/scripts/src/components-core/script-runner/LogicalThread.js +2 -0
- package/dist/scripts/src/components-core/script-runner/LoopScope.js +2 -0
- package/dist/scripts/src/components-core/script-runner/ParameterParser.js +117 -0
- package/dist/scripts/src/components-core/script-runner/TryScope.js +2 -0
- package/dist/scripts/src/components-core/script-runner/asyncProxy.js +96 -0
- package/dist/scripts/src/components-core/script-runner/bannedFunctions.js +34 -0
- package/dist/scripts/src/components-core/script-runner/custom-operations-registry.js +40 -0
- package/dist/scripts/src/components-core/script-runner/custom-ui-data.js +40 -0
- package/dist/scripts/src/components-core/script-runner/eval-tree-async.js +551 -0
- package/dist/scripts/src/components-core/script-runner/eval-tree-common.js +498 -0
- package/dist/scripts/src/components-core/script-runner/eval-tree-sync.js +434 -0
- package/dist/scripts/src/components-core/script-runner/modules.js +250 -0
- package/dist/scripts/src/components-core/script-runner/process-statement-async.js +818 -0
- package/dist/scripts/src/components-core/script-runner/process-statement-common.js +193 -0
- package/dist/scripts/src/components-core/script-runner/process-statement-sync.js +740 -0
- package/dist/scripts/src/components-core/script-runner/statement-queue.js +62 -0
- package/dist/scripts/src/components-core/script-runner/visitors.js +352 -0
- package/dist/scripts/src/components-core/theming/ThemeContext.js +43 -0
- package/dist/scripts/src/components-core/theming/ThemeProvider.js +334 -0
- package/dist/scripts/src/components-core/theming/abstractions.js +11 -0
- package/dist/scripts/src/components-core/theming/extendThemeUtils.js +114 -0
- package/dist/scripts/src/components-core/theming/hvar.js +105 -0
- package/dist/scripts/src/components-core/theming/themeVars.js +62 -0
- package/dist/scripts/src/components-core/theming/themes/base-utils.js +31 -0
- package/dist/scripts/src/components-core/theming/themes/palette.js +53 -0
- package/dist/scripts/src/components-core/theming/themes/root.js +257 -0
- package/dist/scripts/src/components-core/theming/themes/solid.js +16 -0
- package/dist/scripts/src/components-core/theming/themes/theme-colors.js +407 -0
- package/dist/scripts/src/components-core/theming/themes/xmlui.js +32 -0
- package/dist/scripts/src/components-core/theming/transformThemeVars.js +286 -0
- package/dist/scripts/src/components-core/utils/DataLoaderQueryKeyGenerator.js +34 -0
- package/dist/scripts/src/components-core/utils/LruCache.js +184 -0
- package/dist/scripts/src/components-core/utils/actionUtils.js +32 -0
- package/dist/scripts/src/components-core/utils/classnames.js +58 -0
- package/dist/scripts/src/components-core/utils/css-utils.js +127 -0
- package/dist/scripts/src/components-core/utils/date-utils.js +78 -0
- package/dist/scripts/src/components-core/utils/extractParam.js +148 -0
- package/dist/scripts/src/components-core/utils/hooks.js +221 -0
- package/dist/scripts/src/components-core/utils/mergeProps.js +45 -0
- package/dist/scripts/src/components-core/utils/misc.js +460 -0
- package/dist/scripts/src/components-core/utils/statementUtils.js +205 -0
- package/dist/scripts/src/components-core/utils/treeUtils.js +48 -0
- package/dist/scripts/src/components-core/xmlui-parser.js +52 -0
- package/dist/scripts/src/parsers/scripting/InputStream.js +59 -0
- package/dist/scripts/src/parsers/scripting/Lexer.js +1028 -0
- package/dist/scripts/src/parsers/scripting/Parser.js +2647 -0
- package/dist/scripts/src/parsers/scripting/ParserError.js +46 -0
- package/dist/scripts/src/parsers/scripting/TokenTrait.js +109 -0
- package/dist/scripts/src/parsers/scripting/code-behind-collect.js +118 -0
- package/dist/scripts/src/parsers/scripting/tree-visitor.js +602 -0
- package/dist/scripts/src/parsers/style-parser/StyleInputStream.js +39 -0
- package/dist/scripts/src/parsers/style-parser/StyleLexer.js +621 -0
- package/dist/scripts/src/parsers/style-parser/StyleParser.js +1000 -0
- package/dist/scripts/src/parsers/style-parser/errors.js +37 -0
- package/dist/scripts/src/parsers/style-parser/source-tree.js +2 -0
- package/dist/scripts/src/parsers/style-parser/style-compiler.js +513 -0
- package/dist/scripts/src/parsers/style-parser/tokens.js +42 -0
- package/dist/scripts/src/parsers/ueml/ParserError.js +54 -0
- package/dist/scripts/src/parsers/ueml/UemlHelper.js +579 -0
- package/dist/scripts/src/parsers/ueml/UemlInputStream.js +59 -0
- package/dist/scripts/src/parsers/ueml/UemlLexer.js +868 -0
- package/dist/scripts/src/parsers/ueml/UemlParser.js +1439 -0
- package/dist/scripts/src/parsers/ueml/UemlToken.js +24 -0
- package/dist/scripts/src/parsers/ueml/fileExtensions.js +6 -0
- package/dist/scripts/src/parsers/ueml/source-tree.js +2 -0
- package/dist/scripts/src/parsers/ueml/ueml-tree.js +2 -0
- package/dist/scripts/src/parsers/xmlui-parser/CharacterCodes.js +136 -0
- package/dist/scripts/src/parsers/xmlui-parser/diagnostics.js +100 -0
- package/dist/scripts/src/parsers/xmlui-parser/parser.js +476 -0
- package/dist/scripts/src/parsers/xmlui-parser/scanner.js +415 -0
- package/dist/scripts/src/parsers/xmlui-parser/syntax-kind.js +106 -0
- package/dist/scripts/src/parsers/xmlui-parser/syntax-node.js +2 -0
- package/dist/scripts/src/parsers/xmlui-parser/transform.js +922 -0
- package/dist/scripts/src/parsers/xmlui-parser/utils.js +83 -0
- package/dist/xmlui.es.d.ts +1667 -0
- package/dist/xmlui.es.js +17 -0
- package/dist/xmlui.umd.js +1589 -0
- 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
|
+
}
|