@lcap/nasl 1.0.0-alpha.8 → 1.0.1
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 +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 +84 -44
- 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 +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 +57 -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 +107 -50
- package/out/concepts/CallLogic__.js.map +1 -1
- package/out/concepts/CallQueryComponent__.d.ts +7 -1
- package/out/concepts/CallQueryComponent__.js +45 -26
- 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 +14 -0
- package/out/concepts/Constant__.js.map +1 -1
- package/out/concepts/Destination__.d.ts +12 -0
- package/out/concepts/Destination__.js +98 -19
- 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 -4
- package/out/concepts/Entity__.js +30 -20
- 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 +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 +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 +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 +57 -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 +117 -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/QueryFromExpression__.js +2 -2
- package/out/concepts/QueryFromExpression__.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 +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 +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 +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 +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 +12 -11
- package/out/concepts/View__.js +109 -98
- 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 +1206 -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 +12 -0
- package/out/server/getScope.js +57 -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 +721 -381
- 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 +213 -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/integration/connect-file copy.d.ts +1 -0
- package/out/test/integration/connect-file copy.js +50 -0
- package/out/test/integration/connect-file copy.js.map +1 -0
- package/out/test/integration/node-nasl-server.d.ts +1 -0
- package/out/test/integration/node-nasl-server.js +41 -0
- package/out/test/integration/node-nasl-server.js.map +1 -0
- 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 -1
- package/src/automate/engine/index.js +97 -118
- package/src/automate/engine/operators.js +63 -0
- package/src/automate/engine/uniqueName.js +36 -0
- package/src/automate/engine/utils.js +49 -19
- package/src/common/BaseNode.ts +223 -87
- package/src/concepts/App__.ts +86 -46
- 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 +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 +58 -25
- package/src/concepts/CallInterface__.ts +236 -26
- package/src/concepts/CallLogic__.ts +111 -52
- package/src/concepts/CallQueryComponent__.ts +36 -21
- 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 +12 -0
- package/src/concepts/Destination__.ts +106 -18
- package/src/concepts/End__.ts +8 -1
- package/src/concepts/EntityProperty__.ts +69 -5
- package/src/concepts/Entity__.ts +33 -28
- package/src/concepts/Enum__.ts +16 -11
- 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 +82 -32
- package/src/concepts/IfStatement__.ts +4 -4
- package/src/concepts/InterfaceParam__.ts +49 -27
- 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 +201 -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 +54 -28
- package/src/concepts/ProcessComponent__.ts +6 -6
- package/src/concepts/ProcessElement__.ts +143 -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/QueryFromExpression__.ts +2 -2
- 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 +60 -29
- package/src/concepts/Role__.ts +11 -4
- package/src/concepts/SqlQueryComponent__.ts +2 -2
- package/src/concepts/StringLiteral__.ts +20 -31
- package/src/concepts/StructureProperty__.ts +50 -33
- 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 +59 -16
- 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 +67 -25
- package/src/concepts/ViewComponent__.ts +15 -15
- package/src/concepts/ViewElement__.ts +380 -264
- package/src/concepts/View__.ts +139 -94
- package/src/concepts/WhileStatement__.ts +4 -4
- package/src/concepts/basics/stdlib/index.ts +4 -2
- package/src/concepts/basics/stdlib/nasl.auth.ts +26 -0
- package/src/concepts/basics/stdlib/nasl.browser.ts +37 -0
- package/src/concepts/basics/stdlib/nasl.configuration.ts +21 -0
- package/src/concepts/basics/stdlib/nasl.ui.ts +20 -1
- package/src/concepts/basics/stdlib/nasl.util.ts +151 -13
- package/src/concepts/basics/stdlib/nasl.validation.ts +45 -11
- package/src/concepts/basics/types/coreTypeList.ts +11 -10
- package/src/concepts/index__.ts +1 -0
- package/src/config.ts +1 -2
- package/src/enums/KEYWORDS.ts +1204 -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 +50 -8
- package/src/server/entity2LogicNamespace.ts +41 -25
- package/src/server/getExtensionModules.ts +2 -0
- package/src/server/getFunctions.ts +6 -0
- package/src/server/getLogics.ts +66 -19
- package/src/server/getMemberIdentifier.ts +275 -46
- package/src/server/getProcesses.ts +248 -4
- package/src/server/getScope.ts +62 -0
- package/src/server/index.ts +12 -1
- package/src/server/naslServer.ts +715 -398
- 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 +217 -47
- package/src/service/storage/service.ts +6 -0
- package/src/service/storage/storagePoint.ts +16 -16
- package/src/templator/genCreateBlock.ts +6 -6
- package/src/templator/genCurdEditMultipleKeyBlock.ts +29 -30
- package/src/templator/genCurdMultipleKeyBlock.ts +11 -11
- package/src/templator/genEditTableBlock.ts +5 -5
- package/src/templator/genEnumSelectBlock.ts +2 -2
- package/src/templator/genGetBlock.ts +6 -8
- package/src/templator/genGridViewBlock.ts +59 -9
- package/src/templator/genQueryComponent.ts +39 -28
- package/src/templator/genTableBlock.ts +5 -9
- package/src/templator/genUpdateBlock.ts +9 -11
- package/src/templator/utils.ts +9 -6
- package/src/test/fixtures/env.ts +0 -2
- package/src/test/units/page/Element.spec.ts +3 -3
- package/src/test/units/temp/temp.spec.ts +1 -1
- package/src/utils/index.ts +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/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 [];
|
|
345
|
+
}
|
|
346
|
+
else {
|
|
347
|
+
return [{ title: '基础类型', children: res }];
|
|
296
348
|
}
|
|
297
|
-
// 调整结构
|
|
298
|
-
const dataTypeList = [{ title: '基础类型', children: res }];
|
|
299
|
-
return dataTypeList;
|
|
300
349
|
}
|
|
301
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;
|
|
376
|
+
}
|
|
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;
|
|
@@ -692,19 +739,27 @@ const naslServer = {
|
|
|
692
739
|
}
|
|
693
740
|
// 如果节点是MemberExpression表达式
|
|
694
741
|
if (minRange.node instanceof concepts_1.MemberExpression) {
|
|
695
|
-
//
|
|
696
|
-
//
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
742
|
+
// 枚举key的特殊性,因为它不是原来的key+value形式的
|
|
743
|
+
// 是加了中括号啥的,所以直接赋值新值
|
|
744
|
+
if (node instanceof concepts_1.EnumItem) {
|
|
745
|
+
const newTextValue = node.parentNode.name + '.' + newValue;
|
|
746
|
+
minRange.newValue = newTextValue;
|
|
747
|
+
}
|
|
748
|
+
else {
|
|
749
|
+
// 匹配到的内容,当前这一行的内容;
|
|
750
|
+
// 因为要用下面的点位信息
|
|
751
|
+
const a = record.lineText;
|
|
752
|
+
// 之前的内容
|
|
753
|
+
const oldValue = minRange.node.getValue();
|
|
754
|
+
const index = a.indexOf(oldValue);
|
|
755
|
+
const start = record.start.offset - index - 1;
|
|
756
|
+
const end = record.end.offset - index - 1;
|
|
757
|
+
const newTextValue = oldValue.substring(0, start) + newValue + oldValue.substring(end, oldValue.length);
|
|
758
|
+
// MemberExpression可能改的是多层中的某一个
|
|
759
|
+
// 倒序, 对比看是哪里发生了修改
|
|
760
|
+
// 比较特殊就把新匹配到的值返回内部自己看要改那个地方的值
|
|
761
|
+
minRange.newValue = newTextValue;
|
|
762
|
+
}
|
|
708
763
|
}
|
|
709
764
|
// 如果是修改实体,引发节点依赖实体发生改变的
|
|
710
765
|
if (minRange.node instanceof concepts_1.EntityProperty && node instanceof concepts_1.Entity) {
|
|
@@ -763,7 +818,13 @@ const naslServer = {
|
|
|
763
818
|
// 如果是view也需要加前缀
|
|
764
819
|
// logic 和 views名称修改 可能会触发bindEvent修改
|
|
765
820
|
if (minRange.node instanceof concepts_1.BindEvent) {
|
|
766
|
-
|
|
821
|
+
// 页面逻辑直接赋值就可以, 因为是相对路径
|
|
822
|
+
if ((node instanceof concepts_1.ViewElement)) {
|
|
823
|
+
minRange.setTypeMethods = 'setCalleeNamespace';
|
|
824
|
+
minRange.newValue = 'elements.' + newValue + '.logics';
|
|
825
|
+
}
|
|
826
|
+
else {
|
|
827
|
+
/**
|
|
767
828
|
* 如果namespce是 'app.views.Student.views.404.views.505.views.update'
|
|
768
829
|
* 在ts中会是'app.views.Student.views.$404.views.$505.views.update'
|
|
769
830
|
* 但是505 要改名为 666 ,要存的是666
|
|
@@ -772,26 +833,44 @@ const naslServer = {
|
|
|
772
833
|
* 2.在匹配到的内容中取转后的namespace的位置
|
|
773
834
|
* 3.然后把namespace中的 $替换成 ''
|
|
774
835
|
*/
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
836
|
+
const tsCalleeNamespace = minRange.node.tsCalleeNamespace;
|
|
837
|
+
const oldValue = tsCalleeNamespace;
|
|
838
|
+
// 先看下标位置
|
|
839
|
+
const lineText = record.lineText;
|
|
840
|
+
const index = lineText.indexOf(oldValue);
|
|
841
|
+
// 在把开始结束位置的-开始位置,来知道是哪里要替换
|
|
842
|
+
const start = record.start.offset - index - 1;
|
|
843
|
+
const end = record.end.offset - index - 1;
|
|
844
|
+
// 新的完整的value
|
|
845
|
+
if (start > tsCalleeNamespace.length) {
|
|
846
|
+
minRange.setTypeMethods = 'setCalleeName';
|
|
847
|
+
minRange.newValue = newValue;
|
|
848
|
+
}
|
|
849
|
+
else {
|
|
850
|
+
// 新的完整的value
|
|
851
|
+
let newTsNameSpace = tsCalleeNamespace.substring(0, start) + newValue + tsCalleeNamespace.substring(end, tsCalleeNamespace.length);
|
|
852
|
+
minRange.setTypeMethods = 'setCalleeNamespace';
|
|
853
|
+
newTsNameSpace = newTsNameSpace.replace(/\.\$/g, '.');
|
|
854
|
+
minRange.newValue = newTsNameSpace;
|
|
855
|
+
}
|
|
856
|
+
}
|
|
857
|
+
}
|
|
858
|
+
if (minRange.node instanceof concepts_1.Destination && node instanceof concepts_1.Param) {
|
|
859
|
+
// 因为view是key value 绑定所以需要重新赋值
|
|
860
|
+
if (node.parentNode instanceof concepts_1.View) {
|
|
861
|
+
const nodeArguments = minRange.node.arguments;
|
|
862
|
+
const findArgument = nodeArguments.find((item) => node.name === item.keyword);
|
|
863
|
+
if (findArgument) {
|
|
864
|
+
minRange.setTypeMethods = 'setArgumentsKeyWord';
|
|
865
|
+
minRange.newValue = {
|
|
866
|
+
findArgument,
|
|
867
|
+
newKeyword: newValue,
|
|
868
|
+
};
|
|
869
|
+
}
|
|
788
870
|
}
|
|
789
871
|
else {
|
|
790
|
-
//
|
|
791
|
-
|
|
792
|
-
minRange.setTypeMethods = 'setCalleeNamespace';
|
|
793
|
-
newTsNameSpace = newTsNameSpace.replace(/\.\$/g, '.');
|
|
794
|
-
minRange.newValue = newTsNameSpace;
|
|
872
|
+
// 如果是修改param查找到Destination就不操作
|
|
873
|
+
return null;
|
|
795
874
|
}
|
|
796
875
|
}
|
|
797
876
|
if (minRange.node instanceof concepts_1.Interface && node instanceof concepts_1.Logic) {
|
|
@@ -807,13 +886,33 @@ const naslServer = {
|
|
|
807
886
|
const newBindRoles = str.split(',');
|
|
808
887
|
minRange.newValue = newBindRoles;
|
|
809
888
|
}
|
|
889
|
+
// 修改枚举值找到了EntityProperty就说明给了默认值
|
|
890
|
+
if (minRange.node instanceof concepts_1.EntityProperty && node instanceof concepts_1.EnumItem) {
|
|
891
|
+
minRange.setTypeMethods = 'setDefaultValue';
|
|
892
|
+
}
|
|
893
|
+
if (minRange.node instanceof concepts_1.QueryFieldExpression && node instanceof concepts_1.Entity) {
|
|
894
|
+
minRange.setTypeMethods = 'setEntityAsName';
|
|
895
|
+
}
|
|
896
|
+
if ((minRange.node instanceof concepts_1.QueryFromExpression || minRange.node instanceof concepts_1.QueryJoinExpression) && node instanceof concepts_1.Entity) {
|
|
897
|
+
minRange.setTypeMethods = 'setEntityName';
|
|
898
|
+
}
|
|
899
|
+
if (minRange.node instanceof concepts_1.QueryFieldExpression && node instanceof concepts_1.EntityProperty) {
|
|
900
|
+
minRange.setTypeMethods = 'setPropertyName';
|
|
901
|
+
}
|
|
902
|
+
// 如果跳转链接或者页面变量同一个param和TypeAnnotation 有两个过滤掉一个
|
|
903
|
+
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)) {
|
|
904
|
+
return null;
|
|
905
|
+
}
|
|
906
|
+
if (minRange.node instanceof concepts_1.Destination && (node instanceof concepts_1.Process || node instanceof concepts_1.ProcessElement)) {
|
|
907
|
+
return null;
|
|
908
|
+
}
|
|
810
909
|
// 枚举修改枚举名,比较特殊
|
|
811
910
|
if (minRange.node instanceof concepts_1.EnumItem && node instanceof concepts_1.Enum) {
|
|
812
911
|
// 什么都不做,用来跳过修改
|
|
813
912
|
return null;
|
|
814
913
|
}
|
|
815
|
-
//
|
|
816
|
-
if (minRange.node instanceof concepts_1.
|
|
914
|
+
// params修改 查找bindevent不需要修改
|
|
915
|
+
if (minRange.node instanceof concepts_1.BindEvent && node instanceof concepts_1.Param) {
|
|
817
916
|
return null;
|
|
818
917
|
}
|
|
819
918
|
// 如果是子页面修改
|
|
@@ -821,8 +920,39 @@ const naslServer = {
|
|
|
821
920
|
if (minRange.node instanceof concepts_1.View && node instanceof concepts_1.View && minRange.node !== node) {
|
|
822
921
|
return null;
|
|
823
922
|
}
|
|
923
|
+
/**
|
|
924
|
+
* 屏蔽组件生成内容块中的变量或者逻辑,出现在表格选择中。在bindAttr中还会有,所以过滤一把
|
|
925
|
+
*/
|
|
926
|
+
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) {
|
|
927
|
+
return null;
|
|
928
|
+
}
|
|
929
|
+
// 修改element引发view改名
|
|
930
|
+
if (node instanceof concepts_1.ViewElement && minRange.node instanceof concepts_1.View) {
|
|
931
|
+
return null;
|
|
932
|
+
}
|
|
933
|
+
// params修改 查找View不需要修改
|
|
824
934
|
// 逻辑改名,触发了在定义里面的,element定义,的值,直接掠过
|
|
825
|
-
if (minRange.node instanceof concepts_1.View && node instanceof concepts_1.Logic) {
|
|
935
|
+
if (minRange.node instanceof concepts_1.View && (node instanceof concepts_1.Logic || node instanceof concepts_1.Param)) {
|
|
936
|
+
/**
|
|
937
|
+
* 这里过滤一下,一些查找引用,重复的内容,直接屏蔽掉,防止操作重复
|
|
938
|
+
* 因为在生成的时候 ,可能弄了一些副作用的引用
|
|
939
|
+
*/
|
|
940
|
+
// 本来是想在上面过滤一把的先放到这里匹配这两个的时候 就会找到
|
|
941
|
+
// refsList = refsList.filter((item) => {
|
|
942
|
+
// 屏蔽组件查找查到定义这里,也过滤一下
|
|
943
|
+
// if (item.lineText.includes(': nasl.ui.'))
|
|
944
|
+
// return false;
|
|
945
|
+
// return true;
|
|
946
|
+
// });
|
|
947
|
+
return null;
|
|
948
|
+
}
|
|
949
|
+
/**
|
|
950
|
+
* 理论上 logic setName只能自己触发,别的地方查到引用都不用重命名
|
|
951
|
+
* 流程改名不触发Logic改名
|
|
952
|
+
* 如果是修改param查找到logic就不操作
|
|
953
|
+
* 除非想在内部修改别的内容所以暂时屏蔽掉
|
|
954
|
+
*/
|
|
955
|
+
if (minRange.node instanceof concepts_1.Logic && node !== minRange.node) {
|
|
826
956
|
return null;
|
|
827
957
|
}
|
|
828
958
|
}
|
|
@@ -839,40 +969,83 @@ const naslServer = {
|
|
|
839
969
|
},
|
|
840
970
|
_addParamsPrepare(node, refsList) {
|
|
841
971
|
const App = node.rootNode;
|
|
842
|
-
const
|
|
972
|
+
const parantNode = node.parentNode;
|
|
843
973
|
// 收集修改
|
|
844
974
|
App.emit('collect:start', {
|
|
845
975
|
actionMsg: '增加逻辑参数',
|
|
846
976
|
});
|
|
847
977
|
node.create({
|
|
848
978
|
index: 0,
|
|
849
|
-
parentNode:
|
|
979
|
+
parentNode: parantNode,
|
|
850
980
|
parentKey: node.parentKey,
|
|
851
981
|
});
|
|
852
982
|
refsList.forEach((record) => {
|
|
853
983
|
const fileNode = this.file2NodeMap.get(record.file);
|
|
854
984
|
if (!fileNode)
|
|
855
985
|
return null;
|
|
856
|
-
const minRange = this._findMinRange(record, fileNode
|
|
986
|
+
const minRange = this._findMinRange(record, fileNode);
|
|
857
987
|
if (minRange) {
|
|
858
988
|
// 如果找到节点是callLogic就去更新
|
|
859
989
|
if (minRange.node instanceof concepts_1.CallLogic && node instanceof concepts_1.Param) {
|
|
860
|
-
minRange.node.setCalleeArgName(
|
|
990
|
+
minRange.node.setCalleeArgName((parantNode));
|
|
991
|
+
}
|
|
992
|
+
// 如果节点参数增加页面也要更新
|
|
993
|
+
if (minRange.node instanceof concepts_1.Destination && node instanceof concepts_1.Param) {
|
|
994
|
+
minRange.node.setViewArgument((parantNode));
|
|
861
995
|
}
|
|
862
996
|
}
|
|
863
997
|
});
|
|
864
998
|
// 结束修改 ,批量操作
|
|
865
999
|
App.emit('collect:end');
|
|
866
1000
|
},
|
|
1001
|
+
// 查找引用
|
|
1002
|
+
async findReferences(node) {
|
|
1003
|
+
let refsList = await naslServer._isHaveRef(node);
|
|
1004
|
+
// 如果查找引用查到自己里面的引用不展示
|
|
1005
|
+
refsList = refsList.filter((item) => {
|
|
1006
|
+
// 自己引用自己的过滤掉
|
|
1007
|
+
// 删除的时候过滤一把组件删除提示
|
|
1008
|
+
// 展示组件自己屏蔽掉
|
|
1009
|
+
return !item.isDefinition && !(item.lineText.includes(' = new nasl.ui.'));
|
|
1010
|
+
});
|
|
1011
|
+
// 最后返回的结果
|
|
1012
|
+
let result = new Map();
|
|
1013
|
+
// 树的构造,key: 一个file的node, 值是 [[logic, params],[logic, returns]]
|
|
1014
|
+
const resMap = new Map();
|
|
1015
|
+
// 普通节点和要输出的节点做一个映射,为了引用地址一样
|
|
1016
|
+
const nodeMap = new Map();
|
|
1017
|
+
try {
|
|
1018
|
+
refsList.forEach((record) => {
|
|
1019
|
+
const fileNode = this.file2NodeMap.get(record.file);
|
|
1020
|
+
if (!fileNode)
|
|
1021
|
+
return;
|
|
1022
|
+
const minRange = this._findMinRange(record, fileNode);
|
|
1023
|
+
// 过滤一把不需要改的信息
|
|
1024
|
+
if (minRange) {
|
|
1025
|
+
// 拼装树
|
|
1026
|
+
naslServer._getTreeMap(minRange, fileNode, resMap, nodeMap);
|
|
1027
|
+
}
|
|
1028
|
+
});
|
|
1029
|
+
console.log(resMap, 'resMap');
|
|
1030
|
+
if (resMap.size > 0) {
|
|
1031
|
+
result = naslServer.handleTreeMap(resMap);
|
|
1032
|
+
}
|
|
1033
|
+
}
|
|
1034
|
+
catch (err) {
|
|
1035
|
+
console.log(err);
|
|
1036
|
+
}
|
|
1037
|
+
console.log(result);
|
|
1038
|
+
return result;
|
|
1039
|
+
},
|
|
867
1040
|
// 获取节点的上层渲染
|
|
868
|
-
_getTreeMap(minRange, fileNode, resMap) {
|
|
1041
|
+
_getTreeMap(minRange, fileNode, resMap, nodeMap) {
|
|
869
1042
|
const minRangeNode = minRange.node;
|
|
870
1043
|
let parantNode = minRangeNode;
|
|
871
1044
|
// 顺序队列
|
|
872
1045
|
const queue = [];
|
|
873
1046
|
// 先插入自己,如果没有在往上找,
|
|
874
1047
|
// 一直到file节点的父级
|
|
875
|
-
while (parantNode
|
|
1048
|
+
while (!(parantNode instanceof concepts_1.App)) {
|
|
876
1049
|
// 找到上一级 在map对象中构造出他的子集
|
|
877
1050
|
const currentNode = parantNode;
|
|
878
1051
|
parantNode = parantNode.parentNode;
|
|
@@ -883,7 +1056,9 @@ const naslServer = {
|
|
|
883
1056
|
// 排除一些不放入集合的节点
|
|
884
1057
|
let isNeedPush = true;
|
|
885
1058
|
// 如果不是ViewElement 或者 Assignment , 或者如果是的话, 排除l-root
|
|
886
|
-
if (currentNode instanceof concepts_1.ViewElement && currentNode.tag
|
|
1059
|
+
if (currentNode instanceof concepts_1.ViewElement && currentNode.tag === 'l-root')
|
|
1060
|
+
isNeedPush = false;
|
|
1061
|
+
else if (currentNode instanceof concepts_1.Argument)
|
|
887
1062
|
isNeedPush = false;
|
|
888
1063
|
else if (currentNode instanceof concepts_1.Assignment)
|
|
889
1064
|
isNeedPush = false;
|
|
@@ -893,13 +1068,11 @@ const naslServer = {
|
|
|
893
1068
|
isNeedPush = false;
|
|
894
1069
|
else if (currentNode instanceof concepts_1.QueryFromExpression)
|
|
895
1070
|
isNeedPush = false;
|
|
896
|
-
|
|
897
|
-
isNeedPush = false;
|
|
1071
|
+
// 需要放到数组中
|
|
898
1072
|
if (isNeedPush) {
|
|
899
1073
|
// 名称
|
|
900
|
-
let name = currentNode.name || currentNode.concept;
|
|
901
1074
|
// 赋值图标
|
|
902
|
-
let icon =
|
|
1075
|
+
let icon = '';
|
|
903
1076
|
if (currentNode instanceof concepts_1.ViewElement)
|
|
904
1077
|
icon = 'element';
|
|
905
1078
|
else if (currentNode instanceof concepts_1.BindAttribute)
|
|
@@ -908,55 +1081,34 @@ const naslServer = {
|
|
|
908
1081
|
icon = 'logicNode';
|
|
909
1082
|
else if (currentNode instanceof concepts_1.CallLogic) {
|
|
910
1083
|
icon = 'interface';
|
|
911
|
-
name = '调用逻辑';
|
|
912
1084
|
}
|
|
913
|
-
|
|
1085
|
+
// 相同节点使用一个引用
|
|
1086
|
+
if (nodeMap.get(currentNode)) {
|
|
1087
|
+
queue.unshift(nodeMap.get(currentNode));
|
|
1088
|
+
}
|
|
1089
|
+
else {
|
|
1090
|
+
const quoteNode = { node: currentNode, expanded: true, icon };
|
|
1091
|
+
nodeMap.set(currentNode, quoteNode);
|
|
1092
|
+
queue.unshift(quoteNode);
|
|
1093
|
+
}
|
|
914
1094
|
}
|
|
915
1095
|
}
|
|
916
|
-
const key = fileNode.name;
|
|
917
1096
|
// 一个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);
|
|
1097
|
+
if (resMap.get(fileNode)) {
|
|
1098
|
+
// 是否展示两个内容全等,但是两个queue的node可能不一样,但是只需要展示一个
|
|
1099
|
+
resMap.get(fileNode).push(queue);
|
|
938
1100
|
}
|
|
939
1101
|
else {
|
|
940
|
-
resMap[
|
|
941
|
-
queue: queue.length ? [queue] : [],
|
|
942
|
-
concept: fileNode.concept,
|
|
943
|
-
name: fileNode.name,
|
|
944
|
-
node: fileNode,
|
|
945
|
-
};
|
|
1102
|
+
resMap.set(fileNode, [queue]);
|
|
946
1103
|
}
|
|
947
1104
|
},
|
|
948
|
-
handleTreeMap(
|
|
949
|
-
const treeNodeMap =
|
|
950
|
-
|
|
1105
|
+
handleTreeMap(resMap) {
|
|
1106
|
+
const treeNodeMap = new Map();
|
|
1107
|
+
resMap.forEach((value, fileNode) => {
|
|
951
1108
|
// 循环处理tree的queue
|
|
952
|
-
const treeObj = naslServer.handleTreeQueue(
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
}
|
|
956
|
-
else {
|
|
957
|
-
treeNodeMap[val.concept] = [treeObj];
|
|
958
|
-
}
|
|
959
|
-
}
|
|
1109
|
+
const treeObj = naslServer.handleTreeQueue(value);
|
|
1110
|
+
treeNodeMap.set(fileNode, treeObj);
|
|
1111
|
+
});
|
|
960
1112
|
return treeNodeMap;
|
|
961
1113
|
},
|
|
962
1114
|
/**
|
|
@@ -965,30 +1117,27 @@ const naslServer = {
|
|
|
965
1117
|
* @param arr 当前页面下的queue的二维数组,一个数组下有多条链路
|
|
966
1118
|
* @returns 最后要使用到的节点和对应的子集
|
|
967
1119
|
*/
|
|
968
|
-
handleTreeQueue(
|
|
969
|
-
const map =
|
|
1120
|
+
handleTreeQueue(queueLists) {
|
|
1121
|
+
const map = new Map();
|
|
970
1122
|
let root = null;
|
|
971
|
-
if (!
|
|
1123
|
+
if (!queueLists.length)
|
|
972
1124
|
return;
|
|
973
|
-
for (const
|
|
1125
|
+
for (const queueList of queueLists) {
|
|
974
1126
|
let preNode = null;
|
|
975
|
-
for (const
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
if (!map[key]) {
|
|
979
|
-
map[key] = [];
|
|
1127
|
+
for (const queueItem of queueList) {
|
|
1128
|
+
if (!map.get(queueItem)) {
|
|
1129
|
+
map.set(queueItem, []);
|
|
980
1130
|
}
|
|
981
1131
|
if (preNode) {
|
|
982
|
-
const
|
|
983
|
-
const find = map[preKey].find((item) => node.name === item.name);
|
|
1132
|
+
const find = map.get(preNode).find((item) => item === queueItem);
|
|
984
1133
|
if (!find) {
|
|
985
|
-
map
|
|
1134
|
+
map.get(preNode).push(queueItem);
|
|
986
1135
|
}
|
|
987
1136
|
}
|
|
988
1137
|
else {
|
|
989
|
-
root =
|
|
1138
|
+
root = queueItem;
|
|
990
1139
|
}
|
|
991
|
-
preNode =
|
|
1140
|
+
preNode = queueItem;
|
|
992
1141
|
}
|
|
993
1142
|
}
|
|
994
1143
|
const children = naslServer._recursionCreateResult(root, map);
|
|
@@ -1001,24 +1150,24 @@ const naslServer = {
|
|
|
1001
1150
|
* @returns 当前节点,最后输出所有节点
|
|
1002
1151
|
*/
|
|
1003
1152
|
_recursionCreateResult(root, map) {
|
|
1004
|
-
const
|
|
1005
|
-
const rootKey = root.name;
|
|
1006
|
-
const children = map[rootKey].map((item) => naslServer._recursionCreateResult(item, map));
|
|
1153
|
+
const children = map.get(root).map((item) => naslServer._recursionCreateResult(item, map));
|
|
1007
1154
|
if (children && children.length) {
|
|
1008
|
-
|
|
1155
|
+
root.children = children;
|
|
1009
1156
|
}
|
|
1010
|
-
return
|
|
1157
|
+
return root;
|
|
1011
1158
|
},
|
|
1012
1159
|
/**
|
|
1013
1160
|
* 获取
|
|
1014
1161
|
* 当前this上下文 的Source 和 父级文件级别的节点
|
|
1015
1162
|
*/
|
|
1016
1163
|
getCurrentSource(node) {
|
|
1164
|
+
if (node instanceof concepts_1.App || node instanceof concepts_1.Theme)
|
|
1165
|
+
return { fileNode: null };
|
|
1017
1166
|
let sourceMap = node.sourceMap;
|
|
1018
1167
|
let fileNode = node;
|
|
1019
1168
|
// 如果没有sourceMap,就继续向上找 ,或者到module结束
|
|
1020
1169
|
// 如果 节点找到 app 或者module 停止
|
|
1021
|
-
while (!sourceMap && fileNode && !(fileNode.parentNode instanceof concepts_1.App) && !(fileNode.parentNode instanceof concepts_1.Module)) {
|
|
1170
|
+
while (!sourceMap && fileNode && !(fileNode.parentNode instanceof concepts_1.App) && !(fileNode.parentNode instanceof concepts_1.Module) && !(fileNode instanceof concepts_1.View)) {
|
|
1022
1171
|
fileNode = fileNode.parentNode;
|
|
1023
1172
|
sourceMap = fileNode?.sourceMap;
|
|
1024
1173
|
}
|
|
@@ -1041,7 +1190,6 @@ const naslServer = {
|
|
|
1041
1190
|
// 获取element方法的可选值
|
|
1042
1191
|
getFieldKeySelectCompletion(node, fieldKey) {
|
|
1043
1192
|
const { currentSource, fileNode } = naslServer.getCurrentSource(node);
|
|
1044
|
-
console.log(currentSource);
|
|
1045
1193
|
if (currentSource && fileNode) {
|
|
1046
1194
|
return naslServer._getFieldKeySelectCompletion({
|
|
1047
1195
|
file: fileNode.getEmbeddedFilePath(),
|
|
@@ -1090,11 +1238,51 @@ async function handleDelete(fileNode, targetNode, result) {
|
|
|
1090
1238
|
}
|
|
1091
1239
|
// 更新文件之后
|
|
1092
1240
|
await naslServer.updateFiles({ outputFiles });
|
|
1093
|
-
const filesToCheck = new Set();
|
|
1094
1241
|
newRefs.refs.forEach((ref) => filesToCheck.add(ref.file));
|
|
1095
|
-
console.log('filesToCheck', filesToCheck, filesToCheck.size);
|
|
1096
|
-
await naslServer.getDiagnosticRecordsAndPushAll(Array.from(filesToCheck));
|
|
1097
1242
|
}
|
|
1243
|
+
concepts_1.BaseNode.prototype.findReadOnlyLogicUsage = function () {
|
|
1244
|
+
let targetNode;
|
|
1245
|
+
if (this.parentNode.concept === 'Namespace' || this.parentNode.parentNode.concept === 'Namespace') {
|
|
1246
|
+
const sourceMap = this.parentNode.concept === 'Namespace' ? this.parentNode.parentNode.sourceMap : this.parentNode.parentNode.parentNode.sourceMap;
|
|
1247
|
+
for (const item of sourceMap) {
|
|
1248
|
+
const logic = item[0];
|
|
1249
|
+
if (this.concept === 'Logic') {
|
|
1250
|
+
if (logic instanceof concepts_1.Logic)
|
|
1251
|
+
if (logic.calleewholeKey === this.calleewholeKey) {
|
|
1252
|
+
targetNode = logic;
|
|
1253
|
+
break;
|
|
1254
|
+
}
|
|
1255
|
+
}
|
|
1256
|
+
else {
|
|
1257
|
+
if (logic instanceof concepts_1.Logic)
|
|
1258
|
+
if (logic.calleewholeKey === this.parentNode.calleewholeKey) {
|
|
1259
|
+
targetNode = logic;
|
|
1260
|
+
break;
|
|
1261
|
+
}
|
|
1262
|
+
}
|
|
1263
|
+
}
|
|
1264
|
+
}
|
|
1265
|
+
else if (this.parentNode.concept === 'Module') {
|
|
1266
|
+
// 父级是模块的还是用它本身去查找引用
|
|
1267
|
+
targetNode = this;
|
|
1268
|
+
}
|
|
1269
|
+
else {
|
|
1270
|
+
const sourceMap = this.parentNode.sourceMap;
|
|
1271
|
+
for (const item of sourceMap) {
|
|
1272
|
+
const logic = item[0];
|
|
1273
|
+
if (logic.getNamespace && logic.getNamespace() === this.getNamespace()) {
|
|
1274
|
+
targetNode = logic;
|
|
1275
|
+
break;
|
|
1276
|
+
}
|
|
1277
|
+
}
|
|
1278
|
+
}
|
|
1279
|
+
try {
|
|
1280
|
+
return naslServer.findReferences(targetNode);
|
|
1281
|
+
}
|
|
1282
|
+
catch (err) {
|
|
1283
|
+
console.log(err);
|
|
1284
|
+
}
|
|
1285
|
+
};
|
|
1098
1286
|
// 查找引用
|
|
1099
1287
|
concepts_1.BaseNode.prototype.findUsage = function findUsage() {
|
|
1100
1288
|
try {
|
|
@@ -1151,6 +1339,7 @@ concepts_1.BaseNode.prototype.changeName = async function changeName(newValue, u
|
|
|
1151
1339
|
const confirmParms = {
|
|
1152
1340
|
actionType: 'rename',
|
|
1153
1341
|
node: this,
|
|
1342
|
+
newValue,
|
|
1154
1343
|
};
|
|
1155
1344
|
/**
|
|
1156
1345
|
* nasl和vue的通信,回退,要触发vue的watch。
|
|
@@ -1158,11 +1347,20 @@ concepts_1.BaseNode.prototype.changeName = async function changeName(newValue, u
|
|
|
1158
1347
|
* 先修改之
|
|
1159
1348
|
*/
|
|
1160
1349
|
const closeCallBack = () => {
|
|
1161
|
-
|
|
1162
|
-
|
|
1163
|
-
|
|
1164
|
-
|
|
1165
|
-
|
|
1350
|
+
if (this.concept === 'EnumItem') {
|
|
1351
|
+
const oldValue = this.value;
|
|
1352
|
+
this.value = oldValue + ' ';
|
|
1353
|
+
setTimeout(() => {
|
|
1354
|
+
this.value = oldValue;
|
|
1355
|
+
}, 0);
|
|
1356
|
+
}
|
|
1357
|
+
else {
|
|
1358
|
+
const oldValue = this.name;
|
|
1359
|
+
this.name = oldValue + ' ';
|
|
1360
|
+
setTimeout(() => {
|
|
1361
|
+
this.name = oldValue;
|
|
1362
|
+
}, 0);
|
|
1363
|
+
}
|
|
1166
1364
|
};
|
|
1167
1365
|
updateAll ? callback(true) : (0, common_1.invokeCommand)('tsConfirm.open', confirmParms, callback, closeCallBack);
|
|
1168
1366
|
return;
|
|
@@ -1181,15 +1379,38 @@ concepts_1.BaseNode.prototype.prepareDelete = async function prepareDelete() {
|
|
|
1181
1379
|
* 查找这个节点是不是有依赖
|
|
1182
1380
|
*/
|
|
1183
1381
|
const node = this;
|
|
1184
|
-
|
|
1185
|
-
//
|
|
1382
|
+
let refsList = await naslServer._isHaveRef(node);
|
|
1383
|
+
// 删除的时候过滤一把组件删除提示
|
|
1384
|
+
refsList = refsList.filter((item) => {
|
|
1385
|
+
// 因为ui组件本身会多渲染一次,就先过滤一个
|
|
1386
|
+
return !(item.lineText.includes(': nasl.ui.'));
|
|
1387
|
+
});
|
|
1388
|
+
// 删除参数单独处理
|
|
1389
|
+
if (node instanceof concepts_1.Param) {
|
|
1390
|
+
const methodRefs = [];
|
|
1391
|
+
refsList.forEach((item) => {
|
|
1392
|
+
// 入参查找引用,查到logic 和自己,内容完全一样,就保留一个
|
|
1393
|
+
const find = methodRefs.find((findItem) => item.lineText === findItem.lineText);
|
|
1394
|
+
if (!find) {
|
|
1395
|
+
methodRefs.push(item);
|
|
1396
|
+
}
|
|
1397
|
+
});
|
|
1398
|
+
refsList = methodRefs;
|
|
1399
|
+
}
|
|
1400
|
+
// delete的弹框展示
|
|
1186
1401
|
const confirmParms = {
|
|
1187
1402
|
actionType: 'delete',
|
|
1188
1403
|
tipFlag: false,
|
|
1189
1404
|
node,
|
|
1405
|
+
icon: 'warning',
|
|
1190
1406
|
};
|
|
1191
1407
|
let callback = null;
|
|
1192
1408
|
if (refsList.length <= 1) {
|
|
1409
|
+
// 页面组件直接删除然后return
|
|
1410
|
+
if (node instanceof concepts_1.ViewElement) {
|
|
1411
|
+
this.delete();
|
|
1412
|
+
return;
|
|
1413
|
+
}
|
|
1193
1414
|
callback = () => {
|
|
1194
1415
|
// Structure 和 Interface是内部有delete方法
|
|
1195
1416
|
if (node instanceof concepts_1.Structure || node instanceof concepts_1.Interface) {
|
|
@@ -1204,12 +1425,26 @@ concepts_1.BaseNode.prototype.prepareDelete = async function prepareDelete() {
|
|
|
1204
1425
|
// 如果有依赖就有一个查找引用提示
|
|
1205
1426
|
confirmParms.tipFlag = true;
|
|
1206
1427
|
const node = this;
|
|
1428
|
+
// 删除页面或者流程
|
|
1429
|
+
if (node instanceof concepts_1.View || node instanceof concepts_1.Process) {
|
|
1430
|
+
/**
|
|
1431
|
+
* 查找这个页面是不是有依赖
|
|
1432
|
+
*/
|
|
1433
|
+
let viewPath = this.getEmbeddedFilePath();
|
|
1434
|
+
viewPath = viewPath.slice(0, viewPath.length - 3);
|
|
1435
|
+
const find = refsList.find((record) => !record.file.includes(viewPath));
|
|
1436
|
+
// 如果没有别的文件的依赖,就直接delete
|
|
1437
|
+
if (!find) {
|
|
1438
|
+
this.delete();
|
|
1439
|
+
return;
|
|
1440
|
+
}
|
|
1441
|
+
}
|
|
1207
1442
|
callback = () => {
|
|
1208
1443
|
// removeParam
|
|
1209
1444
|
// 跟rename 还不太一样,部分修改依赖修改好的值,然后在下面的修改需要把自己传递进去
|
|
1210
1445
|
if (node instanceof concepts_1.Param) {
|
|
1211
1446
|
const App = this.rootNode;
|
|
1212
|
-
const
|
|
1447
|
+
const parentNode = this.parentNode;
|
|
1213
1448
|
// 收集修改
|
|
1214
1449
|
App.emit('collect:start', {
|
|
1215
1450
|
actionMsg: '删除参数',
|
|
@@ -1219,10 +1454,13 @@ concepts_1.BaseNode.prototype.prepareDelete = async function prepareDelete() {
|
|
|
1219
1454
|
const fileNode = naslServer.file2NodeMap.get(record.file);
|
|
1220
1455
|
if (!fileNode)
|
|
1221
1456
|
return null;
|
|
1222
|
-
const minRange = naslServer._findMinRange(record, fileNode
|
|
1457
|
+
const minRange = naslServer._findMinRange(record, fileNode);
|
|
1223
1458
|
if (minRange) {
|
|
1224
1459
|
if (minRange.node instanceof concepts_1.CallLogic) {
|
|
1225
|
-
minRange.node.setCalleeArgName(
|
|
1460
|
+
minRange.node.setCalleeArgName(parentNode);
|
|
1461
|
+
}
|
|
1462
|
+
if (minRange.node instanceof concepts_1.Destination) {
|
|
1463
|
+
minRange.node.setViewArgument(parentNode);
|
|
1226
1464
|
}
|
|
1227
1465
|
}
|
|
1228
1466
|
});
|
|
@@ -1242,7 +1480,7 @@ concepts_1.BaseNode.prototype.prepareDelete = async function prepareDelete() {
|
|
|
1242
1480
|
const fileNode = naslServer.file2NodeMap.get(record.file);
|
|
1243
1481
|
if (!fileNode)
|
|
1244
1482
|
return null;
|
|
1245
|
-
const minRange = naslServer._findMinRange(record, fileNode
|
|
1483
|
+
const minRange = naslServer._findMinRange(record, fileNode);
|
|
1246
1484
|
if (minRange) {
|
|
1247
1485
|
if (minRange.node instanceof concepts_1.Interface) {
|
|
1248
1486
|
minRange.node.delete();
|
|
@@ -1251,6 +1489,7 @@ concepts_1.BaseNode.prototype.prepareDelete = async function prepareDelete() {
|
|
|
1251
1489
|
});
|
|
1252
1490
|
// 结束修改 ,批量操作
|
|
1253
1491
|
App.emit('collect:end');
|
|
1492
|
+
return;
|
|
1254
1493
|
}
|
|
1255
1494
|
// 删除权限节点
|
|
1256
1495
|
if (node instanceof concepts_1.Role) {
|
|
@@ -1264,7 +1503,7 @@ concepts_1.BaseNode.prototype.prepareDelete = async function prepareDelete() {
|
|
|
1264
1503
|
const fileNode = naslServer.file2NodeMap.get(record.file);
|
|
1265
1504
|
if (!fileNode)
|
|
1266
1505
|
return null;
|
|
1267
|
-
const minRange = naslServer._findMinRange(record, fileNode
|
|
1506
|
+
const minRange = naslServer._findMinRange(record, fileNode);
|
|
1268
1507
|
if (minRange) {
|
|
1269
1508
|
if (minRange.node instanceof concepts_1.View || minRange.node instanceof concepts_1.ViewElement) {
|
|
1270
1509
|
// oldName旧的节点存的值
|
|
@@ -1280,6 +1519,10 @@ concepts_1.BaseNode.prototype.prepareDelete = async function prepareDelete() {
|
|
|
1280
1519
|
App.emit('collect:end');
|
|
1281
1520
|
return;
|
|
1282
1521
|
}
|
|
1522
|
+
// 删除页面或者流程,如果上一步没有return 就说明他是有别的引用的,会有引用弹框
|
|
1523
|
+
if (node instanceof concepts_1.View || node instanceof concepts_1.Process) {
|
|
1524
|
+
this.delete();
|
|
1525
|
+
}
|
|
1283
1526
|
// 其余的都直接调用删除
|
|
1284
1527
|
// Structure 和 Interface是内部有delete方法
|
|
1285
1528
|
if (node instanceof concepts_1.Structure || node instanceof concepts_1.Interface) {
|
|
@@ -1328,18 +1571,21 @@ async function handleChange(fileNode, targetNode, result, action) {
|
|
|
1328
1571
|
line: EmbeddedTSFileLineMap[fileNode.concept] ?? 2,
|
|
1329
1572
|
offset: 6,
|
|
1330
1573
|
});
|
|
1331
|
-
const filesToCheck = new Set();
|
|
1332
1574
|
newRefs.refs.forEach((ref) => filesToCheck.add(ref.file));
|
|
1333
1575
|
// 唤起建立连接弹框
|
|
1334
1576
|
// 文件级别的建立连接采取提醒
|
|
1335
|
-
if (
|
|
1336
|
-
|
|
1337
|
-
|
|
1338
|
-
|
|
1339
|
-
|
|
1340
|
-
|
|
1577
|
+
if (action === 'create' && targetNode.__init) {
|
|
1578
|
+
// 清除临时状态, 完成本次创建
|
|
1579
|
+
delete targetNode.__init;
|
|
1580
|
+
if (fileNode === targetNode && filesToCheck.size > 1) {
|
|
1581
|
+
const confirmParms = {
|
|
1582
|
+
actionType: 'createEstablishConnection',
|
|
1583
|
+
node: fileNode,
|
|
1584
|
+
icon: 'success',
|
|
1585
|
+
};
|
|
1586
|
+
(0, common_1.invokeCommand)('tsConfirm.open', confirmParms, () => { });
|
|
1587
|
+
}
|
|
1341
1588
|
}
|
|
1342
|
-
await naslServer.getDiagnosticRecordsAndPushAll(Array.from(filesToCheck));
|
|
1343
1589
|
}
|
|
1344
1590
|
/**
|
|
1345
1591
|
* 重命名的更新
|
|
@@ -1352,7 +1598,6 @@ async function handleChange(fileNode, targetNode, result, action) {
|
|
|
1352
1598
|
async function handleRename(fileNode, targetNode, result, oldFilePath) {
|
|
1353
1599
|
// rename 场景
|
|
1354
1600
|
const outputFiles = [{ file: result.filePath, fileContent: result.code }];
|
|
1355
|
-
const filesToCheck = new Set();
|
|
1356
1601
|
// 如果是要修改顶级文件名
|
|
1357
1602
|
// file节点和当前改得是同一节点
|
|
1358
1603
|
if (fileNode === targetNode) {
|
|
@@ -1383,35 +1628,101 @@ async function handleRename(fileNode, targetNode, result, oldFilePath) {
|
|
|
1383
1628
|
});
|
|
1384
1629
|
// 文件级别重命名,有依赖才唤起弹框
|
|
1385
1630
|
// 唤起重命名,提示有连接弹框
|
|
1386
|
-
|
|
1387
|
-
|
|
1388
|
-
|
|
1389
|
-
|
|
1390
|
-
|
|
1391
|
-
|
|
1392
|
-
}
|
|
1631
|
+
// 重命名建立连接先不展示弹框了
|
|
1632
|
+
// if (newRefFileList.size > 1) {
|
|
1633
|
+
// const confirmParms = {
|
|
1634
|
+
// actionType: 'renameEstablishConnection',
|
|
1635
|
+
// node: fileNode,
|
|
1636
|
+
// icon: 'success',
|
|
1637
|
+
// };
|
|
1638
|
+
// invokeCommand('tsConfirm.open', confirmParms, () => {});
|
|
1639
|
+
// }
|
|
1393
1640
|
}
|
|
1394
1641
|
else {
|
|
1395
1642
|
// 查一下当前属性依赖的文件
|
|
1396
1643
|
const { currentSource, fileNode } = naslServer.getCurrentSource(targetNode);
|
|
1397
|
-
|
|
1398
|
-
|
|
1399
|
-
|
|
1400
|
-
|
|
1401
|
-
|
|
1402
|
-
|
|
1403
|
-
|
|
1404
|
-
|
|
1405
|
-
|
|
1406
|
-
|
|
1407
|
-
|
|
1408
|
-
|
|
1409
|
-
|
|
1410
|
-
|
|
1644
|
+
if (currentSource) {
|
|
1645
|
+
const oldRefs = await naslServer.references({
|
|
1646
|
+
file: fileNode.getEmbeddedFilePath(),
|
|
1647
|
+
line: (0, translator_1.lsp2tspNumber)(currentSource.range.start.line),
|
|
1648
|
+
offset: (0, translator_1.lsp2tspNumber)(currentSource.range.start.character),
|
|
1649
|
+
});
|
|
1650
|
+
oldRefs.refs.forEach((ref) => filesToCheck.add(ref.file));
|
|
1651
|
+
// 更新文件之后
|
|
1652
|
+
await naslServer.updateFiles({ outputFiles });
|
|
1653
|
+
const newRefs2 = await naslServer.references({
|
|
1654
|
+
file: fileNode.getEmbeddedFilePath(),
|
|
1655
|
+
line: (0, translator_1.lsp2tspNumber)(currentSource.range.start.line),
|
|
1656
|
+
offset: (0, translator_1.lsp2tspNumber)(currentSource.range.start.character),
|
|
1657
|
+
});
|
|
1658
|
+
newRefs2.refs.forEach((ref) => filesToCheck.add(ref.file));
|
|
1659
|
+
}
|
|
1660
|
+
}
|
|
1661
|
+
}
|
|
1662
|
+
/**
|
|
1663
|
+
* 处理一些节点操作,子节点需要更新并且check的场景
|
|
1664
|
+
* 因为删除,新增父页面,或者重命名会一起
|
|
1665
|
+
* 删除或者新增view而且他有子集 就要执行同样的操作
|
|
1666
|
+
* @param action 当前操作类型
|
|
1667
|
+
* @param fileNode 文件节点
|
|
1668
|
+
* @param targetNode 操作节点 这里要两个相等才会走家去面对哦逻辑
|
|
1669
|
+
* @param oldpath 触发内容的oldpath
|
|
1670
|
+
*/
|
|
1671
|
+
async function incidentalAction(action, fileNode, targetNode, oldpath) {
|
|
1672
|
+
if ((action === 'create' || action === 'delete' || (action === 'update' && oldpath)) && fileNode === targetNode) {
|
|
1673
|
+
// 删除或者新增页面
|
|
1674
|
+
if (fileNode instanceof concepts_1.View && fileNode.children?.length) {
|
|
1675
|
+
const fileNodeChildren = fileNode.children;
|
|
1676
|
+
for (let i = 0; i < fileNodeChildren.length; i++) {
|
|
1677
|
+
const fileNodeItem = fileNodeChildren[i];
|
|
1678
|
+
const result = fileNodeItem.toEmbeddedTSFile();
|
|
1679
|
+
if (action === 'create') {
|
|
1680
|
+
await handleChange(fileNodeItem, fileNodeItem, result, action);
|
|
1681
|
+
await incidentalAction(action, fileNodeItem, fileNodeItem);
|
|
1682
|
+
}
|
|
1683
|
+
else if (action === 'delete') {
|
|
1684
|
+
await handleDelete(fileNodeItem, fileNodeItem, result);
|
|
1685
|
+
await incidentalAction(action, fileNodeItem, fileNodeItem);
|
|
1686
|
+
}
|
|
1687
|
+
else if (action === 'update' && oldpath) {
|
|
1688
|
+
const parentPath = oldpath.replace('.ts', '/');
|
|
1689
|
+
const currentOldPath = parentPath + fileNodeItem.name + '.ts';
|
|
1690
|
+
// 因为重命名这里只有当前修改父级的 旧名称, 所以他的子集也要根据旧名称去查依赖 更新内容
|
|
1691
|
+
await handleRename(fileNodeItem, fileNodeItem, result, currentOldPath);
|
|
1692
|
+
await incidentalAction(action, fileNodeItem, fileNodeItem, currentOldPath);
|
|
1693
|
+
}
|
|
1694
|
+
}
|
|
1695
|
+
;
|
|
1696
|
+
}
|
|
1697
|
+
// 删除或新增模块
|
|
1698
|
+
// 需要把下面的哦内容全部都更新一遍
|
|
1699
|
+
if (fileNode instanceof concepts_1.Module) {
|
|
1700
|
+
const module = (targetNode);
|
|
1701
|
+
const results = [];
|
|
1702
|
+
naslServer.contentToFile(module, results);
|
|
1703
|
+
for (let i = 0; i < results.length; i++) {
|
|
1704
|
+
const result = results[i];
|
|
1705
|
+
const node = naslServer.file2NodeMap.get(result.filePath);
|
|
1706
|
+
if (action === 'create') {
|
|
1707
|
+
await handleChange(node, node, result, action);
|
|
1708
|
+
}
|
|
1709
|
+
else {
|
|
1710
|
+
await handleDelete(node, node, result);
|
|
1711
|
+
}
|
|
1712
|
+
}
|
|
1713
|
+
;
|
|
1714
|
+
// 删除模块通知更新列表
|
|
1715
|
+
if (action === 'delete') {
|
|
1716
|
+
try {
|
|
1717
|
+
// 如果已经
|
|
1718
|
+
(0, common_1.invokeCommand)('module.delete', true);
|
|
1719
|
+
}
|
|
1720
|
+
catch (err) {
|
|
1721
|
+
console.log('module.delete', '组件销毁了,不用唤起了');
|
|
1722
|
+
}
|
|
1723
|
+
}
|
|
1724
|
+
}
|
|
1411
1725
|
}
|
|
1412
|
-
console.log('filesToCheck', filesToCheck, filesToCheck.size);
|
|
1413
|
-
await naslServer.getDiagnosticRecordsAndPushAll(Array.from(filesToCheck));
|
|
1414
|
-
// outputFiles.map((file) => file.file));
|
|
1415
1726
|
}
|
|
1416
1727
|
async function receiveHandleChange($event) {
|
|
1417
1728
|
// 行为
|
|
@@ -1420,7 +1731,11 @@ async function receiveHandleChange($event) {
|
|
|
1420
1731
|
// 当前操作的文件节点
|
|
1421
1732
|
const { fileNode } = naslServer.getCurrentSource(targetNode);
|
|
1422
1733
|
// 如果是导入模块就,就引入对应模块,先不处理module和Configuration,下面的内容会自动创建
|
|
1423
|
-
if (fileNode instanceof concepts_1.Module || fileNode instanceof concepts_1.Configuration) {
|
|
1734
|
+
if (!fileNode || fileNode instanceof concepts_1.Module || fileNode instanceof concepts_1.Configuration) {
|
|
1735
|
+
// module单独处理
|
|
1736
|
+
if (fileNode instanceof concepts_1.Module) {
|
|
1737
|
+
await incidentalAction(action, fileNode, targetNode);
|
|
1738
|
+
}
|
|
1424
1739
|
return;
|
|
1425
1740
|
}
|
|
1426
1741
|
const result = fileNode.toEmbeddedTSFile();
|
|
@@ -1438,24 +1753,49 @@ async function receiveHandleChange($event) {
|
|
|
1438
1753
|
]);
|
|
1439
1754
|
fileNode.sourceMap = result.sourceMap;
|
|
1440
1755
|
if (action === 'update' || action === 'create') {
|
|
1441
|
-
if ($event?.field !== 'name')
|
|
1756
|
+
if ($event?.field !== 'name') {
|
|
1442
1757
|
await handleChange(fileNode, targetNode, result, action);
|
|
1758
|
+
await incidentalAction(action, fileNode, targetNode);
|
|
1759
|
+
}
|
|
1443
1760
|
else {
|
|
1444
|
-
|
|
1761
|
+
const oldpath = fileNode.getEmbeddedFilePath($event.oldObject.name);
|
|
1762
|
+
await handleRename(fileNode, targetNode, result, oldpath);
|
|
1763
|
+
await incidentalAction(action, fileNode, targetNode, oldpath);
|
|
1445
1764
|
}
|
|
1446
1765
|
}
|
|
1447
1766
|
// 删除
|
|
1448
1767
|
if (action === 'delete') {
|
|
1768
|
+
await incidentalAction(action, fileNode, targetNode);
|
|
1449
1769
|
await handleDelete(fileNode, targetNode, result);
|
|
1450
1770
|
}
|
|
1771
|
+
return true;
|
|
1451
1772
|
}
|
|
1452
1773
|
// 监听所有改变操作
|
|
1453
1774
|
translator_1.embeddedTSEmitter.on('change', ($event) => {
|
|
1454
1775
|
// 收集到一个行为集合
|
|
1455
1776
|
const eventValue = $event.value;
|
|
1456
|
-
|
|
1457
|
-
|
|
1777
|
+
const stackList = [];
|
|
1778
|
+
eventValue.forEach(async (item) => {
|
|
1779
|
+
stackList.push(item.originEvent);
|
|
1458
1780
|
});
|
|
1781
|
+
// 异步状态机,一个完成了在执行下一个
|
|
1782
|
+
function next() {
|
|
1783
|
+
const item = stackList.shift();
|
|
1784
|
+
receiveHandleChange(item).then(async () => {
|
|
1785
|
+
if (stackList.length) {
|
|
1786
|
+
next();
|
|
1787
|
+
}
|
|
1788
|
+
else {
|
|
1789
|
+
console.log('filesToCheck', filesToCheck, filesToCheck.size);
|
|
1790
|
+
await naslServer.getDiagnosticRecordsAndPushAll(Array.from(filesToCheck));
|
|
1791
|
+
filesToCheck.clear();
|
|
1792
|
+
}
|
|
1793
|
+
});
|
|
1794
|
+
}
|
|
1795
|
+
// 如果有长度开始执行状态机
|
|
1796
|
+
if (stackList.length) {
|
|
1797
|
+
next();
|
|
1798
|
+
}
|
|
1459
1799
|
});
|
|
1460
1800
|
naslServer.messager.options.context = naslServer;
|
|
1461
1801
|
exports.default = naslServer;
|