@lcap/nasl 1.0.0-alpha.9 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/out/automate/engine/index.d.ts +3 -0
- package/out/automate/engine/index.js +513 -0
- package/out/automate/engine/index.js.map +1 -0
- package/out/automate/engine/utils.d.ts +24 -0
- package/out/automate/engine/utils.js +363 -0
- package/out/automate/engine/utils.js.map +1 -0
- package/out/common/BaseNode.d.ts +20 -0
- package/out/common/BaseNode.js +219 -81
- package/out/common/BaseNode.js.map +1 -1
- package/out/concepts/App__.d.ts +18 -1
- package/out/concepts/App__.js +75 -35
- package/out/concepts/App__.js.map +1 -1
- package/out/concepts/Argument__.d.ts +5 -1
- package/out/concepts/Argument__.js +21 -3
- package/out/concepts/Argument__.js.map +1 -1
- package/out/concepts/Assignee__.d.ts +190 -0
- package/out/concepts/Assignee__.js +264 -0
- package/out/concepts/Assignee__.js.map +1 -0
- package/out/concepts/Assignment__.js +5 -0
- package/out/concepts/Assignment__.js.map +1 -1
- package/out/concepts/BinaryExpression__.js +8 -7
- package/out/concepts/BinaryExpression__.js.map +1 -1
- package/out/concepts/BindAttribute__.d.ts +19 -0
- package/out/concepts/BindAttribute__.js +54 -9
- package/out/concepts/BindAttribute__.js.map +1 -1
- package/out/concepts/BindDirective__.js +22 -2
- package/out/concepts/BindDirective__.js.map +1 -1
- package/out/concepts/BindEvent__.d.ts +2 -2
- package/out/concepts/BindEvent__.js +67 -34
- package/out/concepts/BindEvent__.js.map +1 -1
- package/out/concepts/BooleanLiteral__.d.ts +2 -0
- package/out/concepts/BooleanLiteral__.js +10 -0
- package/out/concepts/BooleanLiteral__.js.map +1 -1
- package/out/concepts/CallFunction__.js +41 -23
- package/out/concepts/CallFunction__.js.map +1 -1
- package/out/concepts/CallInterface__.d.ts +5 -0
- package/out/concepts/CallInterface__.js +238 -31
- package/out/concepts/CallInterface__.js.map +1 -1
- package/out/concepts/CallLogic__.d.ts +4 -4
- package/out/concepts/CallLogic__.js +110 -53
- package/out/concepts/CallLogic__.js.map +1 -1
- package/out/concepts/CallQueryComponent__.d.ts +7 -1
- package/out/concepts/CallQueryComponent__.js +44 -25
- package/out/concepts/CallQueryComponent__.js.map +1 -1
- package/out/concepts/Comment__.js +6 -2
- package/out/concepts/Comment__.js.map +1 -1
- package/out/concepts/CompletionProperty__.d.ts +3 -1
- package/out/concepts/CompletionProperty__.js +2 -0
- package/out/concepts/CompletionProperty__.js.map +1 -1
- package/out/concepts/ConfigGroup__.js +2 -2
- package/out/concepts/ConfigGroup__.js.map +1 -1
- package/out/concepts/ConfigProperty__.js +2 -2
- package/out/concepts/ConfigProperty__.js.map +1 -1
- package/out/concepts/Configuration__.js +2 -2
- package/out/concepts/Configuration__.js.map +1 -1
- package/out/concepts/Constant__.d.ts +1 -0
- package/out/concepts/Constant__.js +14 -0
- package/out/concepts/Constant__.js.map +1 -1
- package/out/concepts/Destination__.d.ts +12 -0
- package/out/concepts/Destination__.js +94 -18
- package/out/concepts/Destination__.js.map +1 -1
- package/out/concepts/End__.js +9 -1
- package/out/concepts/End__.js.map +1 -1
- package/out/concepts/EntityProperty__.d.ts +11 -0
- package/out/concepts/EntityProperty__.js +73 -5
- package/out/concepts/EntityProperty__.js.map +1 -1
- package/out/concepts/Entity__.d.ts +4 -1
- package/out/concepts/Entity__.js +37 -15
- package/out/concepts/Entity__.js.map +1 -1
- package/out/concepts/Enum__.d.ts +4 -0
- package/out/concepts/Enum__.js +18 -10
- package/out/concepts/Enum__.js.map +1 -1
- package/out/concepts/Event__.js +2 -2
- package/out/concepts/Event__.js.map +1 -1
- package/out/concepts/ForEachStatement__.js +9 -13
- package/out/concepts/ForEachStatement__.js.map +1 -1
- package/out/concepts/Function__.js +9 -9
- package/out/concepts/Function__.js.map +1 -1
- package/out/concepts/Identifier__.d.ts +3 -0
- package/out/concepts/Identifier__.js +76 -29
- package/out/concepts/Identifier__.js.map +1 -1
- package/out/concepts/IfStatement__.js +4 -4
- package/out/concepts/IfStatement__.js.map +1 -1
- package/out/concepts/InterfaceParam__.d.ts +6 -4
- package/out/concepts/InterfaceParam__.js +52 -19
- package/out/concepts/InterfaceParam__.js.map +1 -1
- package/out/concepts/Interface__.d.ts +42 -30
- package/out/concepts/Interface__.js +131 -15
- package/out/concepts/Interface__.js.map +1 -1
- package/out/concepts/JSBlock__.d.ts +1 -0
- package/out/concepts/JSBlock__.js +3 -0
- package/out/concepts/JSBlock__.js.map +1 -1
- package/out/concepts/LogicItem__.d.ts +2 -1
- package/out/concepts/LogicItem__.js +14 -0
- package/out/concepts/LogicItem__.js.map +1 -1
- package/out/concepts/Logic__.d.ts +16 -1
- package/out/concepts/Logic__.js +176 -33
- package/out/concepts/Logic__.js.map +1 -1
- package/out/concepts/MemberExpression__.d.ts +2 -0
- package/out/concepts/MemberExpression__.js +49 -12
- package/out/concepts/MemberExpression__.js.map +1 -1
- package/out/concepts/Module__.d.ts +126 -120
- package/out/concepts/Module__.js +28 -18
- package/out/concepts/Module__.js.map +1 -1
- package/out/concepts/Namespace__.d.ts +5 -1
- package/out/concepts/Namespace__.js +36 -25
- package/out/concepts/Namespace__.js.map +1 -1
- package/out/concepts/NullLiteral__.d.ts +3 -0
- package/out/concepts/NullLiteral__.js +11 -1
- package/out/concepts/NullLiteral__.js.map +1 -1
- package/out/concepts/NumericLiteral__.d.ts +1 -1
- package/out/concepts/NumericLiteral__.js +17 -6
- package/out/concepts/NumericLiteral__.js.map +1 -1
- package/out/concepts/Param__.d.ts +7 -3
- package/out/concepts/Param__.js +57 -28
- package/out/concepts/Param__.js.map +1 -1
- package/out/concepts/ProcessComponent__.js +4 -4
- package/out/concepts/ProcessComponent__.js.map +1 -1
- package/out/concepts/ProcessElement__.d.ts +0 -4
- package/out/concepts/ProcessElement__.js +112 -49
- package/out/concepts/ProcessElement__.js.map +1 -1
- package/out/concepts/ProcessOutcome__.js +1 -1
- package/out/concepts/ProcessOutcome__.js.map +1 -1
- package/out/concepts/Process__.d.ts +7 -1
- package/out/concepts/Process__.js +77 -81
- package/out/concepts/Process__.js.map +1 -1
- package/out/concepts/QueryAggregateExpression__.js +1 -1
- package/out/concepts/QueryAggregateExpression__.js.map +1 -1
- package/out/concepts/QueryFromExpression__.js +2 -2
- package/out/concepts/QueryFromExpression__.js.map +1 -1
- package/out/concepts/QueryJoinExpression__.js +4 -4
- package/out/concepts/QueryJoinExpression__.js.map +1 -1
- package/out/concepts/QueryLimitExpression__.js +3 -3
- package/out/concepts/QueryLimitExpression__.js.map +1 -1
- package/out/concepts/QuerySelectExpression__.js +2 -2
- package/out/concepts/QuerySelectExpression__.js.map +1 -1
- package/out/concepts/Return__.d.ts +4 -1
- package/out/concepts/Return__.js +67 -21
- package/out/concepts/Return__.js.map +1 -1
- package/out/concepts/Role__.d.ts +4 -0
- package/out/concepts/Role__.js +13 -4
- package/out/concepts/Role__.js.map +1 -1
- package/out/concepts/SqlQueryComponent__.js +2 -2
- package/out/concepts/SqlQueryComponent__.js.map +1 -1
- package/out/concepts/StringLiteral__.d.ts +1 -1
- package/out/concepts/StringLiteral__.js +21 -31
- package/out/concepts/StringLiteral__.js.map +1 -1
- package/out/concepts/StructureProperty__.d.ts +5 -4
- package/out/concepts/StructureProperty__.js +55 -26
- package/out/concepts/StructureProperty__.js.map +1 -1
- package/out/concepts/Structure__.d.ts +44 -30
- package/out/concepts/Structure__.js +42 -10
- package/out/concepts/Structure__.js.map +1 -1
- package/out/concepts/SwitchCase__.js +4 -4
- package/out/concepts/SwitchCase__.js.map +1 -1
- package/out/concepts/SwitchStatement__.js +2 -2
- package/out/concepts/SwitchStatement__.js.map +1 -1
- package/out/concepts/TypeAnnotation__.d.ts +5 -5
- package/out/concepts/TypeAnnotation__.js +74 -20
- package/out/concepts/TypeAnnotation__.js.map +1 -1
- package/out/concepts/UnaryExpression__.js +10 -8
- package/out/concepts/UnaryExpression__.js.map +1 -1
- package/out/concepts/Unparsed__.js +1 -1
- package/out/concepts/Unparsed__.js.map +1 -1
- package/out/concepts/ValidationRule__.d.ts +1 -0
- package/out/concepts/ValidationRule__.js +48 -13
- package/out/concepts/ValidationRule__.js.map +1 -1
- package/out/concepts/Variable__.d.ts +10 -1
- package/out/concepts/Variable__.js +70 -18
- package/out/concepts/Variable__.js.map +1 -1
- package/out/concepts/ViewComponent__.js +10 -10
- package/out/concepts/ViewComponent__.js.map +1 -1
- package/out/concepts/ViewElement__.d.ts +17 -11
- package/out/concepts/ViewElement__.js +299 -201
- package/out/concepts/ViewElement__.js.map +1 -1
- package/out/concepts/View__.d.ts +12 -13
- package/out/concepts/View__.js +106 -103
- package/out/concepts/View__.js.map +1 -1
- package/out/concepts/WhileStatement__.js +3 -3
- package/out/concepts/WhileStatement__.js.map +1 -1
- package/out/concepts/basics/stdlib/index.js +4 -1
- package/out/concepts/basics/stdlib/index.js.map +1 -1
- package/out/concepts/basics/stdlib/{nasl.validate.d.ts → nasl.auth.d.ts} +0 -0
- package/out/concepts/basics/stdlib/nasl.auth.js +30 -0
- package/out/concepts/basics/stdlib/nasl.auth.js.map +1 -0
- package/out/concepts/basics/stdlib/nasl.browser copy.d.ts +3 -0
- package/out/concepts/basics/stdlib/nasl.browser copy.js +70 -0
- package/out/concepts/basics/stdlib/nasl.browser copy.js.map +1 -0
- package/out/concepts/basics/stdlib/nasl.browser.d.ts +3 -0
- package/out/concepts/basics/stdlib/nasl.browser.js +41 -0
- package/out/concepts/basics/stdlib/nasl.browser.js.map +1 -0
- package/out/concepts/basics/stdlib/nasl.configuration.d.ts +3 -0
- package/out/concepts/basics/stdlib/nasl.configuration.js +25 -0
- package/out/concepts/basics/stdlib/nasl.configuration.js.map +1 -0
- package/out/concepts/basics/stdlib/nasl.ui.js +20 -0
- package/out/concepts/basics/stdlib/nasl.ui.js.map +1 -1
- package/out/concepts/basics/stdlib/nasl.util.js +149 -13
- package/out/concepts/basics/stdlib/nasl.util.js.map +1 -1
- package/out/concepts/basics/stdlib/nasl.validation.js +54 -20
- package/out/concepts/basics/stdlib/nasl.validation.js.map +1 -1
- package/out/concepts/basics/types/coreTypeList.js +11 -10
- package/out/concepts/basics/types/coreTypeList.js.map +1 -1
- package/out/concepts/index__.d.ts +1 -0
- package/out/concepts/index__.js +1 -0
- package/out/concepts/index__.js.map +1 -1
- package/out/config.d.ts +1 -2
- package/out/config.js +1 -2
- package/out/config.js.map +1 -1
- package/out/enums/KEYWORDS.d.ts +3 -0
- package/out/enums/KEYWORDS.js +1208 -0
- package/out/enums/KEYWORDS.js.map +1 -0
- package/out/enums/LEVEL_NAME_MAP.d.ts +26 -0
- package/out/enums/LEVEL_NAME_MAP.js +30 -0
- package/out/enums/LEVEL_NAME_MAP.js.map +1 -0
- package/out/eventBus.d.ts +3 -0
- package/out/eventBus.js +7 -0
- package/out/eventBus.js.map +1 -0
- package/out/generator/genBundleFiles.d.ts +7 -2
- package/out/generator/genBundleFiles.js +168 -27
- package/out/generator/genBundleFiles.js.map +1 -1
- package/out/generator/genMetaData.d.ts +20 -20
- package/out/generator/genMetaData.js +50 -15
- package/out/generator/genMetaData.js.map +1 -1
- package/out/index.d.ts +2 -0
- package/out/index.js +2 -0
- package/out/index.js.map +1 -1
- package/out/manager/diagnostic.d.ts +1 -1
- package/out/server/createUiTs.d.ts +1 -0
- package/out/server/createUiTs.js +49 -5
- package/out/server/createUiTs.js.map +1 -1
- package/out/server/entity2LogicNamespace.js +38 -23
- package/out/server/entity2LogicNamespace.js.map +1 -1
- package/out/server/getExtensionModules.js +2 -0
- package/out/server/getExtensionModules.js.map +1 -1
- package/out/server/getFunctions.d.ts +1 -0
- package/out/server/getFunctions.js +7 -1
- package/out/server/getFunctions.js.map +1 -1
- package/out/server/getLogics.js +63 -18
- package/out/server/getLogics.js.map +1 -1
- package/out/server/getMemberIdentifier.d.ts +16 -1
- package/out/server/getMemberIdentifier.js +279 -36
- package/out/server/getMemberIdentifier.js.map +1 -1
- package/out/server/getProcesses.d.ts +6 -1
- package/out/server/getProcesses.js +243 -1
- package/out/server/getProcesses.js.map +1 -1
- package/out/server/getScope.d.ts +11 -0
- package/out/server/getScope.js +45 -0
- package/out/server/getScope.js.map +1 -0
- package/out/server/index.js +4 -0
- package/out/server/index.js.map +1 -1
- package/out/server/naslServer.d.ts +30 -53
- package/out/server/naslServer.js +682 -363
- package/out/server/naslServer.js.map +1 -1
- package/out/server/process2LogicNamespace.d.ts +10 -0
- package/out/server/process2LogicNamespace.js +29 -1
- package/out/server/process2LogicNamespace.js.map +1 -1
- package/out/server/translator.d.ts +22 -3
- package/out/server/translator.js +367 -123
- package/out/server/translator.js.map +1 -1
- package/out/service/creator/add.configs.d.ts +1 -0
- package/out/service/creator/add.configs.js +68 -0
- package/out/service/creator/add.configs.js.map +1 -0
- package/out/service/creator/errHandles.d.ts +18 -0
- package/out/service/creator/errHandles.js +60 -0
- package/out/service/creator/errHandles.js.map +1 -0
- package/out/service/creator/index.d.ts +1 -0
- package/out/service/creator/index.js +72 -0
- package/out/service/creator/index.js.map +1 -0
- package/out/service/storage/api.d.ts +18 -0
- package/out/service/storage/api.js +17 -0
- package/out/service/storage/api.js.map +1 -0
- package/out/service/storage/init.js +200 -37
- package/out/service/storage/init.js.map +1 -1
- package/out/service/storage/service.d.ts +2 -0
- package/out/service/storage/service.js +10 -0
- package/out/service/storage/service.js.map +1 -0
- package/out/service/storage/storagePoint.d.ts +1 -14
- package/out/service/storage/storagePoint.js +16 -16
- package/out/service/storage/storagePoint.js.map +1 -1
- package/out/templator/genCreateBlock.js +6 -6
- package/out/templator/genCreateBlock.js.map +1 -1
- package/out/templator/genCurdEditMultipleKeyBlock.js +13 -17
- package/out/templator/genCurdEditMultipleKeyBlock.js.map +1 -1
- package/out/templator/genCurdMultipleKeyBlock.js +11 -11
- package/out/templator/genCurdMultipleKeyBlock.js.map +1 -1
- package/out/templator/genEditTableBlock.js +5 -5
- package/out/templator/genEditTableBlock.js.map +1 -1
- package/out/templator/genEnumSelectBlock.js +2 -2
- package/out/templator/genEnumSelectBlock.js.map +1 -1
- package/out/templator/genGetBlock.js +5 -3
- package/out/templator/genGetBlock.js.map +1 -1
- package/out/templator/genGridViewBlock.d.ts +3 -1
- package/out/templator/genGridViewBlock.js +61 -6
- package/out/templator/genGridViewBlock.js.map +1 -1
- package/out/templator/genQueryComponent.d.ts +2 -0
- package/out/templator/genQueryComponent.js +27 -14
- package/out/templator/genQueryComponent.js.map +1 -1
- package/out/templator/genTableBlock.d.ts +1 -1
- package/out/templator/genTableBlock.js +4 -5
- package/out/templator/genTableBlock.js.map +1 -1
- package/out/templator/genUpdateBlock.js +9 -10
- package/out/templator/genUpdateBlock.js.map +1 -1
- package/out/templator/utils.d.ts +13 -4
- package/out/templator/utils.js +8 -4
- package/out/templator/utils.js.map +1 -1
- package/out/test/fixtures/env.js +0 -1
- package/out/test/fixtures/env.js.map +1 -1
- package/out/test/units/page/Element.spec.js +3 -3
- package/out/test/units/page/Element.spec.js.map +1 -1
- package/out/test/units/temp/temp.spec.js +1 -1
- package/out/test/units/temp/temp.spec.js.map +1 -1
- package/out/utils/index.d.ts +6 -0
- package/out/utils/index.js +20 -1
- package/out/utils/index.js.map +1 -1
- package/package.json +2 -1
- package/src/automate/engine/index.js +116 -39
- package/src/automate/engine/utils.js +49 -19
- package/src/common/BaseNode.ts +215 -71
- package/src/concepts/App__.ts +77 -37
- package/src/concepts/Argument__.ts +23 -3
- package/src/concepts/Assignee__.ts +437 -0
- package/src/concepts/Assignment__.ts +4 -1
- package/src/concepts/BinaryExpression__.ts +9 -7
- package/src/concepts/BindAttribute__.ts +68 -8
- package/src/concepts/BindDirective__.ts +21 -2
- package/src/concepts/BindEvent__.ts +67 -23
- package/src/concepts/BooleanLiteral__.ts +8 -0
- package/src/concepts/CallFunction__.ts +38 -21
- package/src/concepts/CallInterface__.ts +236 -26
- package/src/concepts/CallLogic__.ts +114 -86
- package/src/concepts/CallQueryComponent__.ts +23 -15
- package/src/concepts/Comment__.ts +6 -2
- package/src/concepts/CompletionProperty__.ts +5 -1
- package/src/concepts/ConfigGroup__.ts +2 -2
- package/src/concepts/ConfigProperty__.ts +2 -2
- package/src/concepts/Configuration__.ts +2 -2
- package/src/concepts/Constant__.ts +12 -0
- package/src/concepts/Destination__.ts +101 -17
- package/src/concepts/End__.ts +8 -1
- package/src/concepts/EntityProperty__.ts +58 -5
- package/src/concepts/Entity__.ts +40 -23
- package/src/concepts/Enum__.ts +16 -11
- package/src/concepts/Event__.ts +2 -2
- package/src/concepts/ForEachStatement__.ts +14 -19
- package/src/concepts/Function__.ts +9 -9
- package/src/concepts/Identifier__.ts +83 -32
- package/src/concepts/IfStatement__.ts +4 -4
- package/src/concepts/InterfaceParam__.ts +52 -16
- package/src/concepts/Interface__.ts +128 -14
- package/src/concepts/JSBlock__.ts +4 -0
- package/src/concepts/LogicItem__.ts +16 -1
- package/src/concepts/Logic__.ts +173 -35
- package/src/concepts/MemberExpression__.ts +58 -14
- package/src/concepts/Module__.ts +27 -16
- package/src/concepts/Namespace__.ts +37 -25
- package/src/concepts/NullLiteral__.ts +8 -1
- package/src/concepts/NumericLiteral__.ts +17 -6
- package/src/concepts/Param__.ts +56 -15
- package/src/concepts/ProcessComponent__.ts +4 -4
- package/src/concepts/ProcessElement__.ts +138 -39
- package/src/concepts/ProcessOutcome__.ts +1 -1
- package/src/concepts/Process__.ts +81 -94
- package/src/concepts/QueryAggregateExpression__.ts +1 -1
- package/src/concepts/QueryFromExpression__.ts +2 -2
- package/src/concepts/QueryJoinExpression__.ts +4 -4
- package/src/concepts/QueryLimitExpression__.ts +3 -12
- package/src/concepts/QuerySelectExpression__.ts +2 -2
- package/src/concepts/Return__.ts +62 -15
- package/src/concepts/Role__.ts +5 -4
- package/src/concepts/SqlQueryComponent__.ts +2 -2
- package/src/concepts/StringLiteral__.ts +20 -31
- package/src/concepts/StructureProperty__.ts +50 -18
- package/src/concepts/Structure__.ts +30 -8
- package/src/concepts/SwitchCase__.ts +4 -4
- package/src/concepts/SwitchStatement__.ts +2 -2
- package/src/concepts/TypeAnnotation__.ts +58 -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 +63 -14
- package/src/concepts/ViewComponent__.ts +10 -10
- package/src/concepts/ViewElement__.ts +285 -162
- package/src/concepts/View__.ts +116 -70
- package/src/concepts/WhileStatement__.ts +4 -4
- package/src/concepts/basics/stdlib/index.ts +4 -2
- package/src/concepts/basics/stdlib/nasl.auth.ts +26 -0
- package/src/concepts/basics/stdlib/nasl.browser.ts +37 -0
- package/src/concepts/basics/stdlib/nasl.configuration.ts +21 -0
- package/src/concepts/basics/stdlib/nasl.ui.ts +20 -1
- package/src/concepts/basics/stdlib/nasl.util.ts +151 -13
- package/src/concepts/basics/stdlib/nasl.validation.ts +45 -11
- package/src/concepts/basics/types/coreTypeList.ts +11 -11
- package/src/concepts/index__.ts +1 -0
- package/src/config.ts +1 -2
- package/src/enums/KEYWORDS.ts +1206 -0
- package/src/{terms → enums}/LEVEL_NAME_MAP.ts +0 -0
- package/src/eventBus.ts +5 -0
- package/src/generator/genBundleFiles.ts +182 -30
- package/src/generator/genMetaData.ts +72 -21
- package/src/index.ts +2 -0
- package/src/manager/diagnostic.ts +1 -1
- package/src/server/createUiTs.ts +45 -7
- package/src/server/entity2LogicNamespace.ts +41 -25
- package/src/server/getExtensionModules.ts +2 -0
- package/src/server/getFunctions.ts +6 -0
- package/src/server/getLogics.ts +66 -19
- package/src/server/getMemberIdentifier.ts +233 -63
- package/src/server/getProcesses.ts +248 -4
- package/src/server/getScope.ts +50 -0
- package/src/server/index.ts +12 -1
- package/src/server/naslServer.ts +685 -387
- package/src/server/process2LogicNamespace.ts +30 -2
- package/src/server/translator.ts +423 -128
- package/src/service/config/index.js +1 -1
- package/src/service/creator/errHandles.js +5 -2
- package/src/service/creator/index.js +0 -6
- package/src/service/storage/api.js +14 -0
- package/src/service/storage/init.ts +198 -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 +6 -8
- package/src/templator/genGridViewBlock.ts +59 -9
- package/src/templator/genQueryComponent.ts +39 -28
- package/src/templator/genTableBlock.ts +5 -9
- package/src/templator/genUpdateBlock.ts +9 -11
- package/src/templator/utils.ts +9 -6
- package/src/test/fixtures/env.ts +0 -2
- package/src/test/units/page/Element.spec.ts +3 -3
- package/src/test/units/temp/temp.spec.ts +1 -1
- package/src/utils/index.ts +19 -0
- package/out/concepts/basics/stdlib/nasl.validate.js +0 -527
- package/out/concepts/basics/stdlib/nasl.validate.js.map +0 -1
- package/out/data/Module.d.ts +0 -34
- package/out/data/Module.js +0 -53
- package/out/data/Module.js.map +0 -1
- package/src/automate/engine/index.d.ts +0 -3
package/out/server/naslServer.js
CHANGED
|
@@ -3,7 +3,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.translateDiagnosticMessage = exports.transformType = void 0;
|
|
7
6
|
/// #if process.env.NODE_ENV
|
|
8
7
|
// import Worker from '../../../ts-worker/dist/bundle.js';
|
|
9
8
|
/// #else
|
|
@@ -12,9 +11,8 @@ exports.translateDiagnosticMessage = exports.transformType = void 0;
|
|
|
12
11
|
const Messager_1 = __importDefault(require("../common/Messager"));
|
|
13
12
|
const concepts_1 = require("../concepts");
|
|
14
13
|
const translator_1 = require("../translator");
|
|
14
|
+
const storage_1 = __importDefault(require("../service/storage"));
|
|
15
15
|
const translator_2 = require("./translator");
|
|
16
|
-
Object.defineProperty(exports, "transformType", { enumerable: true, get: function () { return translator_2.transformType; } });
|
|
17
|
-
Object.defineProperty(exports, "translateDiagnosticMessage", { enumerable: true, get: function () { return translator_2.translateDiagnosticMessage; } });
|
|
18
16
|
const common_1 = require("../common");
|
|
19
17
|
const diagnostic_1 = __importDefault(require("../manager/diagnostic"));
|
|
20
18
|
const createUiTs_1 = __importDefault(require("./createUiTs"));
|
|
@@ -22,6 +20,8 @@ const coreTypeList_1 = require("../concepts/basics/types/coreTypeList");
|
|
|
22
20
|
const EmbeddedTSFileLineMap = {
|
|
23
21
|
Entity: 3,
|
|
24
22
|
};
|
|
23
|
+
// 要Check的文件
|
|
24
|
+
const filesToCheck = new Set();
|
|
25
25
|
const worker = new Worker('/ts-worker.js');
|
|
26
26
|
const messager = new Messager_1.default({
|
|
27
27
|
protocol: 'ts-worker',
|
|
@@ -49,82 +49,130 @@ const naslServer = {
|
|
|
49
49
|
return this.messager.requestCommand('start');
|
|
50
50
|
},
|
|
51
51
|
async createUiTs(allComponent) {
|
|
52
|
-
const { code, elementsLogic } = await (0, createUiTs_1.default)(allComponent);
|
|
52
|
+
const { code, elementsLogic, naslStdlibMap } = await (0, createUiTs_1.default)(allComponent);
|
|
53
53
|
// 放入生產的uits文件
|
|
54
54
|
await naslServer.addFile({
|
|
55
55
|
file: 'nasl.ui.definition.ts',
|
|
56
56
|
fileContent: code,
|
|
57
57
|
});
|
|
58
|
+
Object.keys(naslStdlibMap).forEach(async (libFileName) => {
|
|
59
|
+
await naslServer.addFile({
|
|
60
|
+
file: '/' + libFileName,
|
|
61
|
+
fileContent: naslStdlibMap[libFileName],
|
|
62
|
+
});
|
|
63
|
+
});
|
|
58
64
|
naslServer.elementsLogic = elementsLogic;
|
|
59
65
|
// 全部文件加载完毕开始初始化
|
|
60
66
|
await naslServer.getDiagnosticRecordsAndPushAll();
|
|
61
67
|
},
|
|
62
68
|
contentToFile(module, results) {
|
|
63
69
|
module.structures.forEach((structure) => {
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
70
|
+
try {
|
|
71
|
+
const result = structure.toEmbeddedTSFile();
|
|
72
|
+
results.push(result);
|
|
73
|
+
// sourceMap都存在目录级别内容下,在页面层级下去找
|
|
74
|
+
structure.sourceMap = result.sourceMap;
|
|
75
|
+
this.file2NodeMap.set(result.filePath, structure);
|
|
76
|
+
}
|
|
77
|
+
catch (err) {
|
|
78
|
+
console.log(err);
|
|
79
|
+
}
|
|
69
80
|
});
|
|
70
81
|
module.entities.forEach((entity) => {
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
82
|
+
try {
|
|
83
|
+
const result = entity.toEmbeddedTSFile();
|
|
84
|
+
results.push(result);
|
|
85
|
+
// sourceMap都存在目录级别内容下,在页面层级下去找
|
|
86
|
+
entity.sourceMap = result.sourceMap;
|
|
87
|
+
this.file2NodeMap.set(result.filePath, entity);
|
|
88
|
+
}
|
|
89
|
+
catch (err) {
|
|
90
|
+
console.log(err);
|
|
91
|
+
}
|
|
76
92
|
});
|
|
77
93
|
module.interfaces.forEach((_interface) => {
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
94
|
+
try {
|
|
95
|
+
const result = _interface.toEmbeddedTSFile();
|
|
96
|
+
results.push(result);
|
|
97
|
+
// sourceMap都存在目录级别内容下,在页面层级下去找
|
|
98
|
+
_interface.sourceMap = result.sourceMap;
|
|
99
|
+
this.file2NodeMap.set(result.filePath, _interface);
|
|
100
|
+
}
|
|
101
|
+
catch (err) {
|
|
102
|
+
console.log(err);
|
|
103
|
+
}
|
|
83
104
|
});
|
|
84
105
|
module.enums.forEach((_enum) => {
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
106
|
+
try {
|
|
107
|
+
const result = _enum.toEmbeddedTSFile();
|
|
108
|
+
results.push(result);
|
|
109
|
+
// sourceMap都存在目录级别内容下,在页面层级下去找
|
|
110
|
+
_enum.sourceMap = result.sourceMap;
|
|
111
|
+
this.file2NodeMap.set(result.filePath, _enum);
|
|
112
|
+
}
|
|
113
|
+
catch (err) {
|
|
114
|
+
console.log(err);
|
|
115
|
+
}
|
|
90
116
|
});
|
|
91
117
|
module.logics.forEach((logic) => {
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
118
|
+
try {
|
|
119
|
+
if (!(logic instanceof concepts_1.Logic))
|
|
120
|
+
return;
|
|
121
|
+
const result = logic.toEmbeddedTSFile();
|
|
122
|
+
results.push(result);
|
|
123
|
+
logic.sourceMap = result.sourceMap;
|
|
124
|
+
this.file2NodeMap.set(result.filePath, logic);
|
|
125
|
+
}
|
|
126
|
+
catch (err) {
|
|
127
|
+
console.log(err);
|
|
128
|
+
}
|
|
98
129
|
});
|
|
99
130
|
// view的生成
|
|
100
131
|
naslServer.view2TSFile(module.views, results);
|
|
101
132
|
module.processes.forEach((process) => {
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
133
|
+
try {
|
|
134
|
+
const result = process.toEmbeddedTSFile();
|
|
135
|
+
results.push(result);
|
|
136
|
+
process.sourceMap = result.sourceMap;
|
|
137
|
+
this.file2NodeMap.set(result.filePath, process);
|
|
138
|
+
}
|
|
139
|
+
catch (err) {
|
|
140
|
+
console.log(err);
|
|
141
|
+
}
|
|
106
142
|
});
|
|
107
143
|
if (module instanceof concepts_1.App) {
|
|
108
144
|
module.roles.forEach((role) => {
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
145
|
+
try {
|
|
146
|
+
const result = role.toEmbeddedTSFile();
|
|
147
|
+
results.push(result);
|
|
148
|
+
// sourceMap都存在目录级别内容下,在页面层级下去找
|
|
149
|
+
role.sourceMap = result.sourceMap;
|
|
150
|
+
this.file2NodeMap.set(result.filePath, role);
|
|
151
|
+
}
|
|
152
|
+
catch (err) {
|
|
153
|
+
console.log(err);
|
|
154
|
+
}
|
|
114
155
|
});
|
|
115
156
|
}
|
|
116
157
|
},
|
|
117
158
|
view2TSFile(viewsChildren, results) {
|
|
118
|
-
//
|
|
119
|
-
viewsChildren.
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
159
|
+
// 如果有子页面
|
|
160
|
+
if (viewsChildren && viewsChildren.length) {
|
|
161
|
+
viewsChildren.forEach((view) => {
|
|
162
|
+
try {
|
|
163
|
+
const result = view.toEmbeddedTSFile();
|
|
164
|
+
results.push(result);
|
|
165
|
+
view.sourceMap = result.sourceMap;
|
|
166
|
+
this.file2NodeMap.set(result.filePath, view);
|
|
167
|
+
if (view.children.length) {
|
|
168
|
+
naslServer.view2TSFile(view.children, results);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
catch (err) {
|
|
172
|
+
console.log(err);
|
|
173
|
+
}
|
|
174
|
+
});
|
|
175
|
+
}
|
|
128
176
|
},
|
|
129
177
|
async openApp(app) {
|
|
130
178
|
const results = [];
|
|
@@ -154,20 +202,16 @@ const naslServer = {
|
|
|
154
202
|
callback();
|
|
155
203
|
});
|
|
156
204
|
},
|
|
157
|
-
async
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
fileContent: result.code,
|
|
168
|
-
}));
|
|
169
|
-
await this.writeFiles(files);
|
|
170
|
-
this._debugInFileStorage(module.parentNode, files);
|
|
205
|
+
async refreshApp(app) {
|
|
206
|
+
// 清除所有问题
|
|
207
|
+
diagnostic_1.default.clear();
|
|
208
|
+
await naslServer.deleteDirectoryFiles({ directoryName: '/embedded' });
|
|
209
|
+
// 清楚check count的数量
|
|
210
|
+
await this.messager.requestCommand('_clearTimeout');
|
|
211
|
+
// 重新加载app下内容
|
|
212
|
+
await naslServer.openApp(app);
|
|
213
|
+
// 重新check一遍所有内容
|
|
214
|
+
await naslServer.getDiagnosticRecordsAndPushAll();
|
|
171
215
|
},
|
|
172
216
|
/**
|
|
173
217
|
* 初始化之前添加文件
|
|
@@ -182,14 +226,6 @@ const naslServer = {
|
|
|
182
226
|
writeFiles(files) {
|
|
183
227
|
return this.messager.requestCommand('writeFiles', files);
|
|
184
228
|
},
|
|
185
|
-
/**
|
|
186
|
-
* 新增或修改文件
|
|
187
|
-
* @param {*} files
|
|
188
|
-
* @returns
|
|
189
|
-
*/
|
|
190
|
-
outputFiles(files) {
|
|
191
|
-
return this.messager.requestCommand('outputFiles', files);
|
|
192
|
-
},
|
|
193
229
|
/**
|
|
194
230
|
* 新增、修改
|
|
195
231
|
* 删除文件 文件用修改内容为空模拟,防止报错
|
|
@@ -198,15 +234,25 @@ const naslServer = {
|
|
|
198
234
|
updateFiles(args) {
|
|
199
235
|
return this.messager.requestCommand('updateFiles', args);
|
|
200
236
|
},
|
|
237
|
+
/**
|
|
238
|
+
* 清除一个目录下的所有文件
|
|
239
|
+
*/
|
|
240
|
+
deleteDirectoryFiles(args) {
|
|
241
|
+
return this.messager.requestCommand('deleteDirectoryFiles', args);
|
|
242
|
+
},
|
|
201
243
|
_debugInFileStorage(node, openFiles) {
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
244
|
+
/// #if process.env.NODE_ENV === 'development'
|
|
245
|
+
let app = node;
|
|
246
|
+
if (node.concept !== 'App') {
|
|
247
|
+
app = node.rootNode || node.app;
|
|
248
|
+
}
|
|
249
|
+
return Promise.all(openFiles.map(async (file) => {
|
|
250
|
+
const res = await storage_1.default.post('/api/App/debugEmbedded?id=' + app.id, file);
|
|
251
|
+
return res.data;
|
|
252
|
+
})).catch((e) => {
|
|
253
|
+
console.error(e);
|
|
254
|
+
});
|
|
255
|
+
/// #endif
|
|
210
256
|
},
|
|
211
257
|
open() {
|
|
212
258
|
return this.messager.requestCommand('open');
|
|
@@ -220,7 +266,7 @@ const naslServer = {
|
|
|
220
266
|
async references(args) {
|
|
221
267
|
return (await this.messager.requestCommand('references', args))?.response;
|
|
222
268
|
},
|
|
223
|
-
getValueSelectCompletion(node, value) {
|
|
269
|
+
getValueSelectCompletion(node, value, noFilterList) {
|
|
224
270
|
const { currentSource, fileNode } = naslServer.getCurrentSource(node);
|
|
225
271
|
// console.log(currentSource, fileNode);
|
|
226
272
|
if (currentSource && fileNode) {
|
|
@@ -231,6 +277,7 @@ const naslServer = {
|
|
|
231
277
|
offset: (0, translator_1.lsp2tspNumber)(currentSource.range.start.character),
|
|
232
278
|
},
|
|
233
279
|
value,
|
|
280
|
+
noFilterList,
|
|
234
281
|
});
|
|
235
282
|
}
|
|
236
283
|
else {
|
|
@@ -247,7 +294,10 @@ const naslServer = {
|
|
|
247
294
|
const types = reg.exec(displayString);
|
|
248
295
|
// 取出提示的类型,组成是数组
|
|
249
296
|
const typeList = types[1].split(' | ').map((item) => {
|
|
250
|
-
if (
|
|
297
|
+
if (/\<([^()]+)\>/g.exec(item)) {
|
|
298
|
+
return item;
|
|
299
|
+
}
|
|
300
|
+
else if (item.includes(' ')) {
|
|
251
301
|
const strs = item.split(' ');
|
|
252
302
|
const type = strs[strs.length - 1];
|
|
253
303
|
return type;
|
|
@@ -264,8 +314,7 @@ const naslServer = {
|
|
|
264
314
|
return typeList;
|
|
265
315
|
},
|
|
266
316
|
async getTypeQuickinfo(node) {
|
|
267
|
-
|
|
268
|
-
if (node instanceof concepts_1.Identifier) {
|
|
317
|
+
if (node && node instanceof concepts_1.BaseNode) {
|
|
269
318
|
const callFunction = node.parentNode.parentNode;
|
|
270
319
|
/**
|
|
271
320
|
* currentSource callFunction 的节点,要去到当前节点的位置
|
|
@@ -287,23 +336,51 @@ const naslServer = {
|
|
|
287
336
|
if (typeAnnotation) {
|
|
288
337
|
res.push(typeAnnotation);
|
|
289
338
|
}
|
|
290
|
-
else if (type === 'unknown') {
|
|
339
|
+
else if (type === 'unknown' || type === 'never') {
|
|
291
340
|
return null;
|
|
292
341
|
}
|
|
293
342
|
});
|
|
294
343
|
if (!res.length) {
|
|
295
|
-
|
|
344
|
+
return [];
|
|
296
345
|
}
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
346
|
+
else {
|
|
347
|
+
return [{ title: '基础类型', children: res }];
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
else {
|
|
352
|
+
// 字符串 和 inter
|
|
353
|
+
return [{ title: '基础类型', children: [coreTypeList_1.primitiveTypeList[4]] }];
|
|
354
|
+
}
|
|
355
|
+
},
|
|
356
|
+
async getDataSchemaType(node) {
|
|
357
|
+
if (!(node instanceof concepts_1.ViewElement))
|
|
358
|
+
return;
|
|
359
|
+
const { currentSource, fileNode } = naslServer.getCurrentSource(node);
|
|
360
|
+
const quickInfo = await naslServer._getTypeQuickinfo({
|
|
361
|
+
file: fileNode.getEmbeddedFilePath(),
|
|
362
|
+
line: (0, translator_1.lsp2tspNumber)(currentSource.range.start.line),
|
|
363
|
+
offset: (0, translator_1.lsp2tspNumber)(currentSource.range.start.character) + `__elements.`.length,
|
|
364
|
+
});
|
|
365
|
+
if (quickInfo.responseRequired) {
|
|
366
|
+
const displayString = quickInfo?.response?.displayString || '';
|
|
367
|
+
const flag = displayString.includes('<') && displayString.includes('>');
|
|
368
|
+
if (flag) {
|
|
369
|
+
let str = '';
|
|
370
|
+
const types = naslServer.getDisplayString2Type(displayString);
|
|
371
|
+
if (Array.isArray(types) && types.length) {
|
|
372
|
+
const type = types[0];
|
|
373
|
+
str = type === 'any' || type === 'unknown' || type === 'never' ? '' : type;
|
|
374
|
+
}
|
|
375
|
+
return str;
|
|
300
376
|
}
|
|
301
377
|
}
|
|
378
|
+
return '';
|
|
302
379
|
},
|
|
303
380
|
_getTypeQuickinfo(args) {
|
|
304
381
|
return this.messager.requestCommand('quickInfo', args);
|
|
305
382
|
},
|
|
306
|
-
getSelectNextCompletion(node) {
|
|
383
|
+
getSelectNextCompletion(node, noFilterList) {
|
|
307
384
|
const { currentSource, fileNode } = naslServer.getCurrentSource(node);
|
|
308
385
|
// console.log(currentSource, fileNode);
|
|
309
386
|
if (currentSource && fileNode) {
|
|
@@ -313,6 +390,7 @@ const naslServer = {
|
|
|
313
390
|
line: (0, translator_1.lsp2tspNumber)(currentSource.range.start.line),
|
|
314
391
|
offset: (0, translator_1.lsp2tspNumber)(currentSource.range.start.character),
|
|
315
392
|
},
|
|
393
|
+
noFilterList,
|
|
316
394
|
});
|
|
317
395
|
}
|
|
318
396
|
else {
|
|
@@ -344,7 +422,7 @@ const naslServer = {
|
|
|
344
422
|
});
|
|
345
423
|
// 语义诊断
|
|
346
424
|
record.semanticDiagnostics = record.semanticDiagnostics
|
|
347
|
-
.map((diag) => this._resolveDiagnostic(diag, node
|
|
425
|
+
.map((diag) => this._resolveDiagnostic(diag, node))
|
|
348
426
|
.filter((diag) => !!diag);
|
|
349
427
|
// 建议诊断
|
|
350
428
|
// 实体下的建议不用展示,因为都是平台自己写的逻辑
|
|
@@ -367,8 +445,8 @@ const naslServer = {
|
|
|
367
445
|
});
|
|
368
446
|
return records;
|
|
369
447
|
},
|
|
370
|
-
_resolveDiagnostic(diagnostic,
|
|
371
|
-
const minRange = this._findMinRange(diagnostic,
|
|
448
|
+
_resolveDiagnostic(diagnostic, fileNode) {
|
|
449
|
+
const minRange = this._findMinRange(diagnostic, fileNode);
|
|
372
450
|
const tsErrorDetail = {
|
|
373
451
|
severity: diagnostic.category === 'error' ? 'error' : 'warning',
|
|
374
452
|
message: (0, translator_2.translateDiagnosticMessage)(diagnostic.text),
|
|
@@ -376,9 +454,8 @@ const naslServer = {
|
|
|
376
454
|
originalDiagnostic: diagnostic,
|
|
377
455
|
};
|
|
378
456
|
if (minRange) {
|
|
379
|
-
// let message = this.translateDiagnosticMessage(diagnostic.text);
|
|
380
457
|
// 节点的error要置为true
|
|
381
|
-
return
|
|
458
|
+
return (0, translator_2.naslNodeTranslateMessage)(minRange, tsErrorDetail);
|
|
382
459
|
}
|
|
383
460
|
else {
|
|
384
461
|
// 没找到节点, 先把问题暴露出来
|
|
@@ -388,46 +465,9 @@ const naslServer = {
|
|
|
388
465
|
};
|
|
389
466
|
}
|
|
390
467
|
},
|
|
391
|
-
|
|
392
|
-
* 处理一些边界情况
|
|
393
|
-
* @param minRange
|
|
394
|
-
* @param tsErrorDetail 报错具体信息
|
|
395
|
-
* @returns
|
|
396
|
-
*/
|
|
397
|
-
_diagnosticSpecialTreatment(minRange, tsErrorDetail) {
|
|
398
|
-
const text = tsErrorDetail.originalDiagnostic.text;
|
|
399
|
-
// 有一些节点报错信息不向外暴露,缺失一些原生标签等等的展示
|
|
400
|
-
if (minRange.node instanceof concepts_1.View || minRange.node instanceof concepts_1.ViewElement) {
|
|
401
|
-
if (text.startsWith(`'nasl.ui' has no exported member named `)) {
|
|
402
|
-
return null;
|
|
403
|
-
}
|
|
404
|
-
else if (text.startsWith(`Property '`) && text.includes(`does not exist on type 'typeof ui'.`)) {
|
|
405
|
-
return null;
|
|
406
|
-
}
|
|
407
|
-
else if (text.startsWith(`Namespace 'nasl.ui' has no exported member `)) {
|
|
408
|
-
return null;
|
|
409
|
-
}
|
|
410
|
-
}
|
|
411
|
-
if (/Expected (.+?) arguments, but got (.+?)./.exec(text)) {
|
|
412
|
-
// bindevent本身现在就不传参数
|
|
413
|
-
if (minRange.node instanceof concepts_1.BindEvent) {
|
|
414
|
-
return null;
|
|
415
|
-
}
|
|
416
|
-
// 因为缺少参数时候有可能有特殊情况,因为原本少的多了就会找到 callLogic上,
|
|
417
|
-
// 但是只少一个的时候就会找到准确的Argument上 需要特殊处理, ui层就可以统一处理
|
|
418
|
-
if (minRange.node instanceof concepts_1.Argument) {
|
|
419
|
-
minRange.node = minRange.node.parentNode;
|
|
420
|
-
}
|
|
421
|
-
}
|
|
422
|
-
minRange.node.tsErrorDetail = tsErrorDetail;
|
|
423
|
-
return {
|
|
424
|
-
id: minRange.node.id,
|
|
425
|
-
node: minRange.node,
|
|
426
|
-
...tsErrorDetail,
|
|
427
|
-
};
|
|
428
|
-
},
|
|
429
|
-
_findMinRange(diagnostic, sourceMap) {
|
|
468
|
+
_findMinRange(diagnostic, fileNode) {
|
|
430
469
|
let minRange;
|
|
470
|
+
const sourceMap = fileNode.sourceMap;
|
|
431
471
|
for (const [node, item] of sourceMap.entries()) {
|
|
432
472
|
/**
|
|
433
473
|
* 当前内容的开始行 <= 诊断开始的行 &&
|
|
@@ -457,49 +497,16 @@ const naslServer = {
|
|
|
457
497
|
}
|
|
458
498
|
}
|
|
459
499
|
if (!minRange) {
|
|
500
|
+
if (fileNode instanceof concepts_1.View) {
|
|
501
|
+
return { node: fileNode, item: sourceMap.get(fileNode) };
|
|
502
|
+
}
|
|
460
503
|
console.log(diagnostic, 'diagnostic');
|
|
461
504
|
console.log(sourceMap, 'sourceMap');
|
|
462
505
|
console.log(minRange, '需要特殊看下,为什么没找到内容-------------');
|
|
463
506
|
}
|
|
464
507
|
return minRange;
|
|
465
508
|
},
|
|
466
|
-
|
|
467
|
-
async findReferences(node) {
|
|
468
|
-
console.log(node);
|
|
469
|
-
const refsList = await naslServer._isHaveRef(node, true);
|
|
470
|
-
console.log(refsList, 'refsList');
|
|
471
|
-
// refsList = refsList.filter((item) =>
|
|
472
|
-
// // 不是创建者
|
|
473
|
-
// item.isDefinition !== true);
|
|
474
|
-
let result = {};
|
|
475
|
-
const resMap = {};
|
|
476
|
-
try {
|
|
477
|
-
refsList.forEach((record) => {
|
|
478
|
-
const fileNode = this.file2NodeMap.get(record.file);
|
|
479
|
-
if (!fileNode)
|
|
480
|
-
return;
|
|
481
|
-
const minRange = this._findMinRange(record, fileNode.sourceMap);
|
|
482
|
-
// 过滤一把不需要改的信息
|
|
483
|
-
if (minRange) {
|
|
484
|
-
// 如果查找引用查到自己里面的引用不展示
|
|
485
|
-
// 因为view生成的特殊性
|
|
486
|
-
if (minRange.node === node || (minRange.node instanceof concepts_1.View && node instanceof concepts_1.View)) {
|
|
487
|
-
return;
|
|
488
|
-
}
|
|
489
|
-
// 拼装树
|
|
490
|
-
naslServer._getTreeMap(minRange, fileNode, resMap);
|
|
491
|
-
}
|
|
492
|
-
});
|
|
493
|
-
console.log(resMap, 'resMap');
|
|
494
|
-
result = naslServer.handleTreeMap(resMap);
|
|
495
|
-
}
|
|
496
|
-
catch (err) {
|
|
497
|
-
console.log(err);
|
|
498
|
-
}
|
|
499
|
-
console.log(result);
|
|
500
|
-
return result;
|
|
501
|
-
},
|
|
502
|
-
async _isHaveRef(node, isFind = false) {
|
|
509
|
+
async _isHaveRef(node) {
|
|
503
510
|
const { currentSource, fileNode } = naslServer.getCurrentSource(node);
|
|
504
511
|
let refsList = [];
|
|
505
512
|
/**
|
|
@@ -513,13 +520,34 @@ const naslServer = {
|
|
|
513
520
|
});
|
|
514
521
|
refsList = [...newRefs.refs];
|
|
515
522
|
}
|
|
523
|
+
else {
|
|
524
|
+
if (node instanceof concepts_1.Module) {
|
|
525
|
+
const lists = node.logics || node.structures || node.enums;
|
|
526
|
+
const moduleName = fileNode.getEmbeddedFilePath();
|
|
527
|
+
if (lists.length) {
|
|
528
|
+
const item = lists[0];
|
|
529
|
+
const { fileNode } = naslServer.getCurrentSource(item);
|
|
530
|
+
const newRefs = await naslServer.references({
|
|
531
|
+
file: fileNode.getEmbeddedFilePath(),
|
|
532
|
+
line: 1,
|
|
533
|
+
offset: 22, //固定的位置,module的位置信息
|
|
534
|
+
});
|
|
535
|
+
refsList = newRefs.refs.filter((item) => !item.file.startsWith(moduleName));
|
|
536
|
+
// 多塞一个 ,删除的时候就有值了, 上面过滤了之后可能是空的
|
|
537
|
+
refsList.unshift(newRefs.refs[0]);
|
|
538
|
+
}
|
|
539
|
+
}
|
|
540
|
+
}
|
|
516
541
|
// 如果是entity就需要在单独,查一边来修改名字
|
|
517
542
|
if (node instanceof concepts_1.Entity) {
|
|
518
543
|
// 过滤一把不需要改的信息
|
|
519
|
-
refsList = refsList.filter((item) =>
|
|
544
|
+
refsList = refsList.filter((item) => fileNode.getEmbeddedFilePath() !== item.file || item.isDefinition === true);
|
|
520
545
|
// 不再当前文件里
|
|
521
546
|
// 或者在当前列表但是位置小于entity的结束位置
|
|
522
|
-
|
|
547
|
+
}
|
|
548
|
+
if (node instanceof concepts_1.Return) {
|
|
549
|
+
// 过滤一下最后出去的值
|
|
550
|
+
refsList = refsList.filter((item) => !item.lineText.includes('return '));
|
|
523
551
|
}
|
|
524
552
|
// 如果是参数, 就需要把logic的引用 都查找出来就需要把他的父级的引用全部查找出来
|
|
525
553
|
if (node instanceof concepts_1.Param && node.parentNode instanceof concepts_1.Logic) {
|
|
@@ -532,8 +560,8 @@ const naslServer = {
|
|
|
532
560
|
});
|
|
533
561
|
refsList = [...refsList, ...parentRefs.refs];
|
|
534
562
|
}
|
|
535
|
-
//
|
|
536
|
-
if (node instanceof concepts_1.Param && node.parentNode instanceof concepts_1.View
|
|
563
|
+
// 如果是参数修改, 就需要把logic的引用 都查找出来就需要把他的父级的引用全部查找出来d
|
|
564
|
+
if (node instanceof concepts_1.Param && node.parentNode instanceof concepts_1.View) {
|
|
537
565
|
const viewNode = node.parentNode;
|
|
538
566
|
const { currentSource } = naslServer.getCurrentSource(viewNode);
|
|
539
567
|
const code = currentSource.code;
|
|
@@ -547,45 +575,53 @@ const naslServer = {
|
|
|
547
575
|
refsList = [...refsList, ...filterViewRefs];
|
|
548
576
|
}
|
|
549
577
|
/**
|
|
578
|
+
* 暂时不要了, 因为生成的结构发生了变化
|
|
550
579
|
* view 因为不是嵌套的,所以不能用最前面的变量查找,所以要单独处理一下
|
|
551
580
|
* 找到第一个 { 之前的变量 进行修改
|
|
552
581
|
* 如果是VIew的查找,比较特殊,他查的是当前抛出的 {} 大括号前的
|
|
553
582
|
* 最后一个,因为生成的规则不一样
|
|
554
583
|
*/
|
|
555
|
-
if (node instanceof
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
}
|
|
584
|
+
// if (node instanceof View) {
|
|
585
|
+
// const code = currentSource.code;
|
|
586
|
+
// const viewIndex = code.indexOf(' {');
|
|
587
|
+
// const viewRefs = await naslServer.references({
|
|
588
|
+
// file: (fileNode as FileNode).getEmbeddedFilePath(),
|
|
589
|
+
// line: lsp2tspNumber(currentSource.range.start.line),
|
|
590
|
+
// offset: lsp2tspNumber(currentSource.range.start.character + viewIndex),
|
|
591
|
+
// });
|
|
592
|
+
// refsList = [...viewRefs.refs];
|
|
593
|
+
// }
|
|
565
594
|
/**
|
|
566
595
|
* elements 需要查的是__elements.后面的那个内容,过滤两个为了生成内容的节点
|
|
567
596
|
*/
|
|
568
597
|
if (node instanceof concepts_1.ViewElement) {
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
598
|
+
if (currentSource) {
|
|
599
|
+
const code = currentSource.code;
|
|
600
|
+
const prefix = '__elements.';
|
|
601
|
+
const prefixIndex = code.indexOf(prefix) !== -1 ? code.indexOf(prefix) : 0;
|
|
602
|
+
const methodsNameIndex = prefixIndex + prefix.length;
|
|
603
|
+
const methods = await naslServer.references({
|
|
604
|
+
file: fileNode.getEmbeddedFilePath(),
|
|
605
|
+
line: (0, translator_1.lsp2tspNumber)(currentSource.range.start.line),
|
|
606
|
+
offset: (0, translator_1.lsp2tspNumber)(currentSource.range.start.character + methodsNameIndex),
|
|
607
|
+
});
|
|
608
|
+
const methodRefs = [];
|
|
609
|
+
methods.refs.forEach((item) => {
|
|
610
|
+
// 定义里的格式,在删除的时候留下来占位
|
|
611
|
+
// 重命名的时候会过滤
|
|
612
|
+
// 这里只过滤 __elements.button = new nasl.ui.Button<any>这种格式
|
|
613
|
+
// if (item.lineText.includes('__elements.') && item.lineText.includes('new nasl.ui.'))
|
|
614
|
+
// return false;
|
|
615
|
+
// 处理声明组件名可能重复的问题, 查找引用不提示
|
|
616
|
+
const find = methodRefs.find((findItem) => item.lineText === findItem.lineText && item.lineText.includes(': nasl.ui.'));
|
|
617
|
+
if (!find) {
|
|
618
|
+
methodRefs.push(item);
|
|
619
|
+
}
|
|
620
|
+
});
|
|
621
|
+
refsList = [...methodRefs];
|
|
622
|
+
}
|
|
588
623
|
}
|
|
624
|
+
console.log(refsList, 'refsList');
|
|
589
625
|
return refsList;
|
|
590
626
|
},
|
|
591
627
|
/**
|
|
@@ -603,13 +639,17 @@ const naslServer = {
|
|
|
603
639
|
const fileNode = this.file2NodeMap.get(record.file);
|
|
604
640
|
if (!fileNode)
|
|
605
641
|
return null;
|
|
606
|
-
const minRange = this._findMinRange(record, fileNode
|
|
642
|
+
const minRange = this._findMinRange(record, fileNode);
|
|
607
643
|
if (minRange) {
|
|
608
644
|
// 如果节点是TypeAnnotation类型,
|
|
609
645
|
// 很复杂,可能是多级嵌套结构
|
|
610
646
|
// 不一定只修改typeName
|
|
611
647
|
if (minRange.node instanceof concepts_1.TypeAnnotation) {
|
|
612
648
|
// console.log(record);
|
|
649
|
+
// 如果是fake的逻辑,内部的重命名都不需要修改
|
|
650
|
+
// if ((minRange.node?.parentNode as any).logic && (minRange.node?.parentNode as any).logic?.fake) {
|
|
651
|
+
// return null;
|
|
652
|
+
// }
|
|
613
653
|
minRange.setTypeMethods = 'setTypeName';
|
|
614
654
|
}
|
|
615
655
|
// 如果节点是logic修改引发calllogic修改
|
|
@@ -617,11 +657,11 @@ const naslServer = {
|
|
|
617
657
|
minRange.setTypeMethods = 'setCalleeName';
|
|
618
658
|
}
|
|
619
659
|
if (minRange.node instanceof concepts_1.CallLogic && node instanceof concepts_1.ViewElement) {
|
|
620
|
-
minRange.setTypeMethods = '
|
|
660
|
+
minRange.setTypeMethods = 'setCalleeNamespace';
|
|
621
661
|
minRange.newValue = 'elements.' + newValue + '.logics';
|
|
622
662
|
}
|
|
623
663
|
// 如果节点是实体修改引发calllogic修改
|
|
624
|
-
if (minRange.node instanceof concepts_1.CallLogic && (node instanceof concepts_1.Entity || node instanceof concepts_1.View)) {
|
|
664
|
+
if (minRange.node instanceof concepts_1.CallLogic && (node instanceof concepts_1.Entity || node instanceof concepts_1.View || node instanceof concepts_1.Process || node instanceof concepts_1.ProcessElement)) {
|
|
625
665
|
// 匹配到的内容,当前这一行的内容;
|
|
626
666
|
// 因为要用下面的点位信息
|
|
627
667
|
/**
|
|
@@ -643,27 +683,29 @@ const naslServer = {
|
|
|
643
683
|
const end = record.end.offset - index - 1;
|
|
644
684
|
// 新的完整的value
|
|
645
685
|
let newTsNameSpace = tsCalleeNamespace.substring(0, start) + newValue + tsCalleeNamespace.substring(end, tsCalleeNamespace.length);
|
|
646
|
-
newTsNameSpace = newTsNameSpace.replace(
|
|
686
|
+
newTsNameSpace = newTsNameSpace.replace(/.\$/g, '.');
|
|
647
687
|
minRange.setTypeMethods = 'setCalleeNamespace';
|
|
648
688
|
minRange.newValue = newTsNameSpace;
|
|
649
689
|
}
|
|
650
690
|
// 如果参数修改影响了 callLogic
|
|
651
691
|
if (minRange.node instanceof concepts_1.CallLogic && node instanceof concepts_1.Param) {
|
|
692
|
+
return null;
|
|
652
693
|
// 逻辑第几个位置发生修改,对应的calllogic对应位置的内容要进行修改
|
|
653
|
-
|
|
654
|
-
const
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
694
|
+
// minRange.setTypeMethods = 'setArgumentName';
|
|
695
|
+
// const nodeArguments = minRange.node.arguments;
|
|
696
|
+
// minRange.newValue = [...nodeArguments];
|
|
697
|
+
// const LogicNode = node.parentNode;
|
|
698
|
+
// const paramIndex = (LogicNode as Logic).params.findIndex((param) => param === node);
|
|
699
|
+
// console.log(node, nodeArguments);
|
|
700
|
+
// if (paramIndex !== -1) {
|
|
701
|
+
// minRange.setTypeMethods = 'setArgumentName';
|
|
702
|
+
// minRange.newValue = {
|
|
703
|
+
// argument: nodeArguments[paramIndex],
|
|
704
|
+
// newKeyword: newValue,
|
|
705
|
+
// };
|
|
706
|
+
// } else {
|
|
707
|
+
// return null;
|
|
708
|
+
// }
|
|
667
709
|
}
|
|
668
710
|
// 如果节点是Identifier表达式
|
|
669
711
|
if (minRange.node instanceof concepts_1.Identifier) {
|
|
@@ -685,6 +727,11 @@ const naslServer = {
|
|
|
685
727
|
minRange.newValue = newTextValue;
|
|
686
728
|
}
|
|
687
729
|
}
|
|
730
|
+
// 如果是枚举修改,枚举的值刚好在Identifier 中选了 就修改值
|
|
731
|
+
if (minRange.node instanceof concepts_1.Identifier && node instanceof concepts_1.Enum) {
|
|
732
|
+
minRange.newValue = newValue;
|
|
733
|
+
minRange.setTypeMethods = 'setName';
|
|
734
|
+
}
|
|
688
735
|
// 如果修改逻辑,改到了Identifier表达式,只能说明是在属性里有使用了
|
|
689
736
|
if (minRange.node instanceof concepts_1.Identifier && node instanceof concepts_1.Logic) {
|
|
690
737
|
minRange.newValue = newValue;
|
|
@@ -763,7 +810,13 @@ const naslServer = {
|
|
|
763
810
|
// 如果是view也需要加前缀
|
|
764
811
|
// logic 和 views名称修改 可能会触发bindEvent修改
|
|
765
812
|
if (minRange.node instanceof concepts_1.BindEvent) {
|
|
766
|
-
|
|
813
|
+
// 页面逻辑直接赋值就可以, 因为是相对路径
|
|
814
|
+
if ((node instanceof concepts_1.ViewElement)) {
|
|
815
|
+
minRange.setTypeMethods = 'setCalleeNamespace';
|
|
816
|
+
minRange.newValue = 'elements.' + newValue + '.logics';
|
|
817
|
+
}
|
|
818
|
+
else {
|
|
819
|
+
/**
|
|
767
820
|
* 如果namespce是 'app.views.Student.views.404.views.505.views.update'
|
|
768
821
|
* 在ts中会是'app.views.Student.views.$404.views.$505.views.update'
|
|
769
822
|
* 但是505 要改名为 666 ,要存的是666
|
|
@@ -772,26 +825,44 @@ const naslServer = {
|
|
|
772
825
|
* 2.在匹配到的内容中取转后的namespace的位置
|
|
773
826
|
* 3.然后把namespace中的 $替换成 ''
|
|
774
827
|
*/
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
828
|
+
const tsCalleeNamespace = minRange.node.tsCalleeNamespace;
|
|
829
|
+
const oldValue = tsCalleeNamespace;
|
|
830
|
+
// 先看下标位置
|
|
831
|
+
const lineText = record.lineText;
|
|
832
|
+
const index = lineText.indexOf(oldValue);
|
|
833
|
+
// 在把开始结束位置的-开始位置,来知道是哪里要替换
|
|
834
|
+
const start = record.start.offset - index - 1;
|
|
835
|
+
const end = record.end.offset - index - 1;
|
|
836
|
+
// 新的完整的value
|
|
837
|
+
if (start > tsCalleeNamespace.length) {
|
|
838
|
+
minRange.setTypeMethods = 'setCalleeName';
|
|
839
|
+
minRange.newValue = newValue;
|
|
840
|
+
}
|
|
841
|
+
else {
|
|
842
|
+
// 新的完整的value
|
|
843
|
+
let newTsNameSpace = tsCalleeNamespace.substring(0, start) + newValue + tsCalleeNamespace.substring(end, tsCalleeNamespace.length);
|
|
844
|
+
minRange.setTypeMethods = 'setCalleeNamespace';
|
|
845
|
+
newTsNameSpace = newTsNameSpace.replace(/\.\$/g, '.');
|
|
846
|
+
minRange.newValue = newTsNameSpace;
|
|
847
|
+
}
|
|
848
|
+
}
|
|
849
|
+
}
|
|
850
|
+
if (minRange.node instanceof concepts_1.Destination && node instanceof concepts_1.Param) {
|
|
851
|
+
// 因为view是key value 绑定所以需要重新赋值
|
|
852
|
+
if (node.parentNode instanceof concepts_1.View) {
|
|
853
|
+
const nodeArguments = minRange.node.arguments;
|
|
854
|
+
const findArgument = nodeArguments.find((item) => node.name === item.keyword);
|
|
855
|
+
if (findArgument) {
|
|
856
|
+
minRange.setTypeMethods = 'setArgumentsKeyWord';
|
|
857
|
+
minRange.newValue = {
|
|
858
|
+
findArgument,
|
|
859
|
+
newKeyword: newValue,
|
|
860
|
+
};
|
|
861
|
+
}
|
|
788
862
|
}
|
|
789
863
|
else {
|
|
790
|
-
//
|
|
791
|
-
|
|
792
|
-
minRange.setTypeMethods = 'setCalleeNamespace';
|
|
793
|
-
newTsNameSpace = newTsNameSpace.replace(/\.\$/g, '.');
|
|
794
|
-
minRange.newValue = newTsNameSpace;
|
|
864
|
+
// 如果是修改param查找到Destination就不操作
|
|
865
|
+
return null;
|
|
795
866
|
}
|
|
796
867
|
}
|
|
797
868
|
if (minRange.node instanceof concepts_1.Interface && node instanceof concepts_1.Logic) {
|
|
@@ -807,13 +878,29 @@ const naslServer = {
|
|
|
807
878
|
const newBindRoles = str.split(',');
|
|
808
879
|
minRange.newValue = newBindRoles;
|
|
809
880
|
}
|
|
881
|
+
if (minRange.node instanceof concepts_1.QueryFieldExpression && node instanceof concepts_1.Entity) {
|
|
882
|
+
minRange.setTypeMethods = 'setEntityAsName';
|
|
883
|
+
}
|
|
884
|
+
if ((minRange.node instanceof concepts_1.QueryFromExpression || minRange.node instanceof concepts_1.QueryJoinExpression) && node instanceof concepts_1.Entity) {
|
|
885
|
+
minRange.setTypeMethods = 'setEntityName';
|
|
886
|
+
}
|
|
887
|
+
if (minRange.node instanceof concepts_1.QueryFieldExpression && node instanceof concepts_1.EntityProperty) {
|
|
888
|
+
minRange.setTypeMethods = 'setPropertyName';
|
|
889
|
+
}
|
|
890
|
+
// 如果跳转链接或者页面变量同一个param和TypeAnnotation 有两个过滤掉一个
|
|
891
|
+
if ((minRange.node instanceof concepts_1.Param || minRange.node instanceof concepts_1.Variable || minRange.node instanceof concepts_1.Return) && (node instanceof concepts_1.Entity || node instanceof concepts_1.Enum || node instanceof concepts_1.Structure)) {
|
|
892
|
+
return null;
|
|
893
|
+
}
|
|
894
|
+
if (minRange.node instanceof concepts_1.Destination && (node instanceof concepts_1.Process || node instanceof concepts_1.ProcessElement)) {
|
|
895
|
+
return null;
|
|
896
|
+
}
|
|
810
897
|
// 枚举修改枚举名,比较特殊
|
|
811
898
|
if (minRange.node instanceof concepts_1.EnumItem && node instanceof concepts_1.Enum) {
|
|
812
899
|
// 什么都不做,用来跳过修改
|
|
813
900
|
return null;
|
|
814
901
|
}
|
|
815
|
-
//
|
|
816
|
-
if (minRange.node instanceof concepts_1.
|
|
902
|
+
// params修改 查找bindevent不需要修改
|
|
903
|
+
if (minRange.node instanceof concepts_1.BindEvent && node instanceof concepts_1.Param) {
|
|
817
904
|
return null;
|
|
818
905
|
}
|
|
819
906
|
// 如果是子页面修改
|
|
@@ -821,8 +908,39 @@ const naslServer = {
|
|
|
821
908
|
if (minRange.node instanceof concepts_1.View && node instanceof concepts_1.View && minRange.node !== node) {
|
|
822
909
|
return null;
|
|
823
910
|
}
|
|
911
|
+
/**
|
|
912
|
+
* 屏蔽组件生成内容块中的变量或者逻辑,出现在表格选择中。在bindAttr中还会有,所以过滤一把
|
|
913
|
+
*/
|
|
914
|
+
if ((minRange.node instanceof concepts_1.Identifier || minRange.node instanceof concepts_1.MemberExpression) && node instanceof concepts_1.Param && minRange.node.parentNode instanceof concepts_1.BindAttribute) {
|
|
915
|
+
return null;
|
|
916
|
+
}
|
|
917
|
+
// 修改element引发view改名
|
|
918
|
+
if (node instanceof concepts_1.ViewElement && minRange.node instanceof concepts_1.View) {
|
|
919
|
+
return null;
|
|
920
|
+
}
|
|
921
|
+
// params修改 查找View不需要修改
|
|
824
922
|
// 逻辑改名,触发了在定义里面的,element定义,的值,直接掠过
|
|
825
|
-
if (minRange.node instanceof concepts_1.View && node instanceof concepts_1.Logic) {
|
|
923
|
+
if (minRange.node instanceof concepts_1.View && (node instanceof concepts_1.Logic || node instanceof concepts_1.Param)) {
|
|
924
|
+
/**
|
|
925
|
+
* 这里过滤一下,一些查找引用,重复的内容,直接屏蔽掉,防止操作重复
|
|
926
|
+
* 因为在生成的时候 ,可能弄了一些副作用的引用
|
|
927
|
+
*/
|
|
928
|
+
// 本来是想在上面过滤一把的先放到这里匹配这两个的时候 就会找到
|
|
929
|
+
// refsList = refsList.filter((item) => {
|
|
930
|
+
// 屏蔽组件查找查到定义这里,也过滤一下
|
|
931
|
+
// if (item.lineText.includes(': nasl.ui.'))
|
|
932
|
+
// return false;
|
|
933
|
+
// return true;
|
|
934
|
+
// });
|
|
935
|
+
return null;
|
|
936
|
+
}
|
|
937
|
+
/**
|
|
938
|
+
* 理论上 logic setName只能自己触发,别的地方查到引用都不用重命名
|
|
939
|
+
* 流程改名不触发Logic改名
|
|
940
|
+
* 如果是修改param查找到logic就不操作
|
|
941
|
+
* 除非想在内部修改别的内容所以暂时屏蔽掉
|
|
942
|
+
*/
|
|
943
|
+
if (minRange.node instanceof concepts_1.Logic && node !== minRange.node) {
|
|
826
944
|
return null;
|
|
827
945
|
}
|
|
828
946
|
}
|
|
@@ -839,40 +957,83 @@ const naslServer = {
|
|
|
839
957
|
},
|
|
840
958
|
_addParamsPrepare(node, refsList) {
|
|
841
959
|
const App = node.rootNode;
|
|
842
|
-
const
|
|
960
|
+
const parantNode = node.parentNode;
|
|
843
961
|
// 收集修改
|
|
844
962
|
App.emit('collect:start', {
|
|
845
963
|
actionMsg: '增加逻辑参数',
|
|
846
964
|
});
|
|
847
965
|
node.create({
|
|
848
966
|
index: 0,
|
|
849
|
-
parentNode:
|
|
967
|
+
parentNode: parantNode,
|
|
850
968
|
parentKey: node.parentKey,
|
|
851
969
|
});
|
|
852
970
|
refsList.forEach((record) => {
|
|
853
971
|
const fileNode = this.file2NodeMap.get(record.file);
|
|
854
972
|
if (!fileNode)
|
|
855
973
|
return null;
|
|
856
|
-
const minRange = this._findMinRange(record, fileNode
|
|
974
|
+
const minRange = this._findMinRange(record, fileNode);
|
|
857
975
|
if (minRange) {
|
|
858
976
|
// 如果找到节点是callLogic就去更新
|
|
859
977
|
if (minRange.node instanceof concepts_1.CallLogic && node instanceof concepts_1.Param) {
|
|
860
|
-
minRange.node.setCalleeArgName(
|
|
978
|
+
minRange.node.setCalleeArgName((parantNode));
|
|
979
|
+
}
|
|
980
|
+
// 如果节点参数增加页面也要更新
|
|
981
|
+
if (minRange.node instanceof concepts_1.Destination && node instanceof concepts_1.Param) {
|
|
982
|
+
minRange.node.setViewArgument((parantNode));
|
|
861
983
|
}
|
|
862
984
|
}
|
|
863
985
|
});
|
|
864
986
|
// 结束修改 ,批量操作
|
|
865
987
|
App.emit('collect:end');
|
|
866
988
|
},
|
|
989
|
+
// 查找引用
|
|
990
|
+
async findReferences(node) {
|
|
991
|
+
let refsList = await naslServer._isHaveRef(node);
|
|
992
|
+
// 如果查找引用查到自己里面的引用不展示
|
|
993
|
+
refsList = refsList.filter((item) => {
|
|
994
|
+
// 自己引用自己的过滤掉
|
|
995
|
+
// 删除的时候过滤一把组件删除提示
|
|
996
|
+
// 展示组件自己屏蔽掉
|
|
997
|
+
return !item.isDefinition && !(item.lineText.includes(' = new nasl.ui.'));
|
|
998
|
+
});
|
|
999
|
+
// 最后返回的结果
|
|
1000
|
+
let result = new Map();
|
|
1001
|
+
// 树的构造,key: 一个file的node, 值是 [[logic, params],[logic, returns]]
|
|
1002
|
+
const resMap = new Map();
|
|
1003
|
+
// 普通节点和要输出的节点做一个映射,为了引用地址一样
|
|
1004
|
+
const nodeMap = new Map();
|
|
1005
|
+
try {
|
|
1006
|
+
refsList.forEach((record) => {
|
|
1007
|
+
const fileNode = this.file2NodeMap.get(record.file);
|
|
1008
|
+
if (!fileNode)
|
|
1009
|
+
return;
|
|
1010
|
+
const minRange = this._findMinRange(record, fileNode);
|
|
1011
|
+
// 过滤一把不需要改的信息
|
|
1012
|
+
if (minRange) {
|
|
1013
|
+
// 拼装树
|
|
1014
|
+
naslServer._getTreeMap(minRange, fileNode, resMap, nodeMap);
|
|
1015
|
+
}
|
|
1016
|
+
});
|
|
1017
|
+
console.log(resMap, 'resMap');
|
|
1018
|
+
if (resMap.size > 0) {
|
|
1019
|
+
result = naslServer.handleTreeMap(resMap);
|
|
1020
|
+
}
|
|
1021
|
+
}
|
|
1022
|
+
catch (err) {
|
|
1023
|
+
console.log(err);
|
|
1024
|
+
}
|
|
1025
|
+
console.log(result);
|
|
1026
|
+
return result;
|
|
1027
|
+
},
|
|
867
1028
|
// 获取节点的上层渲染
|
|
868
|
-
_getTreeMap(minRange, fileNode, resMap) {
|
|
1029
|
+
_getTreeMap(minRange, fileNode, resMap, nodeMap) {
|
|
869
1030
|
const minRangeNode = minRange.node;
|
|
870
1031
|
let parantNode = minRangeNode;
|
|
871
1032
|
// 顺序队列
|
|
872
1033
|
const queue = [];
|
|
873
1034
|
// 先插入自己,如果没有在往上找,
|
|
874
1035
|
// 一直到file节点的父级
|
|
875
|
-
while (parantNode
|
|
1036
|
+
while (!(parantNode instanceof concepts_1.App)) {
|
|
876
1037
|
// 找到上一级 在map对象中构造出他的子集
|
|
877
1038
|
const currentNode = parantNode;
|
|
878
1039
|
parantNode = parantNode.parentNode;
|
|
@@ -883,7 +1044,9 @@ const naslServer = {
|
|
|
883
1044
|
// 排除一些不放入集合的节点
|
|
884
1045
|
let isNeedPush = true;
|
|
885
1046
|
// 如果不是ViewElement 或者 Assignment , 或者如果是的话, 排除l-root
|
|
886
|
-
if (currentNode instanceof concepts_1.ViewElement && currentNode.tag
|
|
1047
|
+
if (currentNode instanceof concepts_1.ViewElement && currentNode.tag === 'l-root')
|
|
1048
|
+
isNeedPush = false;
|
|
1049
|
+
else if (currentNode instanceof concepts_1.Argument)
|
|
887
1050
|
isNeedPush = false;
|
|
888
1051
|
else if (currentNode instanceof concepts_1.Assignment)
|
|
889
1052
|
isNeedPush = false;
|
|
@@ -893,13 +1056,11 @@ const naslServer = {
|
|
|
893
1056
|
isNeedPush = false;
|
|
894
1057
|
else if (currentNode instanceof concepts_1.QueryFromExpression)
|
|
895
1058
|
isNeedPush = false;
|
|
896
|
-
|
|
897
|
-
isNeedPush = false;
|
|
1059
|
+
// 需要放到数组中
|
|
898
1060
|
if (isNeedPush) {
|
|
899
1061
|
// 名称
|
|
900
|
-
let name = currentNode.name || currentNode.concept;
|
|
901
1062
|
// 赋值图标
|
|
902
|
-
let icon =
|
|
1063
|
+
let icon = '';
|
|
903
1064
|
if (currentNode instanceof concepts_1.ViewElement)
|
|
904
1065
|
icon = 'element';
|
|
905
1066
|
else if (currentNode instanceof concepts_1.BindAttribute)
|
|
@@ -908,55 +1069,34 @@ const naslServer = {
|
|
|
908
1069
|
icon = 'logicNode';
|
|
909
1070
|
else if (currentNode instanceof concepts_1.CallLogic) {
|
|
910
1071
|
icon = 'interface';
|
|
911
|
-
name = '调用逻辑';
|
|
912
1072
|
}
|
|
913
|
-
|
|
1073
|
+
// 相同节点使用一个引用
|
|
1074
|
+
if (nodeMap.get(currentNode)) {
|
|
1075
|
+
queue.unshift(nodeMap.get(currentNode));
|
|
1076
|
+
}
|
|
1077
|
+
else {
|
|
1078
|
+
const quoteNode = { node: currentNode, expanded: true, icon };
|
|
1079
|
+
nodeMap.set(currentNode, quoteNode);
|
|
1080
|
+
queue.unshift(quoteNode);
|
|
1081
|
+
}
|
|
914
1082
|
}
|
|
915
1083
|
}
|
|
916
|
-
const key = fileNode.name;
|
|
917
1084
|
// 一个logic 或者 view可能会有多个顺序队列
|
|
918
|
-
if (resMap
|
|
919
|
-
//
|
|
920
|
-
|
|
921
|
-
// const queues = resMap[key].queue;
|
|
922
|
-
// queues.forEach((item) => {
|
|
923
|
-
// if (item.length === queue.length) {
|
|
924
|
-
// let equalIndex = 0;
|
|
925
|
-
// item.forEach((queueItem, index) => {
|
|
926
|
-
// if (queueItem.name === queue[index].name)
|
|
927
|
-
// equalIndex++;
|
|
928
|
-
// });
|
|
929
|
-
// console.log(equalIndex)
|
|
930
|
-
// if (equalIndex === queue.length)
|
|
931
|
-
// equalFlag = true;
|
|
932
|
-
// }
|
|
933
|
-
// });
|
|
934
|
-
// // 如果有值就return
|
|
935
|
-
// if (equalFlag)
|
|
936
|
-
// return;
|
|
937
|
-
queue.length && resMap[key].queue.push(queue);
|
|
1085
|
+
if (resMap.get(fileNode)) {
|
|
1086
|
+
// 是否展示两个内容全等,但是两个queue的node可能不一样,但是只需要展示一个
|
|
1087
|
+
resMap.get(fileNode).push(queue);
|
|
938
1088
|
}
|
|
939
1089
|
else {
|
|
940
|
-
resMap[
|
|
941
|
-
queue: queue.length ? [queue] : [],
|
|
942
|
-
concept: fileNode.concept,
|
|
943
|
-
name: fileNode.name,
|
|
944
|
-
node: fileNode,
|
|
945
|
-
};
|
|
1090
|
+
resMap.set(fileNode, [queue]);
|
|
946
1091
|
}
|
|
947
1092
|
},
|
|
948
|
-
handleTreeMap(
|
|
949
|
-
const treeNodeMap =
|
|
950
|
-
|
|
1093
|
+
handleTreeMap(resMap) {
|
|
1094
|
+
const treeNodeMap = new Map();
|
|
1095
|
+
resMap.forEach((value, fileNode) => {
|
|
951
1096
|
// 循环处理tree的queue
|
|
952
|
-
const treeObj = naslServer.handleTreeQueue(
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
}
|
|
956
|
-
else {
|
|
957
|
-
treeNodeMap[val.concept] = [treeObj];
|
|
958
|
-
}
|
|
959
|
-
}
|
|
1097
|
+
const treeObj = naslServer.handleTreeQueue(value);
|
|
1098
|
+
treeNodeMap.set(fileNode, treeObj);
|
|
1099
|
+
});
|
|
960
1100
|
return treeNodeMap;
|
|
961
1101
|
},
|
|
962
1102
|
/**
|
|
@@ -965,30 +1105,27 @@ const naslServer = {
|
|
|
965
1105
|
* @param arr 当前页面下的queue的二维数组,一个数组下有多条链路
|
|
966
1106
|
* @returns 最后要使用到的节点和对应的子集
|
|
967
1107
|
*/
|
|
968
|
-
handleTreeQueue(
|
|
969
|
-
const map =
|
|
1108
|
+
handleTreeQueue(queueLists) {
|
|
1109
|
+
const map = new Map();
|
|
970
1110
|
let root = null;
|
|
971
|
-
if (!
|
|
1111
|
+
if (!queueLists.length)
|
|
972
1112
|
return;
|
|
973
|
-
for (const
|
|
1113
|
+
for (const queueList of queueLists) {
|
|
974
1114
|
let preNode = null;
|
|
975
|
-
for (const
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
if (!map[key]) {
|
|
979
|
-
map[key] = [];
|
|
1115
|
+
for (const queueItem of queueList) {
|
|
1116
|
+
if (!map.get(queueItem)) {
|
|
1117
|
+
map.set(queueItem, []);
|
|
980
1118
|
}
|
|
981
1119
|
if (preNode) {
|
|
982
|
-
const
|
|
983
|
-
const find = map[preKey].find((item) => node.name === item.name);
|
|
1120
|
+
const find = map.get(preNode).find((item) => item === queueItem);
|
|
984
1121
|
if (!find) {
|
|
985
|
-
map
|
|
1122
|
+
map.get(preNode).push(queueItem);
|
|
986
1123
|
}
|
|
987
1124
|
}
|
|
988
1125
|
else {
|
|
989
|
-
root =
|
|
1126
|
+
root = queueItem;
|
|
990
1127
|
}
|
|
991
|
-
preNode =
|
|
1128
|
+
preNode = queueItem;
|
|
992
1129
|
}
|
|
993
1130
|
}
|
|
994
1131
|
const children = naslServer._recursionCreateResult(root, map);
|
|
@@ -1001,24 +1138,24 @@ const naslServer = {
|
|
|
1001
1138
|
* @returns 当前节点,最后输出所有节点
|
|
1002
1139
|
*/
|
|
1003
1140
|
_recursionCreateResult(root, map) {
|
|
1004
|
-
const
|
|
1005
|
-
const rootKey = root.name;
|
|
1006
|
-
const children = map[rootKey].map((item) => naslServer._recursionCreateResult(item, map));
|
|
1141
|
+
const children = map.get(root).map((item) => naslServer._recursionCreateResult(item, map));
|
|
1007
1142
|
if (children && children.length) {
|
|
1008
|
-
|
|
1143
|
+
root.children = children;
|
|
1009
1144
|
}
|
|
1010
|
-
return
|
|
1145
|
+
return root;
|
|
1011
1146
|
},
|
|
1012
1147
|
/**
|
|
1013
1148
|
* 获取
|
|
1014
1149
|
* 当前this上下文 的Source 和 父级文件级别的节点
|
|
1015
1150
|
*/
|
|
1016
1151
|
getCurrentSource(node) {
|
|
1152
|
+
if (node instanceof concepts_1.App || node instanceof concepts_1.Theme)
|
|
1153
|
+
return { fileNode: null };
|
|
1017
1154
|
let sourceMap = node.sourceMap;
|
|
1018
1155
|
let fileNode = node;
|
|
1019
1156
|
// 如果没有sourceMap,就继续向上找 ,或者到module结束
|
|
1020
1157
|
// 如果 节点找到 app 或者module 停止
|
|
1021
|
-
while (!sourceMap && fileNode && !(fileNode.parentNode instanceof concepts_1.App) && !(fileNode.parentNode instanceof concepts_1.Module)) {
|
|
1158
|
+
while (!sourceMap && fileNode && !(fileNode.parentNode instanceof concepts_1.App) && !(fileNode.parentNode instanceof concepts_1.Module) && !(fileNode instanceof concepts_1.View)) {
|
|
1022
1159
|
fileNode = fileNode.parentNode;
|
|
1023
1160
|
sourceMap = fileNode?.sourceMap;
|
|
1024
1161
|
}
|
|
@@ -1041,7 +1178,6 @@ const naslServer = {
|
|
|
1041
1178
|
// 获取element方法的可选值
|
|
1042
1179
|
getFieldKeySelectCompletion(node, fieldKey) {
|
|
1043
1180
|
const { currentSource, fileNode } = naslServer.getCurrentSource(node);
|
|
1044
|
-
console.log(currentSource);
|
|
1045
1181
|
if (currentSource && fileNode) {
|
|
1046
1182
|
return naslServer._getFieldKeySelectCompletion({
|
|
1047
1183
|
file: fileNode.getEmbeddedFilePath(),
|
|
@@ -1090,11 +1226,51 @@ async function handleDelete(fileNode, targetNode, result) {
|
|
|
1090
1226
|
}
|
|
1091
1227
|
// 更新文件之后
|
|
1092
1228
|
await naslServer.updateFiles({ outputFiles });
|
|
1093
|
-
const filesToCheck = new Set();
|
|
1094
1229
|
newRefs.refs.forEach((ref) => filesToCheck.add(ref.file));
|
|
1095
|
-
console.log('filesToCheck', filesToCheck, filesToCheck.size);
|
|
1096
|
-
await naslServer.getDiagnosticRecordsAndPushAll(Array.from(filesToCheck));
|
|
1097
1230
|
}
|
|
1231
|
+
concepts_1.BaseNode.prototype.findReadOnlyLogicUsage = function () {
|
|
1232
|
+
let targetNode;
|
|
1233
|
+
if (this.parentNode.concept === 'Namespace' || this.parentNode.parentNode.concept === 'Namespace') {
|
|
1234
|
+
const sourceMap = this.parentNode.concept === 'Namespace' ? this.parentNode.parentNode.sourceMap : this.parentNode.parentNode.parentNode.sourceMap;
|
|
1235
|
+
for (const item of sourceMap) {
|
|
1236
|
+
const logic = item[0];
|
|
1237
|
+
if (this.concept === 'Logic') {
|
|
1238
|
+
if (logic instanceof concepts_1.Logic)
|
|
1239
|
+
if (logic.calleewholeKey === this.calleewholeKey) {
|
|
1240
|
+
targetNode = logic;
|
|
1241
|
+
break;
|
|
1242
|
+
}
|
|
1243
|
+
}
|
|
1244
|
+
else {
|
|
1245
|
+
if (logic instanceof concepts_1.Logic)
|
|
1246
|
+
if (logic.calleewholeKey === this.parentNode.calleewholeKey) {
|
|
1247
|
+
targetNode = logic;
|
|
1248
|
+
break;
|
|
1249
|
+
}
|
|
1250
|
+
}
|
|
1251
|
+
}
|
|
1252
|
+
}
|
|
1253
|
+
else if (this.parentNode.concept === 'Module') {
|
|
1254
|
+
// 父级是模块的还是用它本身去查找引用
|
|
1255
|
+
targetNode = this;
|
|
1256
|
+
}
|
|
1257
|
+
else {
|
|
1258
|
+
const sourceMap = this.parentNode.sourceMap;
|
|
1259
|
+
for (const item of sourceMap) {
|
|
1260
|
+
const logic = item[0];
|
|
1261
|
+
if (logic.getNamespace && logic.getNamespace() === this.getNamespace()) {
|
|
1262
|
+
targetNode = logic;
|
|
1263
|
+
break;
|
|
1264
|
+
}
|
|
1265
|
+
}
|
|
1266
|
+
}
|
|
1267
|
+
try {
|
|
1268
|
+
return naslServer.findReferences(targetNode);
|
|
1269
|
+
}
|
|
1270
|
+
catch (err) {
|
|
1271
|
+
console.log(err);
|
|
1272
|
+
}
|
|
1273
|
+
};
|
|
1098
1274
|
// 查找引用
|
|
1099
1275
|
concepts_1.BaseNode.prototype.findUsage = function findUsage() {
|
|
1100
1276
|
try {
|
|
@@ -1151,6 +1327,7 @@ concepts_1.BaseNode.prototype.changeName = async function changeName(newValue, u
|
|
|
1151
1327
|
const confirmParms = {
|
|
1152
1328
|
actionType: 'rename',
|
|
1153
1329
|
node: this,
|
|
1330
|
+
newValue,
|
|
1154
1331
|
};
|
|
1155
1332
|
/**
|
|
1156
1333
|
* nasl和vue的通信,回退,要触发vue的watch。
|
|
@@ -1181,15 +1358,38 @@ concepts_1.BaseNode.prototype.prepareDelete = async function prepareDelete() {
|
|
|
1181
1358
|
* 查找这个节点是不是有依赖
|
|
1182
1359
|
*/
|
|
1183
1360
|
const node = this;
|
|
1184
|
-
|
|
1185
|
-
//
|
|
1361
|
+
let refsList = await naslServer._isHaveRef(node);
|
|
1362
|
+
// 删除的时候过滤一把组件删除提示
|
|
1363
|
+
refsList = refsList.filter((item) => {
|
|
1364
|
+
// 因为ui组件本身会多渲染一次,就先过滤一个
|
|
1365
|
+
return !(item.lineText.includes(': nasl.ui.'));
|
|
1366
|
+
});
|
|
1367
|
+
// 删除参数单独处理
|
|
1368
|
+
if (node instanceof concepts_1.Param) {
|
|
1369
|
+
const methodRefs = [];
|
|
1370
|
+
refsList.forEach((item) => {
|
|
1371
|
+
// 入参查找引用,查到logic 和自己,内容完全一样,就保留一个
|
|
1372
|
+
const find = methodRefs.find((findItem) => item.lineText === findItem.lineText);
|
|
1373
|
+
if (!find) {
|
|
1374
|
+
methodRefs.push(item);
|
|
1375
|
+
}
|
|
1376
|
+
});
|
|
1377
|
+
refsList = methodRefs;
|
|
1378
|
+
}
|
|
1379
|
+
// delete的弹框展示
|
|
1186
1380
|
const confirmParms = {
|
|
1187
1381
|
actionType: 'delete',
|
|
1188
1382
|
tipFlag: false,
|
|
1189
1383
|
node,
|
|
1384
|
+
icon: 'warning',
|
|
1190
1385
|
};
|
|
1191
1386
|
let callback = null;
|
|
1192
1387
|
if (refsList.length <= 1) {
|
|
1388
|
+
// 页面组件直接删除然后return
|
|
1389
|
+
if (node instanceof concepts_1.ViewElement) {
|
|
1390
|
+
this.delete();
|
|
1391
|
+
return;
|
|
1392
|
+
}
|
|
1193
1393
|
callback = () => {
|
|
1194
1394
|
// Structure 和 Interface是内部有delete方法
|
|
1195
1395
|
if (node instanceof concepts_1.Structure || node instanceof concepts_1.Interface) {
|
|
@@ -1204,12 +1404,26 @@ concepts_1.BaseNode.prototype.prepareDelete = async function prepareDelete() {
|
|
|
1204
1404
|
// 如果有依赖就有一个查找引用提示
|
|
1205
1405
|
confirmParms.tipFlag = true;
|
|
1206
1406
|
const node = this;
|
|
1407
|
+
// 删除页面或者流程
|
|
1408
|
+
if (node instanceof concepts_1.View || node instanceof concepts_1.Process) {
|
|
1409
|
+
/**
|
|
1410
|
+
* 查找这个页面是不是有依赖
|
|
1411
|
+
*/
|
|
1412
|
+
let viewPath = this.getEmbeddedFilePath();
|
|
1413
|
+
viewPath = viewPath.slice(0, viewPath.length - 3);
|
|
1414
|
+
const find = refsList.find((record) => !record.file.includes(viewPath));
|
|
1415
|
+
// 如果没有别的文件的依赖,就直接delete
|
|
1416
|
+
if (!find) {
|
|
1417
|
+
this.delete();
|
|
1418
|
+
return;
|
|
1419
|
+
}
|
|
1420
|
+
}
|
|
1207
1421
|
callback = () => {
|
|
1208
1422
|
// removeParam
|
|
1209
1423
|
// 跟rename 还不太一样,部分修改依赖修改好的值,然后在下面的修改需要把自己传递进去
|
|
1210
1424
|
if (node instanceof concepts_1.Param) {
|
|
1211
1425
|
const App = this.rootNode;
|
|
1212
|
-
const
|
|
1426
|
+
const parentNode = this.parentNode;
|
|
1213
1427
|
// 收集修改
|
|
1214
1428
|
App.emit('collect:start', {
|
|
1215
1429
|
actionMsg: '删除参数',
|
|
@@ -1219,10 +1433,13 @@ concepts_1.BaseNode.prototype.prepareDelete = async function prepareDelete() {
|
|
|
1219
1433
|
const fileNode = naslServer.file2NodeMap.get(record.file);
|
|
1220
1434
|
if (!fileNode)
|
|
1221
1435
|
return null;
|
|
1222
|
-
const minRange = naslServer._findMinRange(record, fileNode
|
|
1436
|
+
const minRange = naslServer._findMinRange(record, fileNode);
|
|
1223
1437
|
if (minRange) {
|
|
1224
1438
|
if (minRange.node instanceof concepts_1.CallLogic) {
|
|
1225
|
-
minRange.node.setCalleeArgName(
|
|
1439
|
+
minRange.node.setCalleeArgName(parentNode);
|
|
1440
|
+
}
|
|
1441
|
+
if (minRange.node instanceof concepts_1.Destination) {
|
|
1442
|
+
minRange.node.setViewArgument(parentNode);
|
|
1226
1443
|
}
|
|
1227
1444
|
}
|
|
1228
1445
|
});
|
|
@@ -1242,7 +1459,7 @@ concepts_1.BaseNode.prototype.prepareDelete = async function prepareDelete() {
|
|
|
1242
1459
|
const fileNode = naslServer.file2NodeMap.get(record.file);
|
|
1243
1460
|
if (!fileNode)
|
|
1244
1461
|
return null;
|
|
1245
|
-
const minRange = naslServer._findMinRange(record, fileNode
|
|
1462
|
+
const minRange = naslServer._findMinRange(record, fileNode);
|
|
1246
1463
|
if (minRange) {
|
|
1247
1464
|
if (minRange.node instanceof concepts_1.Interface) {
|
|
1248
1465
|
minRange.node.delete();
|
|
@@ -1251,6 +1468,7 @@ concepts_1.BaseNode.prototype.prepareDelete = async function prepareDelete() {
|
|
|
1251
1468
|
});
|
|
1252
1469
|
// 结束修改 ,批量操作
|
|
1253
1470
|
App.emit('collect:end');
|
|
1471
|
+
return;
|
|
1254
1472
|
}
|
|
1255
1473
|
// 删除权限节点
|
|
1256
1474
|
if (node instanceof concepts_1.Role) {
|
|
@@ -1264,7 +1482,7 @@ concepts_1.BaseNode.prototype.prepareDelete = async function prepareDelete() {
|
|
|
1264
1482
|
const fileNode = naslServer.file2NodeMap.get(record.file);
|
|
1265
1483
|
if (!fileNode)
|
|
1266
1484
|
return null;
|
|
1267
|
-
const minRange = naslServer._findMinRange(record, fileNode
|
|
1485
|
+
const minRange = naslServer._findMinRange(record, fileNode);
|
|
1268
1486
|
if (minRange) {
|
|
1269
1487
|
if (minRange.node instanceof concepts_1.View || minRange.node instanceof concepts_1.ViewElement) {
|
|
1270
1488
|
// oldName旧的节点存的值
|
|
@@ -1280,6 +1498,10 @@ concepts_1.BaseNode.prototype.prepareDelete = async function prepareDelete() {
|
|
|
1280
1498
|
App.emit('collect:end');
|
|
1281
1499
|
return;
|
|
1282
1500
|
}
|
|
1501
|
+
// 删除页面或者流程,如果上一步没有return 就说明他是有别的引用的,会有引用弹框
|
|
1502
|
+
if (node instanceof concepts_1.View || node instanceof concepts_1.Process) {
|
|
1503
|
+
this.delete();
|
|
1504
|
+
}
|
|
1283
1505
|
// 其余的都直接调用删除
|
|
1284
1506
|
// Structure 和 Interface是内部有delete方法
|
|
1285
1507
|
if (node instanceof concepts_1.Structure || node instanceof concepts_1.Interface) {
|
|
@@ -1328,18 +1550,21 @@ async function handleChange(fileNode, targetNode, result, action) {
|
|
|
1328
1550
|
line: EmbeddedTSFileLineMap[fileNode.concept] ?? 2,
|
|
1329
1551
|
offset: 6,
|
|
1330
1552
|
});
|
|
1331
|
-
const filesToCheck = new Set();
|
|
1332
1553
|
newRefs.refs.forEach((ref) => filesToCheck.add(ref.file));
|
|
1333
1554
|
// 唤起建立连接弹框
|
|
1334
1555
|
// 文件级别的建立连接采取提醒
|
|
1335
|
-
if (
|
|
1336
|
-
|
|
1337
|
-
|
|
1338
|
-
|
|
1339
|
-
|
|
1340
|
-
|
|
1556
|
+
if (action === 'create' && targetNode.__init) {
|
|
1557
|
+
// 清除临时状态, 完成本次创建
|
|
1558
|
+
delete targetNode.__init;
|
|
1559
|
+
if (fileNode === targetNode && filesToCheck.size > 1) {
|
|
1560
|
+
const confirmParms = {
|
|
1561
|
+
actionType: 'createEstablishConnection',
|
|
1562
|
+
node: fileNode,
|
|
1563
|
+
icon: 'success',
|
|
1564
|
+
};
|
|
1565
|
+
(0, common_1.invokeCommand)('tsConfirm.open', confirmParms, () => { });
|
|
1566
|
+
}
|
|
1341
1567
|
}
|
|
1342
|
-
await naslServer.getDiagnosticRecordsAndPushAll(Array.from(filesToCheck));
|
|
1343
1568
|
}
|
|
1344
1569
|
/**
|
|
1345
1570
|
* 重命名的更新
|
|
@@ -1352,7 +1577,6 @@ async function handleChange(fileNode, targetNode, result, action) {
|
|
|
1352
1577
|
async function handleRename(fileNode, targetNode, result, oldFilePath) {
|
|
1353
1578
|
// rename 场景
|
|
1354
1579
|
const outputFiles = [{ file: result.filePath, fileContent: result.code }];
|
|
1355
|
-
const filesToCheck = new Set();
|
|
1356
1580
|
// 如果是要修改顶级文件名
|
|
1357
1581
|
// file节点和当前改得是同一节点
|
|
1358
1582
|
if (fileNode === targetNode) {
|
|
@@ -1383,35 +1607,101 @@ async function handleRename(fileNode, targetNode, result, oldFilePath) {
|
|
|
1383
1607
|
});
|
|
1384
1608
|
// 文件级别重命名,有依赖才唤起弹框
|
|
1385
1609
|
// 唤起重命名,提示有连接弹框
|
|
1386
|
-
|
|
1387
|
-
|
|
1388
|
-
|
|
1389
|
-
|
|
1390
|
-
|
|
1391
|
-
|
|
1392
|
-
}
|
|
1610
|
+
// 重命名建立连接先不展示弹框了
|
|
1611
|
+
// if (newRefFileList.size > 1) {
|
|
1612
|
+
// const confirmParms = {
|
|
1613
|
+
// actionType: 'renameEstablishConnection',
|
|
1614
|
+
// node: fileNode,
|
|
1615
|
+
// icon: 'success',
|
|
1616
|
+
// };
|
|
1617
|
+
// invokeCommand('tsConfirm.open', confirmParms, () => {});
|
|
1618
|
+
// }
|
|
1393
1619
|
}
|
|
1394
1620
|
else {
|
|
1395
1621
|
// 查一下当前属性依赖的文件
|
|
1396
1622
|
const { currentSource, fileNode } = naslServer.getCurrentSource(targetNode);
|
|
1397
|
-
|
|
1398
|
-
|
|
1399
|
-
|
|
1400
|
-
|
|
1401
|
-
|
|
1402
|
-
|
|
1403
|
-
|
|
1404
|
-
|
|
1405
|
-
|
|
1406
|
-
|
|
1407
|
-
|
|
1408
|
-
|
|
1409
|
-
|
|
1410
|
-
|
|
1623
|
+
if (currentSource) {
|
|
1624
|
+
const oldRefs = await naslServer.references({
|
|
1625
|
+
file: fileNode.getEmbeddedFilePath(),
|
|
1626
|
+
line: (0, translator_1.lsp2tspNumber)(currentSource.range.start.line),
|
|
1627
|
+
offset: (0, translator_1.lsp2tspNumber)(currentSource.range.start.character),
|
|
1628
|
+
});
|
|
1629
|
+
oldRefs.refs.forEach((ref) => filesToCheck.add(ref.file));
|
|
1630
|
+
// 更新文件之后
|
|
1631
|
+
await naslServer.updateFiles({ outputFiles });
|
|
1632
|
+
const newRefs2 = await naslServer.references({
|
|
1633
|
+
file: fileNode.getEmbeddedFilePath(),
|
|
1634
|
+
line: (0, translator_1.lsp2tspNumber)(currentSource.range.start.line),
|
|
1635
|
+
offset: (0, translator_1.lsp2tspNumber)(currentSource.range.start.character),
|
|
1636
|
+
});
|
|
1637
|
+
newRefs2.refs.forEach((ref) => filesToCheck.add(ref.file));
|
|
1638
|
+
}
|
|
1639
|
+
}
|
|
1640
|
+
}
|
|
1641
|
+
/**
|
|
1642
|
+
* 处理一些节点操作,子节点需要更新并且check的场景
|
|
1643
|
+
* 因为删除,新增父页面,或者重命名会一起
|
|
1644
|
+
* 删除或者新增view而且他有子集 就要执行同样的操作
|
|
1645
|
+
* @param action 当前操作类型
|
|
1646
|
+
* @param fileNode 文件节点
|
|
1647
|
+
* @param targetNode 操作节点 这里要两个相等才会走家去面对哦逻辑
|
|
1648
|
+
* @param oldpath 触发内容的oldpath
|
|
1649
|
+
*/
|
|
1650
|
+
async function incidentalAction(action, fileNode, targetNode, oldpath) {
|
|
1651
|
+
if ((action === 'create' || action === 'delete' || (action === 'update' && oldpath)) && fileNode === targetNode) {
|
|
1652
|
+
// 删除或者新增页面
|
|
1653
|
+
if (fileNode instanceof concepts_1.View && fileNode.children?.length) {
|
|
1654
|
+
const fileNodeChildren = fileNode.children;
|
|
1655
|
+
for (let i = 0; i < fileNodeChildren.length; i++) {
|
|
1656
|
+
const fileNodeItem = fileNodeChildren[i];
|
|
1657
|
+
const result = fileNodeItem.toEmbeddedTSFile();
|
|
1658
|
+
if (action === 'create') {
|
|
1659
|
+
await handleChange(fileNodeItem, fileNodeItem, result, action);
|
|
1660
|
+
await incidentalAction(action, fileNodeItem, fileNodeItem);
|
|
1661
|
+
}
|
|
1662
|
+
else if (action === 'delete') {
|
|
1663
|
+
await handleDelete(fileNodeItem, fileNodeItem, result);
|
|
1664
|
+
await incidentalAction(action, fileNodeItem, fileNodeItem);
|
|
1665
|
+
}
|
|
1666
|
+
else if (action === 'update' && oldpath) {
|
|
1667
|
+
const parentPath = oldpath.replace('.ts', '/');
|
|
1668
|
+
const currentOldPath = parentPath + fileNodeItem.name + '.ts';
|
|
1669
|
+
// 因为重命名这里只有当前修改父级的 旧名称, 所以他的子集也要根据旧名称去查依赖 更新内容
|
|
1670
|
+
await handleRename(fileNodeItem, fileNodeItem, result, currentOldPath);
|
|
1671
|
+
await incidentalAction(action, fileNodeItem, fileNodeItem, currentOldPath);
|
|
1672
|
+
}
|
|
1673
|
+
}
|
|
1674
|
+
;
|
|
1675
|
+
}
|
|
1676
|
+
// 删除或新增模块
|
|
1677
|
+
// 需要把下面的哦内容全部都更新一遍
|
|
1678
|
+
if (fileNode instanceof concepts_1.Module) {
|
|
1679
|
+
const module = (targetNode);
|
|
1680
|
+
const results = [];
|
|
1681
|
+
naslServer.contentToFile(module, results);
|
|
1682
|
+
for (let i = 0; i < results.length; i++) {
|
|
1683
|
+
const result = results[i];
|
|
1684
|
+
const node = naslServer.file2NodeMap.get(result.filePath);
|
|
1685
|
+
if (action === 'create') {
|
|
1686
|
+
await handleChange(node, node, result, action);
|
|
1687
|
+
}
|
|
1688
|
+
else {
|
|
1689
|
+
await handleDelete(node, node, result);
|
|
1690
|
+
}
|
|
1691
|
+
}
|
|
1692
|
+
;
|
|
1693
|
+
// 删除模块通知更新列表
|
|
1694
|
+
if (action === 'delete') {
|
|
1695
|
+
try {
|
|
1696
|
+
// 如果已经
|
|
1697
|
+
(0, common_1.invokeCommand)('module.delete', true);
|
|
1698
|
+
}
|
|
1699
|
+
catch (err) {
|
|
1700
|
+
console.log('module.delete', '组件销毁了,不用唤起了');
|
|
1701
|
+
}
|
|
1702
|
+
}
|
|
1703
|
+
}
|
|
1411
1704
|
}
|
|
1412
|
-
console.log('filesToCheck', filesToCheck, filesToCheck.size);
|
|
1413
|
-
await naslServer.getDiagnosticRecordsAndPushAll(Array.from(filesToCheck));
|
|
1414
|
-
// outputFiles.map((file) => file.file));
|
|
1415
1705
|
}
|
|
1416
1706
|
async function receiveHandleChange($event) {
|
|
1417
1707
|
// 行为
|
|
@@ -1420,7 +1710,11 @@ async function receiveHandleChange($event) {
|
|
|
1420
1710
|
// 当前操作的文件节点
|
|
1421
1711
|
const { fileNode } = naslServer.getCurrentSource(targetNode);
|
|
1422
1712
|
// 如果是导入模块就,就引入对应模块,先不处理module和Configuration,下面的内容会自动创建
|
|
1423
|
-
if (fileNode instanceof concepts_1.Module || fileNode instanceof concepts_1.Configuration) {
|
|
1713
|
+
if (!fileNode || fileNode instanceof concepts_1.Module || fileNode instanceof concepts_1.Configuration) {
|
|
1714
|
+
// module单独处理
|
|
1715
|
+
if (fileNode instanceof concepts_1.Module) {
|
|
1716
|
+
await incidentalAction(action, fileNode, targetNode);
|
|
1717
|
+
}
|
|
1424
1718
|
return;
|
|
1425
1719
|
}
|
|
1426
1720
|
const result = fileNode.toEmbeddedTSFile();
|
|
@@ -1438,24 +1732,49 @@ async function receiveHandleChange($event) {
|
|
|
1438
1732
|
]);
|
|
1439
1733
|
fileNode.sourceMap = result.sourceMap;
|
|
1440
1734
|
if (action === 'update' || action === 'create') {
|
|
1441
|
-
if ($event?.field !== 'name')
|
|
1735
|
+
if ($event?.field !== 'name') {
|
|
1442
1736
|
await handleChange(fileNode, targetNode, result, action);
|
|
1737
|
+
await incidentalAction(action, fileNode, targetNode);
|
|
1738
|
+
}
|
|
1443
1739
|
else {
|
|
1444
|
-
|
|
1740
|
+
const oldpath = fileNode.getEmbeddedFilePath($event.oldObject.name);
|
|
1741
|
+
await handleRename(fileNode, targetNode, result, oldpath);
|
|
1742
|
+
await incidentalAction(action, fileNode, targetNode, oldpath);
|
|
1445
1743
|
}
|
|
1446
1744
|
}
|
|
1447
1745
|
// 删除
|
|
1448
1746
|
if (action === 'delete') {
|
|
1747
|
+
await incidentalAction(action, fileNode, targetNode);
|
|
1449
1748
|
await handleDelete(fileNode, targetNode, result);
|
|
1450
1749
|
}
|
|
1750
|
+
return true;
|
|
1451
1751
|
}
|
|
1452
1752
|
// 监听所有改变操作
|
|
1453
1753
|
translator_1.embeddedTSEmitter.on('change', ($event) => {
|
|
1454
1754
|
// 收集到一个行为集合
|
|
1455
1755
|
const eventValue = $event.value;
|
|
1456
|
-
|
|
1457
|
-
|
|
1756
|
+
const stackList = [];
|
|
1757
|
+
eventValue.forEach(async (item) => {
|
|
1758
|
+
stackList.push(item.originEvent);
|
|
1458
1759
|
});
|
|
1760
|
+
// 异步状态机,一个完成了在执行下一个
|
|
1761
|
+
function next() {
|
|
1762
|
+
const item = stackList.shift();
|
|
1763
|
+
receiveHandleChange(item).then(async () => {
|
|
1764
|
+
if (stackList.length) {
|
|
1765
|
+
next();
|
|
1766
|
+
}
|
|
1767
|
+
else {
|
|
1768
|
+
console.log('filesToCheck', filesToCheck, filesToCheck.size);
|
|
1769
|
+
await naslServer.getDiagnosticRecordsAndPushAll(Array.from(filesToCheck));
|
|
1770
|
+
filesToCheck.clear();
|
|
1771
|
+
}
|
|
1772
|
+
});
|
|
1773
|
+
}
|
|
1774
|
+
// 如果有长度开始执行状态机
|
|
1775
|
+
if (stackList.length) {
|
|
1776
|
+
next();
|
|
1777
|
+
}
|
|
1459
1778
|
});
|
|
1460
1779
|
naslServer.messager.options.context = naslServer;
|
|
1461
1780
|
exports.default = naslServer;
|