@itwin/grouping-mapping-widget 0.25.1 → 0.26.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/lib/cjs/WidgetShell/GroupingMapping.d.ts +5 -5
- package/lib/cjs/WidgetShell/GroupingMapping.js.map +1 -1
- package/lib/cjs/WidgetShell/GroupingMappingWidget.d.ts +4 -0
- package/lib/cjs/WidgetShell/GroupingMappingWidget.js +4 -0
- package/lib/cjs/WidgetShell/GroupingMappingWidget.js.map +1 -1
- package/lib/cjs/components/GroupingMappingContext.d.ts +19 -3
- package/lib/cjs/components/GroupingMappingContext.js +27 -9
- package/lib/cjs/components/GroupingMappingContext.js.map +1 -1
- package/lib/cjs/components/Groups/Editing/GroupAction.d.ts +10 -2
- package/lib/cjs/components/Groups/Editing/GroupAction.js +9 -5
- package/lib/cjs/components/Groups/Editing/GroupAction.js.map +1 -1
- package/lib/cjs/components/Groups/GroupColorLegend.d.ts +3 -3
- package/lib/cjs/components/Groups/GroupColorLegend.js.map +1 -1
- package/lib/cjs/components/Groups/GroupListItem.d.ts +4 -4
- package/lib/cjs/components/Groups/GroupListItem.js +6 -3
- package/lib/cjs/components/Groups/GroupListItem.js.map +1 -1
- package/lib/cjs/components/Groups/GroupListItem.scss +14 -0
- package/lib/cjs/components/Groups/GroupMenuActions.d.ts +4 -4
- package/lib/cjs/components/Groups/GroupMenuActions.js.map +1 -1
- package/lib/cjs/components/Groups/GroupMenuActions.scss +2 -0
- package/lib/cjs/components/Groups/GroupOverlapProgressBar.d.ts +2 -2
- package/lib/cjs/components/Groups/GroupOverlapProgressBar.js.map +1 -1
- package/lib/cjs/components/Groups/Groups.d.ts +12 -4
- package/lib/cjs/components/Groups/Groups.js +4 -0
- package/lib/cjs/components/Groups/Groups.js.map +1 -1
- package/lib/cjs/components/Groups/GroupsShowHideButtons.d.ts +4 -4
- package/lib/cjs/components/Groups/GroupsShowHideButtons.js.map +1 -1
- package/lib/cjs/components/Groups/GroupsView.d.ts +19 -11
- package/lib/cjs/components/Groups/GroupsView.js +4 -0
- package/lib/cjs/components/Groups/GroupsView.js.map +1 -1
- package/lib/cjs/components/Groups/GroupsVisualization.d.ts +8 -0
- package/lib/cjs/components/Groups/GroupsVisualization.js +8 -4
- package/lib/cjs/components/Groups/GroupsVisualization.js.map +1 -1
- package/lib/cjs/components/Groups/OverlappedElementsInformationPanel.d.ts +3 -3
- package/lib/cjs/components/Groups/OverlappedElementsInformationPanel.js.map +1 -1
- package/lib/cjs/components/Groups/QueryBuilder/QueryBuilderCustomUI.d.ts +2 -2
- package/lib/cjs/components/Groups/QueryBuilder/QueryBuilderCustomUI.js.map +1 -1
- package/lib/cjs/components/Groups/groupsHelpers.d.ts +2 -2
- package/lib/cjs/components/Groups/groupsHelpers.js.map +1 -1
- package/lib/cjs/components/Groups/hooks/useFetchGroups.d.ts +3 -3
- package/lib/cjs/components/Groups/hooks/useFetchGroups.js +6 -5
- package/lib/cjs/components/Groups/hooks/useFetchGroups.js.map +1 -1
- package/lib/cjs/components/Groups/hooks/useGroupsOperations.d.ts +15 -7
- package/lib/cjs/components/Groups/hooks/useGroupsOperations.js +9 -5
- package/lib/cjs/components/Groups/hooks/useGroupsOperations.js.map +1 -1
- package/lib/cjs/components/Groups/hooks/useKeySetHiliteQueries.d.ts +4 -4
- package/lib/cjs/components/Groups/hooks/useKeySetHiliteQueries.js.map +1 -1
- package/lib/cjs/components/Mappings/Editing/MappingAction.d.ts +8 -0
- package/lib/cjs/components/Mappings/Editing/MappingAction.js +7 -2
- package/lib/cjs/components/Mappings/Editing/MappingAction.js.map +1 -1
- package/lib/cjs/components/Mappings/Extraction/ExtractionMessageModal.js +4 -2
- package/lib/cjs/components/Mappings/Extraction/ExtractionMessageModal.js.map +1 -1
- package/lib/cjs/components/Mappings/Import/ConfirmMappingsImport.d.ts +1 -2
- package/lib/cjs/components/Mappings/Import/ConfirmMappingsImport.js +4 -3
- package/lib/cjs/components/Mappings/Import/ConfirmMappingsImport.js.map +1 -1
- package/lib/cjs/components/Mappings/Import/MappingImportWizardModal.js +1 -1
- package/lib/cjs/components/Mappings/Import/MappingImportWizardModal.js.map +1 -1
- package/lib/cjs/components/Mappings/Mappings.d.ts +8 -0
- package/lib/cjs/components/Mappings/Mappings.js +4 -0
- package/lib/cjs/components/Mappings/Mappings.js.map +1 -1
- package/lib/cjs/components/Mappings/MappingsView.d.ts +7 -0
- package/lib/cjs/components/Mappings/MappingsView.js +4 -0
- package/lib/cjs/components/Mappings/MappingsView.js.map +1 -1
- package/lib/cjs/components/Mappings/hooks/useFetchExtractionStatus.d.ts +1 -2
- package/lib/cjs/components/Mappings/hooks/useFetchExtractionStatus.js +9 -8
- package/lib/cjs/components/Mappings/hooks/useFetchExtractionStatus.js.map +1 -1
- package/lib/cjs/components/Mappings/hooks/useFetchMappingExtractionStatus.js +5 -4
- package/lib/cjs/components/Mappings/hooks/useFetchMappingExtractionStatus.js.map +1 -1
- package/lib/cjs/components/Mappings/hooks/useFetchMappings.js +1 -1
- package/lib/cjs/components/Mappings/hooks/useFetchMappings.js.map +1 -1
- package/lib/cjs/components/Mappings/hooks/useMappingsOperations.d.ts +9 -2
- package/lib/cjs/components/Mappings/hooks/useMappingsOperations.js +12 -8
- package/lib/cjs/components/Mappings/hooks/useMappingsOperations.js.map +1 -1
- package/lib/cjs/components/Mappings/hooks/useRunExtraction.d.ts +1 -1
- package/lib/cjs/components/Mappings/hooks/useRunExtraction.js +20 -14
- package/lib/cjs/components/Mappings/hooks/useRunExtraction.js.map +1 -1
- package/lib/cjs/components/Properties/CalculatedProperties/CalculatedPropertyAction.d.ts +10 -2
- package/lib/cjs/components/Properties/CalculatedProperties/CalculatedPropertyAction.js +20 -7
- package/lib/cjs/components/Properties/CalculatedProperties/CalculatedPropertyAction.js.map +1 -1
- package/lib/cjs/components/Properties/CalculatedProperties/CalculatedPropertyActionWithVisuals.d.ts +11 -3
- package/lib/cjs/components/Properties/CalculatedProperties/CalculatedPropertyActionWithVisuals.js +19 -7
- package/lib/cjs/components/Properties/CalculatedProperties/CalculatedPropertyActionWithVisuals.js.map +1 -1
- package/lib/cjs/components/Properties/CalculatedProperties/CalculatedPropertyTable.d.ts +3 -3
- package/lib/cjs/components/Properties/CalculatedProperties/CalculatedPropertyTable.js +6 -4
- package/lib/cjs/components/Properties/CalculatedProperties/CalculatedPropertyTable.js.map +1 -1
- package/lib/cjs/components/Properties/CustomCalculations/CustomCalculationAction.d.ts +10 -2
- package/lib/cjs/components/Properties/CustomCalculations/CustomCalculationAction.js +52 -34
- package/lib/cjs/components/Properties/CustomCalculations/CustomCalculationAction.js.map +1 -1
- package/lib/cjs/components/Properties/CustomCalculations/CustomCalculationTable.d.ts +3 -3
- package/lib/cjs/components/Properties/CustomCalculations/CustomCalculationTable.js +6 -4
- package/lib/cjs/components/Properties/CustomCalculations/CustomCalculationTable.js.map +1 -1
- package/lib/cjs/components/Properties/GroupColorToggle.d.ts +2 -2
- package/lib/cjs/components/Properties/GroupColorToggle.js.map +1 -1
- package/lib/cjs/components/Properties/GroupProperties/GroupPropertyAction.d.ts +12 -4
- package/lib/cjs/components/Properties/GroupProperties/GroupPropertyAction.js +24 -18
- package/lib/cjs/components/Properties/GroupProperties/GroupPropertyAction.js.map +1 -1
- package/lib/cjs/components/Properties/GroupProperties/GroupPropertyTable.d.ts +3 -3
- package/lib/cjs/components/Properties/GroupProperties/GroupPropertyTable.js +6 -4
- package/lib/cjs/components/Properties/GroupProperties/GroupPropertyTable.js.map +1 -1
- package/lib/cjs/components/Properties/GroupProperties/GroupPropertyUtils.d.ts +3 -5
- package/lib/cjs/components/Properties/GroupProperties/GroupPropertyUtils.js +0 -26
- package/lib/cjs/components/Properties/GroupProperties/GroupPropertyUtils.js.map +1 -1
- package/lib/cjs/components/Properties/GroupProperties/GroupsPropertiesSelectionModal.js +3 -3
- package/lib/cjs/components/Properties/GroupProperties/GroupsPropertiesSelectionModal.js.map +1 -1
- package/lib/cjs/components/Properties/PropertyMenu.d.ts +13 -5
- package/lib/cjs/components/Properties/PropertyMenu.js +12 -14
- package/lib/cjs/components/Properties/PropertyMenu.js.map +1 -1
- package/lib/cjs/components/Properties/PropertyMenuWithVisualization.d.ts +8 -0
- package/lib/cjs/components/Properties/PropertyMenuWithVisualization.js +4 -0
- package/lib/cjs/components/Properties/PropertyMenuWithVisualization.js.map +1 -1
- package/lib/cjs/components/Properties/hooks/useFormulaValidation.d.ts +2 -1
- package/lib/cjs/components/Properties/hooks/useFormulaValidation.js +8 -4
- package/lib/cjs/components/Properties/hooks/useFormulaValidation.js.map +1 -1
- package/lib/cjs/components/Properties/hooks/usePropertiesQuery.d.ts +4 -0
- package/lib/cjs/components/Properties/hooks/usePropertiesQuery.js +12 -0
- package/lib/cjs/components/Properties/hooks/usePropertiesQuery.js.map +1 -0
- package/lib/cjs/components/context/ExtractionClientContext.js +3 -3
- package/lib/cjs/components/context/ExtractionClientContext.js.map +1 -1
- package/lib/cjs/components/context/GroupingApiConfigContext.d.ts +16 -0
- package/lib/cjs/components/context/GroupingApiConfigContext.js +7 -0
- package/lib/cjs/components/context/GroupingApiConfigContext.js.map +1 -1
- package/lib/cjs/components/context/GroupsClientContext.d.ts +20 -0
- package/lib/cjs/components/context/GroupsClientContext.js +45 -0
- package/lib/cjs/components/context/GroupsClientContext.js.map +1 -0
- package/lib/cjs/components/context/MappingClientContext.d.ts +12 -0
- package/lib/cjs/components/context/MappingClientContext.js +14 -2
- package/lib/cjs/components/context/MappingClientContext.js.map +1 -1
- package/lib/cjs/components/context/PropertiesClientContext.d.ts +20 -0
- package/lib/cjs/components/context/PropertiesClientContext.js +45 -0
- package/lib/cjs/components/context/PropertiesClientContext.js.map +1 -0
- package/lib/cjs/components/customUI/GroupQueryBuilderCustomUI.d.ts +4 -0
- package/lib/cjs/components/customUI/GroupQueryBuilderCustomUI.js +4 -0
- package/lib/cjs/components/customUI/GroupQueryBuilderCustomUI.js.map +1 -1
- package/lib/cjs/components/customUI/GroupingMappingCustomUI.d.ts +15 -3
- package/lib/cjs/components/customUI/GroupingMappingCustomUI.js +3 -0
- package/lib/cjs/components/customUI/GroupingMappingCustomUI.js.map +1 -1
- package/lib/cjs/components/customUI/ManualGroupingCustomUI.d.ts +4 -0
- package/lib/cjs/components/customUI/ManualGroupingCustomUI.js +4 -0
- package/lib/cjs/components/customUI/ManualGroupingCustomUI.js.map +1 -1
- package/lib/cjs/components/customUI/SearchGroupingCustomUI.d.ts +4 -0
- package/lib/cjs/components/customUI/SearchGroupingCustomUI.js +4 -0
- package/lib/cjs/components/customUI/SearchGroupingCustomUI.js.map +1 -1
- package/lib/cjs/formula/FormulaDataTypeResolver.d.ts +1 -0
- package/lib/cjs/formula/FormulaDataTypeResolver.js +1 -0
- package/lib/cjs/formula/FormulaDataTypeResolver.js.map +1 -1
- package/lib/cjs/formula/FormulaFunctionProvider.js +41 -41
- package/lib/cjs/formula/FormulaFunctionProvider.js.map +1 -1
- package/lib/cjs/formula/FormulaOperatorsProvider.js +3 -3
- package/lib/cjs/formula/FormulaOperatorsProvider.js.map +1 -1
- package/lib/cjs/formula/FormulaTokensDataTypeResolver.js +2 -2
- package/lib/cjs/formula/FormulaTokensDataTypeResolver.js.map +1 -1
- package/lib/cjs/formula/IResult.d.ts +3 -0
- package/lib/cjs/formula/IResult.js.map +1 -1
- package/lib/cjs/formula/Types.d.ts +16 -1
- package/lib/cjs/formula/Types.js.map +1 -1
- package/lib/cjs/grouping-mapping-widget.d.ts +2 -0
- package/lib/cjs/grouping-mapping-widget.js +11 -1
- package/lib/cjs/grouping-mapping-widget.js.map +1 -1
- package/lib/cjs/test/GroupPropertyUtils.test.js +0 -39
- package/lib/cjs/test/GroupPropertyUtils.test.js.map +1 -1
- package/lib/cjs/test/GroupingMappingCustomUI.test.js +19 -8
- package/lib/cjs/test/GroupingMappingCustomUI.test.js.map +1 -1
- package/lib/esm/WidgetShell/GroupingMapping.d.ts +5 -5
- package/lib/esm/WidgetShell/GroupingMapping.js.map +1 -1
- package/lib/esm/WidgetShell/GroupingMappingWidget.d.ts +4 -0
- package/lib/esm/WidgetShell/GroupingMappingWidget.js +4 -0
- package/lib/esm/WidgetShell/GroupingMappingWidget.js.map +1 -1
- package/lib/esm/components/GroupingMappingContext.d.ts +19 -3
- package/lib/esm/components/GroupingMappingContext.js +27 -9
- package/lib/esm/components/GroupingMappingContext.js.map +1 -1
- package/lib/esm/components/Groups/Editing/GroupAction.d.ts +10 -2
- package/lib/esm/components/Groups/Editing/GroupAction.js +9 -5
- package/lib/esm/components/Groups/Editing/GroupAction.js.map +1 -1
- package/lib/esm/components/Groups/GroupColorLegend.d.ts +3 -3
- package/lib/esm/components/Groups/GroupColorLegend.js.map +1 -1
- package/lib/esm/components/Groups/GroupListItem.d.ts +4 -4
- package/lib/esm/components/Groups/GroupListItem.js +6 -3
- package/lib/esm/components/Groups/GroupListItem.js.map +1 -1
- package/lib/esm/components/Groups/GroupListItem.scss +14 -0
- package/lib/esm/components/Groups/GroupMenuActions.d.ts +4 -4
- package/lib/esm/components/Groups/GroupMenuActions.js.map +1 -1
- package/lib/esm/components/Groups/GroupMenuActions.scss +2 -0
- package/lib/esm/components/Groups/GroupOverlapProgressBar.d.ts +2 -2
- package/lib/esm/components/Groups/GroupOverlapProgressBar.js.map +1 -1
- package/lib/esm/components/Groups/Groups.d.ts +12 -4
- package/lib/esm/components/Groups/Groups.js +4 -0
- package/lib/esm/components/Groups/Groups.js.map +1 -1
- package/lib/esm/components/Groups/GroupsShowHideButtons.d.ts +4 -4
- package/lib/esm/components/Groups/GroupsShowHideButtons.js.map +1 -1
- package/lib/esm/components/Groups/GroupsView.d.ts +19 -11
- package/lib/esm/components/Groups/GroupsView.js +4 -0
- package/lib/esm/components/Groups/GroupsView.js.map +1 -1
- package/lib/esm/components/Groups/GroupsVisualization.d.ts +8 -0
- package/lib/esm/components/Groups/GroupsVisualization.js +8 -4
- package/lib/esm/components/Groups/GroupsVisualization.js.map +1 -1
- package/lib/esm/components/Groups/OverlappedElementsInformationPanel.d.ts +3 -3
- package/lib/esm/components/Groups/OverlappedElementsInformationPanel.js.map +1 -1
- package/lib/esm/components/Groups/QueryBuilder/QueryBuilderCustomUI.d.ts +2 -2
- package/lib/esm/components/Groups/QueryBuilder/QueryBuilderCustomUI.js.map +1 -1
- package/lib/esm/components/Groups/groupsHelpers.d.ts +2 -2
- package/lib/esm/components/Groups/groupsHelpers.js.map +1 -1
- package/lib/esm/components/Groups/hooks/useFetchGroups.d.ts +3 -3
- package/lib/esm/components/Groups/hooks/useFetchGroups.js +6 -5
- package/lib/esm/components/Groups/hooks/useFetchGroups.js.map +1 -1
- package/lib/esm/components/Groups/hooks/useGroupsOperations.d.ts +15 -7
- package/lib/esm/components/Groups/hooks/useGroupsOperations.js +9 -5
- package/lib/esm/components/Groups/hooks/useGroupsOperations.js.map +1 -1
- package/lib/esm/components/Groups/hooks/useKeySetHiliteQueries.d.ts +4 -4
- package/lib/esm/components/Groups/hooks/useKeySetHiliteQueries.js.map +1 -1
- package/lib/esm/components/Mappings/Editing/MappingAction.d.ts +8 -0
- package/lib/esm/components/Mappings/Editing/MappingAction.js +7 -2
- package/lib/esm/components/Mappings/Editing/MappingAction.js.map +1 -1
- package/lib/esm/components/Mappings/Extraction/ExtractionMessageModal.js +4 -2
- package/lib/esm/components/Mappings/Extraction/ExtractionMessageModal.js.map +1 -1
- package/lib/esm/components/Mappings/Import/ConfirmMappingsImport.d.ts +1 -2
- package/lib/esm/components/Mappings/Import/ConfirmMappingsImport.js +4 -3
- package/lib/esm/components/Mappings/Import/ConfirmMappingsImport.js.map +1 -1
- package/lib/esm/components/Mappings/Import/MappingImportWizardModal.js +1 -1
- package/lib/esm/components/Mappings/Import/MappingImportWizardModal.js.map +1 -1
- package/lib/esm/components/Mappings/Mappings.d.ts +8 -0
- package/lib/esm/components/Mappings/Mappings.js +4 -0
- package/lib/esm/components/Mappings/Mappings.js.map +1 -1
- package/lib/esm/components/Mappings/MappingsView.d.ts +7 -0
- package/lib/esm/components/Mappings/MappingsView.js +4 -0
- package/lib/esm/components/Mappings/MappingsView.js.map +1 -1
- package/lib/esm/components/Mappings/hooks/useFetchExtractionStatus.d.ts +1 -2
- package/lib/esm/components/Mappings/hooks/useFetchExtractionStatus.js +9 -8
- package/lib/esm/components/Mappings/hooks/useFetchExtractionStatus.js.map +1 -1
- package/lib/esm/components/Mappings/hooks/useFetchMappingExtractionStatus.js +6 -5
- package/lib/esm/components/Mappings/hooks/useFetchMappingExtractionStatus.js.map +1 -1
- package/lib/esm/components/Mappings/hooks/useFetchMappings.js +1 -1
- package/lib/esm/components/Mappings/hooks/useFetchMappings.js.map +1 -1
- package/lib/esm/components/Mappings/hooks/useMappingsOperations.d.ts +9 -2
- package/lib/esm/components/Mappings/hooks/useMappingsOperations.js +13 -9
- package/lib/esm/components/Mappings/hooks/useMappingsOperations.js.map +1 -1
- package/lib/esm/components/Mappings/hooks/useRunExtraction.d.ts +1 -1
- package/lib/esm/components/Mappings/hooks/useRunExtraction.js +20 -14
- package/lib/esm/components/Mappings/hooks/useRunExtraction.js.map +1 -1
- package/lib/esm/components/Properties/CalculatedProperties/CalculatedPropertyAction.d.ts +10 -2
- package/lib/esm/components/Properties/CalculatedProperties/CalculatedPropertyAction.js +21 -8
- package/lib/esm/components/Properties/CalculatedProperties/CalculatedPropertyAction.js.map +1 -1
- package/lib/esm/components/Properties/CalculatedProperties/CalculatedPropertyActionWithVisuals.d.ts +11 -3
- package/lib/esm/components/Properties/CalculatedProperties/CalculatedPropertyActionWithVisuals.js +20 -8
- package/lib/esm/components/Properties/CalculatedProperties/CalculatedPropertyActionWithVisuals.js.map +1 -1
- package/lib/esm/components/Properties/CalculatedProperties/CalculatedPropertyTable.d.ts +3 -3
- package/lib/esm/components/Properties/CalculatedProperties/CalculatedPropertyTable.js +6 -4
- package/lib/esm/components/Properties/CalculatedProperties/CalculatedPropertyTable.js.map +1 -1
- package/lib/esm/components/Properties/CustomCalculations/CustomCalculationAction.d.ts +10 -2
- package/lib/esm/components/Properties/CustomCalculations/CustomCalculationAction.js +53 -35
- package/lib/esm/components/Properties/CustomCalculations/CustomCalculationAction.js.map +1 -1
- package/lib/esm/components/Properties/CustomCalculations/CustomCalculationTable.d.ts +3 -3
- package/lib/esm/components/Properties/CustomCalculations/CustomCalculationTable.js +6 -4
- package/lib/esm/components/Properties/CustomCalculations/CustomCalculationTable.js.map +1 -1
- package/lib/esm/components/Properties/GroupColorToggle.d.ts +2 -2
- package/lib/esm/components/Properties/GroupColorToggle.js.map +1 -1
- package/lib/esm/components/Properties/GroupProperties/GroupPropertyAction.d.ts +12 -4
- package/lib/esm/components/Properties/GroupProperties/GroupPropertyAction.js +24 -18
- package/lib/esm/components/Properties/GroupProperties/GroupPropertyAction.js.map +1 -1
- package/lib/esm/components/Properties/GroupProperties/GroupPropertyTable.d.ts +3 -3
- package/lib/esm/components/Properties/GroupProperties/GroupPropertyTable.js +6 -4
- package/lib/esm/components/Properties/GroupProperties/GroupPropertyTable.js.map +1 -1
- package/lib/esm/components/Properties/GroupProperties/GroupPropertyUtils.d.ts +3 -5
- package/lib/esm/components/Properties/GroupProperties/GroupPropertyUtils.js +0 -26
- package/lib/esm/components/Properties/GroupProperties/GroupPropertyUtils.js.map +1 -1
- package/lib/esm/components/Properties/GroupProperties/GroupsPropertiesSelectionModal.js +3 -3
- package/lib/esm/components/Properties/GroupProperties/GroupsPropertiesSelectionModal.js.map +1 -1
- package/lib/esm/components/Properties/PropertyMenu.d.ts +13 -5
- package/lib/esm/components/Properties/PropertyMenu.js +12 -14
- package/lib/esm/components/Properties/PropertyMenu.js.map +1 -1
- package/lib/esm/components/Properties/PropertyMenuWithVisualization.d.ts +8 -0
- package/lib/esm/components/Properties/PropertyMenuWithVisualization.js +4 -0
- package/lib/esm/components/Properties/PropertyMenuWithVisualization.js.map +1 -1
- package/lib/esm/components/Properties/hooks/useFormulaValidation.d.ts +2 -1
- package/lib/esm/components/Properties/hooks/useFormulaValidation.js +8 -4
- package/lib/esm/components/Properties/hooks/useFormulaValidation.js.map +1 -1
- package/lib/esm/components/Properties/hooks/usePropertiesQuery.d.ts +4 -0
- package/lib/esm/components/Properties/hooks/usePropertiesQuery.js +8 -0
- package/lib/esm/components/Properties/hooks/usePropertiesQuery.js.map +1 -0
- package/lib/esm/components/context/ExtractionClientContext.js +3 -3
- package/lib/esm/components/context/ExtractionClientContext.js.map +1 -1
- package/lib/esm/components/context/GroupingApiConfigContext.d.ts +16 -0
- package/lib/esm/components/context/GroupingApiConfigContext.js +7 -0
- package/lib/esm/components/context/GroupingApiConfigContext.js.map +1 -1
- package/lib/esm/components/context/GroupsClientContext.d.ts +20 -0
- package/lib/esm/components/context/GroupsClientContext.js +39 -0
- package/lib/esm/components/context/GroupsClientContext.js.map +1 -0
- package/lib/esm/components/context/MappingClientContext.d.ts +12 -0
- package/lib/esm/components/context/MappingClientContext.js +15 -3
- package/lib/esm/components/context/MappingClientContext.js.map +1 -1
- package/lib/esm/components/context/PropertiesClientContext.d.ts +20 -0
- package/lib/esm/components/context/PropertiesClientContext.js +39 -0
- package/lib/esm/components/context/PropertiesClientContext.js.map +1 -0
- package/lib/esm/components/customUI/GroupQueryBuilderCustomUI.d.ts +4 -0
- package/lib/esm/components/customUI/GroupQueryBuilderCustomUI.js +4 -0
- package/lib/esm/components/customUI/GroupQueryBuilderCustomUI.js.map +1 -1
- package/lib/esm/components/customUI/GroupingMappingCustomUI.d.ts +15 -3
- package/lib/esm/components/customUI/GroupingMappingCustomUI.js +3 -0
- package/lib/esm/components/customUI/GroupingMappingCustomUI.js.map +1 -1
- package/lib/esm/components/customUI/ManualGroupingCustomUI.d.ts +4 -0
- package/lib/esm/components/customUI/ManualGroupingCustomUI.js +4 -0
- package/lib/esm/components/customUI/ManualGroupingCustomUI.js.map +1 -1
- package/lib/esm/components/customUI/SearchGroupingCustomUI.d.ts +4 -0
- package/lib/esm/components/customUI/SearchGroupingCustomUI.js +4 -0
- package/lib/esm/components/customUI/SearchGroupingCustomUI.js.map +1 -1
- package/lib/esm/formula/FormulaDataTypeResolver.d.ts +1 -0
- package/lib/esm/formula/FormulaDataTypeResolver.js +1 -0
- package/lib/esm/formula/FormulaDataTypeResolver.js.map +1 -1
- package/lib/esm/formula/FormulaFunctionProvider.js +41 -41
- package/lib/esm/formula/FormulaFunctionProvider.js.map +1 -1
- package/lib/esm/formula/FormulaOperatorsProvider.js +3 -3
- package/lib/esm/formula/FormulaOperatorsProvider.js.map +1 -1
- package/lib/esm/formula/FormulaTokensDataTypeResolver.js +2 -2
- package/lib/esm/formula/FormulaTokensDataTypeResolver.js.map +1 -1
- package/lib/esm/formula/IResult.d.ts +3 -0
- package/lib/esm/formula/IResult.js.map +1 -1
- package/lib/esm/formula/Types.d.ts +16 -1
- package/lib/esm/formula/Types.js.map +1 -1
- package/lib/esm/grouping-mapping-widget.d.ts +2 -0
- package/lib/esm/grouping-mapping-widget.js +2 -0
- package/lib/esm/grouping-mapping-widget.js.map +1 -1
- package/lib/esm/test/GroupPropertyUtils.test.js +0 -39
- package/lib/esm/test/GroupPropertyUtils.test.js.map +1 -1
- package/lib/esm/test/GroupingMappingCustomUI.test.js +19 -8
- package/lib/esm/test/GroupingMappingCustomUI.test.js.map +1 -1
- package/package.json +3 -2
- package/lib/cjs/components/Properties/hooks/useCalculatedPropertiesQuery.d.ts +0 -4
- package/lib/cjs/components/Properties/hooks/useCalculatedPropertiesQuery.js +0 -12
- package/lib/cjs/components/Properties/hooks/useCalculatedPropertiesQuery.js.map +0 -1
- package/lib/cjs/components/Properties/hooks/useCustomCalculationsQuery.d.ts +0 -4
- package/lib/cjs/components/Properties/hooks/useCustomCalculationsQuery.js +0 -12
- package/lib/cjs/components/Properties/hooks/useCustomCalculationsQuery.js.map +0 -1
- package/lib/cjs/components/Properties/hooks/useGroupPropertiesQuery.d.ts +0 -4
- package/lib/cjs/components/Properties/hooks/useGroupPropertiesQuery.js +0 -12
- package/lib/cjs/components/Properties/hooks/useGroupPropertiesQuery.js.map +0 -1
- package/lib/esm/components/Properties/hooks/useCalculatedPropertiesQuery.d.ts +0 -4
- package/lib/esm/components/Properties/hooks/useCalculatedPropertiesQuery.js +0 -8
- package/lib/esm/components/Properties/hooks/useCalculatedPropertiesQuery.js.map +0 -1
- package/lib/esm/components/Properties/hooks/useCustomCalculationsQuery.d.ts +0 -4
- package/lib/esm/components/Properties/hooks/useCustomCalculationsQuery.js +0 -8
- package/lib/esm/components/Properties/hooks/useCustomCalculationsQuery.js.map +0 -1
- package/lib/esm/components/Properties/hooks/useGroupPropertiesQuery.d.ts +0 -4
- package/lib/esm/components/Properties/hooks/useGroupPropertiesQuery.js +0 -8
- package/lib/esm/components/Properties/hooks/useGroupPropertiesQuery.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchGroupingCustomUI.js","sourceRoot":"","sources":["../../../../src/components/customUI/SearchGroupingCustomUI.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport React from \"react\";\nimport { Alert, Button, LabeledTextarea } from \"@itwin/itwinui-react\";\nimport type { GroupingCustomUIProps } from \"./GroupingMappingCustomUI\";\nimport { LoadingSpinner } from \"../SharedComponents/LoadingSpinner\";\nimport \"./SearchGroupingCustomUI.scss\";\n\nexport const SearchGroupingCustomUI = ({\n updateQuery,\n isUpdating,\n resetView,\n}: GroupingCustomUIProps) => {\n const [searchInput, setSearchInput] = React.useState(\"\");\n const isWrappedInQuotes = (text: string) => {\n return text.startsWith(`\"`) && text.endsWith(`\"`);\n };\n\n const needsAndOperator = (\n token: string,\n index: number,\n searchQuery: string[],\n ) =>\n isWrappedInQuotes(token) ||\n (index === 1 && isWrappedInQuotes(searchQuery[0]));\n\n const generateSearchQuery = (searchQuery: string[]) => {\n if (searchQuery.length === 0) {\n updateQuery(\"\");\n return;\n }\n\n let generatedSearchQuery = `SELECT be.ECInstanceId, be.ECClassId FROM bis.geometricelement3d be `;\n generatedSearchQuery += `LEFT JOIN bis.SpatialCategory cat ON be.Category.Id = cat.ECInstanceID LEFT JOIN ecdbmeta.ECClassDef ecc ON be.ECClassId = ecc.ECInstanceId `;\n generatedSearchQuery += `LEFT JOIN bis.PhysicalType pt ON be.TypeDefinition.Id = pt.ECInstanceID`;\n generatedSearchQuery += ` WHERE `;\n generatedSearchQuery += `((${searchQuery\n .map(\n (token, index) =>\n `${index === 0\n ? \"\"\n : needsAndOperator(token, index, searchQuery)\n ? \"AND\"\n : \"OR\"\n } be.codevalue LIKE '%${isWrappedInQuotes(token) ? token.slice(1, -1) : token\n }%'`,\n )\n .join(\" \")}) OR (${searchQuery\n .map(\n (token, index) =>\n `${index === 0\n ? \"\"\n : needsAndOperator(token, index, searchQuery)\n ? \"AND\"\n : \"OR\"\n } be.userlabel LIKE '%${isWrappedInQuotes(token) ? token.slice(1, -1) : token\n }%'`,\n )\n .join(\" \")})) OR ((${searchQuery\n .map(\n (token, index) =>\n `${index === 0\n ? \"\"\n : needsAndOperator(token, index, searchQuery)\n ? \"AND\"\n : \"OR\"\n } cat.codevalue LIKE '%${isWrappedInQuotes(token) ? token.slice(1, -1) : token\n }%'`,\n )\n .join(\" \")}) OR (${searchQuery\n .map(\n (token, index) =>\n `${index === 0\n ? \"\"\n : needsAndOperator(token, index, searchQuery)\n ? \"AND\"\n : \"OR\"\n } cat.userlabel LIKE '%${isWrappedInQuotes(token) ? token.slice(1, -1) : token\n }%'`,\n )\n .join(\" \")})) OR (${searchQuery\n .map(\n (token, index) =>\n `${index === 0\n ? \"\"\n : needsAndOperator(token, index, searchQuery)\n ? \"AND\"\n : \"OR\"\n } ecc.name LIKE '%${isWrappedInQuotes(token) ? token.slice(1, -1) : token\n }%'`,\n )\n .join(\" \")})`;\n // Physical Types\n generatedSearchQuery += ` OR ((${searchQuery\n .map(\n (token, index) =>\n `${index === 0\n ? \"\"\n : needsAndOperator(token, index, searchQuery)\n ? \"AND\"\n : \"OR\"\n } pt.codevalue LIKE '%${isWrappedInQuotes(token) ? token.slice(1, -1) : token\n }%'`,\n )\n .join(\" \")}) OR (${searchQuery\n .map(\n (token, index) =>\n `${index === 0\n ? \"\"\n : needsAndOperator(token, index, searchQuery)\n ? \"AND\"\n : \"OR\"\n } pt.userlabel LIKE '%${isWrappedInQuotes(token) ? token.slice(1, -1) : token\n }%'`,\n )\n .join(\" \")})) `;\n\n updateQuery(generatedSearchQuery);\n };\n\n return (\n <div className='gmw-search-form'>\n <Alert type='informational'>\n Generate a query by keywords. Keywords wrapped in double quotes will be\n considered a required criteria.\n </Alert>\n <LabeledTextarea\n label='Query Keywords'\n required\n value={searchInput}\n onChange={(event) => setSearchInput(event.target.value)}\n disabled={isUpdating}\n placeholder={`E.g. \"red\" chair`}\n />\n <div className='gmw-search-actions'>\n {isUpdating && <LoadingSpinner />}\n <Button\n disabled={isUpdating}\n onClick={() =>\n generateSearchQuery(\n searchInput\n ? searchInput\n .replace(/(\\r\\n|\\n|\\r)/gm, \"\")\n .trim()\n .split(\" \")\n : [],\n )\n }\n >\n Apply\n </Button>\n <Button\n disabled={isUpdating}\n onClick={async () => {\n updateQuery(\"\");\n setSearchInput(\"\");\n if (resetView) {\n await resetView();\n }\n }}\n >\n Clear\n </Button>\n </div>\n </div>\n );\n};\n\n"]}
|
|
1
|
+
{"version":3,"file":"SearchGroupingCustomUI.js","sourceRoot":"","sources":["../../../../src/components/customUI/SearchGroupingCustomUI.tsx"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport React from \"react\";\nimport { Alert, Button, LabeledTextarea } from \"@itwin/itwinui-react\";\nimport type { GroupingCustomUIProps } from \"./GroupingMappingCustomUI\";\nimport { LoadingSpinner } from \"../SharedComponents/LoadingSpinner\";\nimport \"./SearchGroupingCustomUI.scss\";\n\n/**\n * A default group query builder for the Grouping Mapping Widget that uses a generic query template to search for elements.\n * @public\n */\nexport const SearchGroupingCustomUI = ({\n updateQuery,\n isUpdating,\n resetView,\n}: GroupingCustomUIProps) => {\n const [searchInput, setSearchInput] = React.useState(\"\");\n const isWrappedInQuotes = (text: string) => {\n return text.startsWith(`\"`) && text.endsWith(`\"`);\n };\n\n const needsAndOperator = (\n token: string,\n index: number,\n searchQuery: string[],\n ) =>\n isWrappedInQuotes(token) ||\n (index === 1 && isWrappedInQuotes(searchQuery[0]));\n\n const generateSearchQuery = (searchQuery: string[]) => {\n if (searchQuery.length === 0) {\n updateQuery(\"\");\n return;\n }\n\n let generatedSearchQuery = `SELECT be.ECInstanceId, be.ECClassId FROM bis.geometricelement3d be `;\n generatedSearchQuery += `LEFT JOIN bis.SpatialCategory cat ON be.Category.Id = cat.ECInstanceID LEFT JOIN ecdbmeta.ECClassDef ecc ON be.ECClassId = ecc.ECInstanceId `;\n generatedSearchQuery += `LEFT JOIN bis.PhysicalType pt ON be.TypeDefinition.Id = pt.ECInstanceID`;\n generatedSearchQuery += ` WHERE `;\n generatedSearchQuery += `((${searchQuery\n .map(\n (token, index) =>\n `${index === 0\n ? \"\"\n : needsAndOperator(token, index, searchQuery)\n ? \"AND\"\n : \"OR\"\n } be.codevalue LIKE '%${isWrappedInQuotes(token) ? token.slice(1, -1) : token\n }%'`,\n )\n .join(\" \")}) OR (${searchQuery\n .map(\n (token, index) =>\n `${index === 0\n ? \"\"\n : needsAndOperator(token, index, searchQuery)\n ? \"AND\"\n : \"OR\"\n } be.userlabel LIKE '%${isWrappedInQuotes(token) ? token.slice(1, -1) : token\n }%'`,\n )\n .join(\" \")})) OR ((${searchQuery\n .map(\n (token, index) =>\n `${index === 0\n ? \"\"\n : needsAndOperator(token, index, searchQuery)\n ? \"AND\"\n : \"OR\"\n } cat.codevalue LIKE '%${isWrappedInQuotes(token) ? token.slice(1, -1) : token\n }%'`,\n )\n .join(\" \")}) OR (${searchQuery\n .map(\n (token, index) =>\n `${index === 0\n ? \"\"\n : needsAndOperator(token, index, searchQuery)\n ? \"AND\"\n : \"OR\"\n } cat.userlabel LIKE '%${isWrappedInQuotes(token) ? token.slice(1, -1) : token\n }%'`,\n )\n .join(\" \")})) OR (${searchQuery\n .map(\n (token, index) =>\n `${index === 0\n ? \"\"\n : needsAndOperator(token, index, searchQuery)\n ? \"AND\"\n : \"OR\"\n } ecc.name LIKE '%${isWrappedInQuotes(token) ? token.slice(1, -1) : token\n }%'`,\n )\n .join(\" \")})`;\n // Physical Types\n generatedSearchQuery += ` OR ((${searchQuery\n .map(\n (token, index) =>\n `${index === 0\n ? \"\"\n : needsAndOperator(token, index, searchQuery)\n ? \"AND\"\n : \"OR\"\n } pt.codevalue LIKE '%${isWrappedInQuotes(token) ? token.slice(1, -1) : token\n }%'`,\n )\n .join(\" \")}) OR (${searchQuery\n .map(\n (token, index) =>\n `${index === 0\n ? \"\"\n : needsAndOperator(token, index, searchQuery)\n ? \"AND\"\n : \"OR\"\n } pt.userlabel LIKE '%${isWrappedInQuotes(token) ? token.slice(1, -1) : token\n }%'`,\n )\n .join(\" \")})) `;\n\n updateQuery(generatedSearchQuery);\n };\n\n return (\n <div className='gmw-search-form'>\n <Alert type='informational'>\n Generate a query by keywords. Keywords wrapped in double quotes will be\n considered a required criteria.\n </Alert>\n <LabeledTextarea\n label='Query Keywords'\n required\n value={searchInput}\n onChange={(event) => setSearchInput(event.target.value)}\n disabled={isUpdating}\n placeholder={`E.g. \"red\" chair`}\n />\n <div className='gmw-search-actions'>\n {isUpdating && <LoadingSpinner />}\n <Button\n disabled={isUpdating}\n onClick={() =>\n generateSearchQuery(\n searchInput\n ? searchInput\n .replace(/(\\r\\n|\\n|\\r)/gm, \"\")\n .trim()\n .split(\" \")\n : [],\n )\n }\n >\n Apply\n </Button>\n <Button\n disabled={isUpdating}\n onClick={async () => {\n updateQuery(\"\");\n setSearchInput(\"\");\n if (resetView) {\n await resetView();\n }\n }}\n >\n Clear\n </Button>\n </div>\n </div>\n );\n};\n"]}
|
|
@@ -7,6 +7,7 @@ import type { DataType, PropertyMap } from "./Types";
|
|
|
7
7
|
* @param properties All available properties or variables with their data types
|
|
8
8
|
* that could be used in formula. Names are expected to be lowercase.
|
|
9
9
|
* @returns `dataType` if formula is valid. `errorMessage` otherwise.
|
|
10
|
+
* @public
|
|
10
11
|
*/
|
|
11
12
|
export declare function resolveFormulaDataType(formulaName: string, formula: string, properties: PropertyMap): IResult<DataType>;
|
|
12
13
|
//# sourceMappingURL=FormulaDataTypeResolver.d.ts.map
|
|
@@ -13,6 +13,7 @@ import { ParenthesisState, validateParenthesis } from "./ParenthesisValidator";
|
|
|
13
13
|
* @param properties All available properties or variables with their data types
|
|
14
14
|
* that could be used in formula. Names are expected to be lowercase.
|
|
15
15
|
* @returns `dataType` if formula is valid. `errorMessage` otherwise.
|
|
16
|
+
* @public
|
|
16
17
|
*/
|
|
17
18
|
export function resolveFormulaDataType(formulaName, formula, properties) {
|
|
18
19
|
const parenthesisState = validateParenthesis(formula);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormulaDataTypeResolver.js","sourceRoot":"","sources":["../../../src/formula/FormulaDataTypeResolver.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAElE,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAG/E
|
|
1
|
+
{"version":3,"file":"FormulaDataTypeResolver.js","sourceRoot":"","sources":["../../../src/formula/FormulaDataTypeResolver.ts"],"names":[],"mappings":"AAAA;;;+FAG+F;AAC/F,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAElE,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAG/E;;;;;;;;GAQG;AACH,MAAM,UAAU,sBAAsB,CAAC,WAAmB,EAAE,OAAe,EAAE,UAAuB;IAClG,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IACtD,IAAI,gBAAgB,CAAC,SAAS,KAAK,gBAAgB,EAAE;QACnD,OAAO,EAAE,YAAY,EAAE,0CAA0C,EAAE,CAAC;KACrE;SAAM,IAAI,gBAAgB,CAAC,SAAS,KAAK,gBAAgB,EAAE;QAC1D,OAAO,EAAE,YAAY,EAAE,0CAA0C,EAAE,CAAC;KACrE;IAED,IAAI,kBAAkB,CAAC;IACvB,IAAI;QACF,kBAAkB,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;KAC5C;IAAC,OAAO,EAAE,EAAE;QACX,IAAI,EAAE,YAAY,KAAK,EAAE;YACvB,OAAO,EAAE,YAAY,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC;SACrC;aAAM;YACL,sCAAsC;YACtC,OAAO,CAAC,KAAK,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;YACpC,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,CAAC;SAC3C;KACF;IAED,MAAM,oBAAoB,GAAG,qBAAqB,CAAC,kBAAkB,CAAC,CAAC;IAEvE,IAAI,SAAS,KAAK,oBAAoB,CAAC,KAAK,EAAE;QAC5C,OAAO,EAAE,YAAY,EAAE,oBAAoB,CAAC,YAAY,IAAI,gBAAgB,EAAE,CAAC;KAChF;IAED,OAAO,qBAAqB,CAAC,WAAW,EAAE,oBAAoB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;AACpF,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { splitFormula } from \"./FormulaSplitter\";\nimport { resolveTokensDataType } from \"./FormulaTokensDataTypeResolver\";\nimport { convertInfixToPostfix } from \"./InfixToPostfixConverter\";\nimport type { IResult } from \"./IResult\";\nimport { ParenthesisState, validateParenthesis } from \"./ParenthesisValidator\";\nimport type { DataType, PropertyMap } from \"./Types\";\n\n/**\n * Resolves DataType of the given formula.\n * @param formulaName Name of the current formula. Expected to be lowercase.\n * @param formula The formula itself.\n * @param properties All available properties or variables with their data types\n * that could be used in formula. Names are expected to be lowercase.\n * @returns `dataType` if formula is valid. `errorMessage` otherwise.\n * @public\n */\nexport function resolveFormulaDataType(formulaName: string, formula: string, properties: PropertyMap): IResult<DataType> {\n const parenthesisState = validateParenthesis(formula);\n if (ParenthesisState.NotClosed === parenthesisState) {\n return { errorMessage: \"Opened but not closed parenthesis found.\" };\n } else if (ParenthesisState.NotOpened === parenthesisState) {\n return { errorMessage: \"Closed but not opened parenthesis found.\" };\n }\n\n let infixFormulaTokens;\n try {\n infixFormulaTokens = splitFormula(formula);\n } catch (ex) {\n if (ex instanceof Error) {\n return { errorMessage: ex.message };\n } else {\n // eslint-disable-next-line no-console\n console.error(\"Unknown error.\", ex);\n return { errorMessage: \"Unknown error.\" };\n }\n }\n\n const postfixFormulaTokens = convertInfixToPostfix(infixFormulaTokens);\n\n if (undefined === postfixFormulaTokens.value) {\n return { errorMessage: postfixFormulaTokens.errorMessage ?? \"Unknown error.\" };\n }\n\n return resolveTokensDataType(formulaName, postfixFormulaTokens.value, properties);\n}\n"]}
|
|
@@ -52,53 +52,53 @@ export function getFormulaFunctionReturnType(func, args) {
|
|
|
52
52
|
}
|
|
53
53
|
function getNumericalFunction(name) {
|
|
54
54
|
switch (name) {
|
|
55
|
-
case "abs": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: "
|
|
56
|
-
case "acos": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: "
|
|
57
|
-
case "acosh": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: "
|
|
58
|
-
case "asin": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: "
|
|
59
|
-
case "asinh": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: "
|
|
60
|
-
case "atan": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: "
|
|
61
|
-
case "atanh": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: "
|
|
62
|
-
case "atan2": return { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: "
|
|
63
|
-
case "cbrt": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: "
|
|
64
|
-
case "ceil": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: "
|
|
65
|
-
case "clz32": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: "
|
|
66
|
-
case "cos": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: "
|
|
67
|
-
case "cosh": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: "
|
|
68
|
-
case "exp": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: "
|
|
69
|
-
case "expm1": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: "
|
|
70
|
-
case "floor": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: "
|
|
71
|
-
case "fround": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: "
|
|
72
|
-
case "hypot": return { argumentCountBounds: [2, -1], expectedArguments: [{ dataType: "
|
|
73
|
-
case "imul": return { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: "
|
|
74
|
-
case "log": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: "
|
|
75
|
-
case "log1p": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: "
|
|
76
|
-
case "log10": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: "
|
|
77
|
-
case "log2": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: "
|
|
78
|
-
case "max": return { argumentCountBounds: [2, -1], expectedArguments: [{ dataType: "
|
|
79
|
-
case "min": return { argumentCountBounds: [2, -1], expectedArguments: [{ dataType: "
|
|
80
|
-
case "pow": return { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: "
|
|
81
|
-
case "random": return { argumentCountBounds: [0, 0], expectedArguments: [], returnType: "
|
|
82
|
-
case "round": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: "
|
|
83
|
-
case "sign": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: "
|
|
84
|
-
case "sin": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: "
|
|
85
|
-
case "sinh": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: "
|
|
86
|
-
case "sqrt": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: "
|
|
87
|
-
case "tan": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: "
|
|
88
|
-
case "tanh": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: "
|
|
89
|
-
case "trunc": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: "
|
|
90
|
-
case "tonumber": return { argumentCountBounds: [1, 1], expectedArguments: [{ canBeAny: true }], returnType: "
|
|
55
|
+
case "abs": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: "Double" }], returnType: "Double" };
|
|
56
|
+
case "acos": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: "Double" }], returnType: "Double" };
|
|
57
|
+
case "acosh": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: "Double" }], returnType: "Double" };
|
|
58
|
+
case "asin": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: "Double" }], returnType: "Double" };
|
|
59
|
+
case "asinh": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: "Double" }], returnType: "Double" };
|
|
60
|
+
case "atan": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: "Double" }], returnType: "Double" };
|
|
61
|
+
case "atanh": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: "Double" }], returnType: "Double" };
|
|
62
|
+
case "atan2": return { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: "Double" }, { dataType: "Double" }], returnType: "Double" };
|
|
63
|
+
case "cbrt": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: "Double" }], returnType: "Double" };
|
|
64
|
+
case "ceil": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: "Double" }], returnType: "Double" };
|
|
65
|
+
case "clz32": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: "Double" }], returnType: "Double" };
|
|
66
|
+
case "cos": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: "Double" }], returnType: "Double" };
|
|
67
|
+
case "cosh": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: "Double" }], returnType: "Double" };
|
|
68
|
+
case "exp": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: "Double" }], returnType: "Double" };
|
|
69
|
+
case "expm1": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: "Double" }], returnType: "Double" };
|
|
70
|
+
case "floor": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: "Double" }], returnType: "Double" };
|
|
71
|
+
case "fround": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: "Double" }], returnType: "Double" };
|
|
72
|
+
case "hypot": return { argumentCountBounds: [2, -1], expectedArguments: [{ dataType: "Double" }, { dataType: "Double" }], returnType: "Double" };
|
|
73
|
+
case "imul": return { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: "Double" }, { dataType: "Double" }], returnType: "Double" };
|
|
74
|
+
case "log": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: "Double" }], returnType: "Double" };
|
|
75
|
+
case "log1p": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: "Double" }], returnType: "Double" };
|
|
76
|
+
case "log10": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: "Double" }], returnType: "Double" };
|
|
77
|
+
case "log2": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: "Double" }], returnType: "Double" };
|
|
78
|
+
case "max": return { argumentCountBounds: [2, -1], expectedArguments: [{ dataType: "Double" }, { dataType: "Double" }], returnType: "Double" };
|
|
79
|
+
case "min": return { argumentCountBounds: [2, -1], expectedArguments: [{ dataType: "Double" }, { dataType: "Double" }], returnType: "Double" };
|
|
80
|
+
case "pow": return { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: "Double" }, { dataType: "Double" }], returnType: "Double" };
|
|
81
|
+
case "random": return { argumentCountBounds: [0, 0], expectedArguments: [], returnType: "Double" };
|
|
82
|
+
case "round": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: "Double" }], returnType: "Double" };
|
|
83
|
+
case "sign": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: "Double" }], returnType: "Double" };
|
|
84
|
+
case "sin": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: "Double" }], returnType: "Double" };
|
|
85
|
+
case "sinh": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: "Double" }], returnType: "Double" };
|
|
86
|
+
case "sqrt": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: "Double" }], returnType: "Double" };
|
|
87
|
+
case "tan": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: "Double" }], returnType: "Double" };
|
|
88
|
+
case "tanh": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: "Double" }], returnType: "Double" };
|
|
89
|
+
case "trunc": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: "Double" }], returnType: "Double" };
|
|
90
|
+
case "tonumber": return { argumentCountBounds: [1, 1], expectedArguments: [{ canBeAny: true }], returnType: "Double" };
|
|
91
91
|
default: return undefined;
|
|
92
92
|
}
|
|
93
93
|
}
|
|
94
94
|
function getStringFunction(name) {
|
|
95
95
|
switch (name) {
|
|
96
|
-
case "charat": return { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: "String" }, { dataType: "
|
|
96
|
+
case "charat": return { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: "String" }, { dataType: "Double" }], returnType: "String" };
|
|
97
97
|
case "concat": return { argumentCountBounds: [2, -1], expectedArguments: [{ dataType: "String" }, { dataType: "String" }], returnType: "String" };
|
|
98
|
-
case "padend": return { argumentCountBounds: [2, 3], expectedArguments: [{ dataType: "String" }, { dataType: "
|
|
99
|
-
case "padstart": return { argumentCountBounds: [2, 3], expectedArguments: [{ dataType: "String" }, { dataType: "
|
|
100
|
-
case "substring": return { argumentCountBounds: [2, 3], expectedArguments: [{ dataType: "String" }, { dataType: "
|
|
101
|
-
case "indexof": return { argumentCountBounds: [2, 3], expectedArguments: [{ dataType: "String" }, { dataType: "String" }, { dataType: "
|
|
98
|
+
case "padend": return { argumentCountBounds: [2, 3], expectedArguments: [{ dataType: "String" }, { dataType: "Double" }, { dataType: "String" }], returnType: "String" };
|
|
99
|
+
case "padstart": return { argumentCountBounds: [2, 3], expectedArguments: [{ dataType: "String" }, { dataType: "Double" }, { dataType: "String" }], returnType: "String" };
|
|
100
|
+
case "substring": return { argumentCountBounds: [2, 3], expectedArguments: [{ dataType: "String" }, { dataType: "Double" }, { dataType: "Double" }], returnType: "String" };
|
|
101
|
+
case "indexof": return { argumentCountBounds: [2, 3], expectedArguments: [{ dataType: "String" }, { dataType: "String" }, { dataType: "Double" }], returnType: "Double" };
|
|
102
102
|
case "tolowercase": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: "String" }], returnType: "String" };
|
|
103
103
|
case "touppercase": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: "String" }], returnType: "String" };
|
|
104
104
|
case "trim": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: "String" }], returnType: "String" };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormulaFunctionProvider.js","sourceRoot":"","sources":["../../../src/formula/FormulaFunctionProvider.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport type { IResult } from \"./IResult\";\nimport type { DataType, PossibleDataType } from \"./Types\";\nimport { formatNumericalPositionString } from \"./Utils\";\n\nexport interface FormulaFunctionArgument {\n dataType?: DataType;\n canBeAny?: boolean;\n canBeUndefined?: boolean;\n}\n\nexport interface FormulaFunction {\n argumentCountBounds: [number, number];\n expectedArguments: FormulaFunctionArgument[];\n returnType?: DataType;\n typesMatchFromIndex?: number;\n isreturnTypeFromTypeMatch?: boolean;\n}\n\ninterface ArgumentValidationResult {\n isValid: boolean;\n matchingType?: PossibleDataType;\n invalidReason?: string;\n}\n\nfunction isValidArgument(arg: PossibleDataType, argPos: number, expectedArg: FormulaFunctionArgument): ArgumentValidationResult {\n let isValid: boolean;\n if (arg === \"Undefined\") {\n isValid = !!expectedArg.canBeUndefined;\n return { isValid, invalidReason: isValid ? undefined : `Expected ${formatNumericalPositionString(argPos + 1)} argument to not be null.` };\n }\n\n isValid = expectedArg.canBeAny || arg === expectedArg.dataType;\n return { isValid, invalidReason: isValid ? undefined : `Expected ${formatNumericalPositionString(argPos + 1)} argument to be of type ${expectedArg.dataType}.` };\n}\n\nfunction validateArgumentsWithTypeMatching(): (arg: PossibleDataType, argPos: number, expectedArg: FormulaFunctionArgument, shouldTypeMatch: boolean) => ArgumentValidationResult {\n let matchType: PossibleDataType = \"Undefined\";\n return (arg: PossibleDataType, argPos: number, expectedArg: FormulaFunctionArgument, shouldMatchType: boolean) => {\n if (shouldMatchType && matchType === \"Undefined\")\n matchType = arg;\n\n const validation = isValidArgument(arg, argPos, expectedArg);\n if (!validation.isValid)\n return validation;\n\n const isValid = (matchType === \"Undefined\" || arg === matchType || (arg === \"Undefined\" && !!expectedArg.canBeUndefined));\n if (matchType !== \"Undefined\" && !isValid)\n return {\n isValid,\n matchingType: matchType,\n invalidReason: `Expected ${formatNumericalPositionString(argPos + 1)} argument to be of type ${matchType}.`,\n };\n\n return {\n isValid,\n matchingType: matchType,\n invalidReason: isValid ? undefined : `${formatNumericalPositionString(argPos + 1)} argument is invalid.`,\n };\n };\n}\n\nexport function getFormulaFunctionReturnType(func: FormulaFunction, args: PossibleDataType[]): IResult<PossibleDataType> {\n const hasUnlimitedArguments = func.argumentCountBounds[1] === -1;\n if (args.length < func.argumentCountBounds[0])\n return { errorMessage: `Too few arguments received. Expected a minimum of ${func.argumentCountBounds[0]} argument(s)` };\n if (!hasUnlimitedArguments && args.length > func.argumentCountBounds[1])\n return { errorMessage: `Too many arguments received. Expected a maximum of ${func.argumentCountBounds[1]} argument(s)` };\n\n let returnType: PossibleDataType = func.returnType ?? \"Undefined\";\n const validationFunc = func.typesMatchFromIndex === undefined ? isValidArgument : validateArgumentsWithTypeMatching();\n\n for (let i = 0; i < args.length; i++) {\n const shouldTypeMatch = func.typesMatchFromIndex !== undefined && i >= func.typesMatchFromIndex;\n const expectedTypeIndex = hasUnlimitedArguments && i > func.argumentCountBounds[0] - 1 ? func.argumentCountBounds[0] - 1 : i;\n const expectedArg = func.expectedArguments[expectedTypeIndex];\n const validationResult = validationFunc(args[i], i, expectedArg, shouldTypeMatch);\n if (!validationResult.isValid)\n return { errorMessage: validationResult.invalidReason };\n\n if (func.isreturnTypeFromTypeMatch && shouldTypeMatch)\n returnType = validationResult.matchingType ?? \"Undefined\";\n }\n\n return { value: returnType };\n}\n\nfunction getNumericalFunction(name: string): FormulaFunction | undefined {\n switch (name) {\n case \"abs\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"acos\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"acosh\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"asin\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"asinh\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"atan\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"atanh\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"atan2\": return { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: \"Number\" }, { dataType: \"Number\" }], returnType: \"Number\" };\n case \"cbrt\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"ceil\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"clz32\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"cos\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"cosh\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"exp\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"expm1\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"floor\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"fround\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"hypot\": return { argumentCountBounds: [2, -1], expectedArguments: [{ dataType: \"Number\" }, { dataType: \"Number\" }], returnType: \"Number\" };\n case \"imul\": return { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: \"Number\" }, { dataType: \"Number\" }], returnType: \"Number\" };\n case \"log\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"log1p\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"log10\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"log2\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"max\": return { argumentCountBounds: [2, -1], expectedArguments: [{ dataType: \"Number\" }, { dataType: \"Number\" }], returnType: \"Number\" };\n case \"min\": return { argumentCountBounds: [2, -1], expectedArguments: [{ dataType: \"Number\" }, { dataType: \"Number\" }], returnType: \"Number\" };\n case \"pow\": return { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: \"Number\" }, { dataType: \"Number\" }], returnType: \"Number\" };\n case \"random\": return { argumentCountBounds: [0, 0], expectedArguments: [], returnType: \"Number\" };\n case \"round\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"sign\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"sin\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"sinh\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"sqrt\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"tan\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"tanh\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"trunc\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Number\" }], returnType: \"Number\" };\n case \"tonumber\": return { argumentCountBounds: [1, 1], expectedArguments: [{ canBeAny: true }], returnType: \"Number\" };\n default: return undefined;\n }\n}\n\nfunction getStringFunction(name: string): FormulaFunction | undefined {\n switch (name) {\n case \"charat\": return { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: \"String\" }, { dataType: \"Number\" }], returnType: \"String\" };\n case \"concat\": return { argumentCountBounds: [2, -1], expectedArguments: [{ dataType: \"String\" }, { dataType: \"String\" }], returnType: \"String\" };\n case \"padend\": return { argumentCountBounds: [2, 3], expectedArguments: [{ dataType: \"String\" }, { dataType: \"Number\" }, { dataType: \"String\" }], returnType: \"String\" };\n case \"padstart\": return { argumentCountBounds: [2, 3], expectedArguments: [{ dataType: \"String\" }, { dataType: \"Number\" }, { dataType: \"String\" }], returnType: \"String\" };\n case \"substring\": return { argumentCountBounds: [2, 3], expectedArguments: [{ dataType: \"String\" }, { dataType: \"Number\" }, { dataType: \"Number\" }], returnType: \"String\" };\n case \"indexof\": return { argumentCountBounds: [2, 3], expectedArguments: [{ dataType: \"String\" }, { dataType: \"String\" }, { dataType: \"Number\" }], returnType: \"Number\" };\n case \"tolowercase\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"String\" }], returnType: \"String\" };\n case \"touppercase\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"String\" }], returnType: \"String\" };\n case \"trim\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"String\" }], returnType: \"String\" };\n case \"trimend\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"String\" }], returnType: \"String\" };\n case \"trimstart\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"String\" }], returnType: \"String\" };\n case \"tostring\": return { argumentCountBounds: [1, 1], expectedArguments: [{ canBeAny: true }], returnType: \"String\" };\n default: return undefined;\n }\n}\n\nfunction getConditionalFunction(name: string): FormulaFunction | undefined {\n switch (name) {\n case \"if\": return { argumentCountBounds: [3, 3], expectedArguments: [{ dataType: \"Boolean\" }, { canBeAny: true, canBeUndefined: true }, { canBeAny: true, canBeUndefined: true }], typesMatchFromIndex: 1, isreturnTypeFromTypeMatch: true };\n case \"ifnull\": return { argumentCountBounds: [2, 2], expectedArguments: [{ canBeAny: true, canBeUndefined: true }, { canBeAny: true }], typesMatchFromIndex: 0, isreturnTypeFromTypeMatch: true };\n case \"ifnotnull\": return { argumentCountBounds: [2, 2], expectedArguments: [{ canBeAny: true, canBeUndefined: true }, { canBeAny: true }], typesMatchFromIndex: 0, isreturnTypeFromTypeMatch: true };\n case \"ifempty\": return { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: \"String\" }, { dataType: \"String\" }], returnType: \"String\" };\n case \"ifnotempty\": return { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: \"String\" }, { dataType: \"String\" }], returnType: \"String\" };\n case \"ifnullorempty\": return { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: \"String\", canBeUndefined: true }, { dataType: \"String\" }], returnType: \"String\" };\n case \"ifnotnullorempty\": return { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: \"String\", canBeUndefined: true }, { dataType: \"String\" }], returnType: \"String\" };\n case \"ifnullorwhitespace\": return { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: \"String\", canBeUndefined: true }, { dataType: \"String\" }], returnType: \"String\" };\n case \"ifnotnullorwhitespace\": return { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: \"String\", canBeUndefined: true }, { dataType: \"String\" }], returnType: \"String\" };\n default: return undefined;\n }\n}\n\nfunction getBooleanFunction(name: string): FormulaFunction | undefined {\n switch (name) {\n case \"isin\": return { argumentCountBounds: [2, -1], expectedArguments: [{ canBeAny: true }, { canBeAny: true }], typesMatchFromIndex: 0, returnType: \"Boolean\"};\n case \"toboolean\": return { argumentCountBounds: [1, 1], expectedArguments: [{ canBeAny: true }], returnType: \"Boolean\"};\n default: return undefined;\n }\n}\n\nexport function getFunction(name: string): FormulaFunction | undefined {\n const nameLowerCase = name.toLowerCase();\n return getNumericalFunction(nameLowerCase) || getStringFunction(nameLowerCase) || getConditionalFunction(nameLowerCase) || getBooleanFunction(nameLowerCase);\n}\n\nexport function isFunction(name: string): boolean {\n return !!getFunction(name);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"FormulaFunctionProvider.js","sourceRoot":"","sources":["../../../src/formula/FormulaFunctionProvider.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport type { IResult } from \"./IResult\";\nimport type { DataType, PossibleDataType } from \"./Types\";\nimport { formatNumericalPositionString } from \"./Utils\";\n\nexport interface FormulaFunctionArgument {\n dataType?: DataType;\n canBeAny?: boolean;\n canBeUndefined?: boolean;\n}\n\nexport interface FormulaFunction {\n argumentCountBounds: [number, number];\n expectedArguments: FormulaFunctionArgument[];\n returnType?: DataType;\n typesMatchFromIndex?: number;\n isreturnTypeFromTypeMatch?: boolean;\n}\n\ninterface ArgumentValidationResult {\n isValid: boolean;\n matchingType?: PossibleDataType;\n invalidReason?: string;\n}\n\nfunction isValidArgument(arg: PossibleDataType, argPos: number, expectedArg: FormulaFunctionArgument): ArgumentValidationResult {\n let isValid: boolean;\n if (arg === \"Undefined\") {\n isValid = !!expectedArg.canBeUndefined;\n return { isValid, invalidReason: isValid ? undefined : `Expected ${formatNumericalPositionString(argPos + 1)} argument to not be null.` };\n }\n\n isValid = expectedArg.canBeAny || arg === expectedArg.dataType;\n return { isValid, invalidReason: isValid ? undefined : `Expected ${formatNumericalPositionString(argPos + 1)} argument to be of type ${expectedArg.dataType}.` };\n}\n\nfunction validateArgumentsWithTypeMatching(): (arg: PossibleDataType, argPos: number, expectedArg: FormulaFunctionArgument, shouldTypeMatch: boolean) => ArgumentValidationResult {\n let matchType: PossibleDataType = \"Undefined\";\n return (arg: PossibleDataType, argPos: number, expectedArg: FormulaFunctionArgument, shouldMatchType: boolean) => {\n if (shouldMatchType && matchType === \"Undefined\")\n matchType = arg;\n\n const validation = isValidArgument(arg, argPos, expectedArg);\n if (!validation.isValid)\n return validation;\n\n const isValid = (matchType === \"Undefined\" || arg === matchType || (arg === \"Undefined\" && !!expectedArg.canBeUndefined));\n if (matchType !== \"Undefined\" && !isValid)\n return {\n isValid,\n matchingType: matchType,\n invalidReason: `Expected ${formatNumericalPositionString(argPos + 1)} argument to be of type ${matchType}.`,\n };\n\n return {\n isValid,\n matchingType: matchType,\n invalidReason: isValid ? undefined : `${formatNumericalPositionString(argPos + 1)} argument is invalid.`,\n };\n };\n}\n\nexport function getFormulaFunctionReturnType(func: FormulaFunction, args: PossibleDataType[]): IResult<PossibleDataType> {\n const hasUnlimitedArguments = func.argumentCountBounds[1] === -1;\n if (args.length < func.argumentCountBounds[0])\n return { errorMessage: `Too few arguments received. Expected a minimum of ${func.argumentCountBounds[0]} argument(s)` };\n if (!hasUnlimitedArguments && args.length > func.argumentCountBounds[1])\n return { errorMessage: `Too many arguments received. Expected a maximum of ${func.argumentCountBounds[1]} argument(s)` };\n\n let returnType: PossibleDataType = func.returnType ?? \"Undefined\";\n const validationFunc = func.typesMatchFromIndex === undefined ? isValidArgument : validateArgumentsWithTypeMatching();\n\n for (let i = 0; i < args.length; i++) {\n const shouldTypeMatch = func.typesMatchFromIndex !== undefined && i >= func.typesMatchFromIndex;\n const expectedTypeIndex = hasUnlimitedArguments && i > func.argumentCountBounds[0] - 1 ? func.argumentCountBounds[0] - 1 : i;\n const expectedArg = func.expectedArguments[expectedTypeIndex];\n const validationResult = validationFunc(args[i], i, expectedArg, shouldTypeMatch);\n if (!validationResult.isValid)\n return { errorMessage: validationResult.invalidReason };\n\n if (func.isreturnTypeFromTypeMatch && shouldTypeMatch)\n returnType = validationResult.matchingType ?? \"Undefined\";\n }\n\n return { value: returnType };\n}\n\nfunction getNumericalFunction(name: string): FormulaFunction | undefined {\n switch (name) {\n case \"abs\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" };\n case \"acos\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" };\n case \"acosh\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" };\n case \"asin\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" };\n case \"asinh\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" };\n case \"atan\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" };\n case \"atanh\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" };\n case \"atan2\": return { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: \"Double\" }, { dataType: \"Double\" }], returnType: \"Double\" };\n case \"cbrt\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" };\n case \"ceil\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" };\n case \"clz32\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" };\n case \"cos\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" };\n case \"cosh\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" };\n case \"exp\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" };\n case \"expm1\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" };\n case \"floor\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" };\n case \"fround\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" };\n case \"hypot\": return { argumentCountBounds: [2, -1], expectedArguments: [{ dataType: \"Double\" }, { dataType: \"Double\" }], returnType: \"Double\" };\n case \"imul\": return { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: \"Double\" }, { dataType: \"Double\" }], returnType: \"Double\" };\n case \"log\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" };\n case \"log1p\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" };\n case \"log10\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" };\n case \"log2\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" };\n case \"max\": return { argumentCountBounds: [2, -1], expectedArguments: [{ dataType: \"Double\" }, { dataType: \"Double\" }], returnType: \"Double\" };\n case \"min\": return { argumentCountBounds: [2, -1], expectedArguments: [{ dataType: \"Double\" }, { dataType: \"Double\" }], returnType: \"Double\" };\n case \"pow\": return { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: \"Double\" }, { dataType: \"Double\" }], returnType: \"Double\" };\n case \"random\": return { argumentCountBounds: [0, 0], expectedArguments: [], returnType: \"Double\" };\n case \"round\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" };\n case \"sign\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" };\n case \"sin\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" };\n case \"sinh\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" };\n case \"sqrt\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" };\n case \"tan\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" };\n case \"tanh\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" };\n case \"trunc\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"Double\" }], returnType: \"Double\" };\n case \"tonumber\": return { argumentCountBounds: [1, 1], expectedArguments: [{ canBeAny: true }], returnType: \"Double\" };\n default: return undefined;\n }\n}\n\nfunction getStringFunction(name: string): FormulaFunction | undefined {\n switch (name) {\n case \"charat\": return { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: \"String\" }, { dataType: \"Double\" }], returnType: \"String\" };\n case \"concat\": return { argumentCountBounds: [2, -1], expectedArguments: [{ dataType: \"String\" }, { dataType: \"String\" }], returnType: \"String\" };\n case \"padend\": return { argumentCountBounds: [2, 3], expectedArguments: [{ dataType: \"String\" }, { dataType: \"Double\" }, { dataType: \"String\" }], returnType: \"String\" };\n case \"padstart\": return { argumentCountBounds: [2, 3], expectedArguments: [{ dataType: \"String\" }, { dataType: \"Double\" }, { dataType: \"String\" }], returnType: \"String\" };\n case \"substring\": return { argumentCountBounds: [2, 3], expectedArguments: [{ dataType: \"String\" }, { dataType: \"Double\" }, { dataType: \"Double\" }], returnType: \"String\" };\n case \"indexof\": return { argumentCountBounds: [2, 3], expectedArguments: [{ dataType: \"String\" }, { dataType: \"String\" }, { dataType: \"Double\" }], returnType: \"Double\" };\n case \"tolowercase\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"String\" }], returnType: \"String\" };\n case \"touppercase\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"String\" }], returnType: \"String\" };\n case \"trim\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"String\" }], returnType: \"String\" };\n case \"trimend\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"String\" }], returnType: \"String\" };\n case \"trimstart\": return { argumentCountBounds: [1, 1], expectedArguments: [{ dataType: \"String\" }], returnType: \"String\" };\n case \"tostring\": return { argumentCountBounds: [1, 1], expectedArguments: [{ canBeAny: true }], returnType: \"String\" };\n default: return undefined;\n }\n}\n\nfunction getConditionalFunction(name: string): FormulaFunction | undefined {\n switch (name) {\n case \"if\": return { argumentCountBounds: [3, 3], expectedArguments: [{ dataType: \"Boolean\" }, { canBeAny: true, canBeUndefined: true }, { canBeAny: true, canBeUndefined: true }], typesMatchFromIndex: 1, isreturnTypeFromTypeMatch: true };\n case \"ifnull\": return { argumentCountBounds: [2, 2], expectedArguments: [{ canBeAny: true, canBeUndefined: true }, { canBeAny: true }], typesMatchFromIndex: 0, isreturnTypeFromTypeMatch: true };\n case \"ifnotnull\": return { argumentCountBounds: [2, 2], expectedArguments: [{ canBeAny: true, canBeUndefined: true }, { canBeAny: true }], typesMatchFromIndex: 0, isreturnTypeFromTypeMatch: true };\n case \"ifempty\": return { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: \"String\" }, { dataType: \"String\" }], returnType: \"String\" };\n case \"ifnotempty\": return { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: \"String\" }, { dataType: \"String\" }], returnType: \"String\" };\n case \"ifnullorempty\": return { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: \"String\", canBeUndefined: true }, { dataType: \"String\" }], returnType: \"String\" };\n case \"ifnotnullorempty\": return { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: \"String\", canBeUndefined: true }, { dataType: \"String\" }], returnType: \"String\" };\n case \"ifnullorwhitespace\": return { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: \"String\", canBeUndefined: true }, { dataType: \"String\" }], returnType: \"String\" };\n case \"ifnotnullorwhitespace\": return { argumentCountBounds: [2, 2], expectedArguments: [{ dataType: \"String\", canBeUndefined: true }, { dataType: \"String\" }], returnType: \"String\" };\n default: return undefined;\n }\n}\n\nfunction getBooleanFunction(name: string): FormulaFunction | undefined {\n switch (name) {\n case \"isin\": return { argumentCountBounds: [2, -1], expectedArguments: [{ canBeAny: true }, { canBeAny: true }], typesMatchFromIndex: 0, returnType: \"Boolean\"};\n case \"toboolean\": return { argumentCountBounds: [1, 1], expectedArguments: [{ canBeAny: true }], returnType: \"Boolean\"};\n default: return undefined;\n }\n}\n\nexport function getFunction(name: string): FormulaFunction | undefined {\n const nameLowerCase = name.toLowerCase();\n return getNumericalFunction(nameLowerCase) || getStringFunction(nameLowerCase) || getConditionalFunction(nameLowerCase) || getBooleanFunction(nameLowerCase);\n}\n\nexport function isFunction(name: string): boolean {\n return !!getFunction(name);\n}\n"]}
|
|
@@ -147,16 +147,16 @@ export function getOperatorReturnType(token, arg1, arg2) {
|
|
|
147
147
|
case "%":
|
|
148
148
|
return arg1 === "String" || arg2 === "String" ?
|
|
149
149
|
{ errorMessage: `Binary operator "${token}" does not support string operands.` } :
|
|
150
|
-
{ value: "
|
|
150
|
+
{ value: "Double" };
|
|
151
151
|
case "-":
|
|
152
152
|
return arg1 === "String" || arg2 === "String" ?
|
|
153
153
|
{ errorMessage: `${!arg2 ? "Unary" : "Binary"} operator "${token}" does not support string operands.` } :
|
|
154
|
-
{ value: "
|
|
154
|
+
{ value: "Double" };
|
|
155
155
|
case "+":
|
|
156
156
|
if (!arg2)
|
|
157
157
|
return { value: arg1 };
|
|
158
158
|
else
|
|
159
|
-
return arg1 === "String" || arg2 === "String" ? { value: "String" } : { value: "
|
|
159
|
+
return arg1 === "String" || arg2 === "String" ? { value: "String" } : { value: "Double" };
|
|
160
160
|
case "!":
|
|
161
161
|
case "<":
|
|
162
162
|
case "<=":
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormulaOperatorsProvider.js","sourceRoot":"","sources":["../../../src/formula/FormulaOperatorsProvider.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport type { IResult } from \"./IResult\";\nimport type { DataType, PossibleDataType } from \"./Types\";\n\nconst allOperators = [\"+\", \"-\", \"*\", \"%\", \"**\", \"/\", \"`\", \"~\", \"!\", \"@\", \"#\", \"$\", \"^\", \"&\", \"=\", \"[\", \"]\", \"{\", \"}\", \"\\\\\", \"|\", \";\", \":\", \"'\", \"\\\"\", \"<\", \">\", \"?\", \"+=\", \"-=\", \"*=\", \"/=\", \"%=\", \"&=\", \"^=\", \"|=\", \"?=\", \"==\", \"!=\", \">=\", \"<=\", \"++\", \"--\", \"<<\", \">>\", \"&&\", \"||\", \"??\", \"?.\", \"**=\", \"<<=\", \">>=\", \"&&=\", \"||=\", \"??=\", \"===\", \"!==\", \">>>\", \">>>=\"];\n\nexport enum OperatorType {\n UnaryPlus,\n UnaryNegation,\n Exponentiation,\n Multiplication,\n Division,\n Remainder,\n Addition,\n Subtraction,\n LogicalNot,\n LessThan,\n LessThanOrEqual,\n GreaterThan,\n GreaterThanOrEqual,\n Equality,\n Inequality,\n LogicalAnd,\n LogicalOr,\n}\n\nexport enum OperatorAssociativity {\n Left,\n Right,\n}\n\nexport function isOperator(token: string): boolean {\n return allOperators.includes(token);\n}\n\nexport function getBinaryOperator(token: string): OperatorType | undefined {\n switch (token) {\n case \"**\": return OperatorType.Exponentiation;\n case \"*\": return OperatorType.Multiplication;\n case \"/\": return OperatorType.Division;\n case \"%\": return OperatorType.Remainder;\n case \"+\": return OperatorType.Addition;\n case \"-\": return OperatorType.Subtraction;\n case \"<\": return OperatorType.LessThan;\n case \"<=\": return OperatorType.LessThanOrEqual;\n case \">\": return OperatorType.GreaterThan;\n case \">=\": return OperatorType.GreaterThanOrEqual;\n case \"==\": return OperatorType.Equality;\n case \"!=\": return OperatorType.Inequality;\n case \"&&\": return OperatorType.LogicalAnd;\n case \"||\": return OperatorType.LogicalOr;\n default: return undefined;\n }\n}\n\nexport function getUnaryOperator(token: string): OperatorType | undefined {\n switch (token) {\n case \"+\": return OperatorType.UnaryPlus;\n case \"-\": return OperatorType.UnaryNegation;\n case \"!\": return OperatorType.LogicalNot;\n default: return undefined;\n }\n}\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence\nexport function getOperatorPrecedence(op: OperatorType | undefined): number {\n switch (op) {\n case OperatorType.UnaryPlus:\n case OperatorType.UnaryNegation:\n case OperatorType.LogicalNot:\n return 15;\n case OperatorType.Exponentiation:\n return 14;\n case OperatorType.Multiplication:\n case OperatorType.Division:\n case OperatorType.Remainder:\n return 13;\n case OperatorType.Subtraction:\n case OperatorType.Addition:\n return 12;\n case OperatorType.LessThan:\n case OperatorType.LessThanOrEqual:\n case OperatorType.GreaterThan:\n case OperatorType.GreaterThanOrEqual:\n return 10;\n case OperatorType.Equality:\n case OperatorType.Inequality:\n return 9;\n case OperatorType.LogicalAnd:\n return 5;\n case OperatorType.LogicalOr:\n return 4;\n default: return 1;\n }\n}\n\nexport function getOperatorAssociativity(op: OperatorType | undefined): number {\n switch (op) {\n case OperatorType.UnaryPlus:\n case OperatorType.UnaryNegation:\n case OperatorType.Exponentiation:\n case OperatorType.LogicalNot:\n return OperatorAssociativity.Right;\n case OperatorType.Multiplication:\n case OperatorType.Division:\n case OperatorType.Remainder:\n case OperatorType.Addition:\n case OperatorType.Subtraction:\n case OperatorType.LessThan:\n case OperatorType.LessThanOrEqual:\n case OperatorType.GreaterThan:\n case OperatorType.GreaterThanOrEqual:\n case OperatorType.Equality:\n case OperatorType.Inequality:\n case OperatorType.LogicalAnd:\n case OperatorType.LogicalOr:\n return OperatorAssociativity.Left;\n default:\n return OperatorAssociativity.Left;\n }\n}\n\nexport function isSupportedOperator(token: string): boolean {\n return undefined !== getUnaryOperator(token) || undefined !== getBinaryOperator(token);\n}\n\nexport function getOperatorArgumentCountBounds(token: string): [number, number] | undefined {\n switch (token) {\n case \"**\": return [2, 2];\n case \"*\": return [2, 2];\n case \"/\": return [2, 2];\n case \"%\": return [2, 2];\n case \"+\": return [1, 2];\n case \"-\": return [1, 2];\n case \"!\": return [1, 1];\n case \"<\": return [2, 2];\n case \"<=\": return [2, 2];\n case \">\": return [2, 2];\n case \">=\": return [2, 2];\n case \"==\": return [2, 2];\n case \"!=\": return [2, 2];\n case \"&&\": return [2, 2];\n case \"||\": return [2, 2];\n default: return undefined;\n }\n}\n\nexport function getOperatorReturnType(token: string, arg1: PossibleDataType, arg2?: PossibleDataType): IResult<DataType> {\n if (!arg2 && !getUnaryOperator(token))\n return { errorMessage: `Unary operator \"${token}\" is not supported.` };\n\n if (arg2 && !getBinaryOperator(token))\n return { errorMessage: `Binary operator \"${token}\" is not supported.` };\n\n if ((arg1 === \"Undefined\" || arg2 === \"Undefined\") && (token !== \"==\" && token !== \"!=\"))\n return { errorMessage: `${!arg2 ? \"Unary\" : \"Binary\"} operator \"${token}\" does not support null operands.` };\n\n switch (token) {\n case \"**\":\n case \"*\":\n case \"/\":\n case \"%\":\n return arg1 === \"String\" || arg2 === \"String\" ?\n { errorMessage: `Binary operator \"${token}\" does not support string operands.` } :\n { value: \"Number\" };\n case \"-\":\n return arg1 === \"String\" || arg2 === \"String\" ?\n { errorMessage: `${!arg2 ? \"Unary\" : \"Binary\"} operator \"${token}\" does not support string operands.` } :\n { value: \"Number\" };\n case \"+\":\n if (!arg2)\n return { value: arg1 as DataType };\n else\n return arg1 === \"String\" || arg2 === \"String\" ? { value: \"String\" } : { value: \"Number\" };\n case \"!\":\n case \"<\":\n case \"<=\":\n case \">\":\n case \">=\":\n case \"==\":\n case \"!=\":\n case \"&&\":\n case \"||\":\n return { value: \"Boolean\" };\n default:\n return { errorMessage: `Operator \"${token}\" is not supported.` };\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"FormulaOperatorsProvider.js","sourceRoot":"","sources":["../../../src/formula/FormulaOperatorsProvider.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport type { IResult } from \"./IResult\";\nimport type { DataType, PossibleDataType } from \"./Types\";\n\nconst allOperators = [\"+\", \"-\", \"*\", \"%\", \"**\", \"/\", \"`\", \"~\", \"!\", \"@\", \"#\", \"$\", \"^\", \"&\", \"=\", \"[\", \"]\", \"{\", \"}\", \"\\\\\", \"|\", \";\", \":\", \"'\", \"\\\"\", \"<\", \">\", \"?\", \"+=\", \"-=\", \"*=\", \"/=\", \"%=\", \"&=\", \"^=\", \"|=\", \"?=\", \"==\", \"!=\", \">=\", \"<=\", \"++\", \"--\", \"<<\", \">>\", \"&&\", \"||\", \"??\", \"?.\", \"**=\", \"<<=\", \">>=\", \"&&=\", \"||=\", \"??=\", \"===\", \"!==\", \">>>\", \">>>=\"];\n\nexport enum OperatorType {\n UnaryPlus,\n UnaryNegation,\n Exponentiation,\n Multiplication,\n Division,\n Remainder,\n Addition,\n Subtraction,\n LogicalNot,\n LessThan,\n LessThanOrEqual,\n GreaterThan,\n GreaterThanOrEqual,\n Equality,\n Inequality,\n LogicalAnd,\n LogicalOr,\n}\n\nexport enum OperatorAssociativity {\n Left,\n Right,\n}\n\nexport function isOperator(token: string): boolean {\n return allOperators.includes(token);\n}\n\nexport function getBinaryOperator(token: string): OperatorType | undefined {\n switch (token) {\n case \"**\": return OperatorType.Exponentiation;\n case \"*\": return OperatorType.Multiplication;\n case \"/\": return OperatorType.Division;\n case \"%\": return OperatorType.Remainder;\n case \"+\": return OperatorType.Addition;\n case \"-\": return OperatorType.Subtraction;\n case \"<\": return OperatorType.LessThan;\n case \"<=\": return OperatorType.LessThanOrEqual;\n case \">\": return OperatorType.GreaterThan;\n case \">=\": return OperatorType.GreaterThanOrEqual;\n case \"==\": return OperatorType.Equality;\n case \"!=\": return OperatorType.Inequality;\n case \"&&\": return OperatorType.LogicalAnd;\n case \"||\": return OperatorType.LogicalOr;\n default: return undefined;\n }\n}\n\nexport function getUnaryOperator(token: string): OperatorType | undefined {\n switch (token) {\n case \"+\": return OperatorType.UnaryPlus;\n case \"-\": return OperatorType.UnaryNegation;\n case \"!\": return OperatorType.LogicalNot;\n default: return undefined;\n }\n}\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence\nexport function getOperatorPrecedence(op: OperatorType | undefined): number {\n switch (op) {\n case OperatorType.UnaryPlus:\n case OperatorType.UnaryNegation:\n case OperatorType.LogicalNot:\n return 15;\n case OperatorType.Exponentiation:\n return 14;\n case OperatorType.Multiplication:\n case OperatorType.Division:\n case OperatorType.Remainder:\n return 13;\n case OperatorType.Subtraction:\n case OperatorType.Addition:\n return 12;\n case OperatorType.LessThan:\n case OperatorType.LessThanOrEqual:\n case OperatorType.GreaterThan:\n case OperatorType.GreaterThanOrEqual:\n return 10;\n case OperatorType.Equality:\n case OperatorType.Inequality:\n return 9;\n case OperatorType.LogicalAnd:\n return 5;\n case OperatorType.LogicalOr:\n return 4;\n default: return 1;\n }\n}\n\nexport function getOperatorAssociativity(op: OperatorType | undefined): number {\n switch (op) {\n case OperatorType.UnaryPlus:\n case OperatorType.UnaryNegation:\n case OperatorType.Exponentiation:\n case OperatorType.LogicalNot:\n return OperatorAssociativity.Right;\n case OperatorType.Multiplication:\n case OperatorType.Division:\n case OperatorType.Remainder:\n case OperatorType.Addition:\n case OperatorType.Subtraction:\n case OperatorType.LessThan:\n case OperatorType.LessThanOrEqual:\n case OperatorType.GreaterThan:\n case OperatorType.GreaterThanOrEqual:\n case OperatorType.Equality:\n case OperatorType.Inequality:\n case OperatorType.LogicalAnd:\n case OperatorType.LogicalOr:\n return OperatorAssociativity.Left;\n default:\n return OperatorAssociativity.Left;\n }\n}\n\nexport function isSupportedOperator(token: string): boolean {\n return undefined !== getUnaryOperator(token) || undefined !== getBinaryOperator(token);\n}\n\nexport function getOperatorArgumentCountBounds(token: string): [number, number] | undefined {\n switch (token) {\n case \"**\": return [2, 2];\n case \"*\": return [2, 2];\n case \"/\": return [2, 2];\n case \"%\": return [2, 2];\n case \"+\": return [1, 2];\n case \"-\": return [1, 2];\n case \"!\": return [1, 1];\n case \"<\": return [2, 2];\n case \"<=\": return [2, 2];\n case \">\": return [2, 2];\n case \">=\": return [2, 2];\n case \"==\": return [2, 2];\n case \"!=\": return [2, 2];\n case \"&&\": return [2, 2];\n case \"||\": return [2, 2];\n default: return undefined;\n }\n}\n\nexport function getOperatorReturnType(token: string, arg1: PossibleDataType, arg2?: PossibleDataType): IResult<DataType> {\n if (!arg2 && !getUnaryOperator(token))\n return { errorMessage: `Unary operator \"${token}\" is not supported.` };\n\n if (arg2 && !getBinaryOperator(token))\n return { errorMessage: `Binary operator \"${token}\" is not supported.` };\n\n if ((arg1 === \"Undefined\" || arg2 === \"Undefined\") && (token !== \"==\" && token !== \"!=\"))\n return { errorMessage: `${!arg2 ? \"Unary\" : \"Binary\"} operator \"${token}\" does not support null operands.` };\n\n switch (token) {\n case \"**\":\n case \"*\":\n case \"/\":\n case \"%\":\n return arg1 === \"String\" || arg2 === \"String\" ?\n { errorMessage: `Binary operator \"${token}\" does not support string operands.` } :\n { value: \"Double\" };\n case \"-\":\n return arg1 === \"String\" || arg2 === \"String\" ?\n { errorMessage: `${!arg2 ? \"Unary\" : \"Binary\"} operator \"${token}\" does not support string operands.` } :\n { value: \"Double\" };\n case \"+\":\n if (!arg2)\n return { value: arg1 as DataType };\n else\n return arg1 === \"String\" || arg2 === \"String\" ? { value: \"String\" } : { value: \"Double\" };\n case \"!\":\n case \"<\":\n case \"<=\":\n case \">\":\n case \">=\":\n case \"==\":\n case \"!=\":\n case \"&&\":\n case \"||\":\n return { value: \"Boolean\" };\n default:\n return { errorMessage: `Operator \"${token}\" is not supported.` };\n }\n}\n"]}
|
|
@@ -26,7 +26,7 @@ export function resolveTokensDataType(formulaName, tokens, properties) {
|
|
|
26
26
|
const token = tokens.dequeue();
|
|
27
27
|
switch (token.type) {
|
|
28
28
|
case TokenType.Number:
|
|
29
|
-
argStack.push("
|
|
29
|
+
argStack.push("Double");
|
|
30
30
|
break;
|
|
31
31
|
case TokenType.String:
|
|
32
32
|
argStack.push("String");
|
|
@@ -40,7 +40,7 @@ export function resolveTokensDataType(formulaName, tokens, properties) {
|
|
|
40
40
|
case TokenType.Variable:
|
|
41
41
|
const isConstant = isNumericalConstant(token.value);
|
|
42
42
|
if (isConstant) {
|
|
43
|
-
argStack.push("
|
|
43
|
+
argStack.push("Double");
|
|
44
44
|
}
|
|
45
45
|
else {
|
|
46
46
|
if (token.value === formulaName)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormulaTokensDataTypeResolver.js","sourceRoot":"","sources":["../../../src/formula/FormulaTokensDataTypeResolver.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { getFormulaFunctionReturnType, getFunction } from \"./FormulaFunctionProvider\";\nimport { getOperatorArgumentCountBounds, getOperatorReturnType, isOperator } from \"./FormulaOperatorsProvider\";\nimport type { Token } from \"./InfixToPostfixConverter\";\nimport { TokenType } from \"./InfixToPostfixConverter\";\nimport type { IResult } from \"./IResult\";\nimport type { Queue } from \"./Queue\";\nimport { Stack } from \"./Stack\";\nimport type { DataType, PossibleDataType, PropertyMap } from \"./Types\";\n\nfunction isNumericalConstant(name: string): boolean {\n return [\n \"e\",\n \"ln2\",\n \"ln10\",\n \"log2e\",\n \"log10e\",\n \"pi\",\n \"sqrt1_2\",\n \"sqrt2\",\n ].includes(name.toLowerCase());\n}\n\nexport function resolveTokensDataType(formulaName: string, tokens: Queue<Token>, properties: PropertyMap): IResult<DataType> {\n if (tokens.length === 0)\n return { errorMessage: \"Formula cannot be empty.\" };\n\n const argStack = new Stack<PossibleDataType>();\n\n while (tokens.length > 0) {\n const token = tokens.dequeue()!;\n\n switch (token.type) {\n case TokenType.Number:\n argStack.push(\"Number\");\n break;\n case TokenType.String:\n argStack.push(\"String\");\n break;\n case TokenType.Boolean:\n argStack.push(\"Boolean\");\n break;\n case TokenType.Null:\n argStack.push(\"Undefined\");\n break;\n case TokenType.Variable:\n const isConstant = isNumericalConstant(token.value);\n if (isConstant) {\n argStack.push(\"Number\");\n } else {\n if (token.value === formulaName)\n return { errorMessage: \"Formula cannot reference itself.\" };\n\n const prop = properties[token.value];\n if (!prop)\n return { errorMessage: `Variable \"${token.value}\" is not available.` };\n\n argStack.push(prop);\n }\n break;\n case TokenType.Operator:\n if (!isOperator(token.value))\n return { errorMessage: `Operator \"${token.value}\" is not supported.` };\n\n const operatorBounds = getOperatorArgumentCountBounds(token.value);\n if (!operatorBounds)\n return { errorMessage: `Operator \"${token.value}\" is not supported.` };\n\n if (operatorBounds[0] === 2 && token.argCount === 1)\n return { errorMessage: `Unary operator \"${token.value}\" is not supported.` };\n\n if (argStack.length < token.argCount) {\n return { errorMessage: `Too few arguments given for ${token.argCount === 1 ? \"unary\" : \"binary\"} operator \"${token.value}\".` };\n }\n const opArgs = argStack.popN(token.argCount).reverse();\n let operationResult;\n if (opArgs.length === 1)\n operationResult = getOperatorReturnType(token.value, opArgs[0]);\n else if (opArgs.length === 2)\n operationResult = getOperatorReturnType(token.value, opArgs[0], opArgs[1]);\n else\n return { errorMessage: `Operator \"${token.value}\" does not support ${token.argCount} operands.` };\n\n if (operationResult.errorMessage)\n return { errorMessage: operationResult.errorMessage };\n else\n argStack.push(operationResult.value!);\n\n break;\n case TokenType.Function:\n const fnArg = getFunction(token.value);\n if (!fnArg)\n return { errorMessage: `Function \"${token.value}\" is not supported.` };\n\n const fnArgBounds = fnArg.argumentCountBounds;\n if (fnArgBounds[0] === 0 && fnArgBounds[1] === 0 && token.argCount > 0) {\n return { errorMessage: `Function \"${token.value}\" does not accept any arguments.` };\n } else if (fnArgBounds[1] === -1 && token.argCount < fnArgBounds[0]) {\n if (fnArgBounds[0] === 1) {\n return { errorMessage: `Function \"${token.value}\" requires at least 1 argument.` };\n } else {\n if (token.argCount === 1) {\n return { errorMessage: `Function \"${token.value}\" requires at least ${fnArgBounds[0]} arguments, but only 1 argument was given.` };\n } else {\n return { errorMessage: `Function \"${token.value}\" requires at least ${fnArgBounds[0]} arguments, but only ${token.argCount} arguments were given.` };\n }\n }\n } else if (fnArgBounds[0] === fnArgBounds[1] && token.argCount !== fnArgBounds[0]) {\n if (fnArgBounds[0] === 1) {\n return { errorMessage: `Function \"${token.value}\" requires exactly 1 argument, but ${token.argCount} arguments were given.` };\n } else {\n if (token.argCount === 1) {\n return { errorMessage: `Function \"${token.value}\" requires exactly ${fnArgBounds[0]} arguments, but 1 argument was given.` };\n } else {\n return { errorMessage: `Function \"${token.value}\" requires exactly ${fnArgBounds[0]} arguments, but ${token.argCount} arguments were given.` };\n }\n }\n }\n\n const fArgs = argStack.popN(token.argCount).reverse();\n if (fArgs.length < token.argCount) {\n return { errorMessage: `Too few arguments given for function \"${token.value}\".` };\n }\n\n const functionResult = getFormulaFunctionReturnType(fnArg, fArgs);\n if (functionResult.errorMessage)\n return { errorMessage: `Function \"${token.value}\" is invalid. ${functionResult.errorMessage}` };\n else\n argStack.push(functionResult.value!);\n\n break;\n }\n }\n\n if (argStack.length !== 1) {\n return { errorMessage: \"Formula is invalid.\" };\n }\n\n const resultType = argStack.pop();\n if (!resultType || resultType === \"Undefined\") {\n return { errorMessage: \"Formula cannot always return null.\" };\n }\n\n return { value: resultType };\n}\n\n"]}
|
|
1
|
+
{"version":3,"file":"FormulaTokensDataTypeResolver.js","sourceRoot":"","sources":["../../../src/formula/FormulaTokensDataTypeResolver.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nimport { getFormulaFunctionReturnType, getFunction } from \"./FormulaFunctionProvider\";\nimport { getOperatorArgumentCountBounds, getOperatorReturnType, isOperator } from \"./FormulaOperatorsProvider\";\nimport type { Token } from \"./InfixToPostfixConverter\";\nimport { TokenType } from \"./InfixToPostfixConverter\";\nimport type { IResult } from \"./IResult\";\nimport type { Queue } from \"./Queue\";\nimport { Stack } from \"./Stack\";\nimport type { DataType, PossibleDataType, PropertyMap } from \"./Types\";\n\nfunction isNumericalConstant(name: string): boolean {\n return [\n \"e\",\n \"ln2\",\n \"ln10\",\n \"log2e\",\n \"log10e\",\n \"pi\",\n \"sqrt1_2\",\n \"sqrt2\",\n ].includes(name.toLowerCase());\n}\n\nexport function resolveTokensDataType(formulaName: string, tokens: Queue<Token>, properties: PropertyMap): IResult<DataType> {\n if (tokens.length === 0)\n return { errorMessage: \"Formula cannot be empty.\" };\n\n const argStack = new Stack<PossibleDataType>();\n\n while (tokens.length > 0) {\n const token = tokens.dequeue()!;\n\n switch (token.type) {\n case TokenType.Number:\n argStack.push(\"Double\");\n break;\n case TokenType.String:\n argStack.push(\"String\");\n break;\n case TokenType.Boolean:\n argStack.push(\"Boolean\");\n break;\n case TokenType.Null:\n argStack.push(\"Undefined\");\n break;\n case TokenType.Variable:\n const isConstant = isNumericalConstant(token.value);\n if (isConstant) {\n argStack.push(\"Double\");\n } else {\n if (token.value === formulaName)\n return { errorMessage: \"Formula cannot reference itself.\" };\n\n const prop = properties[token.value];\n if (!prop)\n return { errorMessage: `Variable \"${token.value}\" is not available.` };\n\n argStack.push(prop);\n }\n break;\n case TokenType.Operator:\n if (!isOperator(token.value))\n return { errorMessage: `Operator \"${token.value}\" is not supported.` };\n\n const operatorBounds = getOperatorArgumentCountBounds(token.value);\n if (!operatorBounds)\n return { errorMessage: `Operator \"${token.value}\" is not supported.` };\n\n if (operatorBounds[0] === 2 && token.argCount === 1)\n return { errorMessage: `Unary operator \"${token.value}\" is not supported.` };\n\n if (argStack.length < token.argCount) {\n return { errorMessage: `Too few arguments given for ${token.argCount === 1 ? \"unary\" : \"binary\"} operator \"${token.value}\".` };\n }\n const opArgs = argStack.popN(token.argCount).reverse();\n let operationResult;\n if (opArgs.length === 1)\n operationResult = getOperatorReturnType(token.value, opArgs[0]);\n else if (opArgs.length === 2)\n operationResult = getOperatorReturnType(token.value, opArgs[0], opArgs[1]);\n else\n return { errorMessage: `Operator \"${token.value}\" does not support ${token.argCount} operands.` };\n\n if (operationResult.errorMessage)\n return { errorMessage: operationResult.errorMessage };\n else\n argStack.push(operationResult.value!);\n\n break;\n case TokenType.Function:\n const fnArg = getFunction(token.value);\n if (!fnArg)\n return { errorMessage: `Function \"${token.value}\" is not supported.` };\n\n const fnArgBounds = fnArg.argumentCountBounds;\n if (fnArgBounds[0] === 0 && fnArgBounds[1] === 0 && token.argCount > 0) {\n return { errorMessage: `Function \"${token.value}\" does not accept any arguments.` };\n } else if (fnArgBounds[1] === -1 && token.argCount < fnArgBounds[0]) {\n if (fnArgBounds[0] === 1) {\n return { errorMessage: `Function \"${token.value}\" requires at least 1 argument.` };\n } else {\n if (token.argCount === 1) {\n return { errorMessage: `Function \"${token.value}\" requires at least ${fnArgBounds[0]} arguments, but only 1 argument was given.` };\n } else {\n return { errorMessage: `Function \"${token.value}\" requires at least ${fnArgBounds[0]} arguments, but only ${token.argCount} arguments were given.` };\n }\n }\n } else if (fnArgBounds[0] === fnArgBounds[1] && token.argCount !== fnArgBounds[0]) {\n if (fnArgBounds[0] === 1) {\n return { errorMessage: `Function \"${token.value}\" requires exactly 1 argument, but ${token.argCount} arguments were given.` };\n } else {\n if (token.argCount === 1) {\n return { errorMessage: `Function \"${token.value}\" requires exactly ${fnArgBounds[0]} arguments, but 1 argument was given.` };\n } else {\n return { errorMessage: `Function \"${token.value}\" requires exactly ${fnArgBounds[0]} arguments, but ${token.argCount} arguments were given.` };\n }\n }\n }\n\n const fArgs = argStack.popN(token.argCount).reverse();\n if (fArgs.length < token.argCount) {\n return { errorMessage: `Too few arguments given for function \"${token.value}\".` };\n }\n\n const functionResult = getFormulaFunctionReturnType(fnArg, fArgs);\n if (functionResult.errorMessage)\n return { errorMessage: `Function \"${token.value}\" is invalid. ${functionResult.errorMessage}` };\n else\n argStack.push(functionResult.value!);\n\n break;\n }\n }\n\n if (argStack.length !== 1) {\n return { errorMessage: \"Formula is invalid.\" };\n }\n\n const resultType = argStack.pop();\n if (!resultType || resultType === \"Undefined\") {\n return { errorMessage: \"Formula cannot always return null.\" };\n }\n\n return { value: resultType };\n}\n\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IResult.js","sourceRoot":"","sources":["../../../src/formula/IResult.ts"],"names":[],"mappings":"","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nexport interface IResult<T> {\n value?: T;\n errorMessage?: string;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"IResult.js","sourceRoot":"","sources":["../../../src/formula/IResult.ts"],"names":[],"mappings":"","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/**\n * @public\n */\nexport interface IResult<T> {\n value?: T;\n errorMessage?: string;\n}\n"]}
|
|
@@ -1,7 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @public
|
|
3
|
+
*/
|
|
1
4
|
export declare type ValueType = number | string | boolean;
|
|
5
|
+
/**
|
|
6
|
+
* @public
|
|
7
|
+
*/
|
|
2
8
|
export declare type PossibleValueType = ValueType | undefined;
|
|
3
|
-
|
|
9
|
+
/**
|
|
10
|
+
* @public
|
|
11
|
+
*/
|
|
12
|
+
export declare type DataType = "Double" | "String" | "Boolean" | "Integer";
|
|
13
|
+
/**
|
|
14
|
+
* @public
|
|
15
|
+
*/
|
|
4
16
|
export declare type PossibleDataType = DataType | "Undefined";
|
|
17
|
+
/**
|
|
18
|
+
* @public
|
|
19
|
+
*/
|
|
5
20
|
export interface PropertyMap {
|
|
6
21
|
[key: string]: PossibleDataType;
|
|
7
22
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Types.js","sourceRoot":"","sources":["../../../src/formula/Types.ts"],"names":[],"mappings":"","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\nexport type ValueType = number | string | boolean;\n\nexport type PossibleValueType = ValueType | undefined;\n\nexport type DataType = \"
|
|
1
|
+
{"version":3,"file":"Types.js","sourceRoot":"","sources":["../../../src/formula/Types.ts"],"names":[],"mappings":"","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/**\n * @public\n */\nexport type ValueType = number | string | boolean;\n\n/**\n * @public\n */\nexport type PossibleValueType = ValueType | undefined;\n\n/**\n * @public\n */\nexport type DataType = \"Double\" | \"String\" | \"Boolean\" | \"Integer\";\n/**\n * @public\n */\nexport type PossibleDataType = DataType | \"Undefined\";\n\n/**\n * @public\n */\nexport interface PropertyMap { [key: string]: PossibleDataType }\n"]}
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
export * from "./WidgetShell/GroupingMappingWidget";
|
|
3
3
|
/** Interfaces for providing custom MappingClient and API configuration */
|
|
4
4
|
export { createDefaultMappingClient, createMappingClient, MappingClientContext, useMappingClient } from "./components/context/MappingClientContext";
|
|
5
|
+
export { createDefaultGroupsClient, createGroupsClient, GroupsClientContext, useGroupsClient } from "./components/context/GroupsClientContext";
|
|
6
|
+
export { createDefaultPropertiesClient, createPropertiesClient, PropertiesClientContext, usePropertiesClient } from "./components/context/PropertiesClientContext";
|
|
5
7
|
export { ClientPrefix, GetAccessTokenFn, GroupingMappingApiConfig, GroupingMappingApiConfigContext, useGroupingMappingApiConfig } from "./components/context/GroupingApiConfigContext";
|
|
6
8
|
export * from "@itwin/insights-client";
|
|
7
9
|
/** Internal components for custom UIs */
|
|
@@ -6,6 +6,8 @@
|
|
|
6
6
|
export * from "./WidgetShell/GroupingMappingWidget";
|
|
7
7
|
/** Interfaces for providing custom MappingClient and API configuration */
|
|
8
8
|
export { createDefaultMappingClient, createMappingClient, MappingClientContext, useMappingClient } from "./components/context/MappingClientContext";
|
|
9
|
+
export { createDefaultGroupsClient, createGroupsClient, GroupsClientContext, useGroupsClient } from "./components/context/GroupsClientContext";
|
|
10
|
+
export { createDefaultPropertiesClient, createPropertiesClient, PropertiesClientContext, usePropertiesClient } from "./components/context/PropertiesClientContext";
|
|
9
11
|
export { GroupingMappingApiConfigContext, useGroupingMappingApiConfig } from "./components/context/GroupingApiConfigContext";
|
|
10
12
|
export * from "@itwin/insights-client";
|
|
11
13
|
/** Internal components for custom UIs */
|