@lcap/nasl 1.0.0-alpha.7 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/out/automate/engine/index.d.ts +3 -0
- package/out/automate/engine/index.js +513 -0
- package/out/automate/engine/index.js.map +1 -0
- package/out/automate/engine/utils.d.ts +24 -0
- package/out/automate/engine/utils.js +363 -0
- package/out/automate/engine/utils.js.map +1 -0
- package/out/common/BaseNode.d.ts +20 -0
- package/out/common/BaseNode.js +219 -81
- package/out/common/BaseNode.js.map +1 -1
- package/out/concepts/App__.d.ts +18 -1
- package/out/concepts/App__.js +75 -35
- package/out/concepts/App__.js.map +1 -1
- package/out/concepts/Argument__.d.ts +5 -1
- package/out/concepts/Argument__.js +21 -3
- package/out/concepts/Argument__.js.map +1 -1
- package/out/concepts/Assignee__.d.ts +190 -0
- package/out/concepts/Assignee__.js +264 -0
- package/out/concepts/Assignee__.js.map +1 -0
- package/out/concepts/Assignment__.js +5 -0
- package/out/concepts/Assignment__.js.map +1 -1
- package/out/concepts/BinaryExpression__.js +8 -7
- package/out/concepts/BinaryExpression__.js.map +1 -1
- package/out/concepts/BindAttribute__.d.ts +19 -0
- package/out/concepts/BindAttribute__.js +54 -9
- package/out/concepts/BindAttribute__.js.map +1 -1
- package/out/concepts/BindDirective__.js +22 -2
- package/out/concepts/BindDirective__.js.map +1 -1
- package/out/concepts/BindEvent__.d.ts +2 -2
- package/out/concepts/BindEvent__.js +67 -34
- package/out/concepts/BindEvent__.js.map +1 -1
- package/out/concepts/BooleanLiteral__.d.ts +2 -0
- package/out/concepts/BooleanLiteral__.js +10 -0
- package/out/concepts/BooleanLiteral__.js.map +1 -1
- package/out/concepts/CallFunction__.js +41 -23
- package/out/concepts/CallFunction__.js.map +1 -1
- package/out/concepts/CallInterface__.d.ts +5 -0
- package/out/concepts/CallInterface__.js +238 -31
- package/out/concepts/CallInterface__.js.map +1 -1
- package/out/concepts/CallLogic__.d.ts +4 -4
- package/out/concepts/CallLogic__.js +110 -53
- package/out/concepts/CallLogic__.js.map +1 -1
- package/out/concepts/CallQueryComponent__.d.ts +7 -1
- package/out/concepts/CallQueryComponent__.js +44 -25
- package/out/concepts/CallQueryComponent__.js.map +1 -1
- package/out/concepts/Comment__.js +6 -2
- package/out/concepts/Comment__.js.map +1 -1
- package/out/concepts/CompletionProperty__.d.ts +3 -1
- package/out/concepts/CompletionProperty__.js +2 -0
- package/out/concepts/CompletionProperty__.js.map +1 -1
- package/out/concepts/ConfigGroup__.js +2 -2
- package/out/concepts/ConfigGroup__.js.map +1 -1
- package/out/concepts/ConfigProperty__.js +2 -2
- package/out/concepts/ConfigProperty__.js.map +1 -1
- package/out/concepts/Configuration__.js +2 -2
- package/out/concepts/Configuration__.js.map +1 -1
- package/out/concepts/Constant__.d.ts +1 -0
- package/out/concepts/Constant__.js +14 -0
- package/out/concepts/Constant__.js.map +1 -1
- package/out/concepts/Destination__.d.ts +12 -0
- package/out/concepts/Destination__.js +94 -18
- package/out/concepts/Destination__.js.map +1 -1
- package/out/concepts/End__.js +9 -1
- package/out/concepts/End__.js.map +1 -1
- package/out/concepts/EntityProperty__.d.ts +11 -0
- package/out/concepts/EntityProperty__.js +73 -5
- package/out/concepts/EntityProperty__.js.map +1 -1
- package/out/concepts/Entity__.d.ts +4 -1
- package/out/concepts/Entity__.js +37 -15
- package/out/concepts/Entity__.js.map +1 -1
- package/out/concepts/Enum__.d.ts +4 -0
- package/out/concepts/Enum__.js +18 -10
- package/out/concepts/Enum__.js.map +1 -1
- package/out/concepts/Event__.js +2 -2
- package/out/concepts/Event__.js.map +1 -1
- package/out/concepts/ForEachStatement__.js +9 -13
- package/out/concepts/ForEachStatement__.js.map +1 -1
- package/out/concepts/Function__.js +9 -9
- package/out/concepts/Function__.js.map +1 -1
- package/out/concepts/Identifier__.d.ts +3 -0
- package/out/concepts/Identifier__.js +76 -29
- package/out/concepts/Identifier__.js.map +1 -1
- package/out/concepts/IfStatement__.js +4 -4
- package/out/concepts/IfStatement__.js.map +1 -1
- package/out/concepts/InterfaceParam__.d.ts +6 -4
- package/out/concepts/InterfaceParam__.js +52 -19
- package/out/concepts/InterfaceParam__.js.map +1 -1
- package/out/concepts/Interface__.d.ts +42 -30
- package/out/concepts/Interface__.js +131 -15
- package/out/concepts/Interface__.js.map +1 -1
- package/out/concepts/JSBlock__.d.ts +1 -0
- package/out/concepts/JSBlock__.js +3 -0
- package/out/concepts/JSBlock__.js.map +1 -1
- package/out/concepts/LogicItem__.d.ts +2 -1
- package/out/concepts/LogicItem__.js +14 -0
- package/out/concepts/LogicItem__.js.map +1 -1
- package/out/concepts/Logic__.d.ts +16 -1
- package/out/concepts/Logic__.js +176 -33
- package/out/concepts/Logic__.js.map +1 -1
- package/out/concepts/MemberExpression__.d.ts +2 -0
- package/out/concepts/MemberExpression__.js +49 -12
- package/out/concepts/MemberExpression__.js.map +1 -1
- package/out/concepts/Module__.d.ts +126 -120
- package/out/concepts/Module__.js +28 -18
- package/out/concepts/Module__.js.map +1 -1
- package/out/concepts/Namespace__.d.ts +5 -1
- package/out/concepts/Namespace__.js +36 -25
- package/out/concepts/Namespace__.js.map +1 -1
- package/out/concepts/NullLiteral__.d.ts +3 -0
- package/out/concepts/NullLiteral__.js +11 -1
- package/out/concepts/NullLiteral__.js.map +1 -1
- package/out/concepts/NumericLiteral__.d.ts +1 -1
- package/out/concepts/NumericLiteral__.js +17 -6
- package/out/concepts/NumericLiteral__.js.map +1 -1
- package/out/concepts/Param__.d.ts +7 -3
- package/out/concepts/Param__.js +57 -28
- package/out/concepts/Param__.js.map +1 -1
- package/out/concepts/ProcessComponent__.js +4 -4
- package/out/concepts/ProcessComponent__.js.map +1 -1
- package/out/concepts/ProcessElement__.d.ts +0 -4
- package/out/concepts/ProcessElement__.js +112 -49
- package/out/concepts/ProcessElement__.js.map +1 -1
- package/out/concepts/ProcessOutcome__.js +1 -1
- package/out/concepts/ProcessOutcome__.js.map +1 -1
- package/out/concepts/Process__.d.ts +7 -1
- package/out/concepts/Process__.js +77 -81
- package/out/concepts/Process__.js.map +1 -1
- package/out/concepts/QueryAggregateExpression__.js +1 -1
- package/out/concepts/QueryAggregateExpression__.js.map +1 -1
- package/out/concepts/QueryFromExpression__.js +2 -2
- package/out/concepts/QueryFromExpression__.js.map +1 -1
- package/out/concepts/QueryJoinExpression__.js +4 -4
- package/out/concepts/QueryJoinExpression__.js.map +1 -1
- package/out/concepts/QueryLimitExpression__.js +3 -3
- package/out/concepts/QueryLimitExpression__.js.map +1 -1
- package/out/concepts/QuerySelectExpression__.js +2 -2
- package/out/concepts/QuerySelectExpression__.js.map +1 -1
- package/out/concepts/Return__.d.ts +4 -1
- package/out/concepts/Return__.js +67 -21
- package/out/concepts/Return__.js.map +1 -1
- package/out/concepts/Role__.d.ts +4 -0
- package/out/concepts/Role__.js +13 -4
- package/out/concepts/Role__.js.map +1 -1
- package/out/concepts/SqlQueryComponent__.js +2 -2
- package/out/concepts/SqlQueryComponent__.js.map +1 -1
- package/out/concepts/StringLiteral__.d.ts +1 -1
- package/out/concepts/StringLiteral__.js +21 -31
- package/out/concepts/StringLiteral__.js.map +1 -1
- package/out/concepts/StructureProperty__.d.ts +5 -4
- package/out/concepts/StructureProperty__.js +55 -26
- package/out/concepts/StructureProperty__.js.map +1 -1
- package/out/concepts/Structure__.d.ts +44 -30
- package/out/concepts/Structure__.js +42 -10
- package/out/concepts/Structure__.js.map +1 -1
- package/out/concepts/SwitchCase__.js +4 -4
- package/out/concepts/SwitchCase__.js.map +1 -1
- package/out/concepts/SwitchStatement__.js +2 -2
- package/out/concepts/SwitchStatement__.js.map +1 -1
- package/out/concepts/TypeAnnotation__.d.ts +5 -5
- package/out/concepts/TypeAnnotation__.js +74 -20
- package/out/concepts/TypeAnnotation__.js.map +1 -1
- package/out/concepts/UnaryExpression__.js +10 -8
- package/out/concepts/UnaryExpression__.js.map +1 -1
- package/out/concepts/Unparsed__.js +1 -1
- package/out/concepts/Unparsed__.js.map +1 -1
- package/out/concepts/ValidationRule__.d.ts +1 -0
- package/out/concepts/ValidationRule__.js +48 -13
- package/out/concepts/ValidationRule__.js.map +1 -1
- package/out/concepts/Variable__.d.ts +10 -1
- package/out/concepts/Variable__.js +70 -18
- package/out/concepts/Variable__.js.map +1 -1
- package/out/concepts/ViewComponent__.js +10 -10
- package/out/concepts/ViewComponent__.js.map +1 -1
- package/out/concepts/ViewElement__.d.ts +17 -11
- package/out/concepts/ViewElement__.js +299 -201
- package/out/concepts/ViewElement__.js.map +1 -1
- package/out/concepts/View__.d.ts +12 -13
- package/out/concepts/View__.js +106 -103
- package/out/concepts/View__.js.map +1 -1
- package/out/concepts/WhileStatement__.js +3 -3
- package/out/concepts/WhileStatement__.js.map +1 -1
- package/out/concepts/basics/stdlib/index.js +4 -1
- package/out/concepts/basics/stdlib/index.js.map +1 -1
- package/out/concepts/basics/stdlib/{nasl.validate.d.ts → nasl.auth.d.ts} +0 -0
- package/out/concepts/basics/stdlib/nasl.auth.js +30 -0
- package/out/concepts/basics/stdlib/nasl.auth.js.map +1 -0
- package/out/concepts/basics/stdlib/nasl.browser copy.d.ts +3 -0
- package/out/concepts/basics/stdlib/nasl.browser copy.js +70 -0
- package/out/concepts/basics/stdlib/nasl.browser copy.js.map +1 -0
- package/out/concepts/basics/stdlib/nasl.browser.d.ts +3 -0
- package/out/concepts/basics/stdlib/nasl.browser.js +41 -0
- package/out/concepts/basics/stdlib/nasl.browser.js.map +1 -0
- package/out/concepts/basics/stdlib/nasl.configuration.d.ts +3 -0
- package/out/concepts/basics/stdlib/nasl.configuration.js +25 -0
- package/out/concepts/basics/stdlib/nasl.configuration.js.map +1 -0
- package/out/concepts/basics/stdlib/nasl.ui.js +20 -0
- package/out/concepts/basics/stdlib/nasl.ui.js.map +1 -1
- package/out/concepts/basics/stdlib/nasl.util.js +149 -13
- package/out/concepts/basics/stdlib/nasl.util.js.map +1 -1
- package/out/concepts/basics/stdlib/nasl.validation.js +54 -20
- package/out/concepts/basics/stdlib/nasl.validation.js.map +1 -1
- package/out/concepts/basics/types/coreTypeList.js +11 -10
- package/out/concepts/basics/types/coreTypeList.js.map +1 -1
- package/out/concepts/index__.d.ts +1 -0
- package/out/concepts/index__.js +1 -0
- package/out/concepts/index__.js.map +1 -1
- package/out/config.d.ts +1 -2
- package/out/config.js +1 -2
- package/out/config.js.map +1 -1
- package/out/enums/KEYWORDS.d.ts +3 -0
- package/out/enums/KEYWORDS.js +1208 -0
- package/out/enums/KEYWORDS.js.map +1 -0
- package/out/enums/LEVEL_NAME_MAP.d.ts +26 -0
- package/out/enums/LEVEL_NAME_MAP.js +30 -0
- package/out/enums/LEVEL_NAME_MAP.js.map +1 -0
- package/out/eventBus.d.ts +3 -0
- package/out/eventBus.js +7 -0
- package/out/eventBus.js.map +1 -0
- package/out/generator/genBundleFiles.d.ts +7 -2
- package/out/generator/genBundleFiles.js +168 -27
- package/out/generator/genBundleFiles.js.map +1 -1
- package/out/generator/genMetaData.d.ts +20 -20
- package/out/generator/genMetaData.js +50 -15
- package/out/generator/genMetaData.js.map +1 -1
- package/out/index.d.ts +2 -0
- package/out/index.js +2 -0
- package/out/index.js.map +1 -1
- package/out/manager/diagnostic.d.ts +1 -1
- package/out/server/createUiTs.d.ts +1 -0
- package/out/server/createUiTs.js +49 -5
- package/out/server/createUiTs.js.map +1 -1
- package/out/server/entity2LogicNamespace.js +38 -23
- package/out/server/entity2LogicNamespace.js.map +1 -1
- package/out/server/getExtensionModules.js +2 -0
- package/out/server/getExtensionModules.js.map +1 -1
- package/out/server/getFunctions.d.ts +1 -0
- package/out/server/getFunctions.js +7 -1
- package/out/server/getFunctions.js.map +1 -1
- package/out/server/getLogics.js +63 -18
- package/out/server/getLogics.js.map +1 -1
- package/out/server/getMemberIdentifier.d.ts +16 -1
- package/out/server/getMemberIdentifier.js +279 -36
- package/out/server/getMemberIdentifier.js.map +1 -1
- package/out/server/getProcesses.d.ts +6 -1
- package/out/server/getProcesses.js +243 -1
- package/out/server/getProcesses.js.map +1 -1
- package/out/server/getScope.d.ts +11 -0
- package/out/server/getScope.js +45 -0
- package/out/server/getScope.js.map +1 -0
- package/out/server/index.js +4 -0
- package/out/server/index.js.map +1 -1
- package/out/server/naslServer.d.ts +30 -53
- package/out/server/naslServer.js +682 -363
- package/out/server/naslServer.js.map +1 -1
- package/out/server/process2LogicNamespace.d.ts +10 -0
- package/out/server/process2LogicNamespace.js +29 -1
- package/out/server/process2LogicNamespace.js.map +1 -1
- package/out/server/translator.d.ts +22 -3
- package/out/server/translator.js +367 -123
- package/out/server/translator.js.map +1 -1
- package/out/service/creator/add.configs.d.ts +1 -0
- package/out/service/creator/add.configs.js +68 -0
- package/out/service/creator/add.configs.js.map +1 -0
- package/out/service/creator/errHandles.d.ts +18 -0
- package/out/service/creator/errHandles.js +60 -0
- package/out/service/creator/errHandles.js.map +1 -0
- package/out/service/creator/index.d.ts +1 -0
- package/out/service/creator/index.js +72 -0
- package/out/service/creator/index.js.map +1 -0
- package/out/service/storage/api.d.ts +18 -0
- package/out/service/storage/api.js +17 -0
- package/out/service/storage/api.js.map +1 -0
- package/out/service/storage/init.js +200 -37
- package/out/service/storage/init.js.map +1 -1
- package/out/service/storage/service.d.ts +2 -0
- package/out/service/storage/service.js +10 -0
- package/out/service/storage/service.js.map +1 -0
- package/out/service/storage/storagePoint.d.ts +1 -14
- package/out/service/storage/storagePoint.js +16 -16
- package/out/service/storage/storagePoint.js.map +1 -1
- package/out/templator/genCreateBlock.js +6 -6
- package/out/templator/genCreateBlock.js.map +1 -1
- package/out/templator/genCurdEditMultipleKeyBlock.js +13 -17
- package/out/templator/genCurdEditMultipleKeyBlock.js.map +1 -1
- package/out/templator/genCurdMultipleKeyBlock.js +11 -11
- package/out/templator/genCurdMultipleKeyBlock.js.map +1 -1
- package/out/templator/genEditTableBlock.js +5 -5
- package/out/templator/genEditTableBlock.js.map +1 -1
- package/out/templator/genEnumSelectBlock.js +2 -2
- package/out/templator/genEnumSelectBlock.js.map +1 -1
- package/out/templator/genGetBlock.js +5 -3
- package/out/templator/genGetBlock.js.map +1 -1
- package/out/templator/genGridViewBlock.d.ts +3 -1
- package/out/templator/genGridViewBlock.js +61 -6
- package/out/templator/genGridViewBlock.js.map +1 -1
- package/out/templator/genQueryComponent.d.ts +2 -0
- package/out/templator/genQueryComponent.js +27 -14
- package/out/templator/genQueryComponent.js.map +1 -1
- package/out/templator/genTableBlock.d.ts +1 -1
- package/out/templator/genTableBlock.js +4 -5
- package/out/templator/genTableBlock.js.map +1 -1
- package/out/templator/genUpdateBlock.js +9 -10
- package/out/templator/genUpdateBlock.js.map +1 -1
- package/out/templator/utils.d.ts +13 -4
- package/out/templator/utils.js +8 -4
- package/out/templator/utils.js.map +1 -1
- package/out/test/fixtures/env.js +0 -1
- package/out/test/fixtures/env.js.map +1 -1
- package/out/test/units/page/Element.spec.js +3 -3
- package/out/test/units/page/Element.spec.js.map +1 -1
- package/out/test/units/temp/temp.spec.js +1 -1
- package/out/test/units/temp/temp.spec.js.map +1 -1
- package/out/utils/index.d.ts +6 -0
- package/out/utils/index.js +20 -1
- package/out/utils/index.js.map +1 -1
- package/package.json +2 -1
- package/src/automate/engine/index.js +118 -38
- package/src/automate/engine/utils.js +49 -19
- package/src/common/BaseNode.ts +229 -81
- package/src/concepts/App__.ts +77 -37
- package/src/concepts/Argument__.ts +23 -3
- package/src/concepts/Assignee__.ts +437 -0
- package/src/concepts/Assignment__.ts +4 -1
- package/src/concepts/BinaryExpression__.ts +9 -7
- package/src/concepts/BindAttribute__.ts +68 -8
- package/src/concepts/BindDirective__.ts +21 -2
- package/src/concepts/BindEvent__.ts +67 -35
- package/src/concepts/BooleanLiteral__.ts +8 -0
- package/src/concepts/CallFunction__.ts +42 -25
- package/src/concepts/CallInterface__.ts +236 -26
- package/src/concepts/CallLogic__.ts +114 -86
- package/src/concepts/CallQueryComponent__.ts +35 -20
- package/src/concepts/Comment__.ts +6 -2
- package/src/concepts/CompletionProperty__.ts +5 -1
- package/src/concepts/ConfigGroup__.ts +2 -2
- package/src/concepts/ConfigProperty__.ts +2 -2
- package/src/concepts/Configuration__.ts +2 -2
- package/src/concepts/Constant__.ts +12 -0
- package/src/concepts/Destination__.ts +92 -20
- package/src/concepts/End__.ts +8 -1
- package/src/concepts/EntityProperty__.ts +69 -5
- package/src/concepts/Entity__.ts +40 -23
- package/src/concepts/Enum__.ts +16 -11
- package/src/concepts/Event__.ts +2 -2
- package/src/concepts/ForEachStatement__.ts +14 -19
- package/src/concepts/Function__.ts +9 -9
- package/src/concepts/Identifier__.ts +82 -33
- package/src/concepts/IfStatement__.ts +4 -4
- package/src/concepts/InterfaceParam__.ts +51 -21
- package/src/concepts/Interface__.ts +166 -46
- package/src/concepts/JSBlock__.ts +4 -0
- package/src/concepts/LogicItem__.ts +16 -1
- package/src/concepts/Logic__.ts +183 -36
- package/src/concepts/MemberExpression__.ts +57 -13
- package/src/concepts/Module__.ts +176 -140
- package/src/concepts/Namespace__.ts +37 -25
- package/src/concepts/NullLiteral__.ts +8 -1
- package/src/concepts/NumericLiteral__.ts +17 -6
- package/src/concepts/Param__.ts +58 -30
- package/src/concepts/ProcessComponent__.ts +4 -4
- package/src/concepts/ProcessElement__.ts +138 -39
- package/src/concepts/ProcessOutcome__.ts +1 -1
- package/src/concepts/Process__.ts +81 -94
- package/src/concepts/QueryAggregateExpression__.ts +1 -1
- package/src/concepts/QueryFromExpression__.ts +2 -2
- package/src/concepts/QueryJoinExpression__.ts +4 -4
- package/src/concepts/QueryLimitExpression__.ts +3 -12
- package/src/concepts/QuerySelectExpression__.ts +2 -2
- package/src/concepts/Return__.ts +62 -23
- package/src/concepts/Role__.ts +11 -4
- package/src/concepts/SqlQueryComponent__.ts +2 -2
- package/src/concepts/StringLiteral__.ts +20 -31
- package/src/concepts/StructureProperty__.ts +50 -25
- package/src/concepts/Structure__.ts +75 -41
- package/src/concepts/SwitchCase__.ts +4 -4
- package/src/concepts/SwitchStatement__.ts +2 -2
- package/src/concepts/TypeAnnotation__.ts +71 -18
- package/src/concepts/UnaryExpression__.ts +10 -8
- package/src/concepts/Unparsed__.ts +1 -1
- package/src/concepts/ValidationRule__.ts +44 -14
- package/src/concepts/Variable__.ts +69 -19
- package/src/concepts/ViewComponent__.ts +10 -10
- package/src/concepts/ViewElement__.ts +297 -199
- package/src/concepts/View__.ts +114 -107
- package/src/concepts/WhileStatement__.ts +4 -4
- package/src/concepts/basics/stdlib/index.ts +4 -2
- package/src/concepts/basics/stdlib/nasl.auth.ts +26 -0
- package/src/concepts/basics/stdlib/nasl.browser.ts +37 -0
- package/src/concepts/basics/stdlib/nasl.configuration.ts +21 -0
- package/src/concepts/basics/stdlib/nasl.ui.ts +20 -1
- package/src/concepts/basics/stdlib/nasl.util.ts +151 -13
- package/src/concepts/basics/stdlib/nasl.validation.ts +45 -11
- package/src/concepts/basics/types/coreTypeList.ts +11 -10
- package/src/concepts/index__.ts +1 -0
- package/src/config.ts +1 -2
- package/src/enums/KEYWORDS.ts +1206 -0
- package/src/{terms → enums}/LEVEL_NAME_MAP.ts +0 -0
- package/src/eventBus.ts +5 -0
- package/src/generator/genBundleFiles.ts +192 -40
- package/src/generator/genMetaData.ts +72 -21
- package/src/index.ts +2 -0
- package/src/manager/diagnostic.ts +1 -1
- package/src/server/createUiTs.ts +50 -8
- package/src/server/entity2LogicNamespace.ts +41 -25
- package/src/server/getExtensionModules.ts +2 -0
- package/src/server/getFunctions.ts +6 -0
- package/src/server/getLogics.ts +66 -19
- package/src/server/getMemberIdentifier.ts +276 -39
- package/src/server/getProcesses.ts +248 -4
- package/src/server/getScope.ts +50 -0
- package/src/server/index.ts +12 -1
- package/src/server/naslServer.ts +689 -389
- package/src/server/process2LogicNamespace.ts +30 -2
- package/src/server/translator.ts +423 -128
- package/src/service/config/index.js +1 -1
- package/src/service/creator/errHandles.js +5 -2
- package/src/service/creator/index.js +0 -6
- package/src/service/storage/api.js +14 -0
- package/src/service/storage/init.ts +204 -47
- package/src/service/storage/service.ts +6 -0
- package/src/service/storage/storagePoint.ts +16 -16
- package/src/templator/genCreateBlock.ts +6 -6
- package/src/templator/genCurdEditMultipleKeyBlock.ts +29 -30
- package/src/templator/genCurdMultipleKeyBlock.ts +11 -11
- package/src/templator/genEditTableBlock.ts +5 -5
- package/src/templator/genEnumSelectBlock.ts +2 -2
- package/src/templator/genGetBlock.ts +6 -8
- package/src/templator/genGridViewBlock.ts +59 -9
- package/src/templator/genQueryComponent.ts +39 -28
- package/src/templator/genTableBlock.ts +5 -9
- package/src/templator/genUpdateBlock.ts +9 -11
- package/src/templator/utils.ts +9 -6
- package/src/test/fixtures/env.ts +0 -2
- package/src/test/units/page/Element.spec.ts +3 -3
- package/src/test/units/temp/temp.spec.ts +1 -1
- package/src/utils/index.ts +19 -0
- package/out/concepts/basics/stdlib/nasl.validate.js +0 -527
- package/out/concepts/basics/stdlib/nasl.validate.js.map +0 -1
- package/out/data/Module.d.ts +0 -34
- package/out/data/Module.js +0 -53
- package/out/data/Module.js.map +0 -1
- package/src/automate/engine/index.d.ts +0 -3
|
@@ -46,38 +46,62 @@ export interface ElementToVueOptions {
|
|
|
46
46
|
getExtraParts?: (element?: ViewElement) => Array<string>;
|
|
47
47
|
attrFormat?: (attr: BindAttribute | BindEvent | BindDirective, element?: ViewElement, defaultResult?: string) => string | false;
|
|
48
48
|
finalCode?: boolean;
|
|
49
|
+
scopeList?: string[];
|
|
49
50
|
}
|
|
50
51
|
|
|
51
|
-
function transAstNodeToNaslNode(astNode: any): any {
|
|
52
|
+
function transAstNodeToNaslNode(astNode: any, namespace?: string): any {
|
|
52
53
|
let node = null;
|
|
53
54
|
if (astNode.type === 'CallExpression' && astNode.callee.object.name === '$utils') {
|
|
54
55
|
const calleeName = astNode.callee.property.name || astNode.callee.property.value;
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
56
|
+
|
|
57
|
+
if (calleeName === 'EnumList') {
|
|
58
|
+
const args = astNode.arguments;
|
|
59
|
+
let name = '';
|
|
60
|
+
let namespace = 'app.enums';
|
|
61
|
+
if (Array.isArray(args)) {
|
|
62
|
+
name = args[0]?.value;
|
|
63
|
+
namespace = args[1]?.value ? args[1]?.value : 'app.enums';
|
|
64
|
+
}
|
|
65
|
+
node = {
|
|
66
|
+
concept: 'Identifier',
|
|
67
|
+
name,
|
|
68
|
+
namespace,
|
|
69
|
+
kind: 'Expression',
|
|
70
|
+
};
|
|
71
|
+
} else {
|
|
72
|
+
node = {
|
|
73
|
+
concept: 'CallFunction',
|
|
64
74
|
name: '',
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
75
|
+
label: '调用内置函数',
|
|
76
|
+
kind: 'Expression',
|
|
77
|
+
calleeNamespace: 'nasl.util',
|
|
78
|
+
calleeName,
|
|
79
|
+
arguments: astNode.arguments.map((argument: any) => ({
|
|
80
|
+
concept: 'Argument',
|
|
81
|
+
name: '',
|
|
82
|
+
kind: 'Statement',
|
|
83
|
+
keyword: '',
|
|
84
|
+
expression: transAstNodeToNaslNode(Object.assign({}, argument)),
|
|
85
|
+
})),
|
|
86
|
+
};
|
|
87
|
+
}
|
|
70
88
|
} else if (astNode.type === 'MemberExpression') {
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
89
|
+
if (astNode.object?.name === '$global') {
|
|
90
|
+
// 目前只有权限相关的
|
|
91
|
+
node = transAstNodeToNaslNode(astNode.property, 'nasl.auth');
|
|
92
|
+
} else {
|
|
93
|
+
node = {
|
|
94
|
+
concept: 'MemberExpression',
|
|
95
|
+
name: '',
|
|
96
|
+
kind: 'Expression',
|
|
97
|
+
object: transAstNodeToNaslNode(astNode.object),
|
|
98
|
+
property: transAstNodeToNaslNode(astNode.property),
|
|
99
|
+
};
|
|
100
|
+
}
|
|
78
101
|
} else if (astNode.type === 'Identifier') {
|
|
79
102
|
node = {
|
|
80
103
|
concept: 'Identifier',
|
|
104
|
+
namespace: namespace || '',
|
|
81
105
|
name: astNode.name,
|
|
82
106
|
kind: 'Expression',
|
|
83
107
|
};
|
|
@@ -94,6 +118,17 @@ function transAstNodeToNaslNode(astNode: any): any {
|
|
|
94
118
|
name: '',
|
|
95
119
|
value: astNode.value,
|
|
96
120
|
};
|
|
121
|
+
} else if (astNode.type === 'UnaryExpression') {
|
|
122
|
+
node = {
|
|
123
|
+
concept: 'UnaryExpression',
|
|
124
|
+
kind: 'Expression',
|
|
125
|
+
name: '',
|
|
126
|
+
operator: astNode.operator,
|
|
127
|
+
argument: transAstNodeToNaslNode(astNode.argument),
|
|
128
|
+
};
|
|
129
|
+
} else {
|
|
130
|
+
node = astNode;
|
|
131
|
+
node.concept = astNode.type;
|
|
97
132
|
}
|
|
98
133
|
return node;
|
|
99
134
|
}
|
|
@@ -309,7 +344,7 @@ export class ViewElement extends BaseNode {
|
|
|
309
344
|
name: options,
|
|
310
345
|
}, this, 'bindAttrs');
|
|
311
346
|
} else if (options instanceof BindAttribute) {
|
|
312
|
-
options.
|
|
347
|
+
options.ensureDelete(); // 同一实例不支持多处存在
|
|
313
348
|
bindAttribute = options;
|
|
314
349
|
Object.assign(bindAttribute, relationOptions);
|
|
315
350
|
} else {
|
|
@@ -397,7 +432,7 @@ export class ViewElement extends BaseNode {
|
|
|
397
432
|
|
|
398
433
|
addBindAttribute(options?: string | Partial<BindAttribute> | BindAttribute) {
|
|
399
434
|
const node = this._addBindAttribute(options as any);
|
|
400
|
-
const index = this.bindAttrs.
|
|
435
|
+
const index = this.bindAttrs.indexOf(node);
|
|
401
436
|
node.create({
|
|
402
437
|
index,
|
|
403
438
|
parentNode: this,
|
|
@@ -451,7 +486,7 @@ export class ViewElement extends BaseNode {
|
|
|
451
486
|
name: options,
|
|
452
487
|
}, this, 'bindEvents');
|
|
453
488
|
} else if (options instanceof BindEvent) {
|
|
454
|
-
options.
|
|
489
|
+
options.ensureDelete(); // 同一实例不支持多处存在
|
|
455
490
|
bindEvent = options;
|
|
456
491
|
Object.assign(bindEvent, relationOptions);
|
|
457
492
|
} else {
|
|
@@ -539,7 +574,7 @@ export class ViewElement extends BaseNode {
|
|
|
539
574
|
|
|
540
575
|
addBindEvent(options?: string | Partial<BindEvent> | BindEvent) {
|
|
541
576
|
const node = this._addBindEvent(options as any);
|
|
542
|
-
const index = this.bindEvents.
|
|
577
|
+
const index = this.bindEvents.indexOf(node);
|
|
543
578
|
node.create({
|
|
544
579
|
index,
|
|
545
580
|
parentNode: this,
|
|
@@ -593,7 +628,7 @@ export class ViewElement extends BaseNode {
|
|
|
593
628
|
name: options,
|
|
594
629
|
}, this, 'bindDirectives');
|
|
595
630
|
} else if (options instanceof BindDirective) {
|
|
596
|
-
options.
|
|
631
|
+
options.ensureDelete(); // 同一实例不支持多处存在
|
|
597
632
|
bindDirective = options;
|
|
598
633
|
Object.assign(bindDirective, relationOptions);
|
|
599
634
|
} else {
|
|
@@ -681,7 +716,7 @@ export class ViewElement extends BaseNode {
|
|
|
681
716
|
|
|
682
717
|
addBindDirective(options?: string | Partial<BindDirective> | BindDirective) {
|
|
683
718
|
const node = this._addBindDirective(options as any);
|
|
684
|
-
const index = this.bindDirectives.
|
|
719
|
+
const index = this.bindDirectives.indexOf(node);
|
|
685
720
|
node.create({
|
|
686
721
|
index,
|
|
687
722
|
parentNode: this,
|
|
@@ -731,7 +766,7 @@ export class ViewElement extends BaseNode {
|
|
|
731
766
|
name: options,
|
|
732
767
|
}, this, 'children');
|
|
733
768
|
} else if (options instanceof ViewElement) {
|
|
734
|
-
options.
|
|
769
|
+
options.ensureDelete(); // 同一实例不支持多处存在
|
|
735
770
|
viewElement = options;
|
|
736
771
|
Object.assign(viewElement, relationOptions);
|
|
737
772
|
} else {
|
|
@@ -819,7 +854,7 @@ export class ViewElement extends BaseNode {
|
|
|
819
854
|
|
|
820
855
|
addViewElement(options?: string | Partial<ViewElement> | ViewElement) {
|
|
821
856
|
const node = this._addViewElement(options as any);
|
|
822
|
-
const index = this.children.
|
|
857
|
+
const index = this.children.indexOf(node);
|
|
823
858
|
node.create({
|
|
824
859
|
index,
|
|
825
860
|
parentNode: this,
|
|
@@ -1033,6 +1068,21 @@ export class ViewElement extends BaseNode {
|
|
|
1033
1068
|
// ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑
|
|
1034
1069
|
// 自动生成的代码已结束。下面可以手动编写。
|
|
1035
1070
|
//================================================================================
|
|
1071
|
+
|
|
1072
|
+
/* 主页面有没有权限 */
|
|
1073
|
+
get parentAuth() {
|
|
1074
|
+
const _nameSpace = this.view.getNamespace();
|
|
1075
|
+
const mainViewName = _nameSpace.split('.')[2];
|
|
1076
|
+
return this.view.parentNode.concept === 'App' ? this.view.auth : this.app.views.find((item) => item.name === mainViewName)?.auth;
|
|
1077
|
+
}
|
|
1078
|
+
|
|
1079
|
+
/**
|
|
1080
|
+
* 权限领域的资源路径
|
|
1081
|
+
*/
|
|
1082
|
+
get authPath() {
|
|
1083
|
+
return `${this.view.path}/${this.name}`;
|
|
1084
|
+
}
|
|
1085
|
+
|
|
1036
1086
|
getViewElementUniqueName(name = 'viewElement1') {
|
|
1037
1087
|
return this.view?.getViewElementUniqueName(name);
|
|
1038
1088
|
}
|
|
@@ -1064,48 +1114,25 @@ export class ViewElement extends BaseNode {
|
|
|
1064
1114
|
return this.bindAttrs.find((bindAttr) => bindAttr.name === name);
|
|
1065
1115
|
}
|
|
1066
1116
|
|
|
1067
|
-
/**
|
|
1068
|
-
* 角色
|
|
1069
|
-
*/
|
|
1070
|
-
@property()
|
|
1071
|
-
roles: Array<{
|
|
1072
|
-
namespace: string;
|
|
1073
|
-
name: string;
|
|
1074
|
-
}> = [];
|
|
1075
|
-
|
|
1076
|
-
toggleRole(role: Role) {
|
|
1077
|
-
const index = this.roles.findIndex((roleItem) => roleItem.name === role.name);
|
|
1078
|
-
const roles = [...this.roles];
|
|
1079
|
-
if (index !== -1) {
|
|
1080
|
-
roles.splice(index, 1);
|
|
1081
|
-
} else {
|
|
1082
|
-
roles.push({
|
|
1083
|
-
namespace: role.getNamespace(),
|
|
1084
|
-
name: role.name,
|
|
1085
|
-
});
|
|
1086
|
-
}
|
|
1087
|
-
const object = {
|
|
1088
|
-
roles,
|
|
1089
|
-
};
|
|
1090
|
-
this.update({
|
|
1091
|
-
...object,
|
|
1092
|
-
});
|
|
1093
|
-
}
|
|
1094
1117
|
toHump(name: string): string {
|
|
1095
1118
|
return name.replace(/\-(\w)/g, (all, letter) => letter.toUpperCase());
|
|
1096
1119
|
}
|
|
1097
1120
|
|
|
1098
1121
|
haveScope(node: ViewElement): boolean {
|
|
1099
|
-
|
|
1100
|
-
const
|
|
1122
|
+
// uGallery 没有子集不需要scope
|
|
1123
|
+
const dataSourcePcList = ['uTableView', 'uListView', 'uGridView', 'uCalendarView', 'uListComponents', 'uSelect'];
|
|
1124
|
+
const dataSourceH5List = ['vanRadioGroup', 'vanCheckboxGroup', 'vanListView', 'vanGridView', 'vanForComponents', 'lcapEchartsLine', 'lcapEchartsBar', 'lcapEchartsPie'];
|
|
1101
1125
|
const dataSourceList = [...dataSourcePcList, ...dataSourceH5List];
|
|
1102
1126
|
return dataSourceList.includes(node.toHump(node.tag));
|
|
1103
1127
|
}
|
|
1104
1128
|
toEmbeddedTSDefinition(state?: TranslatorState): string {
|
|
1129
|
+
// 登录组件不翻译
|
|
1130
|
+
if (this.toHump(this.tag) === 'lcapLogin' || this.staticClass === 'login-form')
|
|
1131
|
+
return '';
|
|
1105
1132
|
let code = '';
|
|
1106
1133
|
// formItem的单独处理
|
|
1107
1134
|
if (this.tag === 'u-form-item') {
|
|
1108
|
-
code = indent(state.tabSize) + `${this.name}:
|
|
1135
|
+
code = indent(state.tabSize) + `${this.name}: nasl.ui.${this.toHump(this.tag)}`;
|
|
1109
1136
|
if (Array.isArray(this.children) && this.children.length) {
|
|
1110
1137
|
const tag = this.children[0].tag;
|
|
1111
1138
|
if (tag === 'u-input') {
|
|
@@ -1116,7 +1143,7 @@ export class ViewElement extends BaseNode {
|
|
|
1116
1143
|
code += '<nasl.core.Any>';
|
|
1117
1144
|
}
|
|
1118
1145
|
}
|
|
1119
|
-
code += '
|
|
1146
|
+
code += ';\n';
|
|
1120
1147
|
}
|
|
1121
1148
|
if (this.haveScope(this)) {
|
|
1122
1149
|
let genericType = 'any';
|
|
@@ -1134,9 +1161,13 @@ export class ViewElement extends BaseNode {
|
|
|
1134
1161
|
let parentNode = this.parentNode;
|
|
1135
1162
|
let haveScopeFlag = false;
|
|
1136
1163
|
while (!haveScopeFlag && parentNode.concept !== 'View') {
|
|
1137
|
-
if (this.haveScope(
|
|
1164
|
+
if (this.haveScope(parentNode as ViewElement)) {
|
|
1138
1165
|
// type d = nasl.ui.GetItemTypeFromDataSource<typeof listStructure>['tableRelation']
|
|
1139
|
-
const tsArr = expressionTs.split('.');
|
|
1166
|
+
const tsArr = expressionTs.replace('scope.item.', '').split('.');
|
|
1167
|
+
let itemStr = '';
|
|
1168
|
+
tsArr.forEach((item) => {
|
|
1169
|
+
itemStr += `['${item}']`;
|
|
1170
|
+
});
|
|
1140
1171
|
const parentbindAttrs = (parentNode as ViewElement).bindAttrs;
|
|
1141
1172
|
if (parentbindAttrs && parentbindAttrs.length) {
|
|
1142
1173
|
const parentAttr = parentbindAttrs.find((item) => item.name === 'data-source');
|
|
@@ -1144,7 +1175,7 @@ export class ViewElement extends BaseNode {
|
|
|
1144
1175
|
let parentExpressionTs = parentAttr.expression.toEmbeddedTS(shiftState(state, code));
|
|
1145
1176
|
parentExpressionTs = parentExpressionTs.replaceAll(' ', '');
|
|
1146
1177
|
// 如果是逻辑就推导出逻辑类型
|
|
1147
|
-
genericType = `nasl.ui.GetItemTypeFromDataSource<nasl.ui.GetItemTypeFromDataSource<typeof ${parentExpressionTs}
|
|
1178
|
+
genericType = `nasl.ui.GetItemTypeFromDataSource<nasl.ui.GetItemTypeFromDataSource<typeof ${parentExpressionTs}>${itemStr}>`;
|
|
1148
1179
|
}
|
|
1149
1180
|
}
|
|
1150
1181
|
haveScopeFlag = true;
|
|
@@ -1154,9 +1185,9 @@ export class ViewElement extends BaseNode {
|
|
|
1154
1185
|
}
|
|
1155
1186
|
}
|
|
1156
1187
|
}
|
|
1157
|
-
code += indent(state.tabSize) + `${this.name}:
|
|
1188
|
+
code += indent(state.tabSize) + `${this.name}: nasl.ui.${this.toHump(this.tag)}<${genericType}>;\n`;
|
|
1158
1189
|
} else {
|
|
1159
|
-
code = indent(state.tabSize) + `${this.name}:
|
|
1190
|
+
code = indent(state.tabSize) + `${this.name}: nasl.ui.${this.toHump(this.tag)}<any>;\n`;
|
|
1160
1191
|
}
|
|
1161
1192
|
if (Array.isArray(this.children)) {
|
|
1162
1193
|
this.children.forEach((element) => {
|
|
@@ -1167,13 +1198,15 @@ export class ViewElement extends BaseNode {
|
|
|
1167
1198
|
}
|
|
1168
1199
|
@withSourceMap()
|
|
1169
1200
|
toEmbeddedTS(state?: TranslatorState, parentLevel?: number): string {
|
|
1201
|
+
if (this.toHump(this.tag) === 'lcapLogin' || this.staticClass === 'login-form')
|
|
1202
|
+
return '';
|
|
1170
1203
|
function chineseTsName(name: string) {
|
|
1171
1204
|
let tsName = name;
|
|
1205
|
+
// 匹配所有特殊字符都转为_
|
|
1206
|
+
tsName = tsName.replace(/[^\u4e00-\u9fa5a-zA-Z0-9]/g, '_');
|
|
1172
1207
|
if (/^\d/.test(tsName)) {
|
|
1173
1208
|
tsName = '$' + tsName;
|
|
1174
1209
|
}
|
|
1175
|
-
// 匹配所有特殊字符都转为_
|
|
1176
|
-
tsName = tsName.replace(/\W/g, '_');
|
|
1177
1210
|
return tsName;
|
|
1178
1211
|
}
|
|
1179
1212
|
let code = `__elements.${this.name} = new nasl.ui.${this.toHump(this.tag)}({\n`;
|
|
@@ -1183,7 +1216,7 @@ export class ViewElement extends BaseNode {
|
|
|
1183
1216
|
hasAuth = !!this.bindDirectives.filter((directive) => directive.name === 'auth').length;
|
|
1184
1217
|
}
|
|
1185
1218
|
// 角色
|
|
1186
|
-
if (
|
|
1219
|
+
if (Array.isArray(this.bindRoles) && this.bindRoles.length) {
|
|
1187
1220
|
code += indent(state.tabSize + 2);
|
|
1188
1221
|
code += 'roles = [\n';
|
|
1189
1222
|
this.bindRoles.forEach((role) => {
|
|
@@ -1221,25 +1254,40 @@ export class ViewElement extends BaseNode {
|
|
|
1221
1254
|
if (Array.isArray(this.children)) {
|
|
1222
1255
|
code += indent(state.tabSize + 1);
|
|
1223
1256
|
|
|
1224
|
-
let levelIndex = parentLevel || 0;
|
|
1225
|
-
if (this.haveScope(this)) {
|
|
1226
|
-
code += `slotDefault: (scope${levelIndex || ''})=> [\n`;
|
|
1227
|
-
levelIndex++;
|
|
1228
|
-
} else {
|
|
1229
|
-
code += `slotDefault: ()=> [\n`;
|
|
1230
|
-
}
|
|
1231
1257
|
if (Array.isArray(this.bindAttrs)) {
|
|
1232
|
-
code +=
|
|
1258
|
+
code += `bindAttr: () => [\n`;
|
|
1233
1259
|
this.bindAttrs.forEach((attr) => {
|
|
1234
1260
|
if (attr.expression) {
|
|
1235
1261
|
code
|
|
1236
1262
|
+= attr.expression.toEmbeddedTS(shiftState(state, code, {
|
|
1237
|
-
tabSize: state.tabSize +
|
|
1263
|
+
tabSize: state.tabSize + 2,
|
|
1264
|
+
})) + ',\n';
|
|
1265
|
+
}
|
|
1266
|
+
if (Array.isArray(attr.rules) && attr.rules.length) {
|
|
1267
|
+
attr.rules.forEach((item) => {
|
|
1268
|
+
code += item.toEmbeddedTS(shiftState(state, code)) + ',\n';
|
|
1269
|
+
});
|
|
1270
|
+
}
|
|
1271
|
+
});
|
|
1272
|
+
this.bindDirectives.forEach((directive) => {
|
|
1273
|
+
if (directive.expression) {
|
|
1274
|
+
code
|
|
1275
|
+
+= directive.expression.toEmbeddedTS(shiftState(state, code, {
|
|
1276
|
+
tabSize: state.tabSize + 2,
|
|
1238
1277
|
})) + ',\n';
|
|
1239
1278
|
}
|
|
1240
1279
|
});
|
|
1241
1280
|
code += indent(state.tabSize + 2) + '],\n';
|
|
1242
1281
|
}
|
|
1282
|
+
|
|
1283
|
+
let levelIndex = parentLevel || 0;
|
|
1284
|
+
if (this.haveScope(this)) {
|
|
1285
|
+
code += `slotDefault: (scope)=> [\n`;
|
|
1286
|
+
levelIndex++;
|
|
1287
|
+
} else {
|
|
1288
|
+
code += `slotDefault: ()=> [\n`;
|
|
1289
|
+
}
|
|
1290
|
+
|
|
1243
1291
|
this.children.forEach((element) => {
|
|
1244
1292
|
code += element.toEmbeddedTS(shiftState(state, code, {
|
|
1245
1293
|
tabSize: state.tabSize + 2,
|
|
@@ -1255,12 +1303,9 @@ export class ViewElement extends BaseNode {
|
|
|
1255
1303
|
return code;
|
|
1256
1304
|
}
|
|
1257
1305
|
|
|
1258
|
-
_duplicate(
|
|
1259
|
-
const
|
|
1260
|
-
|
|
1261
|
-
view: this.view,
|
|
1262
|
-
});
|
|
1263
|
-
element.deepRenameElements();
|
|
1306
|
+
_duplicate() {
|
|
1307
|
+
const element = ViewElement.from(this.toTemplateJSON());
|
|
1308
|
+
element.deepRenameElements(this);
|
|
1264
1309
|
return element;
|
|
1265
1310
|
}
|
|
1266
1311
|
|
|
@@ -1272,10 +1317,10 @@ export class ViewElement extends BaseNode {
|
|
|
1272
1317
|
}
|
|
1273
1318
|
|
|
1274
1319
|
// 递归生成组件名
|
|
1275
|
-
public deepRenameElements(): void {
|
|
1320
|
+
public deepRenameElements(node: ViewElement): void {
|
|
1276
1321
|
return this.traverseChildren((ele: ViewElement) => {
|
|
1277
1322
|
const tagName = ele.tag.replace(ViewElement.TAG_NAME_PREFIX_REG, '').replace(/-/g, '_');
|
|
1278
|
-
ele.name =
|
|
1323
|
+
ele.name = node.getViewElementUniqueName(`${tagName}1`);
|
|
1279
1324
|
});
|
|
1280
1325
|
}
|
|
1281
1326
|
|
|
@@ -1315,7 +1360,6 @@ export class ViewElement extends BaseNode {
|
|
|
1315
1360
|
concept: 'ValidationRule',
|
|
1316
1361
|
name: '',
|
|
1317
1362
|
label: '验证规则',
|
|
1318
|
-
folded: true,
|
|
1319
1363
|
kind: 'Expression',
|
|
1320
1364
|
calleeNamespace: 'nasl.validation',
|
|
1321
1365
|
arguments: args,
|
|
@@ -1343,13 +1387,13 @@ export class ViewElement extends BaseNode {
|
|
|
1343
1387
|
});
|
|
1344
1388
|
astNode.children = [];
|
|
1345
1389
|
}
|
|
1346
|
-
|
|
1347
1390
|
// 将 scopedSlots 合并到 children 中
|
|
1348
1391
|
if (astNode.scopedSlots) {
|
|
1349
1392
|
astNode.children = astNode.children || [];
|
|
1350
1393
|
Object.keys(astNode.scopedSlots).forEach((key) => {
|
|
1351
|
-
if (!astNode.children.find((child) => key === (child as compiler.ASTElement).slotTarget))
|
|
1394
|
+
if (!astNode.children.find((child) => key === (child as compiler.ASTElement).slotTarget)) {
|
|
1352
1395
|
astNode.children.unshift(astNode.scopedSlots[key]);
|
|
1396
|
+
}
|
|
1353
1397
|
});
|
|
1354
1398
|
delete astNode.scopedSlots;
|
|
1355
1399
|
}
|
|
@@ -1370,6 +1414,12 @@ export class ViewElement extends BaseNode {
|
|
|
1370
1414
|
}
|
|
1371
1415
|
}
|
|
1372
1416
|
const tagName = astNode.tag.replace(ViewElement.TAG_NAME_PREFIX_REG, '').replace(/-/g, '_');
|
|
1417
|
+
let newContext: any = {};
|
|
1418
|
+
if (context) {
|
|
1419
|
+
newContext = {
|
|
1420
|
+
...context,
|
|
1421
|
+
};
|
|
1422
|
+
}
|
|
1373
1423
|
element = new ViewElement({
|
|
1374
1424
|
tag: astNode.tag,
|
|
1375
1425
|
name: astNode.attrsMap.ref || view.getViewElementUniqueName(`${tagName}1`),
|
|
@@ -1377,45 +1427,43 @@ export class ViewElement extends BaseNode {
|
|
|
1377
1427
|
staticStyle: astNode.attrsMap.style,
|
|
1378
1428
|
slotTarget: astNode.slotTarget && json5.parse(astNode.slotTarget),
|
|
1379
1429
|
slotScope: astNode.slotScope === '_empty_' ? '' : astNode.slotScope,
|
|
1380
|
-
children: astNode.children.map((item) => this._fromASTNode(item as compiler.ASTElement,
|
|
1430
|
+
children: astNode.children.map((item) => this._fromASTNode(item as compiler.ASTElement, newContext)) as unknown as Array<ViewElement>,
|
|
1381
1431
|
});
|
|
1382
|
-
|
|
1383
|
-
|
|
1384
|
-
&&
|
|
1385
|
-
|
|
1386
|
-
|
|
1387
|
-
|
|
1388
|
-
|
|
1432
|
+
astNode?.attrs?.forEach((oldAttr) => {
|
|
1433
|
+
let attr: BindAttribute;
|
|
1434
|
+
if (oldAttr.value === '""' && (oldAttr as any).end - (oldAttr as any).start === oldAttr.name.length) {
|
|
1435
|
+
attr = new BindAttribute({
|
|
1436
|
+
type: 'static',
|
|
1437
|
+
name: oldAttr.name,
|
|
1438
|
+
value: 'true',
|
|
1439
|
+
});
|
|
1440
|
+
} else {
|
|
1441
|
+
try {
|
|
1442
|
+
const tmp = json5.parse(oldAttr.value);
|
|
1443
|
+
const source: any = {
|
|
1444
|
+
type: typeof tmp === 'string' ? 'string' : 'static',
|
|
1389
1445
|
name: oldAttr.name,
|
|
1390
|
-
value: '
|
|
1391
|
-
}
|
|
1392
|
-
|
|
1393
|
-
|
|
1394
|
-
|
|
1395
|
-
|
|
1396
|
-
|
|
1397
|
-
|
|
1398
|
-
|
|
1399
|
-
|
|
1400
|
-
|
|
1401
|
-
|
|
1402
|
-
|
|
1403
|
-
|
|
1404
|
-
|
|
1405
|
-
|
|
1406
|
-
attr = BindAttribute.from({
|
|
1407
|
-
type: 'dynamic',
|
|
1408
|
-
name: oldAttr.name,
|
|
1409
|
-
value: expression ? '' : oldAttr.value,
|
|
1410
|
-
expression,
|
|
1411
|
-
}, element);
|
|
1412
|
-
if (astNode.attrsMap[`:${attr.name}.sync`]) {
|
|
1413
|
-
attr.sync = true;
|
|
1414
|
-
}
|
|
1446
|
+
value: typeof tmp === 'string' ? tmp : oldAttr.value,
|
|
1447
|
+
};
|
|
1448
|
+
if (oldAttr.name === 'rules') {
|
|
1449
|
+
source.rules = tmp?.split('|').map((ruleStr: string) => this._parseValidationRule(ruleStr.trim()));
|
|
1450
|
+
}
|
|
1451
|
+
attr = new BindAttribute(source);
|
|
1452
|
+
} catch (e) {
|
|
1453
|
+
const expression = <any> this._parseExpression(oldAttr.value);
|
|
1454
|
+
attr = new BindAttribute({
|
|
1455
|
+
type: 'dynamic',
|
|
1456
|
+
name: oldAttr.name,
|
|
1457
|
+
value: expression ? '' : oldAttr.value,
|
|
1458
|
+
expression,
|
|
1459
|
+
});
|
|
1460
|
+
if (astNode.attrsMap[`:${attr.name}.sync`]) {
|
|
1461
|
+
attr.sync = true;
|
|
1415
1462
|
}
|
|
1416
1463
|
}
|
|
1417
|
-
|
|
1418
|
-
|
|
1464
|
+
}
|
|
1465
|
+
element.addBindAttribute(attr);
|
|
1466
|
+
});
|
|
1419
1467
|
|
|
1420
1468
|
// compiler 处理:value.sync 时会加上update:value事件,需要过滤
|
|
1421
1469
|
astNode.events
|
|
@@ -1425,24 +1473,23 @@ export class ViewElement extends BaseNode {
|
|
|
1425
1473
|
const oldEvent = astNode.events[name] as compiler.ASTElementHandler;
|
|
1426
1474
|
const str = oldEvent.value;
|
|
1427
1475
|
let calleeName = str.split('(')[0];
|
|
1428
|
-
const matchArr = str.match(/\(([^)]*)\)/);
|
|
1476
|
+
const matchArr = str.match(/\(([^)]*)\)/) || [];
|
|
1429
1477
|
let argsStr = '';
|
|
1430
|
-
if (matchArr
|
|
1478
|
+
if (matchArr?.length >= 2) {
|
|
1431
1479
|
argsStr = matchArr[1];
|
|
1432
1480
|
}
|
|
1433
1481
|
let args: any[] = [];
|
|
1434
|
-
|
|
1435
|
-
|
|
1482
|
+
const argStrs: string[] = argsStr.split(',');
|
|
1483
|
+
args = argStrs
|
|
1484
|
+
.filter((argStr) => !!argStr && argStr !== '_empty_')
|
|
1485
|
+
.map((argStr) => {
|
|
1436
1486
|
const keyword = argStr.trim().split('.');
|
|
1437
1487
|
return {
|
|
1438
1488
|
concept: 'Argument',
|
|
1439
1489
|
expression: genArgumentMemberExpression(keyword),
|
|
1440
1490
|
};
|
|
1441
1491
|
});
|
|
1442
|
-
|
|
1443
|
-
const viewNamespace = view?.getNamespace();
|
|
1444
|
-
const viewName = `${view?.name}`;
|
|
1445
|
-
let calleeNamespace = `${viewNamespace}.${viewName}.logics`;
|
|
1492
|
+
let calleeNamespace = '';
|
|
1446
1493
|
if (calleeName) {
|
|
1447
1494
|
const namespaceArr = calleeName.split('.');
|
|
1448
1495
|
const start = namespaceArr.shift();
|
|
@@ -1451,12 +1498,12 @@ export class ViewElement extends BaseNode {
|
|
|
1451
1498
|
calleeName = namespaceArr[1];
|
|
1452
1499
|
}
|
|
1453
1500
|
}
|
|
1454
|
-
element.
|
|
1501
|
+
element.addBindEvent(new BindEvent({
|
|
1455
1502
|
name,
|
|
1456
1503
|
calleeNamespace,
|
|
1457
1504
|
calleeName,
|
|
1458
1505
|
arguments: args,
|
|
1459
|
-
}
|
|
1506
|
+
}));
|
|
1460
1507
|
});
|
|
1461
1508
|
|
|
1462
1509
|
astNode.directives
|
|
@@ -1465,73 +1512,65 @@ export class ViewElement extends BaseNode {
|
|
|
1465
1512
|
const valueAttr = astNode.attrs && astNode.attrs.find((attr) => attr.name === 'value');
|
|
1466
1513
|
if (!valueAttr) {
|
|
1467
1514
|
const expression = <any> this._parseExpression(directive.value);
|
|
1468
|
-
element.
|
|
1515
|
+
element.addBindAttribute(new BindAttribute({
|
|
1469
1516
|
type: 'dynamic',
|
|
1470
1517
|
name: 'value',
|
|
1471
1518
|
value: expression ? '' : directive.value,
|
|
1472
1519
|
expression,
|
|
1473
1520
|
sync: true,
|
|
1474
|
-
}
|
|
1521
|
+
}));
|
|
1475
1522
|
}
|
|
1476
1523
|
} else {
|
|
1477
1524
|
const expression = <any> this._parseExpression(directive.value);
|
|
1478
|
-
element.
|
|
1525
|
+
element.addBindDirective(new BindDirective({
|
|
1479
1526
|
type: expression ? 'string' : 'dynamic',
|
|
1480
1527
|
name: directive.name,
|
|
1481
1528
|
rawName: directive.rawName,
|
|
1482
1529
|
value: expression ? '' : directive.value,
|
|
1483
1530
|
expression,
|
|
1484
1531
|
arg: directive.arg,
|
|
1485
|
-
modifiers: directive.modifiers,
|
|
1486
|
-
}
|
|
1532
|
+
// modifiers: directive.modifiers,
|
|
1533
|
+
}));
|
|
1487
1534
|
}
|
|
1488
1535
|
});
|
|
1489
1536
|
|
|
1490
1537
|
if (astNode.if) {
|
|
1491
|
-
element.
|
|
1538
|
+
element.addBindDirective(new BindDirective({
|
|
1492
1539
|
type: 'dynamic',
|
|
1493
1540
|
name: 'if',
|
|
1494
1541
|
rawName: 'v-if',
|
|
1495
1542
|
value: '',
|
|
1496
1543
|
expression: <any> this._parseExpression(astNode.if),
|
|
1497
|
-
}
|
|
1544
|
+
}));
|
|
1498
1545
|
}
|
|
1499
1546
|
} else if (astNode.type === 2) {
|
|
1500
|
-
|
|
1501
|
-
|
|
1502
|
-
|
|
1503
|
-
|
|
1504
|
-
|
|
1505
|
-
|
|
1506
|
-
tag: 'u-text',
|
|
1507
|
-
});
|
|
1508
|
-
}
|
|
1547
|
+
const tagName = config.scope === 'h5' ? 'van-text' : 'u-text';
|
|
1548
|
+
const baseName = tagName.replace(ViewElement.TAG_NAME_PREFIX_REG, '').replace(/-/g, '_');
|
|
1549
|
+
element = new ViewElement({
|
|
1550
|
+
tag: tagName,
|
|
1551
|
+
name: view.getViewElementUniqueName(`${baseName}1`),
|
|
1552
|
+
});
|
|
1509
1553
|
const value = astNode.text.match(/{{(.*?)}}/)[1].trim();
|
|
1510
1554
|
const expression = <any> this._parseExpression(value);
|
|
1511
|
-
element.
|
|
1555
|
+
element.addBindAttribute(new BindAttribute({
|
|
1512
1556
|
type: 'dynamic',
|
|
1513
1557
|
name: 'text',
|
|
1514
1558
|
value: expression ? '' : value,
|
|
1515
1559
|
expression,
|
|
1516
1560
|
}));
|
|
1517
1561
|
} else if (astNode.type === 3) {
|
|
1518
|
-
|
|
1519
|
-
|
|
1520
|
-
|
|
1521
|
-
|
|
1522
|
-
|
|
1523
|
-
|
|
1524
|
-
|
|
1525
|
-
});
|
|
1526
|
-
}
|
|
1527
|
-
|
|
1528
|
-
element.bindAttrs.push(new BindAttribute({
|
|
1562
|
+
const tagName = config.scope === 'h5' ? 'van-text' : 'u-text';
|
|
1563
|
+
const baseName = tagName.replace(ViewElement.TAG_NAME_PREFIX_REG, '').replace(/-/g, '_');
|
|
1564
|
+
element = new ViewElement({
|
|
1565
|
+
tag: tagName,
|
|
1566
|
+
name: view.getViewElementUniqueName(`${baseName}1`),
|
|
1567
|
+
});
|
|
1568
|
+
element.addBindAttribute(new BindAttribute({
|
|
1529
1569
|
name: 'text',
|
|
1530
1570
|
type: 'string',
|
|
1531
1571
|
value: astNode.text,
|
|
1532
1572
|
}));
|
|
1533
1573
|
}
|
|
1534
|
-
|
|
1535
1574
|
return element;
|
|
1536
1575
|
}
|
|
1537
1576
|
|
|
@@ -1552,24 +1591,14 @@ export class ViewElement extends BaseNode {
|
|
|
1552
1591
|
let ast = compiler.compile(html, compilerOptions).ast;
|
|
1553
1592
|
if (ast.tag === 'template' && !ast.slotTarget)
|
|
1554
1593
|
ast = ast.children[0] as compiler.ASTElement;
|
|
1555
|
-
|
|
1556
|
-
let root: ViewElement;
|
|
1557
|
-
utils.traverse((current) => {
|
|
1558
|
-
// 处理 scopedSlots;
|
|
1559
|
-
if (!current.parent)
|
|
1560
|
-
root = this._fromASTNode(current.node, context);
|
|
1561
|
-
else
|
|
1562
|
-
(current.parent.children as any)[current.index] = this._fromASTNode(current.node, context);
|
|
1563
|
-
}, { node: ast });
|
|
1564
|
-
return root;
|
|
1594
|
+
return this._fromASTNode(ast, context);
|
|
1565
1595
|
}
|
|
1566
1596
|
|
|
1567
1597
|
/**
|
|
1568
1598
|
* 从模板生成规范的 ViewElement 对象
|
|
1569
1599
|
*/
|
|
1570
1600
|
public static fromHTML(html: string, context?: ParseContext) {
|
|
1571
|
-
|
|
1572
|
-
return element;
|
|
1601
|
+
return this.parse(html, context);
|
|
1573
1602
|
}
|
|
1574
1603
|
|
|
1575
1604
|
/**
|
|
@@ -1597,7 +1626,7 @@ export class ViewElement extends BaseNode {
|
|
|
1597
1626
|
}
|
|
1598
1627
|
}
|
|
1599
1628
|
if ((attr as BindAttribute).type === 'dynamic' && !(element.tag === 'u-cascade-select' && attr.name === 'categories'))
|
|
1600
|
-
return defaultResult.replace(/:?(\w+)(?:.*?)="(.*)"/, (m, name, value) => {
|
|
1629
|
+
return defaultResult.replace(/:?([\w-]+)(?:.*?)="(.*)"/, (m, name, value) => {
|
|
1601
1630
|
try {
|
|
1602
1631
|
const tempValue = json5.parse(value);
|
|
1603
1632
|
if (typeof tempValue === 'boolean' || typeof tempValue === 'number') {
|
|
@@ -1608,7 +1637,12 @@ export class ViewElement extends BaseNode {
|
|
|
1608
1637
|
if (apiOfAttr && !apiOfAttr.type.includes('string'))
|
|
1609
1638
|
return '';
|
|
1610
1639
|
}
|
|
1611
|
-
|
|
1640
|
+
value = value
|
|
1641
|
+
.replace(/"/g, "'")
|
|
1642
|
+
.replace(/\$utils\['(.+?)'\]/g, '$1')
|
|
1643
|
+
.replace(/\$refs./g, 'elements.')
|
|
1644
|
+
.replace(/\$global./g, 'nasl.auth.');
|
|
1645
|
+
return `${name}="{{ ${value} }}"`;
|
|
1612
1646
|
});
|
|
1613
1647
|
else
|
|
1614
1648
|
return defaultResult;
|
|
@@ -1620,13 +1654,31 @@ export class ViewElement extends BaseNode {
|
|
|
1620
1654
|
|
|
1621
1655
|
const api = config.allNodesAPI[el.tag];
|
|
1622
1656
|
const emptySlot = api && api.slots && api.slots.find((slot) => slot.name === 'default' && slot['empty-background']);
|
|
1623
|
-
|
|
1624
|
-
|
|
1625
|
-
|
|
1626
|
-
|
|
1627
|
-
|
|
1657
|
+
const hasSupport = api && api.slots && api.slots.some((slot) => slot.support);
|
|
1658
|
+
if (emptySlot || hasSupport) {
|
|
1659
|
+
let childEmpty = !el.children.length;
|
|
1660
|
+
const defaultSlot = el.children.find((elem) => elem.tag === 'template' && elem.slotTarget === 'default');
|
|
1661
|
+
if (defaultSlot) {
|
|
1662
|
+
childEmpty = !defaultSlot.children.length;
|
|
1663
|
+
}
|
|
1664
|
+
if (childEmpty) {
|
|
1665
|
+
let addEmpty = true;
|
|
1666
|
+
if (el.tag === 'u-grid-view' || el.tag === 'u-list-view' || el.tag === 'van-list-view' || el.tag === 'van-grid-view') {
|
|
1667
|
+
const hasDataSource = el.bindAttrs.find((attr) => attr.name === 'data-source');
|
|
1668
|
+
addEmpty = !hasDataSource;
|
|
1669
|
+
}
|
|
1670
|
+
if (el.tag === 'u-crumb') {
|
|
1671
|
+
const attrList = el.bindAttrs;
|
|
1672
|
+
const hasAuto = attrList.some((attr) => attr.name === 'auto' && String(attr.value) === 'true');
|
|
1673
|
+
if (hasAuto)
|
|
1674
|
+
addEmpty = false;
|
|
1675
|
+
}
|
|
1676
|
+
if (['u-select', 'u-dropdown', 'u-panel'].includes(el.tag)) {
|
|
1677
|
+
addEmpty = false;
|
|
1678
|
+
}
|
|
1679
|
+
const background = (emptySlot && emptySlot['empty-background']) || (hasSupport ? 'add-sub' : '');
|
|
1680
|
+
addEmpty && parts.push(`vusion-empty-background="${background}"`);
|
|
1628
1681
|
}
|
|
1629
|
-
addEmpty && parts.push(`vusion-empty-background="${emptySlot['empty-background']}"`);
|
|
1630
1682
|
}
|
|
1631
1683
|
|
|
1632
1684
|
return parts;
|
|
@@ -1638,7 +1690,14 @@ export class ViewElement extends BaseNode {
|
|
|
1638
1690
|
* 转换成 Vue 的模板格式
|
|
1639
1691
|
*/
|
|
1640
1692
|
toVue(options?: ElementToVueOptions) {
|
|
1641
|
-
|
|
1693
|
+
let scopeList: string[] = [];
|
|
1694
|
+
if (Array.isArray(options?.scopeList)) {
|
|
1695
|
+
scopeList = [...options?.scopeList];
|
|
1696
|
+
}
|
|
1697
|
+
if (this.slotScope) {
|
|
1698
|
+
scopeList.unshift(this.slotScope);
|
|
1699
|
+
}
|
|
1700
|
+
const newOptions: ElementToVueOptions = Object.assign({
|
|
1642
1701
|
indentStyle: 'space',
|
|
1643
1702
|
tabSize: 4,
|
|
1644
1703
|
indentLevel: 0,
|
|
@@ -1646,27 +1705,30 @@ export class ViewElement extends BaseNode {
|
|
|
1646
1705
|
nodePathAttr: false,
|
|
1647
1706
|
getExtraParts: () => [],
|
|
1648
1707
|
attrFormat: (attr: BindAttribute | BindEvent | BindDirective, element?: ViewElement, defaultResult?: string) => defaultResult,
|
|
1649
|
-
}, options
|
|
1650
|
-
|
|
1651
|
-
|
|
1708
|
+
}, options, {
|
|
1709
|
+
scopeList,
|
|
1710
|
+
});
|
|
1711
|
+
const tabString = ' '.repeat(newOptions.tabSize * newOptions.indentLevel);
|
|
1712
|
+
const insideTabString = ' '.repeat(newOptions.tabSize * (newOptions.indentLevel + 1));
|
|
1652
1713
|
let shouldIndent = true;
|
|
1653
1714
|
const content: string = !this.children ? '' : this.children
|
|
1654
1715
|
.map((element) => {
|
|
1655
|
-
const childOptions = Object.assign({},
|
|
1716
|
+
const childOptions = Object.assign({}, newOptions);
|
|
1656
1717
|
childOptions.indentLevel++;
|
|
1657
|
-
return (shouldIndent ? '\n' + insideTabString : '') + element
|
|
1718
|
+
return (shouldIndent ? '\n' + insideTabString : '') + element?.toVue(childOptions);
|
|
1658
1719
|
})
|
|
1659
1720
|
.join('');
|
|
1660
|
-
if (!content.length)
|
|
1721
|
+
if (!content.length) {
|
|
1661
1722
|
shouldIndent = false;
|
|
1662
|
-
|
|
1723
|
+
}
|
|
1663
1724
|
const parts = [];
|
|
1664
|
-
if (
|
|
1665
|
-
if (
|
|
1666
|
-
|
|
1667
|
-
|
|
1725
|
+
if (newOptions.aslIdAttr) {
|
|
1726
|
+
if (newOptions.aslIdAttr === true) {
|
|
1727
|
+
newOptions.aslIdAttr = 'asl-id';
|
|
1728
|
+
}
|
|
1729
|
+
parts.push(`${newOptions.aslIdAttr}="${this.id}"`);
|
|
1668
1730
|
}
|
|
1669
|
-
if (
|
|
1731
|
+
if (newOptions.nodePathAttr) {
|
|
1670
1732
|
// 注入 asl 的 node-path
|
|
1671
1733
|
parts.push(`vusion-node-path="${this.nodePath}"`);
|
|
1672
1734
|
}
|
|
@@ -1677,11 +1739,10 @@ export class ViewElement extends BaseNode {
|
|
|
1677
1739
|
this.staticStyle && parts.push(`style="${this.staticStyle}"`);
|
|
1678
1740
|
|
|
1679
1741
|
[].concat(this.bindAttrs, this.bindDirectives, this.bindEvents).forEach((attr: BindAttribute | BindDirective | BindEvent) => {
|
|
1680
|
-
const result =
|
|
1742
|
+
const result = newOptions.attrFormat(attr, this, attr?.toVue(newOptions));
|
|
1681
1743
|
result && parts.push(result);
|
|
1682
1744
|
});
|
|
1683
|
-
|
|
1684
|
-
options.getExtraParts(this).forEach((part) => parts.push(part));
|
|
1745
|
+
newOptions.getExtraParts(this).forEach((part) => parts.push(part));
|
|
1685
1746
|
|
|
1686
1747
|
let partsLength = 0;
|
|
1687
1748
|
let partsString = '';
|
|
@@ -1697,6 +1758,43 @@ export class ViewElement extends BaseNode {
|
|
|
1697
1758
|
return `<${this.tag}${partsString.length ? partsString : ''}>` + content + (shouldIndent ? '\n' + tabString : '') + `</${this.tag}>`;
|
|
1698
1759
|
}
|
|
1699
1760
|
|
|
1761
|
+
/**
|
|
1762
|
+
* 从父级删除该节点
|
|
1763
|
+
* @internal
|
|
1764
|
+
*/
|
|
1765
|
+
delete() {
|
|
1766
|
+
super.delete();
|
|
1767
|
+
if (this.parentNode) {
|
|
1768
|
+
this.traverseChildren((ele: ViewElement) => {
|
|
1769
|
+
(this.view as any)?.removeExistingViewElement(ele);
|
|
1770
|
+
});
|
|
1771
|
+
}
|
|
1772
|
+
}
|
|
1773
|
+
|
|
1774
|
+
findElementByName(name: string): ViewElement {
|
|
1775
|
+
return utils.traverse((current) => {
|
|
1776
|
+
if (current.node.name === name)
|
|
1777
|
+
return current.node;
|
|
1778
|
+
}, { node: this });
|
|
1779
|
+
}
|
|
1780
|
+
|
|
1781
|
+
findElementByTag(tag: string): ViewElement {
|
|
1782
|
+
return utils.traverse((current) => {
|
|
1783
|
+
if (current.node.tag === tag)
|
|
1784
|
+
return current.node;
|
|
1785
|
+
}, { node: this });
|
|
1786
|
+
}
|
|
1787
|
+
|
|
1788
|
+
findElementByAttr(name: string, value: string): ViewElement {
|
|
1789
|
+
return utils.traverse((current) => {
|
|
1790
|
+
if (current.node.bindAttrs.some((attr) => attr.name === name && attr.value === value))
|
|
1791
|
+
return current.node;
|
|
1792
|
+
}, { node: this });
|
|
1793
|
+
}
|
|
1794
|
+
|
|
1795
|
+
@excludedInJSON()
|
|
1796
|
+
computedStyle: object = {};
|
|
1797
|
+
|
|
1700
1798
|
//================================================================================
|
|
1701
1799
|
// 从这里开始到结尾注释之间的代码由 NASL Workbench 自动生成,请不手动修改!
|
|
1702
1800
|
// ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
|