@lcap/nasl 1.0.0-alpha.7 → 1.0.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/out/automate/engine/index.d.ts +3 -0
- package/out/automate/engine/index.js +513 -0
- package/out/automate/engine/index.js.map +1 -0
- package/out/automate/engine/utils.d.ts +24 -0
- package/out/automate/engine/utils.js +363 -0
- package/out/automate/engine/utils.js.map +1 -0
- package/out/common/BaseNode.d.ts +20 -0
- package/out/common/BaseNode.js +219 -81
- package/out/common/BaseNode.js.map +1 -1
- package/out/concepts/App__.d.ts +18 -1
- package/out/concepts/App__.js +75 -35
- package/out/concepts/App__.js.map +1 -1
- package/out/concepts/Argument__.d.ts +5 -1
- package/out/concepts/Argument__.js +21 -3
- package/out/concepts/Argument__.js.map +1 -1
- package/out/concepts/Assignee__.d.ts +190 -0
- package/out/concepts/Assignee__.js +264 -0
- package/out/concepts/Assignee__.js.map +1 -0
- package/out/concepts/Assignment__.js +5 -0
- package/out/concepts/Assignment__.js.map +1 -1
- package/out/concepts/BinaryExpression__.js +8 -7
- package/out/concepts/BinaryExpression__.js.map +1 -1
- package/out/concepts/BindAttribute__.d.ts +19 -0
- package/out/concepts/BindAttribute__.js +54 -9
- package/out/concepts/BindAttribute__.js.map +1 -1
- package/out/concepts/BindDirective__.js +22 -2
- package/out/concepts/BindDirective__.js.map +1 -1
- package/out/concepts/BindEvent__.d.ts +2 -2
- package/out/concepts/BindEvent__.js +67 -34
- package/out/concepts/BindEvent__.js.map +1 -1
- package/out/concepts/BooleanLiteral__.d.ts +2 -0
- package/out/concepts/BooleanLiteral__.js +10 -0
- package/out/concepts/BooleanLiteral__.js.map +1 -1
- package/out/concepts/CallFunction__.js +41 -23
- package/out/concepts/CallFunction__.js.map +1 -1
- package/out/concepts/CallInterface__.d.ts +5 -0
- package/out/concepts/CallInterface__.js +238 -31
- package/out/concepts/CallInterface__.js.map +1 -1
- package/out/concepts/CallLogic__.d.ts +4 -4
- package/out/concepts/CallLogic__.js +110 -53
- package/out/concepts/CallLogic__.js.map +1 -1
- package/out/concepts/CallQueryComponent__.d.ts +7 -1
- package/out/concepts/CallQueryComponent__.js +44 -25
- package/out/concepts/CallQueryComponent__.js.map +1 -1
- package/out/concepts/Comment__.js +6 -2
- package/out/concepts/Comment__.js.map +1 -1
- package/out/concepts/CompletionProperty__.d.ts +3 -1
- package/out/concepts/CompletionProperty__.js +2 -0
- package/out/concepts/CompletionProperty__.js.map +1 -1
- package/out/concepts/ConfigGroup__.js +2 -2
- package/out/concepts/ConfigGroup__.js.map +1 -1
- package/out/concepts/ConfigProperty__.js +2 -2
- package/out/concepts/ConfigProperty__.js.map +1 -1
- package/out/concepts/Configuration__.js +2 -2
- package/out/concepts/Configuration__.js.map +1 -1
- package/out/concepts/Constant__.d.ts +1 -0
- package/out/concepts/Constant__.js +14 -0
- package/out/concepts/Constant__.js.map +1 -1
- package/out/concepts/Destination__.d.ts +12 -0
- package/out/concepts/Destination__.js +94 -18
- package/out/concepts/Destination__.js.map +1 -1
- package/out/concepts/End__.js +9 -1
- package/out/concepts/End__.js.map +1 -1
- package/out/concepts/EntityProperty__.d.ts +11 -0
- package/out/concepts/EntityProperty__.js +73 -5
- package/out/concepts/EntityProperty__.js.map +1 -1
- package/out/concepts/Entity__.d.ts +4 -1
- package/out/concepts/Entity__.js +37 -15
- package/out/concepts/Entity__.js.map +1 -1
- package/out/concepts/Enum__.d.ts +4 -0
- package/out/concepts/Enum__.js +18 -10
- package/out/concepts/Enum__.js.map +1 -1
- package/out/concepts/Event__.js +2 -2
- package/out/concepts/Event__.js.map +1 -1
- package/out/concepts/ForEachStatement__.js +9 -13
- package/out/concepts/ForEachStatement__.js.map +1 -1
- package/out/concepts/Function__.js +9 -9
- package/out/concepts/Function__.js.map +1 -1
- package/out/concepts/Identifier__.d.ts +3 -0
- package/out/concepts/Identifier__.js +76 -29
- package/out/concepts/Identifier__.js.map +1 -1
- package/out/concepts/IfStatement__.js +4 -4
- package/out/concepts/IfStatement__.js.map +1 -1
- package/out/concepts/InterfaceParam__.d.ts +6 -4
- package/out/concepts/InterfaceParam__.js +52 -19
- package/out/concepts/InterfaceParam__.js.map +1 -1
- package/out/concepts/Interface__.d.ts +42 -30
- package/out/concepts/Interface__.js +131 -15
- package/out/concepts/Interface__.js.map +1 -1
- package/out/concepts/JSBlock__.d.ts +1 -0
- package/out/concepts/JSBlock__.js +3 -0
- package/out/concepts/JSBlock__.js.map +1 -1
- package/out/concepts/LogicItem__.d.ts +2 -1
- package/out/concepts/LogicItem__.js +14 -0
- package/out/concepts/LogicItem__.js.map +1 -1
- package/out/concepts/Logic__.d.ts +16 -1
- package/out/concepts/Logic__.js +176 -33
- package/out/concepts/Logic__.js.map +1 -1
- package/out/concepts/MemberExpression__.d.ts +2 -0
- package/out/concepts/MemberExpression__.js +49 -12
- package/out/concepts/MemberExpression__.js.map +1 -1
- package/out/concepts/Module__.d.ts +126 -120
- package/out/concepts/Module__.js +28 -18
- package/out/concepts/Module__.js.map +1 -1
- package/out/concepts/Namespace__.d.ts +5 -1
- package/out/concepts/Namespace__.js +36 -25
- package/out/concepts/Namespace__.js.map +1 -1
- package/out/concepts/NullLiteral__.d.ts +3 -0
- package/out/concepts/NullLiteral__.js +11 -1
- package/out/concepts/NullLiteral__.js.map +1 -1
- package/out/concepts/NumericLiteral__.d.ts +1 -1
- package/out/concepts/NumericLiteral__.js +17 -6
- package/out/concepts/NumericLiteral__.js.map +1 -1
- package/out/concepts/Param__.d.ts +7 -3
- package/out/concepts/Param__.js +57 -28
- package/out/concepts/Param__.js.map +1 -1
- package/out/concepts/ProcessComponent__.js +4 -4
- package/out/concepts/ProcessComponent__.js.map +1 -1
- package/out/concepts/ProcessElement__.d.ts +0 -4
- package/out/concepts/ProcessElement__.js +112 -49
- package/out/concepts/ProcessElement__.js.map +1 -1
- package/out/concepts/ProcessOutcome__.js +1 -1
- package/out/concepts/ProcessOutcome__.js.map +1 -1
- package/out/concepts/Process__.d.ts +7 -1
- package/out/concepts/Process__.js +77 -81
- package/out/concepts/Process__.js.map +1 -1
- package/out/concepts/QueryAggregateExpression__.js +1 -1
- package/out/concepts/QueryAggregateExpression__.js.map +1 -1
- package/out/concepts/QueryFromExpression__.js +2 -2
- package/out/concepts/QueryFromExpression__.js.map +1 -1
- package/out/concepts/QueryJoinExpression__.js +4 -4
- package/out/concepts/QueryJoinExpression__.js.map +1 -1
- package/out/concepts/QueryLimitExpression__.js +3 -3
- package/out/concepts/QueryLimitExpression__.js.map +1 -1
- package/out/concepts/QuerySelectExpression__.js +2 -2
- package/out/concepts/QuerySelectExpression__.js.map +1 -1
- package/out/concepts/Return__.d.ts +4 -1
- package/out/concepts/Return__.js +67 -21
- package/out/concepts/Return__.js.map +1 -1
- package/out/concepts/Role__.d.ts +4 -0
- package/out/concepts/Role__.js +13 -4
- package/out/concepts/Role__.js.map +1 -1
- package/out/concepts/SqlQueryComponent__.js +2 -2
- package/out/concepts/SqlQueryComponent__.js.map +1 -1
- package/out/concepts/StringLiteral__.d.ts +1 -1
- package/out/concepts/StringLiteral__.js +21 -31
- package/out/concepts/StringLiteral__.js.map +1 -1
- package/out/concepts/StructureProperty__.d.ts +5 -4
- package/out/concepts/StructureProperty__.js +55 -26
- package/out/concepts/StructureProperty__.js.map +1 -1
- package/out/concepts/Structure__.d.ts +44 -30
- package/out/concepts/Structure__.js +42 -10
- package/out/concepts/Structure__.js.map +1 -1
- package/out/concepts/SwitchCase__.js +4 -4
- package/out/concepts/SwitchCase__.js.map +1 -1
- package/out/concepts/SwitchStatement__.js +2 -2
- package/out/concepts/SwitchStatement__.js.map +1 -1
- package/out/concepts/TypeAnnotation__.d.ts +5 -5
- package/out/concepts/TypeAnnotation__.js +74 -20
- package/out/concepts/TypeAnnotation__.js.map +1 -1
- package/out/concepts/UnaryExpression__.js +10 -8
- package/out/concepts/UnaryExpression__.js.map +1 -1
- package/out/concepts/Unparsed__.js +1 -1
- package/out/concepts/Unparsed__.js.map +1 -1
- package/out/concepts/ValidationRule__.d.ts +1 -0
- package/out/concepts/ValidationRule__.js +48 -13
- package/out/concepts/ValidationRule__.js.map +1 -1
- package/out/concepts/Variable__.d.ts +10 -1
- package/out/concepts/Variable__.js +70 -18
- package/out/concepts/Variable__.js.map +1 -1
- package/out/concepts/ViewComponent__.js +10 -10
- package/out/concepts/ViewComponent__.js.map +1 -1
- package/out/concepts/ViewElement__.d.ts +17 -11
- package/out/concepts/ViewElement__.js +299 -201
- package/out/concepts/ViewElement__.js.map +1 -1
- package/out/concepts/View__.d.ts +12 -13
- package/out/concepts/View__.js +106 -103
- package/out/concepts/View__.js.map +1 -1
- package/out/concepts/WhileStatement__.js +3 -3
- package/out/concepts/WhileStatement__.js.map +1 -1
- package/out/concepts/basics/stdlib/index.js +4 -1
- package/out/concepts/basics/stdlib/index.js.map +1 -1
- package/out/concepts/basics/stdlib/{nasl.validate.d.ts → nasl.auth.d.ts} +0 -0
- package/out/concepts/basics/stdlib/nasl.auth.js +30 -0
- package/out/concepts/basics/stdlib/nasl.auth.js.map +1 -0
- package/out/concepts/basics/stdlib/nasl.browser copy.d.ts +3 -0
- package/out/concepts/basics/stdlib/nasl.browser copy.js +70 -0
- package/out/concepts/basics/stdlib/nasl.browser copy.js.map +1 -0
- package/out/concepts/basics/stdlib/nasl.browser.d.ts +3 -0
- package/out/concepts/basics/stdlib/nasl.browser.js +41 -0
- package/out/concepts/basics/stdlib/nasl.browser.js.map +1 -0
- package/out/concepts/basics/stdlib/nasl.configuration.d.ts +3 -0
- package/out/concepts/basics/stdlib/nasl.configuration.js +25 -0
- package/out/concepts/basics/stdlib/nasl.configuration.js.map +1 -0
- package/out/concepts/basics/stdlib/nasl.ui.js +20 -0
- package/out/concepts/basics/stdlib/nasl.ui.js.map +1 -1
- package/out/concepts/basics/stdlib/nasl.util.js +149 -13
- package/out/concepts/basics/stdlib/nasl.util.js.map +1 -1
- package/out/concepts/basics/stdlib/nasl.validation.js +54 -20
- package/out/concepts/basics/stdlib/nasl.validation.js.map +1 -1
- package/out/concepts/basics/types/coreTypeList.js +11 -10
- package/out/concepts/basics/types/coreTypeList.js.map +1 -1
- package/out/concepts/index__.d.ts +1 -0
- package/out/concepts/index__.js +1 -0
- package/out/concepts/index__.js.map +1 -1
- package/out/config.d.ts +1 -2
- package/out/config.js +1 -2
- package/out/config.js.map +1 -1
- package/out/enums/KEYWORDS.d.ts +3 -0
- package/out/enums/KEYWORDS.js +1208 -0
- package/out/enums/KEYWORDS.js.map +1 -0
- package/out/enums/LEVEL_NAME_MAP.d.ts +26 -0
- package/out/enums/LEVEL_NAME_MAP.js +30 -0
- package/out/enums/LEVEL_NAME_MAP.js.map +1 -0
- package/out/eventBus.d.ts +3 -0
- package/out/eventBus.js +7 -0
- package/out/eventBus.js.map +1 -0
- package/out/generator/genBundleFiles.d.ts +7 -2
- package/out/generator/genBundleFiles.js +168 -27
- package/out/generator/genBundleFiles.js.map +1 -1
- package/out/generator/genMetaData.d.ts +20 -20
- package/out/generator/genMetaData.js +50 -15
- package/out/generator/genMetaData.js.map +1 -1
- package/out/index.d.ts +2 -0
- package/out/index.js +2 -0
- package/out/index.js.map +1 -1
- package/out/manager/diagnostic.d.ts +1 -1
- package/out/server/createUiTs.d.ts +1 -0
- package/out/server/createUiTs.js +49 -5
- package/out/server/createUiTs.js.map +1 -1
- package/out/server/entity2LogicNamespace.js +38 -23
- package/out/server/entity2LogicNamespace.js.map +1 -1
- package/out/server/getExtensionModules.js +2 -0
- package/out/server/getExtensionModules.js.map +1 -1
- package/out/server/getFunctions.d.ts +1 -0
- package/out/server/getFunctions.js +7 -1
- package/out/server/getFunctions.js.map +1 -1
- package/out/server/getLogics.js +63 -18
- package/out/server/getLogics.js.map +1 -1
- package/out/server/getMemberIdentifier.d.ts +16 -1
- package/out/server/getMemberIdentifier.js +279 -36
- package/out/server/getMemberIdentifier.js.map +1 -1
- package/out/server/getProcesses.d.ts +6 -1
- package/out/server/getProcesses.js +243 -1
- package/out/server/getProcesses.js.map +1 -1
- package/out/server/getScope.d.ts +11 -0
- package/out/server/getScope.js +45 -0
- package/out/server/getScope.js.map +1 -0
- package/out/server/index.js +4 -0
- package/out/server/index.js.map +1 -1
- package/out/server/naslServer.d.ts +30 -53
- package/out/server/naslServer.js +682 -363
- package/out/server/naslServer.js.map +1 -1
- package/out/server/process2LogicNamespace.d.ts +10 -0
- package/out/server/process2LogicNamespace.js +29 -1
- package/out/server/process2LogicNamespace.js.map +1 -1
- package/out/server/translator.d.ts +22 -3
- package/out/server/translator.js +367 -123
- package/out/server/translator.js.map +1 -1
- package/out/service/creator/add.configs.d.ts +1 -0
- package/out/service/creator/add.configs.js +68 -0
- package/out/service/creator/add.configs.js.map +1 -0
- package/out/service/creator/errHandles.d.ts +18 -0
- package/out/service/creator/errHandles.js +60 -0
- package/out/service/creator/errHandles.js.map +1 -0
- package/out/service/creator/index.d.ts +1 -0
- package/out/service/creator/index.js +72 -0
- package/out/service/creator/index.js.map +1 -0
- package/out/service/storage/api.d.ts +18 -0
- package/out/service/storage/api.js +17 -0
- package/out/service/storage/api.js.map +1 -0
- package/out/service/storage/init.js +200 -37
- package/out/service/storage/init.js.map +1 -1
- package/out/service/storage/service.d.ts +2 -0
- package/out/service/storage/service.js +10 -0
- package/out/service/storage/service.js.map +1 -0
- package/out/service/storage/storagePoint.d.ts +1 -14
- package/out/service/storage/storagePoint.js +16 -16
- package/out/service/storage/storagePoint.js.map +1 -1
- package/out/templator/genCreateBlock.js +6 -6
- package/out/templator/genCreateBlock.js.map +1 -1
- package/out/templator/genCurdEditMultipleKeyBlock.js +13 -17
- package/out/templator/genCurdEditMultipleKeyBlock.js.map +1 -1
- package/out/templator/genCurdMultipleKeyBlock.js +11 -11
- package/out/templator/genCurdMultipleKeyBlock.js.map +1 -1
- package/out/templator/genEditTableBlock.js +5 -5
- package/out/templator/genEditTableBlock.js.map +1 -1
- package/out/templator/genEnumSelectBlock.js +2 -2
- package/out/templator/genEnumSelectBlock.js.map +1 -1
- package/out/templator/genGetBlock.js +5 -3
- package/out/templator/genGetBlock.js.map +1 -1
- package/out/templator/genGridViewBlock.d.ts +3 -1
- package/out/templator/genGridViewBlock.js +61 -6
- package/out/templator/genGridViewBlock.js.map +1 -1
- package/out/templator/genQueryComponent.d.ts +2 -0
- package/out/templator/genQueryComponent.js +27 -14
- package/out/templator/genQueryComponent.js.map +1 -1
- package/out/templator/genTableBlock.d.ts +1 -1
- package/out/templator/genTableBlock.js +4 -5
- package/out/templator/genTableBlock.js.map +1 -1
- package/out/templator/genUpdateBlock.js +9 -10
- package/out/templator/genUpdateBlock.js.map +1 -1
- package/out/templator/utils.d.ts +13 -4
- package/out/templator/utils.js +8 -4
- package/out/templator/utils.js.map +1 -1
- package/out/test/fixtures/env.js +0 -1
- package/out/test/fixtures/env.js.map +1 -1
- package/out/test/units/page/Element.spec.js +3 -3
- package/out/test/units/page/Element.spec.js.map +1 -1
- package/out/test/units/temp/temp.spec.js +1 -1
- package/out/test/units/temp/temp.spec.js.map +1 -1
- package/out/utils/index.d.ts +6 -0
- package/out/utils/index.js +20 -1
- package/out/utils/index.js.map +1 -1
- package/package.json +2 -1
- package/src/automate/engine/index.js +118 -38
- package/src/automate/engine/utils.js +49 -19
- package/src/common/BaseNode.ts +229 -81
- package/src/concepts/App__.ts +77 -37
- package/src/concepts/Argument__.ts +23 -3
- package/src/concepts/Assignee__.ts +437 -0
- package/src/concepts/Assignment__.ts +4 -1
- package/src/concepts/BinaryExpression__.ts +9 -7
- package/src/concepts/BindAttribute__.ts +68 -8
- package/src/concepts/BindDirective__.ts +21 -2
- package/src/concepts/BindEvent__.ts +67 -35
- package/src/concepts/BooleanLiteral__.ts +8 -0
- package/src/concepts/CallFunction__.ts +42 -25
- package/src/concepts/CallInterface__.ts +236 -26
- package/src/concepts/CallLogic__.ts +114 -86
- package/src/concepts/CallQueryComponent__.ts +35 -20
- package/src/concepts/Comment__.ts +6 -2
- package/src/concepts/CompletionProperty__.ts +5 -1
- package/src/concepts/ConfigGroup__.ts +2 -2
- package/src/concepts/ConfigProperty__.ts +2 -2
- package/src/concepts/Configuration__.ts +2 -2
- package/src/concepts/Constant__.ts +12 -0
- package/src/concepts/Destination__.ts +92 -20
- package/src/concepts/End__.ts +8 -1
- package/src/concepts/EntityProperty__.ts +69 -5
- package/src/concepts/Entity__.ts +40 -23
- package/src/concepts/Enum__.ts +16 -11
- package/src/concepts/Event__.ts +2 -2
- package/src/concepts/ForEachStatement__.ts +14 -19
- package/src/concepts/Function__.ts +9 -9
- package/src/concepts/Identifier__.ts +82 -33
- package/src/concepts/IfStatement__.ts +4 -4
- package/src/concepts/InterfaceParam__.ts +51 -21
- package/src/concepts/Interface__.ts +166 -46
- package/src/concepts/JSBlock__.ts +4 -0
- package/src/concepts/LogicItem__.ts +16 -1
- package/src/concepts/Logic__.ts +183 -36
- package/src/concepts/MemberExpression__.ts +57 -13
- package/src/concepts/Module__.ts +176 -140
- package/src/concepts/Namespace__.ts +37 -25
- package/src/concepts/NullLiteral__.ts +8 -1
- package/src/concepts/NumericLiteral__.ts +17 -6
- package/src/concepts/Param__.ts +58 -30
- package/src/concepts/ProcessComponent__.ts +4 -4
- package/src/concepts/ProcessElement__.ts +138 -39
- package/src/concepts/ProcessOutcome__.ts +1 -1
- package/src/concepts/Process__.ts +81 -94
- package/src/concepts/QueryAggregateExpression__.ts +1 -1
- package/src/concepts/QueryFromExpression__.ts +2 -2
- package/src/concepts/QueryJoinExpression__.ts +4 -4
- package/src/concepts/QueryLimitExpression__.ts +3 -12
- package/src/concepts/QuerySelectExpression__.ts +2 -2
- package/src/concepts/Return__.ts +62 -23
- package/src/concepts/Role__.ts +11 -4
- package/src/concepts/SqlQueryComponent__.ts +2 -2
- package/src/concepts/StringLiteral__.ts +20 -31
- package/src/concepts/StructureProperty__.ts +50 -25
- package/src/concepts/Structure__.ts +75 -41
- package/src/concepts/SwitchCase__.ts +4 -4
- package/src/concepts/SwitchStatement__.ts +2 -2
- package/src/concepts/TypeAnnotation__.ts +71 -18
- package/src/concepts/UnaryExpression__.ts +10 -8
- package/src/concepts/Unparsed__.ts +1 -1
- package/src/concepts/ValidationRule__.ts +44 -14
- package/src/concepts/Variable__.ts +69 -19
- package/src/concepts/ViewComponent__.ts +10 -10
- package/src/concepts/ViewElement__.ts +297 -199
- package/src/concepts/View__.ts +114 -107
- package/src/concepts/WhileStatement__.ts +4 -4
- package/src/concepts/basics/stdlib/index.ts +4 -2
- package/src/concepts/basics/stdlib/nasl.auth.ts +26 -0
- package/src/concepts/basics/stdlib/nasl.browser.ts +37 -0
- package/src/concepts/basics/stdlib/nasl.configuration.ts +21 -0
- package/src/concepts/basics/stdlib/nasl.ui.ts +20 -1
- package/src/concepts/basics/stdlib/nasl.util.ts +151 -13
- package/src/concepts/basics/stdlib/nasl.validation.ts +45 -11
- package/src/concepts/basics/types/coreTypeList.ts +11 -10
- package/src/concepts/index__.ts +1 -0
- package/src/config.ts +1 -2
- package/src/enums/KEYWORDS.ts +1206 -0
- package/src/{terms → enums}/LEVEL_NAME_MAP.ts +0 -0
- package/src/eventBus.ts +5 -0
- package/src/generator/genBundleFiles.ts +192 -40
- package/src/generator/genMetaData.ts +72 -21
- package/src/index.ts +2 -0
- package/src/manager/diagnostic.ts +1 -1
- package/src/server/createUiTs.ts +50 -8
- package/src/server/entity2LogicNamespace.ts +41 -25
- package/src/server/getExtensionModules.ts +2 -0
- package/src/server/getFunctions.ts +6 -0
- package/src/server/getLogics.ts +66 -19
- package/src/server/getMemberIdentifier.ts +276 -39
- package/src/server/getProcesses.ts +248 -4
- package/src/server/getScope.ts +50 -0
- package/src/server/index.ts +12 -1
- package/src/server/naslServer.ts +689 -389
- package/src/server/process2LogicNamespace.ts +30 -2
- package/src/server/translator.ts +423 -128
- package/src/service/config/index.js +1 -1
- package/src/service/creator/errHandles.js +5 -2
- package/src/service/creator/index.js +0 -6
- package/src/service/storage/api.js +14 -0
- package/src/service/storage/init.ts +204 -47
- package/src/service/storage/service.ts +6 -0
- package/src/service/storage/storagePoint.ts +16 -16
- package/src/templator/genCreateBlock.ts +6 -6
- package/src/templator/genCurdEditMultipleKeyBlock.ts +29 -30
- package/src/templator/genCurdMultipleKeyBlock.ts +11 -11
- package/src/templator/genEditTableBlock.ts +5 -5
- package/src/templator/genEnumSelectBlock.ts +2 -2
- package/src/templator/genGetBlock.ts +6 -8
- package/src/templator/genGridViewBlock.ts +59 -9
- package/src/templator/genQueryComponent.ts +39 -28
- package/src/templator/genTableBlock.ts +5 -9
- package/src/templator/genUpdateBlock.ts +9 -11
- package/src/templator/utils.ts +9 -6
- package/src/test/fixtures/env.ts +0 -2
- package/src/test/units/page/Element.spec.ts +3 -3
- package/src/test/units/temp/temp.spec.ts +1 -1
- package/src/utils/index.ts +19 -0
- package/out/concepts/basics/stdlib/nasl.validate.js +0 -527
- package/out/concepts/basics/stdlib/nasl.validate.js.map +0 -1
- package/out/data/Module.d.ts +0 -34
- package/out/data/Module.js +0 -53
- package/out/data/Module.js.map +0 -1
- package/src/automate/engine/index.d.ts +0 -3
package/src/server/naslServer.ts
CHANGED
|
@@ -36,10 +36,17 @@ import {
|
|
|
36
36
|
CallQueryComponent,
|
|
37
37
|
Role,
|
|
38
38
|
Configuration,
|
|
39
|
+
CallInterface,
|
|
40
|
+
Return,
|
|
41
|
+
ProcessElement,
|
|
42
|
+
NullLiteral,
|
|
43
|
+
Namespace,
|
|
44
|
+
Theme,
|
|
45
|
+
Variable,
|
|
39
46
|
} from '../concepts';
|
|
40
47
|
import { lsp2tspNumber, SourceMap, SourceMapItem, embeddedTSEmitter } from '../translator';
|
|
41
48
|
import axios from '../service/storage';
|
|
42
|
-
import {
|
|
49
|
+
import { translateDiagnosticMessage, naslNodeTranslateMessage, MinRange } from './translator';
|
|
43
50
|
import { EventPayload, invokeCommand, registerCommand } from '../common';
|
|
44
51
|
import { DiagnosticRecord, Diagnostic, default as diagnosticManager } from '../manager/diagnostic';
|
|
45
52
|
import formatUiTs from './createUiTs';
|
|
@@ -48,6 +55,8 @@ import { primitiveTypeList } from '../concepts/basics/types/coreTypeList';
|
|
|
48
55
|
const EmbeddedTSFileLineMap: { [name: string]: number } = {
|
|
49
56
|
Entity: 3,
|
|
50
57
|
};
|
|
58
|
+
// 要Check的文件
|
|
59
|
+
const filesToCheck: Set<string> = new Set();
|
|
51
60
|
|
|
52
61
|
interface FileNode extends BaseNode {
|
|
53
62
|
getEmbeddedFilePath(name?: string): string;
|
|
@@ -58,14 +67,11 @@ interface FileNode extends BaseNode {
|
|
|
58
67
|
};
|
|
59
68
|
}
|
|
60
69
|
|
|
61
|
-
interface
|
|
70
|
+
interface SetNameNode extends BaseNode {
|
|
62
71
|
setName(name: string): any;
|
|
63
72
|
[propname: string]: any;
|
|
64
73
|
}
|
|
65
|
-
|
|
66
|
-
[propName: string]: QuoteNode[];
|
|
67
|
-
}
|
|
68
|
-
export { transformType, translateDiagnosticMessage };
|
|
74
|
+
|
|
69
75
|
const worker = new Worker('/ts-worker.js');
|
|
70
76
|
const messager = new Messager({
|
|
71
77
|
protocol: 'ts-worker',
|
|
@@ -80,29 +86,17 @@ const messager = new Messager({
|
|
|
80
86
|
},
|
|
81
87
|
});
|
|
82
88
|
|
|
83
|
-
interface MinRange {
|
|
84
|
-
node: BaseNode;
|
|
85
|
-
item: SourceMapItem;
|
|
86
|
-
}
|
|
87
89
|
interface reNameMinRange extends MinRange {
|
|
88
90
|
newValue?: any;
|
|
89
91
|
setTypeMethods?: string;
|
|
90
92
|
}
|
|
91
93
|
// 查找引用节点
|
|
92
94
|
interface QuoteNode {
|
|
93
|
-
|
|
95
|
+
icon: any;
|
|
94
96
|
node: BaseNode;
|
|
97
|
+
expanded: boolean;
|
|
95
98
|
children?: QuoteNode[];
|
|
96
99
|
}
|
|
97
|
-
// 组装后的resMap, 一个页面节点下可能有多个queue
|
|
98
|
-
interface ResMap {
|
|
99
|
-
[propName: string]: {
|
|
100
|
-
queue: QuoteNode[][];
|
|
101
|
-
name: string;
|
|
102
|
-
concept: string;
|
|
103
|
-
node: BaseNode;
|
|
104
|
-
};
|
|
105
|
-
}
|
|
106
100
|
const naslServer = {
|
|
107
101
|
messager,
|
|
108
102
|
worker,
|
|
@@ -117,85 +111,125 @@ const naslServer = {
|
|
|
117
111
|
return this.messager.requestCommand('start');
|
|
118
112
|
},
|
|
119
113
|
async createUiTs(allComponent: any) {
|
|
120
|
-
const { code, elementsLogic } = await formatUiTs(allComponent);
|
|
114
|
+
const { code, elementsLogic, naslStdlibMap } = await formatUiTs(allComponent);
|
|
121
115
|
// 放入生產的uits文件
|
|
122
116
|
await naslServer.addFile({
|
|
123
117
|
file: 'nasl.ui.definition.ts',
|
|
124
118
|
fileContent: code,
|
|
125
119
|
});
|
|
120
|
+
Object.keys(naslStdlibMap).forEach(async (libFileName: string) => {
|
|
121
|
+
await naslServer.addFile({
|
|
122
|
+
file: '/' + libFileName,
|
|
123
|
+
fileContent: naslStdlibMap[libFileName],
|
|
124
|
+
});
|
|
125
|
+
});
|
|
126
126
|
naslServer.elementsLogic = elementsLogic;
|
|
127
127
|
// 全部文件加载完毕开始初始化
|
|
128
128
|
await naslServer.getDiagnosticRecordsAndPushAll();
|
|
129
129
|
},
|
|
130
130
|
contentToFile(module: Module | App, results: Array<ReturnType<Structure['toEmbeddedTSFile']>>) {
|
|
131
131
|
module.structures.forEach((structure) => {
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
132
|
+
try {
|
|
133
|
+
const result = structure.toEmbeddedTSFile();
|
|
134
|
+
results.push(result);
|
|
135
|
+
// sourceMap都存在目录级别内容下,在页面层级下去找
|
|
136
|
+
structure.sourceMap = result.sourceMap;
|
|
137
|
+
this.file2NodeMap.set(result.filePath, structure);
|
|
138
|
+
} catch (err) {
|
|
139
|
+
console.log(err);
|
|
140
|
+
}
|
|
137
141
|
});
|
|
138
142
|
module.entities.forEach((entity) => {
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
143
|
+
try {
|
|
144
|
+
const result = entity.toEmbeddedTSFile();
|
|
145
|
+
results.push(result);
|
|
146
|
+
// sourceMap都存在目录级别内容下,在页面层级下去找
|
|
147
|
+
entity.sourceMap = result.sourceMap;
|
|
148
|
+
this.file2NodeMap.set(result.filePath, entity);
|
|
149
|
+
} catch (err) {
|
|
150
|
+
console.log(err);
|
|
151
|
+
}
|
|
144
152
|
});
|
|
145
153
|
module.interfaces.forEach((_interface) => {
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
154
|
+
try {
|
|
155
|
+
const result = _interface.toEmbeddedTSFile();
|
|
156
|
+
results.push(result);
|
|
157
|
+
// sourceMap都存在目录级别内容下,在页面层级下去找
|
|
158
|
+
_interface.sourceMap = result.sourceMap;
|
|
159
|
+
this.file2NodeMap.set(result.filePath, _interface);
|
|
160
|
+
} catch (err) {
|
|
161
|
+
console.log(err);
|
|
162
|
+
}
|
|
151
163
|
});
|
|
152
164
|
module.enums.forEach((_enum) => {
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
165
|
+
try {
|
|
166
|
+
const result = _enum.toEmbeddedTSFile();
|
|
167
|
+
results.push(result);
|
|
168
|
+
// sourceMap都存在目录级别内容下,在页面层级下去找
|
|
169
|
+
_enum.sourceMap = result.sourceMap;
|
|
170
|
+
this.file2NodeMap.set(result.filePath, _enum);
|
|
171
|
+
} catch (err) {
|
|
172
|
+
console.log(err);
|
|
173
|
+
}
|
|
158
174
|
});
|
|
159
175
|
module.logics.forEach((logic) => {
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
176
|
+
try {
|
|
177
|
+
if (!(logic instanceof Logic))
|
|
178
|
+
return;
|
|
179
|
+
const result = logic.toEmbeddedTSFile();
|
|
180
|
+
results.push(result);
|
|
181
|
+
logic.sourceMap = result.sourceMap;
|
|
182
|
+
this.file2NodeMap.set(result.filePath, logic);
|
|
183
|
+
} catch (err) {
|
|
184
|
+
console.log(err);
|
|
185
|
+
}
|
|
166
186
|
});
|
|
167
187
|
|
|
168
188
|
// view的生成
|
|
169
189
|
naslServer.view2TSFile(module.views, results);
|
|
170
190
|
|
|
171
191
|
module.processes.forEach((process) => {
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
192
|
+
try {
|
|
193
|
+
const result = process.toEmbeddedTSFile();
|
|
194
|
+
results.push(result);
|
|
195
|
+
process.sourceMap = result.sourceMap;
|
|
196
|
+
this.file2NodeMap.set(result.filePath, process);
|
|
197
|
+
} catch (err) {
|
|
198
|
+
console.log(err);
|
|
199
|
+
}
|
|
176
200
|
});
|
|
177
201
|
|
|
178
202
|
if (module instanceof App) {
|
|
179
203
|
module.roles.forEach((role) => {
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
204
|
+
try {
|
|
205
|
+
const result = role.toEmbeddedTSFile();
|
|
206
|
+
results.push(result);
|
|
207
|
+
// sourceMap都存在目录级别内容下,在页面层级下去找
|
|
208
|
+
role.sourceMap = result.sourceMap;
|
|
209
|
+
this.file2NodeMap.set(result.filePath, role);
|
|
210
|
+
} catch (err) {
|
|
211
|
+
console.log(err);
|
|
212
|
+
}
|
|
185
213
|
});
|
|
186
214
|
}
|
|
187
215
|
},
|
|
188
216
|
view2TSFile(viewsChildren: View[], results: Array<ReturnType<Structure['toEmbeddedTSFile']>>) {
|
|
189
|
-
//
|
|
190
|
-
viewsChildren.
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
217
|
+
// 如果有子页面
|
|
218
|
+
if (viewsChildren && viewsChildren.length) {
|
|
219
|
+
viewsChildren.forEach((view) => {
|
|
220
|
+
try {
|
|
221
|
+
const result = view.toEmbeddedTSFile();
|
|
222
|
+
results.push(result);
|
|
223
|
+
view.sourceMap = result.sourceMap;
|
|
224
|
+
this.file2NodeMap.set(result.filePath, view);
|
|
225
|
+
if (view.children.length) {
|
|
226
|
+
naslServer.view2TSFile(view.children, results);
|
|
227
|
+
}
|
|
228
|
+
} catch (err) {
|
|
229
|
+
console.log(err);
|
|
230
|
+
}
|
|
231
|
+
});
|
|
232
|
+
}
|
|
199
233
|
},
|
|
200
234
|
async openApp(app: App) {
|
|
201
235
|
const results: Array<ReturnType<Structure['toEmbeddedTSFile']>> = [];
|
|
@@ -225,19 +259,16 @@ const naslServer = {
|
|
|
225
259
|
callback();
|
|
226
260
|
});
|
|
227
261
|
},
|
|
228
|
-
async
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
}));
|
|
239
|
-
await this.writeFiles(files);
|
|
240
|
-
this._debugInFileStorage(module.parentNode as App, files);
|
|
262
|
+
async refreshApp(app: App) {
|
|
263
|
+
// 清除所有问题
|
|
264
|
+
diagnosticManager.clear();
|
|
265
|
+
await naslServer.deleteDirectoryFiles({ directoryName: '/embedded' });
|
|
266
|
+
// 清楚check count的数量
|
|
267
|
+
await this.messager.requestCommand('_clearTimeout');
|
|
268
|
+
// 重新加载app下内容
|
|
269
|
+
await naslServer.openApp(app);
|
|
270
|
+
// 重新check一遍所有内容
|
|
271
|
+
await naslServer.getDiagnosticRecordsAndPushAll();
|
|
241
272
|
},
|
|
242
273
|
/**
|
|
243
274
|
* 初始化之前添加文件
|
|
@@ -252,14 +283,7 @@ const naslServer = {
|
|
|
252
283
|
writeFiles(files: Array<tsProtocol.OpenRequestArgs>) {
|
|
253
284
|
return this.messager.requestCommand('writeFiles', files);
|
|
254
285
|
},
|
|
255
|
-
|
|
256
|
-
* 新增或修改文件
|
|
257
|
-
* @param {*} files
|
|
258
|
-
* @returns
|
|
259
|
-
*/
|
|
260
|
-
outputFiles(files: Array<tsProtocol.OpenRequestArgs>) {
|
|
261
|
-
return this.messager.requestCommand('outputFiles', files);
|
|
262
|
-
},
|
|
286
|
+
|
|
263
287
|
/**
|
|
264
288
|
* 新增、修改
|
|
265
289
|
* 删除文件 文件用修改内容为空模拟,防止报错
|
|
@@ -268,15 +292,26 @@ const naslServer = {
|
|
|
268
292
|
updateFiles(args: { outputFiles: Array<tsProtocol.OpenRequestArgs> }) {
|
|
269
293
|
return this.messager.requestCommand('updateFiles', args);
|
|
270
294
|
},
|
|
295
|
+
|
|
296
|
+
/**
|
|
297
|
+
* 清除一个目录下的所有文件
|
|
298
|
+
*/
|
|
299
|
+
deleteDirectoryFiles(args: { directoryName: string }) {
|
|
300
|
+
return this.messager.requestCommand('deleteDirectoryFiles', args);
|
|
301
|
+
},
|
|
271
302
|
_debugInFileStorage(node: BaseNode, openFiles: Array<tsProtocol.OpenRequestArgs>) {
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
303
|
+
/// #if process.env.NODE_ENV === 'development'
|
|
304
|
+
let app = node;
|
|
305
|
+
if (node.concept !== 'App') {
|
|
306
|
+
app = (node as any).rootNode || (node as any).app;
|
|
307
|
+
}
|
|
308
|
+
return Promise.all(openFiles.map(async (file) => {
|
|
309
|
+
const res = await axios.post('/api/App/debugEmbedded?id=' + app.id, file);
|
|
310
|
+
return res.data;
|
|
311
|
+
})).catch((e) => {
|
|
312
|
+
console.error(e);
|
|
313
|
+
});
|
|
314
|
+
/// #endif
|
|
280
315
|
},
|
|
281
316
|
open() {
|
|
282
317
|
return this.messager.requestCommand('open');
|
|
@@ -290,7 +325,7 @@ const naslServer = {
|
|
|
290
325
|
async references(args: tsProtocol.FileLocationRequestArgs) {
|
|
291
326
|
return ((await this.messager.requestCommand('references', args)) as any)?.response as tsProtocol.ReferencesResponseBody;
|
|
292
327
|
},
|
|
293
|
-
getValueSelectCompletion(node: BaseNode, value: string) {
|
|
328
|
+
getValueSelectCompletion(node: BaseNode, value: string, noFilterList?: Array<string>) {
|
|
294
329
|
const { currentSource, fileNode } = naslServer.getCurrentSource(node);
|
|
295
330
|
// console.log(currentSource, fileNode);
|
|
296
331
|
if (currentSource && fileNode) {
|
|
@@ -301,6 +336,7 @@ const naslServer = {
|
|
|
301
336
|
offset: lsp2tspNumber(currentSource.range.start.character),
|
|
302
337
|
},
|
|
303
338
|
value,
|
|
339
|
+
noFilterList,
|
|
304
340
|
});
|
|
305
341
|
} else {
|
|
306
342
|
console.log('没找到节点', node, currentSource, fileNode);
|
|
@@ -316,7 +352,9 @@ const naslServer = {
|
|
|
316
352
|
const types = reg.exec(displayString);
|
|
317
353
|
// 取出提示的类型,组成是数组
|
|
318
354
|
const typeList: string[] = types[1].split(' | ').map((item: string) => {
|
|
319
|
-
if (
|
|
355
|
+
if (/\<([^()]+)\>/g.exec(item)) {
|
|
356
|
+
return item;
|
|
357
|
+
} else if (item.includes(' ')) {
|
|
320
358
|
const strs = item.split(' ');
|
|
321
359
|
const type = strs[strs.length - 1];
|
|
322
360
|
return type;
|
|
@@ -331,8 +369,7 @@ const naslServer = {
|
|
|
331
369
|
return typeList;
|
|
332
370
|
},
|
|
333
371
|
async getTypeQuickinfo(node: BaseNode) {
|
|
334
|
-
|
|
335
|
-
if (node instanceof Identifier) {
|
|
372
|
+
if (node && node instanceof BaseNode) {
|
|
336
373
|
const callFunction = node.parentNode.parentNode;
|
|
337
374
|
/**
|
|
338
375
|
* currentSource callFunction 的节点,要去到当前节点的位置
|
|
@@ -353,26 +390,49 @@ const naslServer = {
|
|
|
353
390
|
const typeAnnotation = primitiveTypeList.find((typeAnnotation) => typeAnnotation.typeName === type);
|
|
354
391
|
if (typeAnnotation) {
|
|
355
392
|
res.push(typeAnnotation);
|
|
356
|
-
} else if (type === 'unknown') {
|
|
393
|
+
} else if (type === 'unknown' || type === 'never') {
|
|
357
394
|
return null;
|
|
358
395
|
}
|
|
359
396
|
});
|
|
360
397
|
if (!res.length) {
|
|
361
|
-
|
|
398
|
+
return [];
|
|
399
|
+
} else {
|
|
400
|
+
return [{ title: '基础类型', children: res }];
|
|
362
401
|
}
|
|
363
|
-
// 调整结构
|
|
364
|
-
const dataTypeList: Array<{
|
|
365
|
-
title: string;
|
|
366
|
-
children: Array<TypeAnnotation>;
|
|
367
|
-
}> = [{ title: '基础类型', children: res }];
|
|
368
|
-
return dataTypeList;
|
|
369
402
|
}
|
|
403
|
+
} else {
|
|
404
|
+
// 字符串 和 inter
|
|
405
|
+
return [{ title: '基础类型', children: [primitiveTypeList[4]] }];
|
|
370
406
|
}
|
|
371
407
|
},
|
|
408
|
+
async getDataSchemaType(node: BaseNode) {
|
|
409
|
+
if (!(node instanceof ViewElement))
|
|
410
|
+
return;
|
|
411
|
+
const { currentSource, fileNode } = naslServer.getCurrentSource(node);
|
|
412
|
+
const quickInfo = await naslServer._getTypeQuickinfo({
|
|
413
|
+
file: (fileNode as FileNode).getEmbeddedFilePath(),
|
|
414
|
+
line: lsp2tspNumber(currentSource.range.start.line),
|
|
415
|
+
offset: lsp2tspNumber(currentSource.range.start.character) + `__elements.`.length,
|
|
416
|
+
});
|
|
417
|
+
if (quickInfo.responseRequired) {
|
|
418
|
+
const displayString = quickInfo?.response?.displayString || '';
|
|
419
|
+
const flag = displayString.includes('<') && displayString.includes('>');
|
|
420
|
+
if (flag) {
|
|
421
|
+
let str = '';
|
|
422
|
+
const types = naslServer.getDisplayString2Type(displayString);
|
|
423
|
+
if (Array.isArray(types) && types.length) {
|
|
424
|
+
const type = types[0];
|
|
425
|
+
str = type === 'any' || type === 'unknown' || type === 'never' ? '' : type;
|
|
426
|
+
}
|
|
427
|
+
return str;
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
return '';
|
|
431
|
+
},
|
|
372
432
|
_getTypeQuickinfo(args: any) {
|
|
373
433
|
return this.messager.requestCommand('quickInfo', args) as unknown as { responseRequired: boolean; response: tsProtocol.QuickInfoResponseBody };
|
|
374
434
|
},
|
|
375
|
-
getSelectNextCompletion(node: BaseNode) {
|
|
435
|
+
getSelectNextCompletion(node: BaseNode, noFilterList?: Array<string>) {
|
|
376
436
|
const { currentSource, fileNode } = naslServer.getCurrentSource(node);
|
|
377
437
|
// console.log(currentSource, fileNode);
|
|
378
438
|
if (currentSource && fileNode) {
|
|
@@ -382,6 +442,7 @@ const naslServer = {
|
|
|
382
442
|
line: lsp2tspNumber(currentSource.range.start.line),
|
|
383
443
|
offset: lsp2tspNumber(currentSource.range.start.character),
|
|
384
444
|
},
|
|
445
|
+
noFilterList,
|
|
385
446
|
});
|
|
386
447
|
} else {
|
|
387
448
|
console.log('没找到节点', currentSource, fileNode);
|
|
@@ -414,7 +475,7 @@ const naslServer = {
|
|
|
414
475
|
|
|
415
476
|
// 语义诊断
|
|
416
477
|
record.semanticDiagnostics = record.semanticDiagnostics
|
|
417
|
-
.map((diag) => this._resolveDiagnostic(diag as unknown as tsProtocol.DiagnosticWithFileName, node
|
|
478
|
+
.map((diag) => this._resolveDiagnostic(diag as unknown as tsProtocol.DiagnosticWithFileName, node as FileNode))
|
|
418
479
|
.filter((diag) => !!diag);
|
|
419
480
|
|
|
420
481
|
// 建议诊断
|
|
@@ -438,8 +499,8 @@ const naslServer = {
|
|
|
438
499
|
});
|
|
439
500
|
return records;
|
|
440
501
|
},
|
|
441
|
-
_resolveDiagnostic(diagnostic: tsProtocol.DiagnosticWithFileName,
|
|
442
|
-
const minRange = this._findMinRange(diagnostic,
|
|
502
|
+
_resolveDiagnostic(diagnostic: tsProtocol.DiagnosticWithFileName, fileNode: FileNode): Diagnostic {
|
|
503
|
+
const minRange = this._findMinRange(diagnostic, fileNode);
|
|
443
504
|
const tsErrorDetail = {
|
|
444
505
|
severity: diagnostic.category === 'error' ? 'error' : 'warning',
|
|
445
506
|
message: translateDiagnosticMessage(diagnostic.text),
|
|
@@ -448,9 +509,8 @@ const naslServer = {
|
|
|
448
509
|
};
|
|
449
510
|
|
|
450
511
|
if (minRange) {
|
|
451
|
-
// let message = this.translateDiagnosticMessage(diagnostic.text);
|
|
452
512
|
// 节点的error要置为true
|
|
453
|
-
return
|
|
513
|
+
return naslNodeTranslateMessage(minRange, tsErrorDetail);
|
|
454
514
|
} else {
|
|
455
515
|
// 没找到节点, 先把问题暴露出来
|
|
456
516
|
return {
|
|
@@ -459,45 +519,10 @@ const naslServer = {
|
|
|
459
519
|
};
|
|
460
520
|
}
|
|
461
521
|
},
|
|
462
|
-
|
|
463
|
-
* 处理一些边界情况
|
|
464
|
-
* @param minRange
|
|
465
|
-
* @param tsErrorDetail 报错具体信息
|
|
466
|
-
* @returns
|
|
467
|
-
*/
|
|
468
|
-
_diagnosticSpecialTreatment(minRange: MinRange, tsErrorDetail: Diagnostic) {
|
|
469
|
-
const text = tsErrorDetail.originalDiagnostic.text;
|
|
470
|
-
// 有一些节点报错信息不向外暴露,缺失一些原生标签等等的展示
|
|
471
|
-
if (minRange.node instanceof View || minRange.node instanceof ViewElement) {
|
|
472
|
-
if (text.startsWith(`'nasl.ui' has no exported member named `)) {
|
|
473
|
-
return null;
|
|
474
|
-
} else if (text.startsWith(`Property '`) && text.includes(`does not exist on type 'typeof ui'.`)) {
|
|
475
|
-
return null;
|
|
476
|
-
} else if (text.startsWith(`Namespace 'nasl.ui' has no exported member `)) {
|
|
477
|
-
return null;
|
|
478
|
-
}
|
|
479
|
-
}
|
|
480
|
-
if (/Expected (.+?) arguments, but got (.+?)./.exec(text)) {
|
|
481
|
-
// bindevent本身现在就不传参数
|
|
482
|
-
if (minRange.node instanceof BindEvent) {
|
|
483
|
-
return null;
|
|
484
|
-
}
|
|
485
|
-
// 因为缺少参数时候有可能有特殊情况,因为原本少的多了就会找到 callLogic上,
|
|
486
|
-
// 但是只少一个的时候就会找到准确的Argument上 需要特殊处理, ui层就可以统一处理
|
|
487
|
-
if (minRange.node instanceof Argument) {
|
|
488
|
-
minRange.node = minRange.node.parentNode;
|
|
489
|
-
}
|
|
490
|
-
}
|
|
491
|
-
|
|
492
|
-
minRange.node.tsErrorDetail = tsErrorDetail;
|
|
493
|
-
return {
|
|
494
|
-
id: minRange.node.id,
|
|
495
|
-
node: minRange.node,
|
|
496
|
-
...tsErrorDetail,
|
|
497
|
-
};
|
|
498
|
-
},
|
|
499
|
-
_findMinRange(diagnostic: tsProtocol.DiagnosticWithFileName | tsProtocol.ReferencesResponseItem, sourceMap: SourceMap) {
|
|
522
|
+
_findMinRange(diagnostic: tsProtocol.DiagnosticWithFileName | tsProtocol.ReferencesResponseItem, fileNode: FileNode) {
|
|
500
523
|
let minRange: MinRange;
|
|
524
|
+
const sourceMap: SourceMap = fileNode.sourceMap;
|
|
525
|
+
|
|
501
526
|
for (const [node, item] of sourceMap.entries()) {
|
|
502
527
|
/**
|
|
503
528
|
* 当前内容的开始行 <= 诊断开始的行 &&
|
|
@@ -526,51 +551,18 @@ const naslServer = {
|
|
|
526
551
|
}
|
|
527
552
|
}
|
|
528
553
|
if (!minRange) {
|
|
554
|
+
if (fileNode instanceof View) {
|
|
555
|
+
return { node: fileNode, item: sourceMap.get(fileNode) };
|
|
556
|
+
}
|
|
529
557
|
console.log(diagnostic, 'diagnostic');
|
|
530
558
|
console.log(sourceMap, 'sourceMap');
|
|
531
559
|
console.log(minRange, '需要特殊看下,为什么没找到内容-------------');
|
|
532
560
|
}
|
|
533
561
|
return minRange;
|
|
534
562
|
},
|
|
535
|
-
|
|
536
|
-
async findReferences(node: BaseNode) {
|
|
537
|
-
console.log(node);
|
|
538
|
-
const refsList = await naslServer._isHaveRef(node, true);
|
|
539
|
-
console.log(refsList, 'refsList');
|
|
540
|
-
// refsList = refsList.filter((item) =>
|
|
541
|
-
// // 不是创建者
|
|
542
|
-
// item.isDefinition !== true);
|
|
543
|
-
let result = {};
|
|
544
|
-
const resMap = {};
|
|
545
|
-
try {
|
|
546
|
-
refsList.forEach((record) => {
|
|
547
|
-
const fileNode = this.file2NodeMap.get(record.file);
|
|
548
|
-
if (!fileNode)
|
|
549
|
-
return;
|
|
550
|
-
const minRange = this._findMinRange(record, fileNode.sourceMap);
|
|
551
|
-
// 过滤一把不需要改的信息
|
|
552
|
-
if (minRange) {
|
|
553
|
-
// 如果查找引用查到自己里面的引用不展示
|
|
554
|
-
// 因为view生成的特殊性
|
|
555
|
-
if (minRange.node === node || (minRange.node instanceof View && node instanceof View)) {
|
|
556
|
-
return;
|
|
557
|
-
}
|
|
558
|
-
// 拼装树
|
|
559
|
-
naslServer._getTreeMap(minRange, fileNode, resMap);
|
|
560
|
-
}
|
|
561
|
-
});
|
|
562
|
-
console.log(resMap, 'resMap');
|
|
563
|
-
result = naslServer.handleTreeMap(resMap);
|
|
564
|
-
} catch (err) {
|
|
565
|
-
console.log(err);
|
|
566
|
-
}
|
|
567
|
-
console.log(result);
|
|
568
|
-
return result;
|
|
569
|
-
},
|
|
570
|
-
async _isHaveRef(node: BaseNode, isFind: boolean = false) {
|
|
563
|
+
async _isHaveRef(node: BaseNode) {
|
|
571
564
|
const { currentSource, fileNode } = naslServer.getCurrentSource(node);
|
|
572
565
|
let refsList: tsProtocol.ReferencesResponseItem[] = [];
|
|
573
|
-
|
|
574
566
|
/**
|
|
575
567
|
* 未完成创建的节点 ,或者异常情况 可能找不到节点
|
|
576
568
|
*/
|
|
@@ -581,15 +573,36 @@ const naslServer = {
|
|
|
581
573
|
offset: lsp2tspNumber(currentSource.range.start.character),
|
|
582
574
|
});
|
|
583
575
|
refsList = [...newRefs.refs];
|
|
576
|
+
} else {
|
|
577
|
+
if (node instanceof Module) {
|
|
578
|
+
const lists = node.logics || node.structures || node.enums;
|
|
579
|
+
const moduleName = (fileNode as FileNode).getEmbeddedFilePath();
|
|
580
|
+
if (lists.length) {
|
|
581
|
+
const item = lists[0];
|
|
582
|
+
const { fileNode } = naslServer.getCurrentSource(item);
|
|
583
|
+
const newRefs = await naslServer.references({
|
|
584
|
+
file: (fileNode as FileNode).getEmbeddedFilePath(),
|
|
585
|
+
line: 1,
|
|
586
|
+
offset: 22, //固定的位置,module的位置信息
|
|
587
|
+
});
|
|
588
|
+
refsList = newRefs.refs.filter((item) => !item.file.startsWith(moduleName));
|
|
589
|
+
// 多塞一个 ,删除的时候就有值了, 上面过滤了之后可能是空的
|
|
590
|
+
refsList.unshift(newRefs.refs[0]);
|
|
591
|
+
}
|
|
592
|
+
}
|
|
584
593
|
}
|
|
585
594
|
|
|
586
595
|
// 如果是entity就需要在单独,查一边来修改名字
|
|
587
596
|
if (node instanceof Entity) {
|
|
588
597
|
// 过滤一把不需要改的信息
|
|
589
|
-
refsList = refsList.filter((item) =>
|
|
598
|
+
refsList = refsList.filter((item) => (fileNode as FileNode).getEmbeddedFilePath() !== item.file || item.isDefinition === true);
|
|
590
599
|
// 不再当前文件里
|
|
591
600
|
// 或者在当前列表但是位置小于entity的结束位置
|
|
592
|
-
|
|
601
|
+
}
|
|
602
|
+
|
|
603
|
+
if (node instanceof Return) {
|
|
604
|
+
// 过滤一下最后出去的值
|
|
605
|
+
refsList = refsList.filter((item) => !item.lineText.includes('return '));
|
|
593
606
|
}
|
|
594
607
|
|
|
595
608
|
// 如果是参数, 就需要把logic的引用 都查找出来就需要把他的父级的引用全部查找出来
|
|
@@ -604,8 +617,8 @@ const naslServer = {
|
|
|
604
617
|
refsList = [...refsList, ...parentRefs.refs];
|
|
605
618
|
}
|
|
606
619
|
|
|
607
|
-
//
|
|
608
|
-
if (node instanceof Param && node.parentNode instanceof View
|
|
620
|
+
// 如果是参数修改, 就需要把logic的引用 都查找出来就需要把他的父级的引用全部查找出来d
|
|
621
|
+
if (node instanceof Param && node.parentNode instanceof View) {
|
|
609
622
|
const viewNode = node.parentNode;
|
|
610
623
|
const { currentSource } = naslServer.getCurrentSource(viewNode);
|
|
611
624
|
const code = currentSource.code;
|
|
@@ -620,46 +633,54 @@ const naslServer = {
|
|
|
620
633
|
refsList = [...refsList, ...filterViewRefs];
|
|
621
634
|
}
|
|
622
635
|
/**
|
|
636
|
+
* 暂时不要了, 因为生成的结构发生了变化
|
|
623
637
|
* view 因为不是嵌套的,所以不能用最前面的变量查找,所以要单独处理一下
|
|
624
638
|
* 找到第一个 { 之前的变量 进行修改
|
|
625
639
|
* 如果是VIew的查找,比较特殊,他查的是当前抛出的 {} 大括号前的
|
|
626
640
|
* 最后一个,因为生成的规则不一样
|
|
627
641
|
*/
|
|
628
|
-
if (node instanceof View) {
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
}
|
|
642
|
+
// if (node instanceof View) {
|
|
643
|
+
// const code = currentSource.code;
|
|
644
|
+
// const viewIndex = code.indexOf(' {');
|
|
645
|
+
// const viewRefs = await naslServer.references({
|
|
646
|
+
// file: (fileNode as FileNode).getEmbeddedFilePath(),
|
|
647
|
+
// line: lsp2tspNumber(currentSource.range.start.line),
|
|
648
|
+
// offset: lsp2tspNumber(currentSource.range.start.character + viewIndex),
|
|
649
|
+
// });
|
|
650
|
+
// refsList = [...viewRefs.refs];
|
|
651
|
+
// }
|
|
638
652
|
/**
|
|
639
653
|
* elements 需要查的是__elements.后面的那个内容,过滤两个为了生成内容的节点
|
|
640
654
|
*/
|
|
641
655
|
if (node instanceof ViewElement) {
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
656
|
+
if (currentSource) {
|
|
657
|
+
const code = currentSource.code;
|
|
658
|
+
const prefix = '__elements.';
|
|
659
|
+
const prefixIndex = code.indexOf(prefix) !== -1 ? code.indexOf(prefix) : 0;
|
|
660
|
+
const methodsNameIndex = prefixIndex + prefix.length;
|
|
661
|
+
const methods = await naslServer.references({
|
|
662
|
+
file: (fileNode as FileNode).getEmbeddedFilePath(),
|
|
663
|
+
line: lsp2tspNumber(currentSource.range.start.line),
|
|
664
|
+
offset: lsp2tspNumber(currentSource.range.start.character + methodsNameIndex),
|
|
665
|
+
});
|
|
666
|
+
const methodRefs: tsProtocol.ReferencesResponseItem[] = [];
|
|
667
|
+
methods.refs.forEach((item) => {
|
|
668
|
+
// 定义里的格式,在删除的时候留下来占位
|
|
669
|
+
// 重命名的时候会过滤
|
|
651
670
|
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
return false;
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
671
|
+
// 这里只过滤 __elements.button = new nasl.ui.Button<any>这种格式
|
|
672
|
+
// if (item.lineText.includes('__elements.') && item.lineText.includes('new nasl.ui.'))
|
|
673
|
+
// return false;
|
|
674
|
+
// 处理声明组件名可能重复的问题, 查找引用不提示
|
|
675
|
+
const find = methodRefs.find((findItem) => item.lineText === findItem.lineText && item.lineText.includes(': nasl.ui.'));
|
|
676
|
+
if (!find) {
|
|
677
|
+
methodRefs.push(item);
|
|
678
|
+
}
|
|
679
|
+
});
|
|
680
|
+
refsList = [...methodRefs];
|
|
681
|
+
}
|
|
662
682
|
}
|
|
683
|
+
console.log(refsList, 'refsList');
|
|
663
684
|
return refsList;
|
|
664
685
|
},
|
|
665
686
|
/**
|
|
@@ -677,13 +698,17 @@ const naslServer = {
|
|
|
677
698
|
const fileNode = this.file2NodeMap.get(record.file);
|
|
678
699
|
if (!fileNode)
|
|
679
700
|
return null;
|
|
680
|
-
const minRange: reNameMinRange = this._findMinRange(record, fileNode
|
|
701
|
+
const minRange: reNameMinRange = this._findMinRange(record, fileNode as FileNode);
|
|
681
702
|
if (minRange) {
|
|
682
703
|
// 如果节点是TypeAnnotation类型,
|
|
683
704
|
// 很复杂,可能是多级嵌套结构
|
|
684
705
|
// 不一定只修改typeName
|
|
685
706
|
if (minRange.node instanceof TypeAnnotation) {
|
|
686
707
|
// console.log(record);
|
|
708
|
+
// 如果是fake的逻辑,内部的重命名都不需要修改
|
|
709
|
+
// if ((minRange.node?.parentNode as any).logic && (minRange.node?.parentNode as any).logic?.fake) {
|
|
710
|
+
// return null;
|
|
711
|
+
// }
|
|
687
712
|
minRange.setTypeMethods = 'setTypeName';
|
|
688
713
|
}
|
|
689
714
|
// 如果节点是logic修改引发calllogic修改
|
|
@@ -691,11 +716,11 @@ const naslServer = {
|
|
|
691
716
|
minRange.setTypeMethods = 'setCalleeName';
|
|
692
717
|
}
|
|
693
718
|
if (minRange.node instanceof CallLogic && node instanceof ViewElement) {
|
|
694
|
-
minRange.setTypeMethods = '
|
|
719
|
+
minRange.setTypeMethods = 'setCalleeNamespace';
|
|
695
720
|
minRange.newValue = 'elements.' + newValue + '.logics';
|
|
696
721
|
}
|
|
697
722
|
// 如果节点是实体修改引发calllogic修改
|
|
698
|
-
if (minRange.node instanceof CallLogic && (node instanceof Entity || node instanceof View)) {
|
|
723
|
+
if (minRange.node instanceof CallLogic && (node instanceof Entity || node instanceof View || node instanceof Process || node instanceof ProcessElement)) {
|
|
699
724
|
// 匹配到的内容,当前这一行的内容;
|
|
700
725
|
// 因为要用下面的点位信息
|
|
701
726
|
/**
|
|
@@ -717,26 +742,29 @@ const naslServer = {
|
|
|
717
742
|
const end = record.end.offset - index - 1;
|
|
718
743
|
// 新的完整的value
|
|
719
744
|
let newTsNameSpace = tsCalleeNamespace.substring(0, start) + newValue + tsCalleeNamespace.substring(end, tsCalleeNamespace.length);
|
|
720
|
-
newTsNameSpace = newTsNameSpace.replace(
|
|
745
|
+
newTsNameSpace = newTsNameSpace.replace(/.\$/g, '.');
|
|
721
746
|
minRange.setTypeMethods = 'setCalleeNamespace';
|
|
722
747
|
minRange.newValue = newTsNameSpace;
|
|
723
748
|
}
|
|
724
749
|
// 如果参数修改影响了 callLogic
|
|
725
750
|
if (minRange.node instanceof CallLogic && node instanceof Param) {
|
|
751
|
+
return null;
|
|
726
752
|
// 逻辑第几个位置发生修改,对应的calllogic对应位置的内容要进行修改
|
|
727
|
-
|
|
728
|
-
const
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
}
|
|
753
|
+
// minRange.setTypeMethods = 'setArgumentName';
|
|
754
|
+
// const nodeArguments = minRange.node.arguments;
|
|
755
|
+
// minRange.newValue = [...nodeArguments];
|
|
756
|
+
// const LogicNode = node.parentNode;
|
|
757
|
+
// const paramIndex = (LogicNode as Logic).params.findIndex((param) => param === node);
|
|
758
|
+
// console.log(node, nodeArguments);
|
|
759
|
+
// if (paramIndex !== -1) {
|
|
760
|
+
// minRange.setTypeMethods = 'setArgumentName';
|
|
761
|
+
// minRange.newValue = {
|
|
762
|
+
// argument: nodeArguments[paramIndex],
|
|
763
|
+
// newKeyword: newValue,
|
|
764
|
+
// };
|
|
765
|
+
// } else {
|
|
766
|
+
// return null;
|
|
767
|
+
// }
|
|
740
768
|
}
|
|
741
769
|
// 如果节点是Identifier表达式
|
|
742
770
|
if (minRange.node instanceof Identifier) {
|
|
@@ -758,6 +786,11 @@ const naslServer = {
|
|
|
758
786
|
minRange.newValue = newTextValue;
|
|
759
787
|
}
|
|
760
788
|
}
|
|
789
|
+
// 如果是枚举修改,枚举的值刚好在Identifier 中选了 就修改值
|
|
790
|
+
if (minRange.node instanceof Identifier && node instanceof Enum) {
|
|
791
|
+
minRange.newValue = newValue;
|
|
792
|
+
minRange.setTypeMethods = 'setName';
|
|
793
|
+
}
|
|
761
794
|
// 如果修改逻辑,改到了Identifier表达式,只能说明是在属性里有使用了
|
|
762
795
|
if (minRange.node instanceof Identifier && node instanceof Logic) {
|
|
763
796
|
minRange.newValue = newValue;
|
|
@@ -835,7 +868,12 @@ const naslServer = {
|
|
|
835
868
|
// 如果是view也需要加前缀
|
|
836
869
|
// logic 和 views名称修改 可能会触发bindEvent修改
|
|
837
870
|
if (minRange.node instanceof BindEvent) {
|
|
838
|
-
|
|
871
|
+
// 页面逻辑直接赋值就可以, 因为是相对路径
|
|
872
|
+
if ((node instanceof ViewElement)) {
|
|
873
|
+
minRange.setTypeMethods = 'setCalleeNamespace';
|
|
874
|
+
minRange.newValue = 'elements.' + newValue + '.logics';
|
|
875
|
+
} else {
|
|
876
|
+
/**
|
|
839
877
|
* 如果namespce是 'app.views.Student.views.404.views.505.views.update'
|
|
840
878
|
* 在ts中会是'app.views.Student.views.$404.views.$505.views.update'
|
|
841
879
|
* 但是505 要改名为 666 ,要存的是666
|
|
@@ -844,25 +882,45 @@ const naslServer = {
|
|
|
844
882
|
* 2.在匹配到的内容中取转后的namespace的位置
|
|
845
883
|
* 3.然后把namespace中的 $替换成 ''
|
|
846
884
|
*/
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
minRange.setTypeMethods = 'setCalleeName';
|
|
859
|
-
minRange.newValue = newValue;
|
|
860
|
-
} else {
|
|
885
|
+
const tsCalleeNamespace = minRange.node.tsCalleeNamespace;
|
|
886
|
+
const oldValue = tsCalleeNamespace;
|
|
887
|
+
|
|
888
|
+
// 先看下标位置
|
|
889
|
+
const lineText = record.lineText;
|
|
890
|
+
const index = lineText.indexOf(oldValue);
|
|
891
|
+
|
|
892
|
+
// 在把开始结束位置的-开始位置,来知道是哪里要替换
|
|
893
|
+
const start = record.start.offset - index - 1;
|
|
894
|
+
const end = record.end.offset - index - 1;
|
|
895
|
+
|
|
861
896
|
// 新的完整的value
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
897
|
+
if (start > tsCalleeNamespace.length) {
|
|
898
|
+
minRange.setTypeMethods = 'setCalleeName';
|
|
899
|
+
minRange.newValue = newValue;
|
|
900
|
+
} else {
|
|
901
|
+
// 新的完整的value
|
|
902
|
+
let newTsNameSpace = tsCalleeNamespace.substring(0, start) + newValue + tsCalleeNamespace.substring(end, tsCalleeNamespace.length);
|
|
903
|
+
minRange.setTypeMethods = 'setCalleeNamespace';
|
|
904
|
+
newTsNameSpace = newTsNameSpace.replace(/\.\$/g, '.');
|
|
905
|
+
minRange.newValue = newTsNameSpace;
|
|
906
|
+
}
|
|
907
|
+
}
|
|
908
|
+
}
|
|
909
|
+
if (minRange.node instanceof Destination && node instanceof Param) {
|
|
910
|
+
// 因为view是key value 绑定所以需要重新赋值
|
|
911
|
+
if (node.parentNode instanceof View) {
|
|
912
|
+
const nodeArguments = minRange.node.arguments;
|
|
913
|
+
const findArgument = nodeArguments.find((item) => node.name === item.keyword);
|
|
914
|
+
if (findArgument) {
|
|
915
|
+
minRange.setTypeMethods = 'setArgumentsKeyWord';
|
|
916
|
+
minRange.newValue = {
|
|
917
|
+
findArgument,
|
|
918
|
+
newKeyword: newValue,
|
|
919
|
+
};
|
|
920
|
+
}
|
|
921
|
+
} else {
|
|
922
|
+
// 如果是修改param查找到Destination就不操作
|
|
923
|
+
return null;
|
|
866
924
|
}
|
|
867
925
|
}
|
|
868
926
|
if (minRange.node instanceof Interface && node instanceof Logic) {
|
|
@@ -878,13 +936,31 @@ const naslServer = {
|
|
|
878
936
|
const newBindRoles = str.split(',');
|
|
879
937
|
minRange.newValue = newBindRoles;
|
|
880
938
|
}
|
|
939
|
+
if (minRange.node instanceof QueryFieldExpression && node instanceof Entity) {
|
|
940
|
+
minRange.setTypeMethods = 'setEntityAsName';
|
|
941
|
+
}
|
|
942
|
+
|
|
943
|
+
if ((minRange.node instanceof QueryFromExpression || minRange.node instanceof QueryJoinExpression) && node instanceof Entity) {
|
|
944
|
+
minRange.setTypeMethods = 'setEntityName';
|
|
945
|
+
}
|
|
946
|
+
if (minRange.node instanceof QueryFieldExpression && node instanceof EntityProperty) {
|
|
947
|
+
minRange.setTypeMethods = 'setPropertyName';
|
|
948
|
+
}
|
|
949
|
+
|
|
950
|
+
// 如果跳转链接或者页面变量同一个param和TypeAnnotation 有两个过滤掉一个
|
|
951
|
+
if ((minRange.node instanceof Param || minRange.node instanceof Variable || minRange.node instanceof Return) && (node instanceof Entity || node instanceof Enum || node instanceof Structure)) {
|
|
952
|
+
return null;
|
|
953
|
+
}
|
|
954
|
+
if (minRange.node instanceof Destination && (node instanceof Process || node instanceof ProcessElement)) {
|
|
955
|
+
return null;
|
|
956
|
+
}
|
|
881
957
|
// 枚举修改枚举名,比较特殊
|
|
882
958
|
if (minRange.node instanceof EnumItem && node instanceof Enum) {
|
|
883
959
|
// 什么都不做,用来跳过修改
|
|
884
960
|
return null;
|
|
885
961
|
}
|
|
886
|
-
//
|
|
887
|
-
if (minRange.node instanceof
|
|
962
|
+
// params修改 查找bindevent不需要修改
|
|
963
|
+
if (minRange.node instanceof BindEvent && node instanceof Param) {
|
|
888
964
|
return null;
|
|
889
965
|
}
|
|
890
966
|
// 如果是子页面修改
|
|
@@ -892,8 +968,39 @@ const naslServer = {
|
|
|
892
968
|
if (minRange.node instanceof View && node instanceof View && minRange.node !== node) {
|
|
893
969
|
return null;
|
|
894
970
|
}
|
|
971
|
+
/**
|
|
972
|
+
* 屏蔽组件生成内容块中的变量或者逻辑,出现在表格选择中。在bindAttr中还会有,所以过滤一把
|
|
973
|
+
*/
|
|
974
|
+
if ((minRange.node instanceof Identifier || minRange.node instanceof MemberExpression) && node instanceof Param && minRange.node.parentNode instanceof BindAttribute) {
|
|
975
|
+
return null;
|
|
976
|
+
}
|
|
977
|
+
// 修改element引发view改名
|
|
978
|
+
if (node instanceof ViewElement && minRange.node instanceof View) {
|
|
979
|
+
return null;
|
|
980
|
+
}
|
|
981
|
+
// params修改 查找View不需要修改
|
|
895
982
|
// 逻辑改名,触发了在定义里面的,element定义,的值,直接掠过
|
|
896
|
-
if (minRange.node instanceof View && node instanceof Logic) {
|
|
983
|
+
if (minRange.node instanceof View && (node instanceof Logic || node instanceof Param)) {
|
|
984
|
+
/**
|
|
985
|
+
* 这里过滤一下,一些查找引用,重复的内容,直接屏蔽掉,防止操作重复
|
|
986
|
+
* 因为在生成的时候 ,可能弄了一些副作用的引用
|
|
987
|
+
*/
|
|
988
|
+
// 本来是想在上面过滤一把的先放到这里匹配这两个的时候 就会找到
|
|
989
|
+
// refsList = refsList.filter((item) => {
|
|
990
|
+
// 屏蔽组件查找查到定义这里,也过滤一下
|
|
991
|
+
// if (item.lineText.includes(': nasl.ui.'))
|
|
992
|
+
// return false;
|
|
993
|
+
// return true;
|
|
994
|
+
// });
|
|
995
|
+
return null;
|
|
996
|
+
}
|
|
997
|
+
/**
|
|
998
|
+
* 理论上 logic setName只能自己触发,别的地方查到引用都不用重命名
|
|
999
|
+
* 流程改名不触发Logic改名
|
|
1000
|
+
* 如果是修改param查找到logic就不操作
|
|
1001
|
+
* 除非想在内部修改别的内容所以暂时屏蔽掉
|
|
1002
|
+
*/
|
|
1003
|
+
if (minRange.node instanceof Logic && node !== minRange.node) {
|
|
897
1004
|
return null;
|
|
898
1005
|
}
|
|
899
1006
|
} else {
|
|
@@ -910,40 +1017,82 @@ const naslServer = {
|
|
|
910
1017
|
},
|
|
911
1018
|
_addParamsPrepare(node: BaseNode, refsList: any[]) {
|
|
912
1019
|
const App = node.rootNode;
|
|
913
|
-
const
|
|
1020
|
+
const parantNode = node.parentNode as Logic | View;
|
|
914
1021
|
// 收集修改
|
|
915
1022
|
App.emit('collect:start', {
|
|
916
1023
|
actionMsg: '增加逻辑参数',
|
|
917
1024
|
});
|
|
918
1025
|
node.create({
|
|
919
1026
|
index: 0,
|
|
920
|
-
parentNode:
|
|
1027
|
+
parentNode: parantNode,
|
|
921
1028
|
parentKey: node.parentKey,
|
|
922
1029
|
});
|
|
923
1030
|
refsList.forEach((record) => {
|
|
924
1031
|
const fileNode = this.file2NodeMap.get(record.file);
|
|
925
1032
|
if (!fileNode)
|
|
926
1033
|
return null;
|
|
927
|
-
const minRange: MinRange = this._findMinRange(record, fileNode
|
|
1034
|
+
const minRange: MinRange = this._findMinRange(record, fileNode as FileNode);
|
|
928
1035
|
if (minRange) {
|
|
929
1036
|
// 如果找到节点是callLogic就去更新
|
|
930
1037
|
if (minRange.node instanceof CallLogic && node instanceof Param) {
|
|
931
|
-
minRange.node.setCalleeArgName(
|
|
1038
|
+
minRange.node.setCalleeArgName((parantNode) as Logic);
|
|
1039
|
+
}
|
|
1040
|
+
// 如果节点参数增加页面也要更新
|
|
1041
|
+
if (minRange.node instanceof Destination && node instanceof Param) {
|
|
1042
|
+
minRange.node.setViewArgument((parantNode) as View);
|
|
932
1043
|
}
|
|
933
1044
|
}
|
|
934
1045
|
});
|
|
935
1046
|
// 结束修改 ,批量操作
|
|
936
1047
|
App.emit('collect:end');
|
|
937
1048
|
},
|
|
1049
|
+
// 查找引用
|
|
1050
|
+
async findReferences(node: BaseNode) {
|
|
1051
|
+
let refsList = await naslServer._isHaveRef(node);
|
|
1052
|
+
// 如果查找引用查到自己里面的引用不展示
|
|
1053
|
+
refsList = refsList.filter((item) => {
|
|
1054
|
+
// 自己引用自己的过滤掉
|
|
1055
|
+
// 删除的时候过滤一把组件删除提示
|
|
1056
|
+
// 展示组件自己屏蔽掉
|
|
1057
|
+
return !item.isDefinition && !(item.lineText.includes(' = new nasl.ui.'));
|
|
1058
|
+
});
|
|
1059
|
+
// 最后返回的结果
|
|
1060
|
+
let result = new Map();
|
|
1061
|
+
// 树的构造,key: 一个file的node, 值是 [[logic, params],[logic, returns]]
|
|
1062
|
+
const resMap = new Map<BaseNode, Array<Array<QuoteNode>>>();
|
|
1063
|
+
// 普通节点和要输出的节点做一个映射,为了引用地址一样
|
|
1064
|
+
const nodeMap = new Map<BaseNode, QuoteNode>();
|
|
1065
|
+
try {
|
|
1066
|
+
refsList.forEach((record) => {
|
|
1067
|
+
const fileNode = this.file2NodeMap.get(record.file);
|
|
1068
|
+
if (!fileNode)
|
|
1069
|
+
return;
|
|
1070
|
+
const minRange = this._findMinRange(record, fileNode as FileNode);
|
|
1071
|
+
// 过滤一把不需要改的信息
|
|
1072
|
+
if (minRange) {
|
|
1073
|
+
// 拼装树
|
|
1074
|
+
naslServer._getTreeMap(minRange, fileNode, resMap, nodeMap);
|
|
1075
|
+
}
|
|
1076
|
+
});
|
|
1077
|
+
console.log(resMap, 'resMap');
|
|
1078
|
+
if (resMap.size > 0) {
|
|
1079
|
+
result = naslServer.handleTreeMap(resMap);
|
|
1080
|
+
}
|
|
1081
|
+
} catch (err) {
|
|
1082
|
+
console.log(err);
|
|
1083
|
+
}
|
|
1084
|
+
console.log(result);
|
|
1085
|
+
return result;
|
|
1086
|
+
},
|
|
938
1087
|
// 获取节点的上层渲染
|
|
939
|
-
_getTreeMap(minRange: MinRange, fileNode: BaseNode, resMap:
|
|
1088
|
+
_getTreeMap(minRange: MinRange, fileNode: BaseNode, resMap: Map<BaseNode, Array<Array<QuoteNode>>>, nodeMap: Map<BaseNode, QuoteNode>) {
|
|
940
1089
|
const minRangeNode = minRange.node;
|
|
941
1090
|
let parantNode = minRangeNode;
|
|
942
1091
|
// 顺序队列
|
|
943
1092
|
const queue: any[] = [];
|
|
944
1093
|
// 先插入自己,如果没有在往上找,
|
|
945
1094
|
// 一直到file节点的父级
|
|
946
|
-
while (parantNode
|
|
1095
|
+
while (!(parantNode instanceof App)) {
|
|
947
1096
|
// 找到上一级 在map对象中构造出他的子集
|
|
948
1097
|
const currentNode = parantNode;
|
|
949
1098
|
parantNode = parantNode.parentNode;
|
|
@@ -951,11 +1100,12 @@ const naslServer = {
|
|
|
951
1100
|
// 因为部分节点没有name,先过滤掉
|
|
952
1101
|
// if (currentNode.name) {
|
|
953
1102
|
// }
|
|
954
|
-
|
|
955
1103
|
// 排除一些不放入集合的节点
|
|
956
1104
|
let isNeedPush = true;
|
|
957
1105
|
// 如果不是ViewElement 或者 Assignment , 或者如果是的话, 排除l-root
|
|
958
|
-
if (currentNode instanceof ViewElement && (currentNode as ViewElement).tag
|
|
1106
|
+
if (currentNode instanceof ViewElement && (currentNode as ViewElement).tag === 'l-root')
|
|
1107
|
+
isNeedPush = false;
|
|
1108
|
+
else if (currentNode instanceof Argument)
|
|
959
1109
|
isNeedPush = false;
|
|
960
1110
|
else if (currentNode instanceof Assignment)
|
|
961
1111
|
isNeedPush = false;
|
|
@@ -965,13 +1115,11 @@ const naslServer = {
|
|
|
965
1115
|
isNeedPush = false;
|
|
966
1116
|
else if (currentNode instanceof QueryFromExpression)
|
|
967
1117
|
isNeedPush = false;
|
|
968
|
-
|
|
969
|
-
isNeedPush = false;
|
|
1118
|
+
// 需要放到数组中
|
|
970
1119
|
if (isNeedPush) {
|
|
971
1120
|
// 名称
|
|
972
|
-
let name = currentNode.name || currentNode.concept;
|
|
973
1121
|
// 赋值图标
|
|
974
|
-
let icon =
|
|
1122
|
+
let icon = '';
|
|
975
1123
|
if (currentNode instanceof ViewElement)
|
|
976
1124
|
icon = 'element';
|
|
977
1125
|
else if (currentNode instanceof BindAttribute)
|
|
@@ -980,55 +1128,34 @@ const naslServer = {
|
|
|
980
1128
|
icon = 'logicNode';
|
|
981
1129
|
else if (currentNode instanceof CallLogic) {
|
|
982
1130
|
icon = 'interface';
|
|
983
|
-
name = '调用逻辑';
|
|
984
1131
|
}
|
|
985
|
-
|
|
1132
|
+
|
|
1133
|
+
// 相同节点使用一个引用
|
|
1134
|
+
if (nodeMap.get(currentNode)) {
|
|
1135
|
+
queue.unshift(nodeMap.get(currentNode));
|
|
1136
|
+
} else {
|
|
1137
|
+
const quoteNode: QuoteNode = { node: currentNode, expanded: true, icon };
|
|
1138
|
+
nodeMap.set(currentNode, quoteNode);
|
|
1139
|
+
queue.unshift(quoteNode);
|
|
1140
|
+
}
|
|
986
1141
|
}
|
|
987
1142
|
}
|
|
988
1143
|
|
|
989
|
-
const key = fileNode.name;
|
|
990
1144
|
// 一个logic 或者 view可能会有多个顺序队列
|
|
991
|
-
if (resMap
|
|
992
|
-
//
|
|
993
|
-
|
|
994
|
-
// const queues = resMap[key].queue;
|
|
995
|
-
// queues.forEach((item) => {
|
|
996
|
-
// if (item.length === queue.length) {
|
|
997
|
-
// let equalIndex = 0;
|
|
998
|
-
// item.forEach((queueItem, index) => {
|
|
999
|
-
// if (queueItem.name === queue[index].name)
|
|
1000
|
-
// equalIndex++;
|
|
1001
|
-
// });
|
|
1002
|
-
// console.log(equalIndex)
|
|
1003
|
-
// if (equalIndex === queue.length)
|
|
1004
|
-
// equalFlag = true;
|
|
1005
|
-
// }
|
|
1006
|
-
// });
|
|
1007
|
-
|
|
1008
|
-
// // 如果有值就return
|
|
1009
|
-
// if (equalFlag)
|
|
1010
|
-
// return;
|
|
1011
|
-
queue.length && resMap[key].queue.push(queue);
|
|
1145
|
+
if (resMap.get(fileNode)) {
|
|
1146
|
+
// 是否展示两个内容全等,但是两个queue的node可能不一样,但是只需要展示一个
|
|
1147
|
+
resMap.get(fileNode).push(queue);
|
|
1012
1148
|
} else {
|
|
1013
|
-
resMap[
|
|
1014
|
-
queue: queue.length ? [queue] : [],
|
|
1015
|
-
concept: fileNode.concept,
|
|
1016
|
-
name: fileNode.name,
|
|
1017
|
-
node: fileNode,
|
|
1018
|
-
};
|
|
1149
|
+
resMap.set(fileNode, [queue]);
|
|
1019
1150
|
}
|
|
1020
1151
|
},
|
|
1021
|
-
handleTreeMap(
|
|
1022
|
-
const treeNodeMap
|
|
1023
|
-
|
|
1152
|
+
handleTreeMap(resMap: Map<BaseNode, Array<Array<QuoteNode>>>) {
|
|
1153
|
+
const treeNodeMap = new Map();
|
|
1154
|
+
resMap.forEach((value, fileNode) => {
|
|
1024
1155
|
// 循环处理tree的queue
|
|
1025
|
-
const treeObj = naslServer.handleTreeQueue(
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
} else {
|
|
1029
|
-
treeNodeMap[val.concept] = [treeObj];
|
|
1030
|
-
}
|
|
1031
|
-
}
|
|
1156
|
+
const treeObj = naslServer.handleTreeQueue(value);
|
|
1157
|
+
treeNodeMap.set(fileNode, treeObj);
|
|
1158
|
+
});
|
|
1032
1159
|
return treeNodeMap;
|
|
1033
1160
|
},
|
|
1034
1161
|
/**
|
|
@@ -1037,30 +1164,26 @@ const naslServer = {
|
|
|
1037
1164
|
* @param arr 当前页面下的queue的二维数组,一个数组下有多条链路
|
|
1038
1165
|
* @returns 最后要使用到的节点和对应的子集
|
|
1039
1166
|
*/
|
|
1040
|
-
handleTreeQueue(
|
|
1041
|
-
const map
|
|
1042
|
-
let root:
|
|
1043
|
-
if (!
|
|
1167
|
+
handleTreeQueue(queueLists: Array<Array<QuoteNode>>) {
|
|
1168
|
+
const map = new Map<QuoteNode, Array<QuoteNode>>();
|
|
1169
|
+
let root: QuoteNode = null;
|
|
1170
|
+
if (!queueLists.length)
|
|
1044
1171
|
return;
|
|
1045
|
-
for (const
|
|
1172
|
+
for (const queueList of queueLists) {
|
|
1046
1173
|
let preNode = null;
|
|
1047
|
-
for (const
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
|
|
1051
|
-
if (!map[key]) {
|
|
1052
|
-
map[key] = [];
|
|
1174
|
+
for (const queueItem of queueList) {
|
|
1175
|
+
if (!map.get(queueItem)) {
|
|
1176
|
+
map.set(queueItem, []);
|
|
1053
1177
|
}
|
|
1054
1178
|
if (preNode) {
|
|
1055
|
-
const
|
|
1056
|
-
const find = map[preKey].find((item) => node.name === item.name);
|
|
1179
|
+
const find = map.get(preNode).find((item: QuoteNode) => item === queueItem);
|
|
1057
1180
|
if (!find) {
|
|
1058
|
-
map
|
|
1181
|
+
map.get(preNode).push(queueItem);
|
|
1059
1182
|
}
|
|
1060
1183
|
} else {
|
|
1061
|
-
root =
|
|
1184
|
+
root = queueItem;
|
|
1062
1185
|
}
|
|
1063
|
-
preNode =
|
|
1186
|
+
preNode = queueItem;
|
|
1064
1187
|
}
|
|
1065
1188
|
}
|
|
1066
1189
|
const children = naslServer._recursionCreateResult(root, map);
|
|
@@ -1072,14 +1195,12 @@ const naslServer = {
|
|
|
1072
1195
|
* @param map 当前所有节点的map对象
|
|
1073
1196
|
* @returns 当前节点,最后输出所有节点
|
|
1074
1197
|
*/
|
|
1075
|
-
_recursionCreateResult(root: QuoteNode, map:
|
|
1076
|
-
const
|
|
1077
|
-
const rootKey = root.name;
|
|
1078
|
-
const children = map[rootKey].map((item: QuoteNode) => naslServer._recursionCreateResult(item, map));
|
|
1198
|
+
_recursionCreateResult(root: QuoteNode, map: Map<QuoteNode, Array<QuoteNode>>) {
|
|
1199
|
+
const children = map.get(root).map((item: QuoteNode) => naslServer._recursionCreateResult(item, map));
|
|
1079
1200
|
if (children && children.length) {
|
|
1080
|
-
|
|
1201
|
+
root.children = children;
|
|
1081
1202
|
}
|
|
1082
|
-
return
|
|
1203
|
+
return root;
|
|
1083
1204
|
},
|
|
1084
1205
|
|
|
1085
1206
|
/**
|
|
@@ -1087,12 +1208,13 @@ const naslServer = {
|
|
|
1087
1208
|
* 当前this上下文 的Source 和 父级文件级别的节点
|
|
1088
1209
|
*/
|
|
1089
1210
|
getCurrentSource(node: BaseNode) {
|
|
1211
|
+
if (node instanceof App || node instanceof Theme)
|
|
1212
|
+
return { fileNode: null };
|
|
1090
1213
|
let sourceMap = node.sourceMap;
|
|
1091
1214
|
let fileNode = node;
|
|
1092
1215
|
// 如果没有sourceMap,就继续向上找 ,或者到module结束
|
|
1093
1216
|
// 如果 节点找到 app 或者module 停止
|
|
1094
|
-
|
|
1095
|
-
while (!sourceMap && fileNode && !(fileNode.parentNode instanceof App) && !(fileNode.parentNode instanceof Module)) {
|
|
1217
|
+
while (!sourceMap && fileNode && !(fileNode.parentNode instanceof App) && !(fileNode.parentNode instanceof Module) && !(fileNode instanceof View)) {
|
|
1096
1218
|
fileNode = fileNode.parentNode;
|
|
1097
1219
|
sourceMap = fileNode?.sourceMap;
|
|
1098
1220
|
}
|
|
@@ -1115,7 +1237,6 @@ const naslServer = {
|
|
|
1115
1237
|
// 获取element方法的可选值
|
|
1116
1238
|
getFieldKeySelectCompletion(node: BaseNode, fieldKey?: string) {
|
|
1117
1239
|
const { currentSource, fileNode } = naslServer.getCurrentSource(node);
|
|
1118
|
-
console.log(currentSource);
|
|
1119
1240
|
if (currentSource && fileNode) {
|
|
1120
1241
|
return naslServer._getFieldKeySelectCompletion({
|
|
1121
1242
|
file: (fileNode as FileNode).getEmbeddedFilePath(),
|
|
@@ -1163,11 +1284,49 @@ async function handleDelete(fileNode: BaseNode, targetNode: BaseNode, result: Re
|
|
|
1163
1284
|
// 更新文件之后
|
|
1164
1285
|
await naslServer.updateFiles({ outputFiles });
|
|
1165
1286
|
|
|
1166
|
-
const filesToCheck: Set<string> = new Set();
|
|
1167
1287
|
newRefs.refs.forEach((ref) => filesToCheck.add(ref.file));
|
|
1168
|
-
console.log('filesToCheck', filesToCheck, filesToCheck.size);
|
|
1169
|
-
await naslServer.getDiagnosticRecordsAndPushAll(Array.from(filesToCheck));
|
|
1170
1288
|
}
|
|
1289
|
+
BaseNode.prototype.findReadOnlyLogicUsage = function () {
|
|
1290
|
+
let targetNode;
|
|
1291
|
+
|
|
1292
|
+
if (this.parentNode.concept === 'Namespace' || this.parentNode.parentNode.concept === 'Namespace') {
|
|
1293
|
+
const sourceMap = this.parentNode.concept === 'Namespace' ? this.parentNode.parentNode.sourceMap : this.parentNode.parentNode.parentNode.sourceMap;
|
|
1294
|
+
for (const item of sourceMap) {
|
|
1295
|
+
const logic = item[0] as Logic;
|
|
1296
|
+
if (this.concept === 'Logic') {
|
|
1297
|
+
if (logic instanceof Logic)
|
|
1298
|
+
if (logic.calleewholeKey === (this as Logic).calleewholeKey) {
|
|
1299
|
+
targetNode = logic;
|
|
1300
|
+
break;
|
|
1301
|
+
}
|
|
1302
|
+
} else {
|
|
1303
|
+
if (logic instanceof Logic)
|
|
1304
|
+
if (logic.calleewholeKey === (this.parentNode as Logic).calleewholeKey) {
|
|
1305
|
+
targetNode = logic;
|
|
1306
|
+
break;
|
|
1307
|
+
}
|
|
1308
|
+
}
|
|
1309
|
+
}
|
|
1310
|
+
} else if (this.parentNode.concept === 'Module') {
|
|
1311
|
+
// 父级是模块的还是用它本身去查找引用
|
|
1312
|
+
targetNode = this;
|
|
1313
|
+
} else {
|
|
1314
|
+
const sourceMap = this.parentNode.sourceMap;
|
|
1315
|
+
for (const item of sourceMap) {
|
|
1316
|
+
const logic = item[0] as Logic;
|
|
1317
|
+
if (logic.getNamespace && logic.getNamespace() === (this as Logic).getNamespace()) {
|
|
1318
|
+
targetNode = logic;
|
|
1319
|
+
break;
|
|
1320
|
+
}
|
|
1321
|
+
}
|
|
1322
|
+
}
|
|
1323
|
+
|
|
1324
|
+
try {
|
|
1325
|
+
return naslServer.findReferences(targetNode);
|
|
1326
|
+
} catch (err) {
|
|
1327
|
+
console.log(err);
|
|
1328
|
+
}
|
|
1329
|
+
};
|
|
1171
1330
|
// 查找引用
|
|
1172
1331
|
BaseNode.prototype.findUsage = function findUsage() {
|
|
1173
1332
|
try {
|
|
@@ -1193,7 +1352,7 @@ BaseNode.prototype.changeName = async function changeName(newValue: string, upda
|
|
|
1193
1352
|
*/
|
|
1194
1353
|
const res = naslServer._renamePrepare(this, refsList, newValue);
|
|
1195
1354
|
if (res.length <= 1) {
|
|
1196
|
-
(this as
|
|
1355
|
+
(this as SetNameNode).setName(newValue);
|
|
1197
1356
|
} else {
|
|
1198
1357
|
const callback = (value: boolean) => {
|
|
1199
1358
|
if (value) {
|
|
@@ -1203,7 +1362,7 @@ BaseNode.prototype.changeName = async function changeName(newValue: string, upda
|
|
|
1203
1362
|
actionMsg: '重命名并更新引用',
|
|
1204
1363
|
});
|
|
1205
1364
|
res.forEach((item) => {
|
|
1206
|
-
const itemNode = item.node as
|
|
1365
|
+
const itemNode = item.node as SetNameNode;
|
|
1207
1366
|
if (item.newValue) {
|
|
1208
1367
|
// 如果有指定的修改方法,就用那个,没有就修改名字
|
|
1209
1368
|
item.setTypeMethods ? itemNode[item.setTypeMethods](item.newValue) : itemNode.setName?.(item.newValue);
|
|
@@ -1214,12 +1373,13 @@ BaseNode.prototype.changeName = async function changeName(newValue: string, upda
|
|
|
1214
1373
|
// 结束修改 ,批量操作
|
|
1215
1374
|
App.emit('collect:end');
|
|
1216
1375
|
} else {
|
|
1217
|
-
(this as
|
|
1376
|
+
(this as SetNameNode).setName(newValue);
|
|
1218
1377
|
}
|
|
1219
1378
|
};
|
|
1220
1379
|
const confirmParms = {
|
|
1221
1380
|
actionType: 'rename',
|
|
1222
1381
|
node: this,
|
|
1382
|
+
newValue,
|
|
1223
1383
|
};
|
|
1224
1384
|
/**
|
|
1225
1385
|
* nasl和vue的通信,回退,要触发vue的watch。
|
|
@@ -1251,15 +1411,39 @@ BaseNode.prototype.prepareDelete = async function prepareDelete() {
|
|
|
1251
1411
|
* 查找这个节点是不是有依赖
|
|
1252
1412
|
*/
|
|
1253
1413
|
const node = this;
|
|
1254
|
-
|
|
1255
|
-
//
|
|
1414
|
+
let refsList = await naslServer._isHaveRef(node);
|
|
1415
|
+
// 删除的时候过滤一把组件删除提示
|
|
1416
|
+
refsList = refsList.filter((item) => {
|
|
1417
|
+
// 因为ui组件本身会多渲染一次,就先过滤一个
|
|
1418
|
+
return !(item.lineText.includes(': nasl.ui.'));
|
|
1419
|
+
});
|
|
1420
|
+
// 删除参数单独处理
|
|
1421
|
+
if (node instanceof Param) {
|
|
1422
|
+
const methodRefs: tsProtocol.ReferencesResponseItem[] = [];
|
|
1423
|
+
refsList.forEach((item) => {
|
|
1424
|
+
// 入参查找引用,查到logic 和自己,内容完全一样,就保留一个
|
|
1425
|
+
const find = methodRefs.find((findItem) => item.lineText === findItem.lineText);
|
|
1426
|
+
if (!find) {
|
|
1427
|
+
methodRefs.push(item);
|
|
1428
|
+
}
|
|
1429
|
+
});
|
|
1430
|
+
refsList = methodRefs;
|
|
1431
|
+
}
|
|
1432
|
+
|
|
1433
|
+
// delete的弹框展示
|
|
1256
1434
|
const confirmParms = {
|
|
1257
1435
|
actionType: 'delete',
|
|
1258
1436
|
tipFlag: false,
|
|
1259
1437
|
node,
|
|
1438
|
+
icon: 'warning',
|
|
1260
1439
|
};
|
|
1261
1440
|
let callback = null;
|
|
1262
1441
|
if (refsList.length <= 1) {
|
|
1442
|
+
// 页面组件直接删除然后return
|
|
1443
|
+
if (node instanceof ViewElement) {
|
|
1444
|
+
this.delete();
|
|
1445
|
+
return;
|
|
1446
|
+
}
|
|
1263
1447
|
callback = () => {
|
|
1264
1448
|
// Structure 和 Interface是内部有delete方法
|
|
1265
1449
|
if (node instanceof Structure || node instanceof Interface) {
|
|
@@ -1272,12 +1456,27 @@ BaseNode.prototype.prepareDelete = async function prepareDelete() {
|
|
|
1272
1456
|
// 如果有依赖就有一个查找引用提示
|
|
1273
1457
|
confirmParms.tipFlag = true;
|
|
1274
1458
|
const node = this;
|
|
1459
|
+
|
|
1460
|
+
// 删除页面或者流程
|
|
1461
|
+
if (node instanceof View || node instanceof Process) {
|
|
1462
|
+
/**
|
|
1463
|
+
* 查找这个页面是不是有依赖
|
|
1464
|
+
*/
|
|
1465
|
+
let viewPath = (this as FileNode).getEmbeddedFilePath();
|
|
1466
|
+
viewPath = viewPath.slice(0, viewPath.length - 3);
|
|
1467
|
+
const find = refsList.find((record) => !record.file.includes(viewPath));
|
|
1468
|
+
// 如果没有别的文件的依赖,就直接delete
|
|
1469
|
+
if (!find) {
|
|
1470
|
+
this.delete();
|
|
1471
|
+
return;
|
|
1472
|
+
}
|
|
1473
|
+
}
|
|
1275
1474
|
callback = () => {
|
|
1276
1475
|
// removeParam
|
|
1277
1476
|
// 跟rename 还不太一样,部分修改依赖修改好的值,然后在下面的修改需要把自己传递进去
|
|
1278
1477
|
if (node instanceof Param) {
|
|
1279
1478
|
const App = this.rootNode;
|
|
1280
|
-
const
|
|
1479
|
+
const parentNode = this.parentNode;
|
|
1281
1480
|
// 收集修改
|
|
1282
1481
|
App.emit('collect:start', {
|
|
1283
1482
|
actionMsg: '删除参数',
|
|
@@ -1287,10 +1486,13 @@ BaseNode.prototype.prepareDelete = async function prepareDelete() {
|
|
|
1287
1486
|
const fileNode = naslServer.file2NodeMap.get(record.file);
|
|
1288
1487
|
if (!fileNode)
|
|
1289
1488
|
return null;
|
|
1290
|
-
const minRange: MinRange = naslServer._findMinRange(record, fileNode
|
|
1489
|
+
const minRange: MinRange = naslServer._findMinRange(record, fileNode as FileNode);
|
|
1291
1490
|
if (minRange) {
|
|
1292
1491
|
if (minRange.node instanceof CallLogic) {
|
|
1293
|
-
minRange.node.setCalleeArgName(
|
|
1492
|
+
minRange.node.setCalleeArgName(parentNode as Logic);
|
|
1493
|
+
}
|
|
1494
|
+
if (minRange.node instanceof Destination) {
|
|
1495
|
+
minRange.node.setViewArgument(parentNode as View);
|
|
1294
1496
|
}
|
|
1295
1497
|
}
|
|
1296
1498
|
});
|
|
@@ -1310,7 +1512,7 @@ BaseNode.prototype.prepareDelete = async function prepareDelete() {
|
|
|
1310
1512
|
const fileNode = naslServer.file2NodeMap.get(record.file);
|
|
1311
1513
|
if (!fileNode)
|
|
1312
1514
|
return null;
|
|
1313
|
-
const minRange: MinRange = naslServer._findMinRange(record, fileNode
|
|
1515
|
+
const minRange: MinRange = naslServer._findMinRange(record, fileNode as FileNode);
|
|
1314
1516
|
if (minRange) {
|
|
1315
1517
|
if (minRange.node instanceof Interface) {
|
|
1316
1518
|
minRange.node.delete();
|
|
@@ -1319,6 +1521,7 @@ BaseNode.prototype.prepareDelete = async function prepareDelete() {
|
|
|
1319
1521
|
});
|
|
1320
1522
|
// 结束修改 ,批量操作
|
|
1321
1523
|
App.emit('collect:end');
|
|
1524
|
+
return;
|
|
1322
1525
|
}
|
|
1323
1526
|
// 删除权限节点
|
|
1324
1527
|
if (node instanceof Role) {
|
|
@@ -1332,7 +1535,7 @@ BaseNode.prototype.prepareDelete = async function prepareDelete() {
|
|
|
1332
1535
|
const fileNode = naslServer.file2NodeMap.get(record.file);
|
|
1333
1536
|
if (!fileNode)
|
|
1334
1537
|
return null;
|
|
1335
|
-
const minRange: MinRange = naslServer._findMinRange(record, fileNode
|
|
1538
|
+
const minRange: MinRange = naslServer._findMinRange(record, fileNode as FileNode);
|
|
1336
1539
|
if (minRange) {
|
|
1337
1540
|
if (minRange.node instanceof View || minRange.node instanceof ViewElement) {
|
|
1338
1541
|
// oldName旧的节点存的值
|
|
@@ -1349,6 +1552,10 @@ BaseNode.prototype.prepareDelete = async function prepareDelete() {
|
|
|
1349
1552
|
return;
|
|
1350
1553
|
}
|
|
1351
1554
|
|
|
1555
|
+
// 删除页面或者流程,如果上一步没有return 就说明他是有别的引用的,会有引用弹框
|
|
1556
|
+
if (node instanceof View || node instanceof Process) {
|
|
1557
|
+
this.delete();
|
|
1558
|
+
}
|
|
1352
1559
|
// 其余的都直接调用删除
|
|
1353
1560
|
// Structure 和 Interface是内部有delete方法
|
|
1354
1561
|
if (node instanceof Structure || node instanceof Interface) {
|
|
@@ -1398,19 +1605,22 @@ async function handleChange(fileNode: BaseNode, targetNode: BaseNode, result: Re
|
|
|
1398
1605
|
line: EmbeddedTSFileLineMap[fileNode.concept] ?? 2,
|
|
1399
1606
|
offset: 6,
|
|
1400
1607
|
});
|
|
1401
|
-
const filesToCheck: Set<string> = new Set();
|
|
1402
1608
|
|
|
1403
1609
|
newRefs.refs.forEach((ref) => filesToCheck.add(ref.file));
|
|
1404
1610
|
// 唤起建立连接弹框
|
|
1405
1611
|
// 文件级别的建立连接采取提醒
|
|
1406
|
-
if (
|
|
1407
|
-
|
|
1408
|
-
|
|
1409
|
-
|
|
1410
|
-
|
|
1411
|
-
|
|
1612
|
+
if (action === 'create' && (targetNode as any).__init) {
|
|
1613
|
+
// 清除临时状态, 完成本次创建
|
|
1614
|
+
delete (targetNode as any).__init;
|
|
1615
|
+
if (fileNode === targetNode && filesToCheck.size > 1) {
|
|
1616
|
+
const confirmParms = {
|
|
1617
|
+
actionType: 'createEstablishConnection',
|
|
1618
|
+
node: fileNode,
|
|
1619
|
+
icon: 'success',
|
|
1620
|
+
};
|
|
1621
|
+
invokeCommand('tsConfirm.open', confirmParms, () => {});
|
|
1622
|
+
}
|
|
1412
1623
|
}
|
|
1413
|
-
await naslServer.getDiagnosticRecordsAndPushAll(Array.from(filesToCheck));
|
|
1414
1624
|
}
|
|
1415
1625
|
|
|
1416
1626
|
/**
|
|
@@ -1424,7 +1634,6 @@ async function handleChange(fileNode: BaseNode, targetNode: BaseNode, result: Re
|
|
|
1424
1634
|
async function handleRename(fileNode: BaseNode, targetNode: BaseNode, result: ReturnType<Structure['toEmbeddedTSFile']>, oldFilePath?: string) {
|
|
1425
1635
|
// rename 场景
|
|
1426
1636
|
const outputFiles = [{ file: result.filePath, fileContent: result.code }];
|
|
1427
|
-
const filesToCheck: Set<string> = new Set();
|
|
1428
1637
|
// 如果是要修改顶级文件名
|
|
1429
1638
|
// file节点和当前改得是同一节点
|
|
1430
1639
|
if (fileNode === targetNode) {
|
|
@@ -1459,36 +1668,98 @@ async function handleRename(fileNode: BaseNode, targetNode: BaseNode, result: Re
|
|
|
1459
1668
|
|
|
1460
1669
|
// 文件级别重命名,有依赖才唤起弹框
|
|
1461
1670
|
// 唤起重命名,提示有连接弹框
|
|
1462
|
-
|
|
1463
|
-
|
|
1464
|
-
|
|
1465
|
-
|
|
1466
|
-
|
|
1467
|
-
|
|
1468
|
-
|
|
1671
|
+
// 重命名建立连接先不展示弹框了
|
|
1672
|
+
|
|
1673
|
+
// if (newRefFileList.size > 1) {
|
|
1674
|
+
// const confirmParms = {
|
|
1675
|
+
// actionType: 'renameEstablishConnection',
|
|
1676
|
+
// node: fileNode,
|
|
1677
|
+
// icon: 'success',
|
|
1678
|
+
// };
|
|
1679
|
+
// invokeCommand('tsConfirm.open', confirmParms, () => {});
|
|
1680
|
+
// }
|
|
1469
1681
|
} else {
|
|
1470
1682
|
// 查一下当前属性依赖的文件
|
|
1471
1683
|
const { currentSource, fileNode } = naslServer.getCurrentSource(targetNode);
|
|
1472
|
-
|
|
1473
|
-
|
|
1474
|
-
|
|
1475
|
-
|
|
1476
|
-
|
|
1477
|
-
|
|
1478
|
-
|
|
1479
|
-
|
|
1684
|
+
if (currentSource) {
|
|
1685
|
+
const oldRefs = await naslServer.references({
|
|
1686
|
+
file: (fileNode as FileNode).getEmbeddedFilePath(),
|
|
1687
|
+
line: lsp2tspNumber(currentSource.range.start.line),
|
|
1688
|
+
offset: lsp2tspNumber(currentSource.range.start.character),
|
|
1689
|
+
});
|
|
1690
|
+
oldRefs.refs.forEach((ref) => filesToCheck.add(ref.file));
|
|
1691
|
+
// 更新文件之后
|
|
1692
|
+
await naslServer.updateFiles({ outputFiles });
|
|
1480
1693
|
|
|
1481
|
-
|
|
1482
|
-
|
|
1483
|
-
|
|
1484
|
-
|
|
1485
|
-
|
|
1486
|
-
|
|
1694
|
+
const newRefs2 = await naslServer.references({
|
|
1695
|
+
file: (fileNode as FileNode).getEmbeddedFilePath(),
|
|
1696
|
+
line: lsp2tspNumber(currentSource.range.start.line),
|
|
1697
|
+
offset: lsp2tspNumber(currentSource.range.start.character),
|
|
1698
|
+
});
|
|
1699
|
+
newRefs2.refs.forEach((ref) => filesToCheck.add(ref.file));
|
|
1700
|
+
}
|
|
1487
1701
|
}
|
|
1702
|
+
}
|
|
1703
|
+
|
|
1704
|
+
/**
|
|
1705
|
+
* 处理一些节点操作,子节点需要更新并且check的场景
|
|
1706
|
+
* 因为删除,新增父页面,或者重命名会一起
|
|
1707
|
+
* 删除或者新增view而且他有子集 就要执行同样的操作
|
|
1708
|
+
* @param action 当前操作类型
|
|
1709
|
+
* @param fileNode 文件节点
|
|
1710
|
+
* @param targetNode 操作节点 这里要两个相等才会走家去面对哦逻辑
|
|
1711
|
+
* @param oldpath 触发内容的oldpath
|
|
1712
|
+
*/
|
|
1713
|
+
async function incidentalAction(action: string, fileNode: BaseNode, targetNode: BaseNode, oldpath?: string) {
|
|
1714
|
+
if ((action === 'create' || action === 'delete' || (action === 'update' && oldpath)) && fileNode === targetNode) {
|
|
1715
|
+
// 删除或者新增页面
|
|
1716
|
+
if (fileNode instanceof View && fileNode.children?.length) {
|
|
1717
|
+
const fileNodeChildren = fileNode.children;
|
|
1718
|
+
for (let i = 0; i < fileNodeChildren.length; i++) {
|
|
1719
|
+
const fileNodeItem = fileNodeChildren[i];
|
|
1720
|
+
const result = (fileNodeItem as FileNode).toEmbeddedTSFile();
|
|
1721
|
+
if (action === 'create') {
|
|
1722
|
+
await handleChange(fileNodeItem, fileNodeItem, result, action);
|
|
1723
|
+
await incidentalAction(action, fileNodeItem, fileNodeItem);
|
|
1724
|
+
} else if (action === 'delete') {
|
|
1725
|
+
await handleDelete(fileNodeItem, fileNodeItem, result);
|
|
1726
|
+
await incidentalAction(action, fileNodeItem, fileNodeItem);
|
|
1727
|
+
} else if (action === 'update' && oldpath) {
|
|
1728
|
+
const parentPath = oldpath.replace('.ts', '/');
|
|
1729
|
+
const currentOldPath = parentPath + fileNodeItem.name + '.ts';
|
|
1730
|
+
// 因为重命名这里只有当前修改父级的 旧名称, 所以他的子集也要根据旧名称去查依赖 更新内容
|
|
1731
|
+
await handleRename(fileNodeItem, fileNodeItem, result, currentOldPath);
|
|
1732
|
+
await incidentalAction(action, fileNodeItem, fileNodeItem, currentOldPath);
|
|
1733
|
+
}
|
|
1734
|
+
};
|
|
1735
|
+
}
|
|
1736
|
+
// 删除或新增模块
|
|
1737
|
+
// 需要把下面的哦内容全部都更新一遍
|
|
1738
|
+
if (fileNode instanceof Module) {
|
|
1739
|
+
const module: Module = (targetNode) as Module;
|
|
1740
|
+
const results: Array<ReturnType<Structure['toEmbeddedTSFile']>> = [];
|
|
1741
|
+
naslServer.contentToFile(module, results);
|
|
1742
|
+
for (let i = 0; i < results.length; i++) {
|
|
1743
|
+
const result = results[i];
|
|
1744
|
+
const node = naslServer.file2NodeMap.get(result.filePath);
|
|
1745
|
+
if (action === 'create') {
|
|
1746
|
+
await handleChange(node, node, result, action);
|
|
1747
|
+
} else {
|
|
1748
|
+
await handleDelete(node, node, result);
|
|
1749
|
+
}
|
|
1750
|
+
};
|
|
1488
1751
|
|
|
1489
|
-
|
|
1490
|
-
|
|
1491
|
-
|
|
1752
|
+
// 删除模块通知更新列表
|
|
1753
|
+
if (action === 'delete') {
|
|
1754
|
+
try {
|
|
1755
|
+
// 如果已经
|
|
1756
|
+
invokeCommand('module.delete', true);
|
|
1757
|
+
} catch (err) {
|
|
1758
|
+
console.log('module.delete', '组件销毁了,不用唤起了');
|
|
1759
|
+
}
|
|
1760
|
+
}
|
|
1761
|
+
}
|
|
1762
|
+
}
|
|
1492
1763
|
}
|
|
1493
1764
|
|
|
1494
1765
|
async function receiveHandleChange($event: EventPayload) {
|
|
@@ -1498,7 +1769,11 @@ async function receiveHandleChange($event: EventPayload) {
|
|
|
1498
1769
|
// 当前操作的文件节点
|
|
1499
1770
|
const { fileNode } = naslServer.getCurrentSource(targetNode);
|
|
1500
1771
|
// 如果是导入模块就,就引入对应模块,先不处理module和Configuration,下面的内容会自动创建
|
|
1501
|
-
if (fileNode instanceof Module || fileNode instanceof Configuration) {
|
|
1772
|
+
if (!fileNode || fileNode instanceof Module || fileNode instanceof Configuration) {
|
|
1773
|
+
// module单独处理
|
|
1774
|
+
if (fileNode instanceof Module) {
|
|
1775
|
+
await incidentalAction(action, fileNode, targetNode);
|
|
1776
|
+
}
|
|
1502
1777
|
return;
|
|
1503
1778
|
}
|
|
1504
1779
|
|
|
@@ -1518,25 +1793,50 @@ async function receiveHandleChange($event: EventPayload) {
|
|
|
1518
1793
|
|
|
1519
1794
|
fileNode.sourceMap = result.sourceMap;
|
|
1520
1795
|
if (action === 'update' || action === 'create') {
|
|
1521
|
-
if ($event?.field !== 'name')
|
|
1796
|
+
if ($event?.field !== 'name') {
|
|
1522
1797
|
await handleChange(fileNode, targetNode, result, action);
|
|
1523
|
-
|
|
1524
|
-
|
|
1798
|
+
await incidentalAction(action, fileNode, targetNode);
|
|
1799
|
+
} else {
|
|
1800
|
+
const oldpath = (fileNode as FileNode).getEmbeddedFilePath($event.oldObject.name);
|
|
1801
|
+
await handleRename(fileNode, targetNode, result, oldpath);
|
|
1802
|
+
await incidentalAction(action, fileNode, targetNode, oldpath);
|
|
1525
1803
|
}
|
|
1526
1804
|
}
|
|
1527
1805
|
// 删除
|
|
1528
1806
|
if (action === 'delete') {
|
|
1807
|
+
await incidentalAction(action, fileNode, targetNode);
|
|
1529
1808
|
await handleDelete(fileNode, targetNode, result);
|
|
1530
1809
|
}
|
|
1810
|
+
return true;
|
|
1531
1811
|
}
|
|
1532
1812
|
|
|
1533
1813
|
// 监听所有改变操作
|
|
1534
1814
|
embeddedTSEmitter.on('change', ($event: EventPayload) => {
|
|
1535
1815
|
// 收集到一个行为集合
|
|
1536
1816
|
const eventValue = $event.value;
|
|
1537
|
-
|
|
1538
|
-
|
|
1817
|
+
const stackList: Array<EventPayload> = [];
|
|
1818
|
+
eventValue.forEach(async (item: EventPayload) => {
|
|
1819
|
+
stackList.push(item.originEvent);
|
|
1539
1820
|
});
|
|
1821
|
+
|
|
1822
|
+
// 异步状态机,一个完成了在执行下一个
|
|
1823
|
+
function next() {
|
|
1824
|
+
const item = stackList.shift();
|
|
1825
|
+
receiveHandleChange(item).then(async() => {
|
|
1826
|
+
if (stackList.length) {
|
|
1827
|
+
next();
|
|
1828
|
+
} else {
|
|
1829
|
+
console.log('filesToCheck', filesToCheck, filesToCheck.size);
|
|
1830
|
+
await naslServer.getDiagnosticRecordsAndPushAll(Array.from(filesToCheck));
|
|
1831
|
+
filesToCheck.clear();
|
|
1832
|
+
}
|
|
1833
|
+
});
|
|
1834
|
+
}
|
|
1835
|
+
|
|
1836
|
+
// 如果有长度开始执行状态机
|
|
1837
|
+
if (stackList.length) {
|
|
1838
|
+
next();
|
|
1839
|
+
}
|
|
1540
1840
|
});
|
|
1541
1841
|
|
|
1542
1842
|
naslServer.messager.options.context = naslServer;
|