@nokecy/qc-ui 1.1.36 → 1.1.38
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +25 -25
- package/dist/cjs/ConfirmPro/index.js +4 -4
- package/dist/cjs/RuleBuilder/LogicSelector.js +7 -7
- package/dist/cjs/RuleBuilder/RuleBuilderContainer.js +27 -27
- package/dist/cjs/RuleBuilder/RuleCard.js +6 -6
- package/dist/cjs/RuleBuilder/RuleGroupEditor.js +7 -7
- package/dist/cjs/RuleBuilder/constants/operators.js +18 -18
- package/dist/cjs/RuleBuilder/context/RuleBuilderContext.js +38 -38
- package/dist/cjs/RuleBuilder/inputs/BetweenValueInput.js +5 -5
- package/dist/cjs/RuleBuilder/inputs/MultiValueInput.js +5 -5
- package/dist/cjs/RuleBuilder/inputs/SingleValueInput.js +8 -8
- package/dist/cjs/RuleBuilder/inputs/ValueInput.js +8 -8
- package/dist/cjs/RuleBuilder/selectors/FieldSelector.js +5 -5
- package/dist/cjs/RuleBuilder/selectors/OperatorSelector.js +5 -5
- package/dist/cjs/RuleBuilder/styles/index.module.less +443 -443
- package/dist/cjs/RuleBuilder/styles/index.module.less.d.ts +43 -43
- package/dist/cjs/RuleBuilder/types/index.js +42 -42
- package/dist/cjs/RuleBuilder/utils/pathHelpers.js +47 -47
- package/dist/cjs/RuleBuilder/utils/ruleHelpers.js +31 -31
- package/dist/cjs/RuleBuilder/utils/validation.js +22 -22
- package/dist/cjs/ag-grid-plus/_utils/boolSelect.js +5 -5
- package/dist/cjs/ag-grid-plus/_utils/processColumnGroups.js +9 -9
- package/dist/cjs/ag-grid-plus/ag-grid-theme-builder.css +352 -352
- package/dist/cjs/ag-grid-plus/ag-gridPlus.js +83 -89
- package/dist/cjs/ag-grid-plus/context/gridContext.d.ts +1 -5
- package/dist/cjs/ag-grid-plus/context/gridContext.js +19 -19
- package/dist/cjs/ag-grid-plus/context/useSchemeDataFlow.js +56 -56
- package/dist/cjs/ag-grid-plus/context/useSchemeManager.js +93 -93
- package/dist/cjs/ag-grid-plus/errors/ErrorBoundary.js +8 -8
- package/dist/cjs/ag-grid-plus/errors/types.js +14 -14
- package/dist/cjs/ag-grid-plus/hooks/useAgGridCalculation.js +45 -45
- package/dist/cjs/ag-grid-plus/hooks/useAgGridData.js +44 -44
- package/dist/cjs/ag-grid-plus/hooks/useGridPlusColumnState.js +3 -3
- package/dist/cjs/ag-grid-plus/hooks/useGridState.js +36 -36
- package/dist/cjs/ag-grid-plus/index.less +50 -50
- package/dist/cjs/ag-grid-plus/queryForm/index.less +72 -72
- package/dist/cjs/ag-grid-plus/setting/ColumnConfigForm.js +11 -11
- package/dist/cjs/ag-grid-plus/setting/ColumnConfigTable.js +3 -3
- package/dist/cjs/ag-grid-plus/setting/ColumnNameCellRenderer.js +10 -10
- package/dist/cjs/ag-grid-plus/setting/ColumnSetting.js +29 -29
- package/dist/cjs/ag-grid-plus/setting/DebounceInputs.js +9 -9
- package/dist/cjs/ag-grid-plus/setting/MoveNodeModal.js +7 -7
- package/dist/cjs/ag-grid-plus/setting/NameColumnRenderer.js +6 -6
- package/dist/cjs/ag-grid-plus/setting/QuerySchemeManager.js +34 -34
- package/dist/cjs/ag-grid-plus/setting/columnGroupUtils.js +76 -76
- package/dist/cjs/ag-grid-plus/setting/performanceMonitor.js +5 -5
- package/dist/cjs/ag-grid-plus/shared/storage/backendApiAdapter.js +46 -46
- package/dist/cjs/ag-grid-plus/shared/storage/localStorageAdapter.js +39 -39
- package/dist/cjs/ag-grid-plus/shared/utils/schemeDataMigration.js +18 -18
- package/dist/cjs/ag-grid-plus/theme.js +3 -3
- package/dist/cjs/ag-grid-plus/toolBar/index.js +4 -4
- package/dist/cjs/ag-grid-plus/types.d.ts +2 -22
- package/dist/cjs/ag-grid-plus/utils/columnProcessors.js +52 -52
- package/dist/cjs/ag-grid-plus/utils/constants.js +22 -22
- package/dist/cjs/ag-grid-plus/utils/entityExtensionColumns.d.ts +1 -0
- package/dist/cjs/ag-grid-plus/utils/entityExtensionColumns.js +22 -20
- package/dist/cjs/ag-grid-plus/utils/logger.js +2 -2
- package/dist/cjs/ag-grid-plus/utils/sanitize.js +10 -10
- package/dist/cjs/ag-grid-plus/utils.js +3 -3
- package/dist/cjs/array-table/columnHelper.js +43 -43
- package/dist/cjs/array-table/hooks.js +11 -9
- package/dist/cjs/array-table/index.js +40 -41
- package/dist/cjs/array-table/utils.js +4 -3
- package/dist/cjs/components/RegexEditor/core/RegexEditor.js +32 -32
- package/dist/cjs/components/RegexEditor/core/RegexEditor.less +119 -119
- package/dist/cjs/components/RegexEditor/core/extensions/errorMarker.js +52 -52
- package/dist/cjs/components/RegexEditor/hooks/useRegexTester.js +48 -48
- package/dist/cjs/components/RegexEditor/hooks/useRegexValidation.js +54 -54
- package/dist/cjs/components/RegexEditor/hooks/useTemplateManager.js +5 -5
- package/dist/cjs/components/RegexEditor/templates/TemplateSelector.js +28 -28
- package/dist/cjs/components/RegexEditor/templates/builtinTemplates.js +24 -24
- package/dist/cjs/components/RegexEditor/templates/storage.js +29 -29
- package/dist/cjs/components/RegexEditor/templates/templateManager.js +29 -29
- package/dist/cjs/components/RegexEditor/templates/types.js +74 -74
- package/dist/cjs/components/RegexEditor/validation/complexity.js +40 -40
- package/dist/cjs/components/RegexEditor/validation/parser.js +47 -47
- package/dist/cjs/components/RegexEditor/validation/validator.js +54 -54
- package/dist/cjs/components/RegexEditor/visualizer/FlagsSelector.js +19 -19
- package/dist/cjs/components/RegexEditor/visualizer/MatchItem.js +20 -20
- package/dist/cjs/components/RegexEditor/visualizer/RegexRailroadDiagram.js +15 -15
- package/dist/cjs/components/RegexEditor/visualizer/RegexTester.js +17 -17
- package/dist/cjs/components/RegexEditor/visualizer/astToRailroad.js +11 -11
- package/dist/cjs/components/RegexEditor/visualizer/utils.js +92 -92
- package/dist/cjs/dashboard/dashboard/components/toolbar/style/index.less +49 -49
- package/dist/cjs/dashboard/dashboard/index.less +173 -173
- package/dist/cjs/dashboard/dashboard/utils.js +4 -4
- package/dist/cjs/dashboard/utils.js +8 -8
- package/dist/cjs/dashboard/widget/index.less +7 -7
- package/dist/cjs/dashboard/widget/selector/index.less +172 -172
- package/dist/cjs/deleteConfirm/index.js +17 -17
- package/dist/cjs/draggableModal/index.js +4 -4
- package/dist/cjs/draggableModal/style.less +122 -122
- package/dist/cjs/editable/index.js +16 -1
- package/dist/cjs/formDesigner/arrayTable/styles.less +2 -2
- package/dist/cjs/formDesigner/index.less +2 -2
- package/dist/cjs/fullScreenAlert/index.js +13 -13
- package/dist/cjs/fullScreenAlert/index.less +133 -133
- package/dist/cjs/generatedListPage/ConfigurableToolbar.js +2 -2
- package/dist/cjs/generatedListPage/GeneratedListPage.js +20 -20
- package/dist/cjs/generatedListPage/OptionsColumn.js +3 -3
- package/dist/cjs/generatedListPage/PerformanceMonitor.js +9 -9
- package/dist/cjs/generatedListPage/RequestManager.js +39 -39
- package/dist/cjs/generatedListPage/_utils/AccessWrapper.js +6 -6
- package/dist/cjs/generatedListPage/_utils/defaultHandlers.js +14 -14
- package/dist/cjs/generatedListPage/usePermissionCheck.js +27 -27
- package/dist/cjs/generatedListPage/useRequestManager.js +20 -20
- package/dist/cjs/importModal/index.js +4 -4
- package/dist/cjs/standardFormDialog/FormValidation.js +45 -45
- package/dist/cjs/standardFormDialog/PortalManager.js +46 -46
- package/dist/cjs/standardFormDialog/StandardFormDialog.js +20 -20
- package/dist/cjs/standardFormDialog/useStandardFormSchema.js +24 -24
- package/dist/cjs/toolBar/index.less +25 -25
- package/dist/cjs/types/railroad-diagrams.d.ts +59 -59
- package/dist/cjs/types/regexp-tree.d.ts +175 -175
- package/dist/esm/ConfirmPro/index.js +4 -4
- package/dist/esm/RuleBuilder/LogicSelector.js +7 -7
- package/dist/esm/RuleBuilder/RuleBuilderContainer.js +27 -27
- package/dist/esm/RuleBuilder/RuleCard.js +6 -6
- package/dist/esm/RuleBuilder/RuleGroupEditor.js +7 -7
- package/dist/esm/RuleBuilder/constants/operators.js +18 -18
- package/dist/esm/RuleBuilder/context/RuleBuilderContext.js +38 -38
- package/dist/esm/RuleBuilder/index.js +6 -6
- package/dist/esm/RuleBuilder/inputs/BetweenValueInput.js +5 -5
- package/dist/esm/RuleBuilder/inputs/MultiValueInput.js +5 -5
- package/dist/esm/RuleBuilder/inputs/SingleValueInput.js +8 -8
- package/dist/esm/RuleBuilder/inputs/ValueInput.js +8 -8
- package/dist/esm/RuleBuilder/selectors/FieldSelector.js +5 -5
- package/dist/esm/RuleBuilder/selectors/OperatorSelector.js +5 -5
- package/dist/esm/RuleBuilder/styles/index.module.less +443 -443
- package/dist/esm/RuleBuilder/styles/index.module.less.d.ts +43 -43
- package/dist/esm/RuleBuilder/types/index.js +42 -42
- package/dist/esm/RuleBuilder/utils/pathHelpers.js +47 -47
- package/dist/esm/RuleBuilder/utils/ruleHelpers.js +31 -31
- package/dist/esm/RuleBuilder/utils/validation.js +22 -22
- package/dist/esm/ag-grid-plus/_utils/boolSelect.js +5 -5
- package/dist/esm/ag-grid-plus/_utils/processColumnGroups.js +9 -9
- package/dist/esm/ag-grid-plus/ag-grid-theme-builder.css +352 -352
- package/dist/esm/ag-grid-plus/ag-gridPlus.js +83 -89
- package/dist/esm/ag-grid-plus/context/gridContext.d.ts +1 -5
- package/dist/esm/ag-grid-plus/context/gridContext.js +19 -19
- package/dist/esm/ag-grid-plus/context/useSchemeDataFlow.js +56 -56
- package/dist/esm/ag-grid-plus/context/useSchemeManager.js +93 -93
- package/dist/esm/ag-grid-plus/errors/ErrorBoundary.js +8 -8
- package/dist/esm/ag-grid-plus/errors/types.js +14 -14
- package/dist/esm/ag-grid-plus/hooks/index.js +2 -2
- package/dist/esm/ag-grid-plus/hooks/useAgGridCalculation.js +45 -45
- package/dist/esm/ag-grid-plus/hooks/useAgGridData.js +44 -44
- package/dist/esm/ag-grid-plus/hooks/useGridPlusColumnState.js +3 -3
- package/dist/esm/ag-grid-plus/hooks/useGridState.js +36 -36
- package/dist/esm/ag-grid-plus/index.less +50 -50
- package/dist/esm/ag-grid-plus/queryForm/index.less +72 -72
- package/dist/esm/ag-grid-plus/setting/ColumnConfigForm.js +11 -11
- package/dist/esm/ag-grid-plus/setting/ColumnConfigTable.js +3 -3
- package/dist/esm/ag-grid-plus/setting/ColumnNameCellRenderer.js +10 -10
- package/dist/esm/ag-grid-plus/setting/ColumnSetting.js +29 -29
- package/dist/esm/ag-grid-plus/setting/DebounceInputs.js +9 -9
- package/dist/esm/ag-grid-plus/setting/MoveNodeModal.js +7 -7
- package/dist/esm/ag-grid-plus/setting/NameColumnRenderer.js +6 -6
- package/dist/esm/ag-grid-plus/setting/QuerySchemeManager.js +34 -34
- package/dist/esm/ag-grid-plus/setting/columnGroupUtils.js +76 -76
- package/dist/esm/ag-grid-plus/setting/performanceMonitor.js +5 -5
- package/dist/esm/ag-grid-plus/shared/storage/backendApiAdapter.js +46 -46
- package/dist/esm/ag-grid-plus/shared/storage/localStorageAdapter.js +39 -39
- package/dist/esm/ag-grid-plus/shared/utils/schemeDataMigration.js +18 -18
- package/dist/esm/ag-grid-plus/theme.js +3 -3
- package/dist/esm/ag-grid-plus/toolBar/index.js +4 -4
- package/dist/esm/ag-grid-plus/types.d.ts +2 -22
- package/dist/esm/ag-grid-plus/utils/columnProcessors.js +52 -52
- package/dist/esm/ag-grid-plus/utils/constants.js +22 -22
- package/dist/esm/ag-grid-plus/utils/entityExtensionColumns.d.ts +1 -0
- package/dist/esm/ag-grid-plus/utils/entityExtensionColumns.js +29 -34
- package/dist/esm/ag-grid-plus/utils/logger.js +2 -2
- package/dist/esm/ag-grid-plus/utils/sanitize.js +10 -10
- package/dist/esm/ag-grid-plus/utils.js +3 -3
- package/dist/esm/array-table/columnHelper.js +43 -43
- package/dist/esm/array-table/hooks.js +11 -9
- package/dist/esm/array-table/index.js +40 -41
- package/dist/esm/array-table/utils.js +4 -3
- package/dist/esm/components/RegexEditor/core/RegexEditor.js +32 -32
- package/dist/esm/components/RegexEditor/core/RegexEditor.less +119 -119
- package/dist/esm/components/RegexEditor/core/extensions/errorMarker.js +52 -52
- package/dist/esm/components/RegexEditor/hooks/index.js +4 -4
- package/dist/esm/components/RegexEditor/hooks/useRegexTester.js +48 -48
- package/dist/esm/components/RegexEditor/hooks/useRegexValidation.js +54 -54
- package/dist/esm/components/RegexEditor/hooks/useTemplateManager.js +5 -5
- package/dist/esm/components/RegexEditor/templates/TemplateSelector.js +28 -28
- package/dist/esm/components/RegexEditor/templates/builtinTemplates.js +24 -24
- package/dist/esm/components/RegexEditor/templates/index.js +2 -2
- package/dist/esm/components/RegexEditor/templates/storage.js +29 -29
- package/dist/esm/components/RegexEditor/templates/templateManager.js +29 -29
- package/dist/esm/components/RegexEditor/templates/types.js +74 -74
- package/dist/esm/components/RegexEditor/validation/complexity.js +40 -40
- package/dist/esm/components/RegexEditor/validation/parser.js +47 -47
- package/dist/esm/components/RegexEditor/validation/validator.js +54 -54
- package/dist/esm/components/RegexEditor/visualizer/FlagsSelector.js +19 -19
- package/dist/esm/components/RegexEditor/visualizer/MatchItem.js +20 -20
- package/dist/esm/components/RegexEditor/visualizer/RegexRailroadDiagram.js +15 -15
- package/dist/esm/components/RegexEditor/visualizer/RegexTester.js +17 -17
- package/dist/esm/components/RegexEditor/visualizer/astToRailroad.js +11 -11
- package/dist/esm/components/RegexEditor/visualizer/index.js +5 -5
- package/dist/esm/components/RegexEditor/visualizer/utils.js +92 -92
- package/dist/esm/dashboard/dashboard/components/toolbar/style/index.less +49 -49
- package/dist/esm/dashboard/dashboard/index.less +173 -173
- package/dist/esm/dashboard/dashboard/utils.js +4 -4
- package/dist/esm/dashboard/utils.js +8 -8
- package/dist/esm/dashboard/widget/index.less +7 -7
- package/dist/esm/dashboard/widget/selector/index.less +172 -172
- package/dist/esm/deleteConfirm/index.js +17 -17
- package/dist/esm/draggableModal/index.js +4 -4
- package/dist/esm/draggableModal/style.less +122 -122
- package/dist/esm/editable/index.js +16 -1
- package/dist/esm/formDesigner/arrayTable/styles.less +2 -2
- package/dist/esm/formDesigner/index.less +2 -2
- package/dist/esm/fullScreenAlert/index.js +13 -13
- package/dist/esm/fullScreenAlert/index.less +133 -133
- package/dist/esm/generatedListPage/ConfigurableToolbar.js +2 -2
- package/dist/esm/generatedListPage/GeneratedListPage.js +20 -20
- package/dist/esm/generatedListPage/OptionsColumn.js +3 -3
- package/dist/esm/generatedListPage/PerformanceMonitor.js +9 -9
- package/dist/esm/generatedListPage/RequestManager.js +39 -39
- package/dist/esm/generatedListPage/_utils/AccessWrapper.js +6 -6
- package/dist/esm/generatedListPage/_utils/defaultHandlers.js +14 -14
- package/dist/esm/generatedListPage/index.js +9 -9
- package/dist/esm/generatedListPage/usePermissionCheck.js +27 -27
- package/dist/esm/generatedListPage/useRequestManager.js +20 -20
- package/dist/esm/importModal/index.js +4 -4
- package/dist/esm/standardFormDialog/FormValidation.js +45 -45
- package/dist/esm/standardFormDialog/PortalManager.js +46 -46
- package/dist/esm/standardFormDialog/StandardFormDialog.js +20 -20
- package/dist/esm/standardFormDialog/useStandardFormSchema.js +24 -24
- package/dist/esm/standardFormDialog/withStandardForm.d.ts +2 -2
- package/dist/esm/toolBar/index.less +25 -25
- package/dist/esm/types/railroad-diagrams.d.ts +59 -59
- package/dist/esm/types/regexp-tree.d.ts +175 -175
- package/dist/umd/qc-ui.min.js +1 -1
- package/package.json +90 -90
- package/dist/cjs/ag-grid-plus/shared/hooks/useSchemeManager.d.ts +0 -66
- package/dist/cjs/ag-grid-plus/shared/hooks/useSchemeManager.js +0 -648
- package/dist/esm/ag-grid-plus/shared/hooks/useSchemeManager.d.ts +0 -66
- package/dist/esm/ag-grid-plus/shared/hooks/useSchemeManager.js +0 -643
|
@@ -10,17 +10,17 @@ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o =
|
|
|
10
10
|
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
|
|
11
11
|
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
|
|
12
12
|
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
|
|
13
|
-
/**
|
|
14
|
-
* 模板管理器
|
|
15
|
-
* 统一管理内置模板和自定义模板
|
|
13
|
+
/**
|
|
14
|
+
* 模板管理器
|
|
15
|
+
* 统一管理内置模板和自定义模板
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
18
|
import { TemplateCategory } from "./types";
|
|
19
19
|
import { getAllBuiltinTemplates, getTemplateById as getBuiltinById } from "./builtinTemplates";
|
|
20
20
|
import { TemplateStorage } from "./storage";
|
|
21
21
|
|
|
22
|
-
/**
|
|
23
|
-
* 获取所有模板(内置 + 自定义)
|
|
22
|
+
/**
|
|
23
|
+
* 获取所有模板(内置 + 自定义)
|
|
24
24
|
*/
|
|
25
25
|
export var getAllTemplates = function getAllTemplates() {
|
|
26
26
|
var builtinTemplates = getAllBuiltinTemplates();
|
|
@@ -28,8 +28,8 @@ export var getAllTemplates = function getAllTemplates() {
|
|
|
28
28
|
return [].concat(_toConsumableArray(builtinTemplates), _toConsumableArray(customTemplates));
|
|
29
29
|
};
|
|
30
30
|
|
|
31
|
-
/**
|
|
32
|
-
* 根据 ID 获取模板(优先查找自定义模板)
|
|
31
|
+
/**
|
|
32
|
+
* 根据 ID 获取模板(优先查找自定义模板)
|
|
33
33
|
*/
|
|
34
34
|
export var getTemplateById = function getTemplateById(id) {
|
|
35
35
|
// 先查找自定义模板
|
|
@@ -45,8 +45,8 @@ export var getTemplateById = function getTemplateById(id) {
|
|
|
45
45
|
return getBuiltinById(id);
|
|
46
46
|
};
|
|
47
47
|
|
|
48
|
-
/**
|
|
49
|
-
* 根据分类获取模板
|
|
48
|
+
/**
|
|
49
|
+
* 根据分类获取模板
|
|
50
50
|
*/
|
|
51
51
|
export var getTemplatesByCategory = function getTemplatesByCategory(category) {
|
|
52
52
|
var allTemplates = getAllTemplates();
|
|
@@ -55,8 +55,8 @@ export var getTemplatesByCategory = function getTemplatesByCategory(category) {
|
|
|
55
55
|
});
|
|
56
56
|
};
|
|
57
57
|
|
|
58
|
-
/**
|
|
59
|
-
* 搜索模板(支持关键词搜索)
|
|
58
|
+
/**
|
|
59
|
+
* 搜索模板(支持关键词搜索)
|
|
60
60
|
*/
|
|
61
61
|
export var searchTemplates = function searchTemplates(keyword) {
|
|
62
62
|
if (!keyword.trim()) {
|
|
@@ -71,8 +71,8 @@ export var searchTemplates = function searchTemplates(keyword) {
|
|
|
71
71
|
});
|
|
72
72
|
};
|
|
73
73
|
|
|
74
|
-
/**
|
|
75
|
-
* 获取最常用的模板
|
|
74
|
+
/**
|
|
75
|
+
* 获取最常用的模板
|
|
76
76
|
*/
|
|
77
77
|
export var getMostUsedTemplates = function getMostUsedTemplates() {
|
|
78
78
|
var limit = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 10;
|
|
@@ -84,8 +84,8 @@ export var getMostUsedTemplates = function getMostUsedTemplates() {
|
|
|
84
84
|
}).slice(0, limit);
|
|
85
85
|
};
|
|
86
86
|
|
|
87
|
-
/**
|
|
88
|
-
* 获取最近使用的模板
|
|
87
|
+
/**
|
|
88
|
+
* 获取最近使用的模板
|
|
89
89
|
*/
|
|
90
90
|
export var getRecentlyUsedTemplates = function getRecentlyUsedTemplates() {
|
|
91
91
|
var limit = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 10;
|
|
@@ -100,8 +100,8 @@ export var getRecentlyUsedTemplates = function getRecentlyUsedTemplates() {
|
|
|
100
100
|
}).slice(0, limit);
|
|
101
101
|
};
|
|
102
102
|
|
|
103
|
-
/**
|
|
104
|
-
* 创建新的自定义模板
|
|
103
|
+
/**
|
|
104
|
+
* 创建新的自定义模板
|
|
105
105
|
*/
|
|
106
106
|
export var createCustomTemplate = function createCustomTemplate(template) {
|
|
107
107
|
var newTemplate = _objectSpread(_objectSpread({}, template), {}, {
|
|
@@ -114,8 +114,8 @@ export var createCustomTemplate = function createCustomTemplate(template) {
|
|
|
114
114
|
return newTemplate;
|
|
115
115
|
};
|
|
116
116
|
|
|
117
|
-
/**
|
|
118
|
-
* 更新自定义模板
|
|
117
|
+
/**
|
|
118
|
+
* 更新自定义模板
|
|
119
119
|
*/
|
|
120
120
|
export var updateCustomTemplate = function updateCustomTemplate(id, updates) {
|
|
121
121
|
var template = getTemplateById(id);
|
|
@@ -131,8 +131,8 @@ export var updateCustomTemplate = function updateCustomTemplate(id, updates) {
|
|
|
131
131
|
return TemplateStorage.saveCustomTemplate(updatedTemplate);
|
|
132
132
|
};
|
|
133
133
|
|
|
134
|
-
/**
|
|
135
|
-
* 删除自定义模板
|
|
134
|
+
/**
|
|
135
|
+
* 删除自定义模板
|
|
136
136
|
*/
|
|
137
137
|
export var deleteCustomTemplate = function deleteCustomTemplate(id) {
|
|
138
138
|
var template = getTemplateById(id);
|
|
@@ -143,8 +143,8 @@ export var deleteCustomTemplate = function deleteCustomTemplate(id) {
|
|
|
143
143
|
return TemplateStorage.deleteCustomTemplate(id);
|
|
144
144
|
};
|
|
145
145
|
|
|
146
|
-
/**
|
|
147
|
-
* 复制模板(创建副本)
|
|
146
|
+
/**
|
|
147
|
+
* 复制模板(创建副本)
|
|
148
148
|
*/
|
|
149
149
|
export var duplicateTemplate = function duplicateTemplate(id, newName) {
|
|
150
150
|
var template = getTemplateById(id);
|
|
@@ -167,8 +167,8 @@ export var duplicateTemplate = function duplicateTemplate(id, newName) {
|
|
|
167
167
|
return createCustomTemplate(duplicated);
|
|
168
168
|
};
|
|
169
169
|
|
|
170
|
-
/**
|
|
171
|
-
* 使用模板(更新使用统计)
|
|
170
|
+
/**
|
|
171
|
+
* 使用模板(更新使用统计)
|
|
172
172
|
*/
|
|
173
173
|
export var useTemplate = function useTemplate(id) {
|
|
174
174
|
var template = getTemplateById(id);
|
|
@@ -187,8 +187,8 @@ export var useTemplate = function useTemplate(id) {
|
|
|
187
187
|
return template;
|
|
188
188
|
};
|
|
189
189
|
|
|
190
|
-
/**
|
|
191
|
-
* 获取模板统计信息
|
|
190
|
+
/**
|
|
191
|
+
* 获取模板统计信息
|
|
192
192
|
*/
|
|
193
193
|
export var getTemplateStats = function getTemplateStats() {
|
|
194
194
|
var allTemplates = getAllTemplates();
|
|
@@ -216,8 +216,8 @@ export var getTemplateStats = function getTemplateStats() {
|
|
|
216
216
|
};
|
|
217
217
|
};
|
|
218
218
|
|
|
219
|
-
/**
|
|
220
|
-
* 验证模板是否有效
|
|
219
|
+
/**
|
|
220
|
+
* 验证模板是否有效
|
|
221
221
|
*/
|
|
222
222
|
export var validateTemplate = function validateTemplate(template) {
|
|
223
223
|
var _template$name, _template$pattern, _template$description;
|
|
@@ -1,81 +1,81 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 正则表达式模板系统 - 类型定义
|
|
3
|
-
*
|
|
4
|
-
* @module RegexEditor/templates/types
|
|
5
|
-
* @description 定义正则表达式模板库相关的核心类型
|
|
1
|
+
/**
|
|
2
|
+
* 正则表达式模板系统 - 类型定义
|
|
3
|
+
*
|
|
4
|
+
* @module RegexEditor/templates/types
|
|
5
|
+
* @description 定义正则表达式模板库相关的核心类型
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
/**
|
|
9
|
-
* 正则表达式模板
|
|
10
|
-
*
|
|
11
|
-
* @interface RegexTemplate
|
|
12
|
-
* @property {string} id - 模板唯一标识符
|
|
13
|
-
* @property {string} name - 模板名称(显示用)
|
|
14
|
-
* @property {string} pattern - 正则表达式字符串
|
|
15
|
-
* @property {string} description - 模板详细描述
|
|
16
|
-
* @property {TemplateCategory} category - 模板分类
|
|
17
|
-
* @property {string[]} tags - 标签列表(用于搜索和过滤)
|
|
18
|
-
* @property {Object} examples - 匹配示例
|
|
19
|
-
* @property {string[]} examples.valid - 有效匹配示例
|
|
20
|
-
* @property {string[]} examples.invalid - 无效匹配示例
|
|
21
|
-
* @property {'simple' | 'medium' | 'complex'} complexity - 复杂度等级
|
|
22
|
-
* @property {number} [useCount] - 使用次数(用于热门排序)
|
|
23
|
-
* @property {Date} [lastUsed] - 最后使用时间
|
|
24
|
-
* @property {boolean} [isCustom] - 是否为用户自定义模板
|
|
25
|
-
*
|
|
26
|
-
* @example
|
|
27
|
-
* ```typescript
|
|
28
|
-
* const lotNumberTemplate: RegexTemplate = {
|
|
29
|
-
* id: 'lot-number',
|
|
30
|
-
* name: '批次号',
|
|
31
|
-
* pattern: '^LOT\\d{6}$',
|
|
32
|
-
* description: '标准批次号格式:LOT + 6位数字',
|
|
33
|
-
* category: TemplateCategory.BUSINESS,
|
|
34
|
-
* tags: ['批次', 'LOT', '业务'],
|
|
35
|
-
* examples: {
|
|
36
|
-
* valid: ['LOT123456', 'LOT000001'],
|
|
37
|
-
* invalid: ['LOT12345', 'lot123456', 'LOT1234567']
|
|
38
|
-
* },
|
|
39
|
-
* complexity: 'simple',
|
|
40
|
-
* useCount: 42,
|
|
41
|
-
* lastUsed: new Date('2025-01-27'),
|
|
42
|
-
* isCustom: false
|
|
43
|
-
* };
|
|
44
|
-
* ```
|
|
8
|
+
/**
|
|
9
|
+
* 正则表达式模板
|
|
10
|
+
*
|
|
11
|
+
* @interface RegexTemplate
|
|
12
|
+
* @property {string} id - 模板唯一标识符
|
|
13
|
+
* @property {string} name - 模板名称(显示用)
|
|
14
|
+
* @property {string} pattern - 正则表达式字符串
|
|
15
|
+
* @property {string} description - 模板详细描述
|
|
16
|
+
* @property {TemplateCategory} category - 模板分类
|
|
17
|
+
* @property {string[]} tags - 标签列表(用于搜索和过滤)
|
|
18
|
+
* @property {Object} examples - 匹配示例
|
|
19
|
+
* @property {string[]} examples.valid - 有效匹配示例
|
|
20
|
+
* @property {string[]} examples.invalid - 无效匹配示例
|
|
21
|
+
* @property {'simple' | 'medium' | 'complex'} complexity - 复杂度等级
|
|
22
|
+
* @property {number} [useCount] - 使用次数(用于热门排序)
|
|
23
|
+
* @property {Date} [lastUsed] - 最后使用时间
|
|
24
|
+
* @property {boolean} [isCustom] - 是否为用户自定义模板
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```typescript
|
|
28
|
+
* const lotNumberTemplate: RegexTemplate = {
|
|
29
|
+
* id: 'lot-number',
|
|
30
|
+
* name: '批次号',
|
|
31
|
+
* pattern: '^LOT\\d{6}$',
|
|
32
|
+
* description: '标准批次号格式:LOT + 6位数字',
|
|
33
|
+
* category: TemplateCategory.BUSINESS,
|
|
34
|
+
* tags: ['批次', 'LOT', '业务'],
|
|
35
|
+
* examples: {
|
|
36
|
+
* valid: ['LOT123456', 'LOT000001'],
|
|
37
|
+
* invalid: ['LOT12345', 'lot123456', 'LOT1234567']
|
|
38
|
+
* },
|
|
39
|
+
* complexity: 'simple',
|
|
40
|
+
* useCount: 42,
|
|
41
|
+
* lastUsed: new Date('2025-01-27'),
|
|
42
|
+
* isCustom: false
|
|
43
|
+
* };
|
|
44
|
+
* ```
|
|
45
45
|
*/
|
|
46
46
|
|
|
47
|
-
/**
|
|
48
|
-
* 模板分类枚举
|
|
49
|
-
*
|
|
50
|
-
* @enum TemplateCategory
|
|
51
|
-
* @property {string} BUSINESS - 业务相关(批次号、订单号等)
|
|
52
|
-
* @property {string} COMMON - 通用模式(邮箱、电话等)
|
|
53
|
-
* @property {string} DATE_TIME - 日期时间格式
|
|
54
|
-
* @property {string} NUMBER - 数字格式(整数、小数、科学计数法等)
|
|
55
|
-
* @property {string} TEXT - 文本格式(中文、英文、特殊字符等)
|
|
56
|
-
* @property {string} VALIDATION - 数据验证(长度、范围等)
|
|
57
|
-
* @property {string} EXTRACTION - 数据提取(提取特定部分)
|
|
58
|
-
* @property {string} CUSTOM - 用户自定义
|
|
59
|
-
*
|
|
60
|
-
* @example
|
|
61
|
-
* ```typescript
|
|
62
|
-
* // 按分类过滤模板
|
|
63
|
-
* const businessTemplates = allTemplates.filter(
|
|
64
|
-
* t => t.category === TemplateCategory.BUSINESS
|
|
65
|
-
* );
|
|
66
|
-
*
|
|
67
|
-
* // 获取分类显示名称
|
|
68
|
-
* const categoryNames = {
|
|
69
|
-
* [TemplateCategory.BUSINESS]: '业务模板',
|
|
70
|
-
* [TemplateCategory.COMMON]: '通用模板',
|
|
71
|
-
* [TemplateCategory.DATE_TIME]: '日期时间',
|
|
72
|
-
* [TemplateCategory.NUMBER]: '数字格式',
|
|
73
|
-
* [TemplateCategory.TEXT]: '文本格式',
|
|
74
|
-
* [TemplateCategory.VALIDATION]: '数据验证',
|
|
75
|
-
* [TemplateCategory.EXTRACTION]: '数据提取',
|
|
76
|
-
* [TemplateCategory.CUSTOM]: '自定义'
|
|
77
|
-
* };
|
|
78
|
-
* ```
|
|
47
|
+
/**
|
|
48
|
+
* 模板分类枚举
|
|
49
|
+
*
|
|
50
|
+
* @enum TemplateCategory
|
|
51
|
+
* @property {string} BUSINESS - 业务相关(批次号、订单号等)
|
|
52
|
+
* @property {string} COMMON - 通用模式(邮箱、电话等)
|
|
53
|
+
* @property {string} DATE_TIME - 日期时间格式
|
|
54
|
+
* @property {string} NUMBER - 数字格式(整数、小数、科学计数法等)
|
|
55
|
+
* @property {string} TEXT - 文本格式(中文、英文、特殊字符等)
|
|
56
|
+
* @property {string} VALIDATION - 数据验证(长度、范围等)
|
|
57
|
+
* @property {string} EXTRACTION - 数据提取(提取特定部分)
|
|
58
|
+
* @property {string} CUSTOM - 用户自定义
|
|
59
|
+
*
|
|
60
|
+
* @example
|
|
61
|
+
* ```typescript
|
|
62
|
+
* // 按分类过滤模板
|
|
63
|
+
* const businessTemplates = allTemplates.filter(
|
|
64
|
+
* t => t.category === TemplateCategory.BUSINESS
|
|
65
|
+
* );
|
|
66
|
+
*
|
|
67
|
+
* // 获取分类显示名称
|
|
68
|
+
* const categoryNames = {
|
|
69
|
+
* [TemplateCategory.BUSINESS]: '业务模板',
|
|
70
|
+
* [TemplateCategory.COMMON]: '通用模板',
|
|
71
|
+
* [TemplateCategory.DATE_TIME]: '日期时间',
|
|
72
|
+
* [TemplateCategory.NUMBER]: '数字格式',
|
|
73
|
+
* [TemplateCategory.TEXT]: '文本格式',
|
|
74
|
+
* [TemplateCategory.VALIDATION]: '数据验证',
|
|
75
|
+
* [TemplateCategory.EXTRACTION]: '数据提取',
|
|
76
|
+
* [TemplateCategory.CUSTOM]: '自定义'
|
|
77
|
+
* };
|
|
78
|
+
* ```
|
|
79
79
|
*/
|
|
80
80
|
export var TemplateCategory = /*#__PURE__*/function (TemplateCategory) {
|
|
81
81
|
TemplateCategory["BUSINESS"] = "business";
|
|
@@ -1,47 +1,47 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 正则表达式复杂度分析器
|
|
3
|
-
*
|
|
4
|
-
* @module RegexEditor/validation/complexity
|
|
5
|
-
* @description 分析正则表达式的复杂度,评估性能风险并提供优化建议
|
|
6
|
-
*
|
|
7
|
-
* @remarks
|
|
8
|
-
* 该模块通过遍历 AST 来统计以下复杂度指标:
|
|
9
|
-
* - 节点总数
|
|
10
|
-
* - 最大嵌套深度
|
|
11
|
-
* - 分支数量(alternation)
|
|
12
|
-
* - 量词数量(quantifier)
|
|
13
|
-
* - 捕获组数量
|
|
14
|
-
* - 字符类数量
|
|
15
|
-
*
|
|
16
|
-
* 基于这些指标计算:
|
|
17
|
-
* - 回溯风险等级(low/medium/high)
|
|
18
|
-
* - 性能评分(0-100分)
|
|
19
|
-
* - 优化建议列表
|
|
1
|
+
/**
|
|
2
|
+
* 正则表达式复杂度分析器
|
|
3
|
+
*
|
|
4
|
+
* @module RegexEditor/validation/complexity
|
|
5
|
+
* @description 分析正则表达式的复杂度,评估性能风险并提供优化建议
|
|
6
|
+
*
|
|
7
|
+
* @remarks
|
|
8
|
+
* 该模块通过遍历 AST 来统计以下复杂度指标:
|
|
9
|
+
* - 节点总数
|
|
10
|
+
* - 最大嵌套深度
|
|
11
|
+
* - 分支数量(alternation)
|
|
12
|
+
* - 量词数量(quantifier)
|
|
13
|
+
* - 捕获组数量
|
|
14
|
+
* - 字符类数量
|
|
15
|
+
*
|
|
16
|
+
* 基于这些指标计算:
|
|
17
|
+
* - 回溯风险等级(low/medium/high)
|
|
18
|
+
* - 性能评分(0-100分)
|
|
19
|
+
* - 优化建议列表
|
|
20
20
|
*/
|
|
21
21
|
|
|
22
22
|
import { traverseAST } from "./parser";
|
|
23
|
-
/**
|
|
24
|
-
* 分析正则表达式复杂度
|
|
25
|
-
*
|
|
26
|
-
* @param ast - 正则表达式的抽象语法树
|
|
27
|
-
* @returns {ComplexityMetrics} 复杂度指标
|
|
28
|
-
*
|
|
29
|
-
* @example
|
|
30
|
-
* ```typescript
|
|
31
|
-
* const result = parseRegex('(a+)+b');
|
|
32
|
-
* const metrics = analyzeComplexity(result.ast!);
|
|
33
|
-
*
|
|
34
|
-
* if (metrics.backtrackingRisk === 'high') {
|
|
35
|
-
* console.warn('警告: 高回溯风险');
|
|
36
|
-
* console.log('建议:', metrics.suggestions);
|
|
37
|
-
* }
|
|
38
|
-
*
|
|
39
|
-
* console.log('性能评分:', metrics.performanceScore);
|
|
40
|
-
* ```
|
|
23
|
+
/**
|
|
24
|
+
* 分析正则表达式复杂度
|
|
25
|
+
*
|
|
26
|
+
* @param ast - 正则表达式的抽象语法树
|
|
27
|
+
* @returns {ComplexityMetrics} 复杂度指标
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```typescript
|
|
31
|
+
* const result = parseRegex('(a+)+b');
|
|
32
|
+
* const metrics = analyzeComplexity(result.ast!);
|
|
33
|
+
*
|
|
34
|
+
* if (metrics.backtrackingRisk === 'high') {
|
|
35
|
+
* console.warn('警告: 高回溯风险');
|
|
36
|
+
* console.log('建议:', metrics.suggestions);
|
|
37
|
+
* }
|
|
38
|
+
*
|
|
39
|
+
* console.log('性能评分:', metrics.performanceScore);
|
|
40
|
+
* ```
|
|
41
41
|
*/
|
|
42
|
-
/**
|
|
43
|
-
* 计算节点深度
|
|
44
|
-
* 通过递归遍历 parentPath 计算从根节点到当前节点的深度
|
|
42
|
+
/**
|
|
43
|
+
* 计算节点深度
|
|
44
|
+
* 通过递归遍历 parentPath 计算从根节点到当前节点的深度
|
|
45
45
|
*/
|
|
46
46
|
var calculateDepth = function calculateDepth(path) {
|
|
47
47
|
var depth = 1;
|
|
@@ -1,36 +1,36 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 正则表达式解析器
|
|
3
|
-
*
|
|
4
|
-
* @module RegexEditor/validation/parser
|
|
5
|
-
* @description 基于 regexp-tree 的正则表达式解析器,提供 AST 解析和遍历功能
|
|
6
|
-
*
|
|
7
|
-
* @remarks
|
|
8
|
-
* 该模块封装了 regexp-tree 库,提供类型安全的解析和遍历功能。
|
|
9
|
-
* 主要功能:
|
|
10
|
-
* - 将正则表达式字符串解析为抽象语法树(AST)
|
|
11
|
-
* - 统一的错误处理和转换
|
|
12
|
-
* - AST 节点遍历工具
|
|
13
|
-
*
|
|
14
|
-
* @see https://github.com/DmitrySoshnikov/regexp-tree
|
|
1
|
+
/**
|
|
2
|
+
* 正则表达式解析器
|
|
3
|
+
*
|
|
4
|
+
* @module RegexEditor/validation/parser
|
|
5
|
+
* @description 基于 regexp-tree 的正则表达式解析器,提供 AST 解析和遍历功能
|
|
6
|
+
*
|
|
7
|
+
* @remarks
|
|
8
|
+
* 该模块封装了 regexp-tree 库,提供类型安全的解析和遍历功能。
|
|
9
|
+
* 主要功能:
|
|
10
|
+
* - 将正则表达式字符串解析为抽象语法树(AST)
|
|
11
|
+
* - 统一的错误处理和转换
|
|
12
|
+
* - AST 节点遍历工具
|
|
13
|
+
*
|
|
14
|
+
* @see https://github.com/DmitrySoshnikov/regexp-tree
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
17
|
import { parse, traverse } from 'regexp-tree';
|
|
18
|
-
/**
|
|
19
|
-
* 解析正则表达式
|
|
20
|
-
*
|
|
21
|
-
* @param pattern - 正则表达式字符串
|
|
22
|
-
* @param flags - 可选的正则表达式标志(g, i, m, s, u, y)
|
|
23
|
-
* @returns {ParseResult} 解析结果,包含 AST 或错误信息
|
|
24
|
-
*
|
|
25
|
-
* @example
|
|
26
|
-
* ```typescript
|
|
27
|
-
* const result = parseRegex('^LOT\\d{6}$');
|
|
28
|
-
* if (result.success) {
|
|
29
|
-
* console.log('AST:', result.ast);
|
|
30
|
-
* } else {
|
|
31
|
-
* console.error('Error:', result.error);
|
|
32
|
-
* }
|
|
33
|
-
* ```
|
|
18
|
+
/**
|
|
19
|
+
* 解析正则表达式
|
|
20
|
+
*
|
|
21
|
+
* @param pattern - 正则表达式字符串
|
|
22
|
+
* @param flags - 可选的正则表达式标志(g, i, m, s, u, y)
|
|
23
|
+
* @returns {ParseResult} 解析结果,包含 AST 或错误信息
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```typescript
|
|
27
|
+
* const result = parseRegex('^LOT\\d{6}$');
|
|
28
|
+
* if (result.success) {
|
|
29
|
+
* console.log('AST:', result.ast);
|
|
30
|
+
* } else {
|
|
31
|
+
* console.error('Error:', result.error);
|
|
32
|
+
* }
|
|
33
|
+
* ```
|
|
34
34
|
*/
|
|
35
35
|
export var parseRegex = function parseRegex(pattern, flags) {
|
|
36
36
|
try {
|
|
@@ -91,23 +91,23 @@ export var parseRegex = function parseRegex(pattern, flags) {
|
|
|
91
91
|
}
|
|
92
92
|
};
|
|
93
93
|
|
|
94
|
-
/**
|
|
95
|
-
* 遍历 AST 节点
|
|
96
|
-
*
|
|
97
|
-
* @param ast - 抽象语法树节点
|
|
98
|
-
* @param handlers - 节点类型处理器映射
|
|
99
|
-
*
|
|
100
|
-
* @example
|
|
101
|
-
* ```typescript
|
|
102
|
-
* const result = parseRegex('(\\d+)');
|
|
103
|
-
* const groups: any[] = [];
|
|
104
|
-
*
|
|
105
|
-
* traverseAST(result.ast!, {
|
|
106
|
-
* Group(path) {
|
|
107
|
-
* groups.push(path.node);
|
|
108
|
-
* }
|
|
109
|
-
* });
|
|
110
|
-
* ```
|
|
94
|
+
/**
|
|
95
|
+
* 遍历 AST 节点
|
|
96
|
+
*
|
|
97
|
+
* @param ast - 抽象语法树节点
|
|
98
|
+
* @param handlers - 节点类型处理器映射
|
|
99
|
+
*
|
|
100
|
+
* @example
|
|
101
|
+
* ```typescript
|
|
102
|
+
* const result = parseRegex('(\\d+)');
|
|
103
|
+
* const groups: any[] = [];
|
|
104
|
+
*
|
|
105
|
+
* traverseAST(result.ast!, {
|
|
106
|
+
* Group(path) {
|
|
107
|
+
* groups.push(path.node);
|
|
108
|
+
* }
|
|
109
|
+
* });
|
|
110
|
+
* ```
|
|
111
111
|
*/
|
|
112
112
|
export var traverseAST = function traverseAST(ast, handlers) {
|
|
113
113
|
// 安全处理空 AST
|
|
@@ -1,39 +1,39 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 正则表达式语法验证器
|
|
3
|
-
*
|
|
4
|
-
* @module RegexEditor/validation/validator
|
|
5
|
-
* @description 检测正则表达式的常见语法错误和安全问题
|
|
6
|
-
*
|
|
7
|
-
* @remarks
|
|
8
|
-
* 该模块基于 regexp-tree AST 提供以下验证规则:
|
|
9
|
-
* 1. 空捕获组检测 - 检测 () 并建议使用 (?:)
|
|
10
|
-
* 2. 无效量词检测 - 检测 {min,max} 中 min > max
|
|
11
|
-
* 3. 嵌套量词检测 - 检测 (a+)+ 等导致灾难性回溯的模式
|
|
12
|
-
* 4. 未闭合组检测 - 通过解析错误自动检测
|
|
13
|
-
*
|
|
14
|
-
* @see {@link parseRegex} 用于解析正则表达式
|
|
1
|
+
/**
|
|
2
|
+
* 正则表达式语法验证器
|
|
3
|
+
*
|
|
4
|
+
* @module RegexEditor/validation/validator
|
|
5
|
+
* @description 检测正则表达式的常见语法错误和安全问题
|
|
6
|
+
*
|
|
7
|
+
* @remarks
|
|
8
|
+
* 该模块基于 regexp-tree AST 提供以下验证规则:
|
|
9
|
+
* 1. 空捕获组检测 - 检测 () 并建议使用 (?:)
|
|
10
|
+
* 2. 无效量词检测 - 检测 {min,max} 中 min > max
|
|
11
|
+
* 3. 嵌套量词检测 - 检测 (a+)+ 等导致灾难性回溯的模式
|
|
12
|
+
* 4. 未闭合组检测 - 通过解析错误自动检测
|
|
13
|
+
*
|
|
14
|
+
* @see {@link parseRegex} 用于解析正则表达式
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
17
|
import { traverseAST } from "./parser";
|
|
18
18
|
import { parseRegex } from "./parser";
|
|
19
|
-
/**
|
|
20
|
-
* 验证正则表达式 AST
|
|
21
|
-
*
|
|
22
|
-
* @param ast - 抽象语法树节点
|
|
23
|
-
* @returns {RegexError[]} 错误和警告列表
|
|
24
|
-
*
|
|
25
|
-
* @remarks
|
|
26
|
-
* 该函数遍历 AST 节点,应用以下验证规则:
|
|
27
|
-
* - 空捕获组 (警告)
|
|
28
|
-
* - 无效量词 (错误)
|
|
29
|
-
* - 嵌套量词/灾难性回溯 (错误)
|
|
30
|
-
*
|
|
31
|
-
* @example
|
|
32
|
-
* ```typescript
|
|
33
|
-
* const result = parseRegex('()test');
|
|
34
|
-
* const errors = validateRegex(result.ast!);
|
|
35
|
-
* console.log(errors); // [{ type: 'empty_group', severity: 'warning', ... }]
|
|
36
|
-
* ```
|
|
19
|
+
/**
|
|
20
|
+
* 验证正则表达式 AST
|
|
21
|
+
*
|
|
22
|
+
* @param ast - 抽象语法树节点
|
|
23
|
+
* @returns {RegexError[]} 错误和警告列表
|
|
24
|
+
*
|
|
25
|
+
* @remarks
|
|
26
|
+
* 该函数遍历 AST 节点,应用以下验证规则:
|
|
27
|
+
* - 空捕获组 (警告)
|
|
28
|
+
* - 无效量词 (错误)
|
|
29
|
+
* - 嵌套量词/灾难性回溯 (错误)
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* ```typescript
|
|
33
|
+
* const result = parseRegex('()test');
|
|
34
|
+
* const errors = validateRegex(result.ast!);
|
|
35
|
+
* console.log(errors); // [{ type: 'empty_group', severity: 'warning', ... }]
|
|
36
|
+
* ```
|
|
37
37
|
*/
|
|
38
38
|
export var validateRegex = function validateRegex(ast) {
|
|
39
39
|
var errors = [];
|
|
@@ -151,28 +151,28 @@ export var validateRegex = function validateRegex(ast) {
|
|
|
151
151
|
return errors;
|
|
152
152
|
};
|
|
153
153
|
|
|
154
|
-
/**
|
|
155
|
-
* 整合验证流程: 解析 + 语法验证
|
|
156
|
-
*
|
|
157
|
-
* @param pattern - 正则表达式字符串
|
|
158
|
-
* @param flags - 可选的正则表达式标志
|
|
159
|
-
* @returns {ValidationResult} 完整的验证结果
|
|
160
|
-
*
|
|
161
|
-
* @remarks
|
|
162
|
-
* 该函数整合了以下步骤:
|
|
163
|
-
* 1. 解析正则表达式 {@link parseRegex}
|
|
164
|
-
* 2. 语法验证 {@link validateRegex}
|
|
165
|
-
* 3. 分类错误、警告和信息
|
|
166
|
-
*
|
|
167
|
-
* @example
|
|
168
|
-
* ```typescript
|
|
169
|
-
* const result = validatePattern('^LOT\\d{6}$');
|
|
170
|
-
* if (result.valid) {
|
|
171
|
-
* console.log('验证通过');
|
|
172
|
-
* } else {
|
|
173
|
-
* console.error('错误:', result.errors);
|
|
174
|
-
* }
|
|
175
|
-
* ```
|
|
154
|
+
/**
|
|
155
|
+
* 整合验证流程: 解析 + 语法验证
|
|
156
|
+
*
|
|
157
|
+
* @param pattern - 正则表达式字符串
|
|
158
|
+
* @param flags - 可选的正则表达式标志
|
|
159
|
+
* @returns {ValidationResult} 完整的验证结果
|
|
160
|
+
*
|
|
161
|
+
* @remarks
|
|
162
|
+
* 该函数整合了以下步骤:
|
|
163
|
+
* 1. 解析正则表达式 {@link parseRegex}
|
|
164
|
+
* 2. 语法验证 {@link validateRegex}
|
|
165
|
+
* 3. 分类错误、警告和信息
|
|
166
|
+
*
|
|
167
|
+
* @example
|
|
168
|
+
* ```typescript
|
|
169
|
+
* const result = validatePattern('^LOT\\d{6}$');
|
|
170
|
+
* if (result.valid) {
|
|
171
|
+
* console.log('验证通过');
|
|
172
|
+
* } else {
|
|
173
|
+
* console.error('错误:', result.errors);
|
|
174
|
+
* }
|
|
175
|
+
* ```
|
|
176
176
|
*/
|
|
177
177
|
export var validatePattern = function validatePattern(pattern, flags) {
|
|
178
178
|
// 1. 解析正则表达式
|