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