@lcap/nasl 3.3.2-beta.3 → 3.3.2-beta.5
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/coverage/index.html +108 -108
- package/coverage/src/automate/engine/index.html +1 -1
- package/coverage/src/automate/engine/utils.js.html +36 -36
- package/coverage/src/bak/index.html +15 -15
- package/coverage/src/bak/translator.js.html +183 -60
- package/coverage/src/breakpoint/generator/AfterStartNode.ts.html +1 -1
- package/coverage/src/breakpoint/generator/BeforeEndNode.ts.html +1 -1
- package/coverage/src/breakpoint/generator/BreakpointNode.ts.html +1 -1
- package/coverage/src/breakpoint/generator/CallbackNode.ts.html +1 -1
- package/coverage/src/breakpoint/generator/index.html +1 -1
- package/coverage/src/breakpoint/generator/index.ts.html +1 -1
- package/coverage/src/breakpoint/index.html +1 -1
- package/coverage/src/breakpoint/index.ts.html +1 -1
- package/coverage/src/breakpoint/shared/constants.ts.html +1 -1
- package/coverage/src/breakpoint/shared/index.html +1 -1
- package/coverage/src/breakpoint/shared/index.ts.html +1 -1
- package/coverage/src/breakpoint/shared/operations.ts.html +1 -1
- package/coverage/src/breakpoint/shared/socket.ts.html +1 -1
- package/coverage/src/breakpoint/shared/utils.ts.html +1 -1
- package/coverage/src/breakpoint/store/core.ts.html +1 -1
- package/coverage/src/breakpoint/store/dock.ts.html +1 -1
- package/coverage/src/breakpoint/store/index.html +1 -1
- package/coverage/src/breakpoint/store/index.ts.html +1 -1
- package/coverage/src/common/BaseNode.ts.html +92 -62
- package/coverage/src/common/Command.ts.html +1 -1
- package/coverage/src/common/EventEmitter.ts.html +1 -1
- package/coverage/src/common/Messager.ts.html +1 -1
- package/coverage/src/common/asyncFuncMap.ts.html +1 -1
- package/coverage/src/common/index.html +14 -14
- package/coverage/src/common/index.ts.html +1 -1
- package/coverage/src/concepts/Abort__.ts.html +9 -6
- package/coverage/src/concepts/Anchor__.ts.html +36 -21
- package/coverage/src/concepts/AnonymousFunction__.ts.html +62 -20
- package/coverage/src/concepts/App__.ts.html +917 -74
- package/coverage/src/concepts/Argument__.ts.html +41 -26
- package/coverage/src/concepts/Assignee__.ts.html +40 -13
- package/coverage/src/concepts/AssignmentLine__.ts.html +9 -6
- package/coverage/src/concepts/Assignment__.ts.html +61 -22
- package/coverage/src/concepts/Attribute__.ts.html +25 -10
- package/coverage/src/concepts/AuthInterface__.ts.html +9 -6
- package/coverage/src/concepts/AuthLogicForCallInterface__.ts.html +25 -10
- package/coverage/src/concepts/AuthLogic__.ts.html +18 -6
- package/coverage/src/concepts/BackendVariable__.ts.html +25 -10
- package/coverage/src/concepts/Backend__.ts.html +25 -10
- package/coverage/src/concepts/BatchAssignment__.ts.html +61 -16
- package/coverage/src/concepts/BinaryExpression__.ts.html +141 -39
- package/coverage/src/concepts/BindAttribute__.ts.html +134 -41
- package/coverage/src/concepts/BindDirective__.ts.html +79 -16
- package/coverage/src/concepts/BindEvent__.ts.html +80 -23
- package/coverage/src/concepts/BindStyle__.ts.html +25 -10
- package/coverage/src/concepts/BooleanLiteral__.ts.html +9 -6
- package/coverage/src/concepts/CallAuthInterface__.ts.html +25 -10
- package/coverage/src/concepts/CallConnector__.ts.html +9 -6
- package/coverage/src/concepts/CallFunction__.ts.html +56 -38
- package/coverage/src/concepts/CallInterface__.ts.html +81 -36
- package/coverage/src/concepts/CallLogic__.ts.html +195 -264
- package/coverage/src/concepts/CallQueryComponent__.ts.html +40 -13
- package/coverage/src/concepts/Comment__.ts.html +11 -8
- package/coverage/src/concepts/CompletionProperty__.ts.html +25 -10
- package/coverage/src/concepts/ConfigGroup__.ts.html +25 -10
- package/coverage/src/concepts/ConfigPropertyValue__.ts.html +9 -6
- package/coverage/src/concepts/ConfigProperty__.ts.html +25 -10
- package/coverage/src/concepts/Configuration__.ts.html +25 -10
- package/coverage/src/concepts/Connection__.ts.html +26 -11
- package/coverage/src/concepts/ConnectorTrigger__.ts.html +9 -6
- package/coverage/src/concepts/Connector__.ts.html +85 -22
- package/coverage/src/concepts/Constant__.ts.html +25 -10
- package/coverage/src/concepts/DataSource__.ts.html +26 -11
- package/coverage/src/concepts/DatabaseTypeAnnotation__.ts.html +9 -6
- package/coverage/src/concepts/Destination__.ts.html +24 -12
- package/coverage/src/concepts/End__.ts.html +9 -6
- package/coverage/src/concepts/EntityIndex__.ts.html +9 -6
- package/coverage/src/concepts/EntityProperty__.ts.html +62 -14
- package/coverage/src/concepts/Entity__.ts.html +41 -14
- package/coverage/src/concepts/EnumItem__.ts.html +9 -6
- package/coverage/src/concepts/Enum__.ts.html +25 -10
- package/coverage/src/concepts/Event__.ts.html +25 -10
- package/coverage/src/concepts/ExternalDestination__.ts.html +25 -10
- package/coverage/src/concepts/ForEachStatement__.ts.html +68 -47
- package/coverage/src/concepts/FrontendLibrary__.ts.html +40 -13
- package/coverage/src/concepts/FrontendVariable__.ts.html +1 -1
- package/coverage/src/concepts/Frontend__.ts.html +86 -23
- package/coverage/src/concepts/Function__.ts.html +92 -26
- package/coverage/src/concepts/Identifier__.ts.html +28 -25
- package/coverage/src/concepts/IfStatement__.ts.html +83 -56
- package/coverage/src/concepts/Integration__.ts.html +40 -13
- package/coverage/src/concepts/InterfaceParam__.ts.html +25 -10
- package/coverage/src/concepts/Interface__.ts.html +61 -22
- package/coverage/src/concepts/JSBlock__.ts.html +188 -8
- package/coverage/src/concepts/JavaLogic__.ts.html +9 -6
- package/coverage/src/concepts/LogicItem__.ts.html +15 -12
- package/coverage/src/concepts/Logic__.ts.html +117 -81
- package/coverage/src/concepts/MatchCase__.ts.html +100 -61
- package/coverage/src/concepts/Match__.ts.html +48 -27
- package/coverage/src/concepts/MemberExpression__.ts.html +72 -66
- package/coverage/src/concepts/MetadataType__.ts.html +1996 -0
- package/coverage/src/concepts/MicroApp__.ts.html +9 -6
- package/coverage/src/concepts/Module__.ts.html +672 -18
- package/coverage/src/concepts/MsgTriggerEvent__.ts.html +25 -10
- package/coverage/src/concepts/MsgTriggerLauncher__.ts.html +25 -10
- package/coverage/src/concepts/Namespace__.ts.html +175 -40
- package/coverage/src/concepts/NewComposite__.ts.html +93 -27
- package/coverage/src/concepts/NewList__.ts.html +44 -14
- package/coverage/src/concepts/NewMap__.ts.html +44 -14
- package/coverage/src/concepts/New__.ts.html +1 -1
- package/coverage/src/concepts/NullLiteral__.ts.html +9 -6
- package/coverage/src/concepts/NumericLiteral__.ts.html +27 -12
- package/coverage/src/concepts/OqlQueryComponent__.ts.html +103 -13
- package/coverage/src/concepts/OverriddenLogic__.ts.html +100 -25
- package/coverage/src/concepts/Param__.ts.html +24 -15
- package/coverage/src/concepts/Point__.ts.html +9 -6
- package/coverage/src/concepts/ProcessComponent__.ts.html +40 -13
- package/coverage/src/concepts/ProcessElement__.ts.html +128 -29
- package/coverage/src/concepts/ProcessOutcome__.ts.html +9 -6
- package/coverage/src/concepts/ProcessOutcomes__.ts.html +9 -6
- package/coverage/src/concepts/Process__.ts.html +85 -22
- package/coverage/src/concepts/QueryAggregateExpression__.ts.html +25 -10
- package/coverage/src/concepts/QueryFieldExpression__.ts.html +9 -6
- package/coverage/src/concepts/QueryFromExpression__.ts.html +25 -10
- package/coverage/src/concepts/QueryGroupByExpression__.ts.html +25 -10
- package/coverage/src/concepts/QueryJoinExpression__.ts.html +25 -10
- package/coverage/src/concepts/QueryLimitExpression__.ts.html +25 -10
- package/coverage/src/concepts/QueryOrderByExpression__.ts.html +25 -10
- package/coverage/src/concepts/QuerySelectExpression__.ts.html +25 -10
- package/coverage/src/concepts/Rect__.ts.html +9 -6
- package/coverage/src/concepts/Return__.ts.html +25 -10
- package/coverage/src/concepts/Role__.ts.html +9 -6
- package/coverage/src/concepts/SelectMembers__.ts.html +25 -10
- package/coverage/src/concepts/Slot__.ts.html +25 -10
- package/coverage/src/concepts/SqlQueryComponent__.ts.html +25 -10
- package/coverage/src/concepts/Start__.ts.html +9 -6
- package/coverage/src/concepts/StringInterpolation__.ts.html +40 -19
- package/coverage/src/concepts/StringLiteral__.ts.html +9 -6
- package/coverage/src/concepts/StructureProperty__.ts.html +25 -10
- package/coverage/src/concepts/Structure__.ts.html +40 -13
- package/coverage/src/concepts/SwitchCase__.ts.html +33 -18
- package/coverage/src/concepts/SwitchStatement__.ts.html +38 -23
- package/coverage/src/concepts/Theme__.ts.html +9 -6
- package/coverage/src/concepts/Transactional__.ts.html +9 -6
- package/coverage/src/concepts/TriggerEvent__.ts.html +25 -10
- package/coverage/src/concepts/TriggerLauncher__.ts.html +9 -6
- package/coverage/src/concepts/TypeAnnotation__.ts.html +223 -61
- package/coverage/src/concepts/TypeParam__.ts.html +10 -7
- package/coverage/src/concepts/UnaryExpression__.ts.html +40 -13
- package/coverage/src/concepts/Unparsed__.ts.html +11 -8
- package/coverage/src/concepts/UseComponent__.ts.html +9 -6
- package/coverage/src/concepts/ValidationRule__.ts.html +30 -15
- package/coverage/src/concepts/Variable__.ts.html +61 -16
- package/coverage/src/concepts/ViewBlock__.ts.html +9 -6
- package/coverage/src/concepts/ViewComponent__.ts.html +99 -24
- package/coverage/src/concepts/ViewElement__.ts.html +334 -181
- package/coverage/src/concepts/View__.ts.html +326 -71
- package/coverage/src/concepts/WhileStatement__.ts.html +78 -45
- package/coverage/src/concepts/basics/stdlib/index.html +1 -1
- package/coverage/src/concepts/basics/stdlib/index.ts.html +1 -1
- package/coverage/src/concepts/basics/stdlib/nasl.auth.ts.html +1 -1
- package/coverage/src/concepts/basics/stdlib/nasl.browser.ts.html +1 -1
- package/coverage/src/concepts/basics/stdlib/nasl.collection.ts.html +1 -1
- package/coverage/src/concepts/basics/stdlib/nasl.configuration.ts.html +1 -1
- package/coverage/src/concepts/basics/stdlib/nasl.core.ts.html +1 -1
- package/coverage/src/concepts/basics/stdlib/nasl.event.ts.html +1 -1
- package/coverage/src/concepts/basics/stdlib/nasl.http.ts.html +1 -1
- package/coverage/src/concepts/basics/stdlib/nasl.interface.ts.html +1 -1
- package/coverage/src/concepts/basics/stdlib/nasl.io.ts.html +1 -1
- package/coverage/src/concepts/basics/stdlib/nasl.logging.ts.html +1 -1
- package/coverage/src/concepts/basics/stdlib/nasl.process.ts.html +1 -1
- package/coverage/src/concepts/basics/stdlib/nasl.ui.ts.html +1 -1
- package/coverage/src/concepts/basics/stdlib/nasl.util.ts.html +1 -1
- package/coverage/src/concepts/basics/stdlib/nasl.validation.ts.html +1 -1
- package/coverage/src/concepts/basics/stdlib/reference2TypeAnnotationList.ts.html +1 -1
- package/coverage/src/concepts/basics/stdlib/timeZone.ts.html +1 -1
- package/coverage/src/concepts/basics/types/coreTypeList.ts.html +1 -1
- package/coverage/src/concepts/basics/types/index.html +1 -1
- package/coverage/src/concepts/basics/types/index.ts.html +1 -1
- package/coverage/src/concepts/index.html +823 -808
- package/coverage/src/concepts/index.ts.html +1 -1
- package/coverage/src/concepts/index__.ts.html +7 -4
- package/coverage/src/config.ts.html +1 -1
- package/coverage/src/decorators/index.html +1 -1
- package/coverage/src/decorators/index.ts.html +24 -24
- package/coverage/src/decorators/promise.ts.html +1 -1
- package/coverage/src/eventBus.ts.html +1 -1
- package/coverage/src/generator/compileComponent.ts.html +1 -1
- package/coverage/src/generator/genBundleFiles.ts.html +13 -19
- package/coverage/src/generator/genHash.ts.html +1 -1
- package/coverage/src/generator/genMetaData.ts.html +103 -16
- package/coverage/src/generator/genReleaseBody.ts.html +1 -1
- package/coverage/src/generator/icestark.ts.html +1 -1
- package/coverage/src/generator/index.html +15 -15
- package/coverage/src/generator/index.ts.html +1 -1
- package/coverage/src/generator/microApp.ts.html +1 -1
- package/coverage/src/generator/permission.ts.html +1 -1
- package/coverage/src/generator/qiankun.ts.html +1 -1
- package/coverage/src/generator/styleReplacer.ts.html +1 -1
- package/coverage/src/index.html +7 -7
- package/coverage/src/index.ts.html +4 -4
- package/coverage/src/manager/diagnostic.ts.html +1 -1
- package/coverage/src/manager/index.html +1 -1
- package/coverage/src/manager/stepRecorder.ts.html +1 -1
- package/coverage/src/natural/genNaturalTS.ts.html +1 -1
- package/coverage/src/natural/index.html +15 -15
- package/coverage/src/natural/index.ts.html +1 -1
- package/coverage/src/natural/naslStdlibMap.ts.html +1 -1
- package/coverage/src/natural/transformTSCode.ts.html +78 -18
- package/coverage/src/sentry/index.html +1 -1
- package/coverage/src/sentry/index.ts.html +21 -21
- package/coverage/src/server/createUiTs.ts.html +15 -6
- package/coverage/src/server/entity2LogicNamespace.ts.html +1 -1
- package/coverage/src/server/event.js.html +1 -1
- package/coverage/src/server/extendBaseNode.ts.html +7 -4
- package/coverage/src/server/formatTsUtils.ts.html +1 -1
- package/coverage/src/server/getConnector.ts.html +1 -1
- package/coverage/src/server/getExtensionModules.ts.html +1 -1
- package/coverage/src/server/getFunctions.ts.html +1 -1
- package/coverage/src/server/getInterfaces.ts.html +1 -1
- package/coverage/src/server/getLogging.ts.html +1 -1
- package/coverage/src/server/getLogics.ts.html +1 -1
- package/coverage/src/server/getMemberIdentifier.ts.html +161 -113
- package/coverage/src/server/getProcessComponents.ts.html +1 -1
- package/coverage/src/server/getProcesses.ts.html +1 -1
- package/coverage/src/server/getValidates.ts.html +1 -1
- package/coverage/src/server/index.html +25 -25
- package/coverage/src/server/index.ts.html +1 -1
- package/coverage/src/server/naslServer.ts.html +470 -59
- package/coverage/src/server/naslStdlibMap.ts.html +1 -1
- package/coverage/src/server/process2LogicNamespace.ts.html +1 -1
- package/coverage/src/server/translator.ts.html +3 -3
- package/coverage/src/service/creator/add.configs.js.html +26 -8
- package/coverage/src/service/creator/errHandles.js.html +19 -37
- package/coverage/src/service/creator/index.html +22 -22
- package/coverage/src/service/creator/index.js.html +1 -1
- package/coverage/src/service/datasource/api.js.html +1 -1
- package/coverage/src/service/datasource/index.html +1 -1
- package/coverage/src/service/datasource/index.js.html +1 -1
- package/coverage/src/service/logic/api.js.html +1 -1
- package/coverage/src/service/logic/index.html +1 -1
- package/coverage/src/service/logic/index.js.html +1 -1
- package/coverage/src/service/storage/api.js.html +1 -1
- package/coverage/src/service/storage/index.html +19 -19
- package/coverage/src/service/storage/index.ts.html +1 -1
- package/coverage/src/service/storage/init.ts.html +1498 -598
- package/coverage/src/service/storage/jsoner.ts.html +3 -3
- package/coverage/src/service/storage/map.ts.html +1 -1
- package/coverage/src/service/storage/service.ts.html +1 -1
- package/coverage/src/service/storage/storagePoint.ts.html +1 -1
- package/coverage/src/templator/genCallComponentLogic.ts.html +1 -1
- package/coverage/src/templator/genCreateBlock.ts.html +47 -56
- package/coverage/src/templator/genCurdEditMultipleKeyBlock.ts.html +49 -31
- package/coverage/src/templator/genCurdMultipleKeyBlock.ts.html +81 -93
- package/coverage/src/templator/genEditTableBlock.ts.html +80 -11
- package/coverage/src/templator/genEnumSelectBlock.ts.html +1 -1
- package/coverage/src/templator/genGetBlock.ts.html +1 -1
- package/coverage/src/templator/genGridViewBlock.ts.html +1 -1
- package/coverage/src/templator/genListViewBlock.ts.html +1 -1
- package/coverage/src/templator/genQueryComponent.ts.html +1 -1
- package/coverage/src/templator/genSelectBlock.ts.html +1 -1
- package/coverage/src/templator/genTableBlock.ts.html +66 -3
- package/coverage/src/templator/genUpdateBlock.ts.html +48 -36
- package/coverage/src/templator/index.html +39 -39
- package/coverage/src/templator/index.ts.html +1 -1
- package/coverage/src/templator/utils.ts.html +77 -11
- package/coverage/src/translator/constant.ts.html +1 -1
- package/coverage/src/translator/index.html +20 -20
- package/coverage/src/translator/index.ts.html +1 -1
- package/coverage/src/translator/utils.ts.html +87 -30
- package/coverage/src/utils/cookie.ts.html +1 -1
- package/coverage/src/utils/env.ts.html +1 -1
- package/coverage/src/utils/index.html +27 -27
- package/coverage/src/utils/index.ts.html +115 -22
- package/coverage/src/utils/logger.ts.html +1 -1
- package/coverage/src/utils/sortTsString.ts.html +1 -1
- package/coverage/src/utils/string.ts.html +110 -8
- package/coverage/src/utils/time-slicing.ts.html +1 -1
- package/coverage/src/utils/traverse.ts.html +1 -1
- package/coverage/src/utils/window.ts.html +1 -1
- package/out/bak/translator.js +31 -8
- package/out/bak/translator.js.map +1 -1
- package/out/common/BaseNode.d.ts +1 -1
- package/out/common/BaseNode.js +8 -3
- package/out/common/BaseNode.js.map +1 -1
- package/out/concepts/Abort__.js +3 -1
- package/out/concepts/Abort__.js.map +1 -1
- package/out/concepts/Anchor__.js +11 -4
- package/out/concepts/Anchor__.js.map +1 -1
- package/out/concepts/AnonymousFunction__.js +30 -11
- package/out/concepts/AnonymousFunction__.js.map +1 -1
- package/out/concepts/App__.js +147 -63
- package/out/concepts/App__.js.map +1 -1
- package/out/concepts/Argument__.js +11 -4
- package/out/concepts/Argument__.js.map +1 -1
- package/out/concepts/Assignee__.js +23 -9
- package/out/concepts/Assignee__.js.map +1 -1
- package/out/concepts/AssignmentLine__.js +3 -1
- package/out/concepts/AssignmentLine__.js.map +1 -1
- package/out/concepts/Assignment__.js +19 -6
- package/out/concepts/Assignment__.js.map +1 -1
- package/out/concepts/Attribute__.js +11 -4
- package/out/concepts/Attribute__.js.map +1 -1
- package/out/concepts/AuthInterface__.js +3 -1
- package/out/concepts/AuthInterface__.js.map +1 -1
- package/out/concepts/AuthLogicForCallInterface__.js +12 -5
- package/out/concepts/AuthLogicForCallInterface__.js.map +1 -1
- package/out/concepts/AuthLogic__.js +3 -1
- package/out/concepts/AuthLogic__.js.map +1 -1
- package/out/concepts/BackendVariable__.js +11 -4
- package/out/concepts/BackendVariable__.js.map +1 -1
- package/out/concepts/Backend__.js +12 -5
- package/out/concepts/Backend__.js.map +1 -1
- package/out/concepts/BatchAssignment__.js +32 -16
- package/out/concepts/BatchAssignment__.js.map +1 -1
- package/out/concepts/BinaryExpression__.js +15 -8
- package/out/concepts/BinaryExpression__.js.map +1 -1
- package/out/concepts/BindAttribute__.js +21 -6
- package/out/concepts/BindAttribute__.js.map +1 -1
- package/out/concepts/BindDirective__.js +28 -5
- package/out/concepts/BindDirective__.js.map +1 -1
- package/out/concepts/BindEvent__.js +20 -8
- package/out/concepts/BindEvent__.js.map +1 -1
- package/out/concepts/BindStyle__.js +11 -4
- package/out/concepts/BindStyle__.js.map +1 -1
- package/out/concepts/BooleanLiteral__.js +3 -1
- package/out/concepts/BooleanLiteral__.js.map +1 -1
- package/out/concepts/CallAuthInterface__.js +14 -5
- package/out/concepts/CallAuthInterface__.js.map +1 -1
- package/out/concepts/CallConnector__.js +3 -1
- package/out/concepts/CallConnector__.js.map +1 -1
- package/out/concepts/CallFunction__.js +22 -11
- package/out/concepts/CallFunction__.js.map +1 -1
- package/out/concepts/CallInterface__.js +15 -8
- package/out/concepts/CallInterface__.js.map +1 -1
- package/out/concepts/CallLogic__.js +47 -72
- package/out/concepts/CallLogic__.js.map +1 -1
- package/out/concepts/CallQueryComponent__.js +19 -7
- package/out/concepts/CallQueryComponent__.js.map +1 -1
- package/out/concepts/Comment__.js +3 -1
- package/out/concepts/Comment__.js.map +1 -1
- package/out/concepts/CompletionProperty__.js +11 -4
- package/out/concepts/CompletionProperty__.js.map +1 -1
- package/out/concepts/ConfigGroup__.js +12 -5
- package/out/concepts/ConfigGroup__.js.map +1 -1
- package/out/concepts/ConfigPropertyValue__.js +3 -1
- package/out/concepts/ConfigPropertyValue__.js.map +1 -1
- package/out/concepts/ConfigProperty__.js +12 -5
- package/out/concepts/ConfigProperty__.js.map +1 -1
- package/out/concepts/Configuration__.js +12 -5
- package/out/concepts/Configuration__.js.map +1 -1
- package/out/concepts/Connection__.js +12 -5
- package/out/concepts/Connection__.js.map +1 -1
- package/out/concepts/ConnectorTrigger__.js +3 -1
- package/out/concepts/ConnectorTrigger__.js.map +1 -1
- package/out/concepts/Connector__.js +48 -21
- package/out/concepts/Connector__.js.map +1 -1
- package/out/concepts/Constant__.js +11 -4
- package/out/concepts/Constant__.js.map +1 -1
- package/out/concepts/DataSource__.js +12 -5
- package/out/concepts/DataSource__.js.map +1 -1
- package/out/concepts/DatabaseTypeAnnotation__.js +3 -1
- package/out/concepts/DatabaseTypeAnnotation__.js.map +1 -1
- package/out/concepts/Destination__.js +11 -4
- package/out/concepts/Destination__.js.map +1 -1
- package/out/concepts/End__.js +3 -1
- package/out/concepts/End__.js.map +1 -1
- package/out/concepts/EntityIndex__.js +3 -1
- package/out/concepts/EntityIndex__.js.map +1 -1
- package/out/concepts/EntityProperty__.js +19 -7
- package/out/concepts/EntityProperty__.js.map +1 -1
- package/out/concepts/Entity__.js +21 -9
- package/out/concepts/Entity__.js.map +1 -1
- package/out/concepts/EnumItem__.js +3 -1
- package/out/concepts/EnumItem__.js.map +1 -1
- package/out/concepts/Enum__.js +11 -4
- package/out/concepts/Enum__.js.map +1 -1
- package/out/concepts/Event__.js +12 -5
- package/out/concepts/Event__.js.map +1 -1
- package/out/concepts/ExternalDestination__.js +11 -4
- package/out/concepts/ExternalDestination__.js.map +1 -1
- package/out/concepts/ForEachStatement__.js +34 -24
- package/out/concepts/ForEachStatement__.js.map +1 -1
- package/out/concepts/FrontendLibrary__.js +21 -9
- package/out/concepts/FrontendLibrary__.js.map +1 -1
- package/out/concepts/Frontend__.js +47 -20
- package/out/concepts/Frontend__.js.map +1 -1
- package/out/concepts/Function__.js +47 -18
- package/out/concepts/Function__.js.map +1 -1
- package/out/concepts/Identifier__.js +3 -1
- package/out/concepts/Identifier__.js.map +1 -1
- package/out/concepts/IfStatement__.js +26 -17
- package/out/concepts/IfStatement__.js.map +1 -1
- package/out/concepts/Integration__.js +20 -8
- package/out/concepts/Integration__.js.map +1 -1
- package/out/concepts/InterfaceParam__.js +11 -4
- package/out/concepts/InterfaceParam__.js.map +1 -1
- package/out/concepts/Interface__.js +27 -10
- package/out/concepts/Interface__.js.map +1 -1
- package/out/concepts/JSBlock__.js +3 -1
- package/out/concepts/JSBlock__.js.map +1 -1
- package/out/concepts/JavaLogic__.js +3 -1
- package/out/concepts/JavaLogic__.js.map +1 -1
- package/out/concepts/LogicItem__.d.ts +4 -4
- package/out/concepts/LogicItem__.js +7 -5
- package/out/concepts/LogicItem__.js.map +1 -1
- package/out/concepts/Logic__.js +68 -36
- package/out/concepts/Logic__.js.map +1 -1
- package/out/concepts/MatchCase__.js +36 -24
- package/out/concepts/MatchCase__.js.map +1 -1
- package/out/concepts/Match__.js +23 -16
- package/out/concepts/Match__.js.map +1 -1
- package/out/concepts/MemberExpression__.js +29 -22
- package/out/concepts/MemberExpression__.js.map +1 -1
- package/out/concepts/MicroApp__.js +3 -1
- package/out/concepts/MicroApp__.js.map +1 -1
- package/out/concepts/Module__.js +5 -3
- package/out/concepts/Module__.js.map +1 -1
- package/out/concepts/MsgTriggerEvent__.js +12 -5
- package/out/concepts/MsgTriggerEvent__.js.map +1 -1
- package/out/concepts/MsgTriggerLauncher__.js +12 -5
- package/out/concepts/MsgTriggerLauncher__.js.map +1 -1
- package/out/concepts/Namespace__.js +102 -45
- package/out/concepts/Namespace__.js.map +1 -1
- package/out/concepts/NewComposite__.js +57 -25
- package/out/concepts/NewComposite__.js.map +1 -1
- package/out/concepts/NewList__.js +20 -8
- package/out/concepts/NewList__.js.map +1 -1
- package/out/concepts/NewMap__.js +20 -8
- package/out/concepts/NewMap__.js.map +1 -1
- package/out/concepts/NullLiteral__.js +3 -1
- package/out/concepts/NullLiteral__.js.map +1 -1
- package/out/concepts/NumericLiteral__.js +11 -4
- package/out/concepts/NumericLiteral__.js.map +1 -1
- package/out/concepts/OqlQueryComponent__.js +32 -5
- package/out/concepts/OqlQueryComponent__.js.map +1 -1
- package/out/concepts/OverriddenLogic__.js +52 -20
- package/out/concepts/OverriddenLogic__.js.map +1 -1
- package/out/concepts/Param__.js +12 -5
- package/out/concepts/Param__.js.map +1 -1
- package/out/concepts/Point__.js +3 -1
- package/out/concepts/Point__.js.map +1 -1
- package/out/concepts/ProcessComponent__.js +21 -9
- package/out/concepts/ProcessComponent__.js.map +1 -1
- package/out/concepts/ProcessElement__.js +73 -31
- package/out/concepts/ProcessElement__.js.map +1 -1
- package/out/concepts/ProcessOutcome__.js +3 -1
- package/out/concepts/ProcessOutcome__.js.map +1 -1
- package/out/concepts/ProcessOutcomes__.js +3 -1
- package/out/concepts/ProcessOutcomes__.js.map +1 -1
- package/out/concepts/Process__.js +48 -21
- package/out/concepts/Process__.js.map +1 -1
- package/out/concepts/QueryAggregateExpression__.js +11 -4
- package/out/concepts/QueryAggregateExpression__.js.map +1 -1
- package/out/concepts/QueryFieldExpression__.js +3 -1
- package/out/concepts/QueryFieldExpression__.js.map +1 -1
- package/out/concepts/QueryFromExpression__.js +11 -4
- package/out/concepts/QueryFromExpression__.js.map +1 -1
- package/out/concepts/QueryGroupByExpression__.js +11 -4
- package/out/concepts/QueryGroupByExpression__.js.map +1 -1
- package/out/concepts/QueryJoinExpression__.js +12 -5
- package/out/concepts/QueryJoinExpression__.js.map +1 -1
- package/out/concepts/QueryLimitExpression__.js +11 -4
- package/out/concepts/QueryLimitExpression__.js.map +1 -1
- package/out/concepts/QueryOrderByExpression__.js +11 -4
- package/out/concepts/QueryOrderByExpression__.js.map +1 -1
- package/out/concepts/QuerySelectExpression__.js +12 -5
- package/out/concepts/QuerySelectExpression__.js.map +1 -1
- package/out/concepts/Rect__.js +3 -1
- package/out/concepts/Rect__.js.map +1 -1
- package/out/concepts/Return__.js +11 -4
- package/out/concepts/Return__.js.map +1 -1
- package/out/concepts/Role__.js +3 -1
- package/out/concepts/Role__.js.map +1 -1
- package/out/concepts/SelectMembers__.js +12 -5
- package/out/concepts/SelectMembers__.js.map +1 -1
- package/out/concepts/Slot__.js +11 -4
- package/out/concepts/Slot__.js.map +1 -1
- package/out/concepts/SqlQueryComponent__.js +11 -4
- package/out/concepts/SqlQueryComponent__.js.map +1 -1
- package/out/concepts/Start__.js +3 -1
- package/out/concepts/Start__.js.map +1 -1
- package/out/concepts/StringInterpolation__.js +12 -5
- package/out/concepts/StringInterpolation__.js.map +1 -1
- package/out/concepts/StringLiteral__.js +3 -1
- package/out/concepts/StringLiteral__.js.map +1 -1
- package/out/concepts/StructureProperty__.js +11 -4
- package/out/concepts/StructureProperty__.js.map +1 -1
- package/out/concepts/Structure__.js +21 -9
- package/out/concepts/Structure__.js.map +1 -1
- package/out/concepts/SwitchCase__.js +15 -8
- package/out/concepts/SwitchCase__.js.map +1 -1
- package/out/concepts/SwitchStatement__.js +11 -4
- package/out/concepts/SwitchStatement__.js.map +1 -1
- package/out/concepts/Theme__.js +3 -1
- package/out/concepts/Theme__.js.map +1 -1
- package/out/concepts/Transactional__.js +3 -1
- package/out/concepts/Transactional__.js.map +1 -1
- package/out/concepts/TriggerEvent__.js +12 -5
- package/out/concepts/TriggerEvent__.js.map +1 -1
- package/out/concepts/TriggerLauncher__.js +3 -1
- package/out/concepts/TriggerLauncher__.js.map +1 -1
- package/out/concepts/TypeAnnotation__.d.ts +2 -1
- package/out/concepts/TypeAnnotation__.js +55 -22
- package/out/concepts/TypeAnnotation__.js.map +1 -1
- package/out/concepts/TypeParam__.js +3 -1
- package/out/concepts/TypeParam__.js.map +1 -1
- package/out/concepts/UnaryExpression__.js +17 -6
- package/out/concepts/UnaryExpression__.js.map +1 -1
- package/out/concepts/Unparsed__.js +3 -1
- package/out/concepts/Unparsed__.js.map +1 -1
- package/out/concepts/UseComponent__.js +3 -1
- package/out/concepts/UseComponent__.js.map +1 -1
- package/out/concepts/ValidationRule__.js +11 -4
- package/out/concepts/ValidationRule__.js.map +1 -1
- package/out/concepts/Variable__.js +11 -4
- package/out/concepts/Variable__.js.map +1 -1
- package/out/concepts/ViewBlock__.js +3 -1
- package/out/concepts/ViewBlock__.js.map +1 -1
- package/out/concepts/ViewComponent__.js +59 -25
- package/out/concepts/ViewComponent__.js.map +1 -1
- package/out/concepts/ViewElement__.js +60 -29
- package/out/concepts/ViewElement__.js.map +1 -1
- package/out/concepts/View__.d.ts +1 -0
- package/out/concepts/View__.js +68 -21
- package/out/concepts/View__.js.map +1 -1
- package/out/concepts/WhileStatement__.js +20 -11
- package/out/concepts/WhileStatement__.js.map +1 -1
- package/out/concepts/basics/stdlib/nasl.util.js +2 -2
- package/out/concepts/basics/stdlib/nasl.util.js.map +1 -1
- package/out/generator/permission.js +32 -6
- package/out/generator/permission.js.map +1 -1
- package/out/index.d.ts +1 -1
- package/out/index.js +5 -1
- package/out/index.js.map +1 -1
- package/out/natural/transformTSCode.js +23 -3
- package/out/natural/transformTSCode.js.map +1 -1
- package/out/sentry/index.js +2 -1
- package/out/sentry/index.js.map +1 -1
- package/out/server/translator.js +5 -2
- package/out/server/translator.js.map +1 -1
- package/out/service/creator/add.configs.js +3 -0
- package/out/service/creator/add.configs.js.map +1 -1
- package/out/service/storage/init.d.ts +20 -0
- package/out/service/storage/init.js +296 -9
- package/out/service/storage/init.js.map +1 -1
- package/out/utils/index.d.ts +1 -0
- package/out/utils/index.js +14 -1
- package/out/utils/index.js.map +1 -1
- package/out/utils/sortTsString.js +10 -4
- package/out/utils/sortTsString.js.map +1 -1
- package/package.json +7 -7
- package/src/bak/translator.js +42 -21
- package/src/common/BaseNode.ts +11 -5
- package/src/concepts/Abort__.ts +1 -0
- package/src/concepts/Anchor__.ts +20 -14
- package/src/concepts/AnonymousFunction__.ts +29 -12
- package/src/concepts/App__.ts +161 -76
- package/src/concepts/Argument__.ts +9 -3
- package/src/concepts/Assignee__.ts +21 -8
- package/src/concepts/AssignmentLine__.ts +1 -0
- package/src/concepts/Assignment__.ts +28 -14
- package/src/concepts/Attribute__.ts +9 -3
- package/src/concepts/AuthInterface__.ts +1 -0
- package/src/concepts/AuthLogicForCallInterface__.ts +10 -4
- package/src/concepts/AuthLogic__.ts +4 -0
- package/src/concepts/BackendVariable__.ts +9 -3
- package/src/concepts/Backend__.ts +10 -4
- package/src/concepts/BatchAssignment__.ts +33 -16
- package/src/concepts/BinaryExpression__.ts +15 -9
- package/src/concepts/BindAttribute__.ts +35 -18
- package/src/concepts/BindDirective__.ts +26 -4
- package/src/concepts/BindEvent__.ts +37 -16
- package/src/concepts/BindStyle__.ts +9 -3
- package/src/concepts/BooleanLiteral__.ts +1 -0
- package/src/concepts/CallAuthInterface__.ts +12 -4
- package/src/concepts/CallConnector__.ts +1 -0
- package/src/concepts/CallFunction__.ts +24 -19
- package/src/concepts/CallInterface__.ts +44 -28
- package/src/concepts/CallLogic__.ts +81 -105
- package/src/concepts/CallQueryComponent__.ts +17 -6
- package/src/concepts/Comment__.ts +2 -1
- package/src/concepts/CompletionProperty__.ts +9 -3
- package/src/concepts/ConfigGroup__.ts +10 -4
- package/src/concepts/ConfigPropertyValue__.ts +1 -0
- package/src/concepts/ConfigProperty__.ts +10 -4
- package/src/concepts/Configuration__.ts +10 -4
- package/src/concepts/Connection__.ts +11 -5
- package/src/concepts/ConnectorTrigger__.ts +1 -0
- package/src/concepts/Connector__.ts +46 -20
- package/src/concepts/Constant__.ts +9 -3
- package/src/concepts/DataSource__.ts +10 -4
- package/src/concepts/DatabaseTypeAnnotation__.ts +1 -0
- package/src/concepts/Destination__.ts +9 -4
- package/src/concepts/End__.ts +1 -0
- package/src/concepts/EntityIndex__.ts +1 -0
- package/src/concepts/EntityProperty__.ts +17 -6
- package/src/concepts/Entity__.ts +19 -8
- package/src/concepts/EnumItem__.ts +1 -0
- package/src/concepts/Enum__.ts +9 -3
- package/src/concepts/Event__.ts +10 -4
- package/src/concepts/ExternalDestination__.ts +9 -3
- package/src/concepts/ForEachStatement__.ts +45 -36
- package/src/concepts/FrontendLibrary__.ts +19 -8
- package/src/concepts/Frontend__.ts +45 -19
- package/src/concepts/Function__.ts +46 -19
- package/src/concepts/Identifier__.ts +1 -0
- package/src/concepts/IfStatement__.ts +30 -20
- package/src/concepts/Integration__.ts +18 -7
- package/src/concepts/InterfaceParam__.ts +9 -3
- package/src/concepts/Interface__.ts +31 -15
- package/src/concepts/JSBlock__.ts +1 -0
- package/src/concepts/JavaLogic__.ts +1 -0
- package/src/concepts/LogicItem__.ts +5 -4
- package/src/concepts/Logic__.ts +77 -59
- package/src/concepts/MatchCase__.ts +46 -31
- package/src/concepts/Match__.ts +24 -16
- package/src/concepts/MemberExpression__.ts +27 -21
- package/src/concepts/MicroApp__.ts +1 -0
- package/src/concepts/Module__.ts +10 -9
- package/src/concepts/MsgTriggerEvent__.ts +10 -4
- package/src/concepts/MsgTriggerLauncher__.ts +10 -4
- package/src/concepts/Namespace__.ts +100 -44
- package/src/concepts/NewComposite__.ts +60 -28
- package/src/concepts/NewList__.ts +20 -8
- package/src/concepts/NewMap__.ts +20 -8
- package/src/concepts/NullLiteral__.ts +1 -0
- package/src/concepts/NumericLiteral__.ts +9 -3
- package/src/concepts/OqlQueryComponent__.ts +32 -4
- package/src/concepts/OverriddenLogic__.ts +51 -20
- package/src/concepts/Param__.ts +10 -6
- package/src/concepts/Point__.ts +1 -0
- package/src/concepts/ProcessComponent__.ts +19 -8
- package/src/concepts/ProcessElement__.ts +71 -30
- package/src/concepts/ProcessOutcome__.ts +1 -0
- package/src/concepts/ProcessOutcomes__.ts +1 -0
- package/src/concepts/Process__.ts +46 -20
- package/src/concepts/QueryAggregateExpression__.ts +9 -3
- package/src/concepts/QueryFieldExpression__.ts +1 -0
- package/src/concepts/QueryFromExpression__.ts +9 -3
- package/src/concepts/QueryGroupByExpression__.ts +9 -3
- package/src/concepts/QueryJoinExpression__.ts +10 -4
- package/src/concepts/QueryLimitExpression__.ts +9 -3
- package/src/concepts/QueryOrderByExpression__.ts +9 -3
- package/src/concepts/QuerySelectExpression__.ts +10 -4
- package/src/concepts/Rect__.ts +1 -0
- package/src/concepts/Return__.ts +9 -3
- package/src/concepts/Role__.ts +1 -0
- package/src/concepts/SelectMembers__.ts +10 -4
- package/src/concepts/Slot__.ts +9 -3
- package/src/concepts/SqlQueryComponent__.ts +9 -3
- package/src/concepts/Start__.ts +1 -0
- package/src/concepts/StringInterpolation__.ts +11 -5
- package/src/concepts/StringLiteral__.ts +1 -0
- package/src/concepts/StructureProperty__.ts +9 -3
- package/src/concepts/Structure__.ts +19 -8
- package/src/concepts/SwitchCase__.ts +15 -9
- package/src/concepts/SwitchStatement__.ts +22 -16
- package/src/concepts/Theme__.ts +1 -0
- package/src/concepts/Transactional__.ts +1 -0
- package/src/concepts/TriggerEvent__.ts +10 -4
- package/src/concepts/TriggerLauncher__.ts +1 -0
- package/src/concepts/TypeAnnotation__.ts +62 -28
- package/src/concepts/TypeParam__.ts +2 -1
- package/src/concepts/UnaryExpression__.ts +16 -6
- package/src/concepts/Unparsed__.ts +2 -1
- package/src/concepts/UseComponent__.ts +1 -0
- package/src/concepts/ValidationRule__.ts +10 -4
- package/src/concepts/Variable__.ts +9 -3
- package/src/concepts/ViewBlock__.ts +1 -0
- package/src/concepts/ViewComponent__.ts +57 -24
- package/src/concepts/ViewElement__.ts +156 -115
- package/src/concepts/View__.ts +114 -54
- package/src/concepts/WhileStatement__.ts +27 -15
- package/src/concepts/basics/stdlib/nasl.util.ts +2 -2
- package/src/generator/permission.ts +33 -9
- package/src/index.ts +1 -1
- package/src/natural/transformTSCode.ts +22 -3
- package/src/sentry/index.ts +3 -1
- package/src/server/translator.ts +5 -2
- package/src/service/creator/add.configs.js +6 -0
- package/src/service/storage/init.ts +304 -10
- package/src/utils/index.ts +13 -0
- package/src/utils/sortTsString.ts +9 -4
- package/test/concepts/call-function/__snapshots__/toEmbeddedTS.spec.ts.snap +26 -0
- package/test/concepts/call-function/__snapshots__/toJS.spec.ts.snap +26 -0
- package/test/concepts/call-function/constant.ts +5 -0
- package/test/concepts/call-function/fixtures/from-string.json +100 -0
- package/test/concepts/call-function/fixtures/to-string-global-tz.json +99 -0
- package/test/concepts/call-function/fixtures/to-string-no-tz.json +89 -0
- package/test/concepts/call-function/fixtures/to-string-user-tz.json +101 -0
- package/test/concepts/call-function/fixtures/to-string-utc-tz.json +101 -0
- package/test/concepts/call-function/toEmbeddedTS.spec.ts +14 -0
- package/test/concepts/call-function/toJS.spec.ts +14 -0
- package/test/concepts/member-expression/__snapshots__/toJS.spec.ts.snap +1 -1
- package/test/concepts/member-expression/__snapshots__/toVue.spec.ts.snap +1 -1
- package/test/concepts/view-element/__snapshots__/toVue.spec.ts.snap +1 -22
- package/.nyc_output/d58d92d8-c0d6-479b-9f82-1f4da8e73ff3.json +0 -1
- package/.nyc_output/processinfo/d58d92d8-c0d6-479b-9f82-1f4da8e73ff3.json +0 -1
- package/.nyc_output/processinfo/index.json +0 -1
|
@@ -23,30 +23,30 @@
|
|
|
23
23
|
<div class='clearfix'>
|
|
24
24
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">
|
|
26
|
+
<span class="strong">5.5% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>35/636</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">0.
|
|
33
|
+
<span class="strong">0.52% </span>
|
|
34
34
|
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>2/
|
|
35
|
+
<span class='fraction'>2/382</span>
|
|
36
36
|
</div>
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
<div class='fl pad1y space-right2'>
|
|
40
|
-
<span class="strong">1.
|
|
40
|
+
<span class="strong">1.07% </span>
|
|
41
41
|
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>1/
|
|
42
|
+
<span class='fraction'>1/93</span>
|
|
43
43
|
</div>
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">
|
|
47
|
+
<span class="strong">5.69% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>35/615</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -955,26 +955,563 @@
|
|
|
955
955
|
<a name='L890'></a><a href='#L890'>890</a>
|
|
956
956
|
<a name='L891'></a><a href='#L891'>891</a>
|
|
957
957
|
<a name='L892'></a><a href='#L892'>892</a>
|
|
958
|
-
<a name='L893'></a><a href='#L893'>893</a
|
|
958
|
+
<a name='L893'></a><a href='#L893'>893</a>
|
|
959
|
+
<a name='L894'></a><a href='#L894'>894</a>
|
|
960
|
+
<a name='L895'></a><a href='#L895'>895</a>
|
|
961
|
+
<a name='L896'></a><a href='#L896'>896</a>
|
|
962
|
+
<a name='L897'></a><a href='#L897'>897</a>
|
|
963
|
+
<a name='L898'></a><a href='#L898'>898</a>
|
|
964
|
+
<a name='L899'></a><a href='#L899'>899</a>
|
|
965
|
+
<a name='L900'></a><a href='#L900'>900</a>
|
|
966
|
+
<a name='L901'></a><a href='#L901'>901</a>
|
|
967
|
+
<a name='L902'></a><a href='#L902'>902</a>
|
|
968
|
+
<a name='L903'></a><a href='#L903'>903</a>
|
|
969
|
+
<a name='L904'></a><a href='#L904'>904</a>
|
|
970
|
+
<a name='L905'></a><a href='#L905'>905</a>
|
|
971
|
+
<a name='L906'></a><a href='#L906'>906</a>
|
|
972
|
+
<a name='L907'></a><a href='#L907'>907</a>
|
|
973
|
+
<a name='L908'></a><a href='#L908'>908</a>
|
|
974
|
+
<a name='L909'></a><a href='#L909'>909</a>
|
|
975
|
+
<a name='L910'></a><a href='#L910'>910</a>
|
|
976
|
+
<a name='L911'></a><a href='#L911'>911</a>
|
|
977
|
+
<a name='L912'></a><a href='#L912'>912</a>
|
|
978
|
+
<a name='L913'></a><a href='#L913'>913</a>
|
|
979
|
+
<a name='L914'></a><a href='#L914'>914</a>
|
|
980
|
+
<a name='L915'></a><a href='#L915'>915</a>
|
|
981
|
+
<a name='L916'></a><a href='#L916'>916</a>
|
|
982
|
+
<a name='L917'></a><a href='#L917'>917</a>
|
|
983
|
+
<a name='L918'></a><a href='#L918'>918</a>
|
|
984
|
+
<a name='L919'></a><a href='#L919'>919</a>
|
|
985
|
+
<a name='L920'></a><a href='#L920'>920</a>
|
|
986
|
+
<a name='L921'></a><a href='#L921'>921</a>
|
|
987
|
+
<a name='L922'></a><a href='#L922'>922</a>
|
|
988
|
+
<a name='L923'></a><a href='#L923'>923</a>
|
|
989
|
+
<a name='L924'></a><a href='#L924'>924</a>
|
|
990
|
+
<a name='L925'></a><a href='#L925'>925</a>
|
|
991
|
+
<a name='L926'></a><a href='#L926'>926</a>
|
|
992
|
+
<a name='L927'></a><a href='#L927'>927</a>
|
|
993
|
+
<a name='L928'></a><a href='#L928'>928</a>
|
|
994
|
+
<a name='L929'></a><a href='#L929'>929</a>
|
|
995
|
+
<a name='L930'></a><a href='#L930'>930</a>
|
|
996
|
+
<a name='L931'></a><a href='#L931'>931</a>
|
|
997
|
+
<a name='L932'></a><a href='#L932'>932</a>
|
|
998
|
+
<a name='L933'></a><a href='#L933'>933</a>
|
|
999
|
+
<a name='L934'></a><a href='#L934'>934</a>
|
|
1000
|
+
<a name='L935'></a><a href='#L935'>935</a>
|
|
1001
|
+
<a name='L936'></a><a href='#L936'>936</a>
|
|
1002
|
+
<a name='L937'></a><a href='#L937'>937</a>
|
|
1003
|
+
<a name='L938'></a><a href='#L938'>938</a>
|
|
1004
|
+
<a name='L939'></a><a href='#L939'>939</a>
|
|
1005
|
+
<a name='L940'></a><a href='#L940'>940</a>
|
|
1006
|
+
<a name='L941'></a><a href='#L941'>941</a>
|
|
1007
|
+
<a name='L942'></a><a href='#L942'>942</a>
|
|
1008
|
+
<a name='L943'></a><a href='#L943'>943</a>
|
|
1009
|
+
<a name='L944'></a><a href='#L944'>944</a>
|
|
1010
|
+
<a name='L945'></a><a href='#L945'>945</a>
|
|
1011
|
+
<a name='L946'></a><a href='#L946'>946</a>
|
|
1012
|
+
<a name='L947'></a><a href='#L947'>947</a>
|
|
1013
|
+
<a name='L948'></a><a href='#L948'>948</a>
|
|
1014
|
+
<a name='L949'></a><a href='#L949'>949</a>
|
|
1015
|
+
<a name='L950'></a><a href='#L950'>950</a>
|
|
1016
|
+
<a name='L951'></a><a href='#L951'>951</a>
|
|
1017
|
+
<a name='L952'></a><a href='#L952'>952</a>
|
|
1018
|
+
<a name='L953'></a><a href='#L953'>953</a>
|
|
1019
|
+
<a name='L954'></a><a href='#L954'>954</a>
|
|
1020
|
+
<a name='L955'></a><a href='#L955'>955</a>
|
|
1021
|
+
<a name='L956'></a><a href='#L956'>956</a>
|
|
1022
|
+
<a name='L957'></a><a href='#L957'>957</a>
|
|
1023
|
+
<a name='L958'></a><a href='#L958'>958</a>
|
|
1024
|
+
<a name='L959'></a><a href='#L959'>959</a>
|
|
1025
|
+
<a name='L960'></a><a href='#L960'>960</a>
|
|
1026
|
+
<a name='L961'></a><a href='#L961'>961</a>
|
|
1027
|
+
<a name='L962'></a><a href='#L962'>962</a>
|
|
1028
|
+
<a name='L963'></a><a href='#L963'>963</a>
|
|
1029
|
+
<a name='L964'></a><a href='#L964'>964</a>
|
|
1030
|
+
<a name='L965'></a><a href='#L965'>965</a>
|
|
1031
|
+
<a name='L966'></a><a href='#L966'>966</a>
|
|
1032
|
+
<a name='L967'></a><a href='#L967'>967</a>
|
|
1033
|
+
<a name='L968'></a><a href='#L968'>968</a>
|
|
1034
|
+
<a name='L969'></a><a href='#L969'>969</a>
|
|
1035
|
+
<a name='L970'></a><a href='#L970'>970</a>
|
|
1036
|
+
<a name='L971'></a><a href='#L971'>971</a>
|
|
1037
|
+
<a name='L972'></a><a href='#L972'>972</a>
|
|
1038
|
+
<a name='L973'></a><a href='#L973'>973</a>
|
|
1039
|
+
<a name='L974'></a><a href='#L974'>974</a>
|
|
1040
|
+
<a name='L975'></a><a href='#L975'>975</a>
|
|
1041
|
+
<a name='L976'></a><a href='#L976'>976</a>
|
|
1042
|
+
<a name='L977'></a><a href='#L977'>977</a>
|
|
1043
|
+
<a name='L978'></a><a href='#L978'>978</a>
|
|
1044
|
+
<a name='L979'></a><a href='#L979'>979</a>
|
|
1045
|
+
<a name='L980'></a><a href='#L980'>980</a>
|
|
1046
|
+
<a name='L981'></a><a href='#L981'>981</a>
|
|
1047
|
+
<a name='L982'></a><a href='#L982'>982</a>
|
|
1048
|
+
<a name='L983'></a><a href='#L983'>983</a>
|
|
1049
|
+
<a name='L984'></a><a href='#L984'>984</a>
|
|
1050
|
+
<a name='L985'></a><a href='#L985'>985</a>
|
|
1051
|
+
<a name='L986'></a><a href='#L986'>986</a>
|
|
1052
|
+
<a name='L987'></a><a href='#L987'>987</a>
|
|
1053
|
+
<a name='L988'></a><a href='#L988'>988</a>
|
|
1054
|
+
<a name='L989'></a><a href='#L989'>989</a>
|
|
1055
|
+
<a name='L990'></a><a href='#L990'>990</a>
|
|
1056
|
+
<a name='L991'></a><a href='#L991'>991</a>
|
|
1057
|
+
<a name='L992'></a><a href='#L992'>992</a>
|
|
1058
|
+
<a name='L993'></a><a href='#L993'>993</a>
|
|
1059
|
+
<a name='L994'></a><a href='#L994'>994</a>
|
|
1060
|
+
<a name='L995'></a><a href='#L995'>995</a>
|
|
1061
|
+
<a name='L996'></a><a href='#L996'>996</a>
|
|
1062
|
+
<a name='L997'></a><a href='#L997'>997</a>
|
|
1063
|
+
<a name='L998'></a><a href='#L998'>998</a>
|
|
1064
|
+
<a name='L999'></a><a href='#L999'>999</a>
|
|
1065
|
+
<a name='L1000'></a><a href='#L1000'>1000</a>
|
|
1066
|
+
<a name='L1001'></a><a href='#L1001'>1001</a>
|
|
1067
|
+
<a name='L1002'></a><a href='#L1002'>1002</a>
|
|
1068
|
+
<a name='L1003'></a><a href='#L1003'>1003</a>
|
|
1069
|
+
<a name='L1004'></a><a href='#L1004'>1004</a>
|
|
1070
|
+
<a name='L1005'></a><a href='#L1005'>1005</a>
|
|
1071
|
+
<a name='L1006'></a><a href='#L1006'>1006</a>
|
|
1072
|
+
<a name='L1007'></a><a href='#L1007'>1007</a>
|
|
1073
|
+
<a name='L1008'></a><a href='#L1008'>1008</a>
|
|
1074
|
+
<a name='L1009'></a><a href='#L1009'>1009</a>
|
|
1075
|
+
<a name='L1010'></a><a href='#L1010'>1010</a>
|
|
1076
|
+
<a name='L1011'></a><a href='#L1011'>1011</a>
|
|
1077
|
+
<a name='L1012'></a><a href='#L1012'>1012</a>
|
|
1078
|
+
<a name='L1013'></a><a href='#L1013'>1013</a>
|
|
1079
|
+
<a name='L1014'></a><a href='#L1014'>1014</a>
|
|
1080
|
+
<a name='L1015'></a><a href='#L1015'>1015</a>
|
|
1081
|
+
<a name='L1016'></a><a href='#L1016'>1016</a>
|
|
1082
|
+
<a name='L1017'></a><a href='#L1017'>1017</a>
|
|
1083
|
+
<a name='L1018'></a><a href='#L1018'>1018</a>
|
|
1084
|
+
<a name='L1019'></a><a href='#L1019'>1019</a>
|
|
1085
|
+
<a name='L1020'></a><a href='#L1020'>1020</a>
|
|
1086
|
+
<a name='L1021'></a><a href='#L1021'>1021</a>
|
|
1087
|
+
<a name='L1022'></a><a href='#L1022'>1022</a>
|
|
1088
|
+
<a name='L1023'></a><a href='#L1023'>1023</a>
|
|
1089
|
+
<a name='L1024'></a><a href='#L1024'>1024</a>
|
|
1090
|
+
<a name='L1025'></a><a href='#L1025'>1025</a>
|
|
1091
|
+
<a name='L1026'></a><a href='#L1026'>1026</a>
|
|
1092
|
+
<a name='L1027'></a><a href='#L1027'>1027</a>
|
|
1093
|
+
<a name='L1028'></a><a href='#L1028'>1028</a>
|
|
1094
|
+
<a name='L1029'></a><a href='#L1029'>1029</a>
|
|
1095
|
+
<a name='L1030'></a><a href='#L1030'>1030</a>
|
|
1096
|
+
<a name='L1031'></a><a href='#L1031'>1031</a>
|
|
1097
|
+
<a name='L1032'></a><a href='#L1032'>1032</a>
|
|
1098
|
+
<a name='L1033'></a><a href='#L1033'>1033</a>
|
|
1099
|
+
<a name='L1034'></a><a href='#L1034'>1034</a>
|
|
1100
|
+
<a name='L1035'></a><a href='#L1035'>1035</a>
|
|
1101
|
+
<a name='L1036'></a><a href='#L1036'>1036</a>
|
|
1102
|
+
<a name='L1037'></a><a href='#L1037'>1037</a>
|
|
1103
|
+
<a name='L1038'></a><a href='#L1038'>1038</a>
|
|
1104
|
+
<a name='L1039'></a><a href='#L1039'>1039</a>
|
|
1105
|
+
<a name='L1040'></a><a href='#L1040'>1040</a>
|
|
1106
|
+
<a name='L1041'></a><a href='#L1041'>1041</a>
|
|
1107
|
+
<a name='L1042'></a><a href='#L1042'>1042</a>
|
|
1108
|
+
<a name='L1043'></a><a href='#L1043'>1043</a>
|
|
1109
|
+
<a name='L1044'></a><a href='#L1044'>1044</a>
|
|
1110
|
+
<a name='L1045'></a><a href='#L1045'>1045</a>
|
|
1111
|
+
<a name='L1046'></a><a href='#L1046'>1046</a>
|
|
1112
|
+
<a name='L1047'></a><a href='#L1047'>1047</a>
|
|
1113
|
+
<a name='L1048'></a><a href='#L1048'>1048</a>
|
|
1114
|
+
<a name='L1049'></a><a href='#L1049'>1049</a>
|
|
1115
|
+
<a name='L1050'></a><a href='#L1050'>1050</a>
|
|
1116
|
+
<a name='L1051'></a><a href='#L1051'>1051</a>
|
|
1117
|
+
<a name='L1052'></a><a href='#L1052'>1052</a>
|
|
1118
|
+
<a name='L1053'></a><a href='#L1053'>1053</a>
|
|
1119
|
+
<a name='L1054'></a><a href='#L1054'>1054</a>
|
|
1120
|
+
<a name='L1055'></a><a href='#L1055'>1055</a>
|
|
1121
|
+
<a name='L1056'></a><a href='#L1056'>1056</a>
|
|
1122
|
+
<a name='L1057'></a><a href='#L1057'>1057</a>
|
|
1123
|
+
<a name='L1058'></a><a href='#L1058'>1058</a>
|
|
1124
|
+
<a name='L1059'></a><a href='#L1059'>1059</a>
|
|
1125
|
+
<a name='L1060'></a><a href='#L1060'>1060</a>
|
|
1126
|
+
<a name='L1061'></a><a href='#L1061'>1061</a>
|
|
1127
|
+
<a name='L1062'></a><a href='#L1062'>1062</a>
|
|
1128
|
+
<a name='L1063'></a><a href='#L1063'>1063</a>
|
|
1129
|
+
<a name='L1064'></a><a href='#L1064'>1064</a>
|
|
1130
|
+
<a name='L1065'></a><a href='#L1065'>1065</a>
|
|
1131
|
+
<a name='L1066'></a><a href='#L1066'>1066</a>
|
|
1132
|
+
<a name='L1067'></a><a href='#L1067'>1067</a>
|
|
1133
|
+
<a name='L1068'></a><a href='#L1068'>1068</a>
|
|
1134
|
+
<a name='L1069'></a><a href='#L1069'>1069</a>
|
|
1135
|
+
<a name='L1070'></a><a href='#L1070'>1070</a>
|
|
1136
|
+
<a name='L1071'></a><a href='#L1071'>1071</a>
|
|
1137
|
+
<a name='L1072'></a><a href='#L1072'>1072</a>
|
|
1138
|
+
<a name='L1073'></a><a href='#L1073'>1073</a>
|
|
1139
|
+
<a name='L1074'></a><a href='#L1074'>1074</a>
|
|
1140
|
+
<a name='L1075'></a><a href='#L1075'>1075</a>
|
|
1141
|
+
<a name='L1076'></a><a href='#L1076'>1076</a>
|
|
1142
|
+
<a name='L1077'></a><a href='#L1077'>1077</a>
|
|
1143
|
+
<a name='L1078'></a><a href='#L1078'>1078</a>
|
|
1144
|
+
<a name='L1079'></a><a href='#L1079'>1079</a>
|
|
1145
|
+
<a name='L1080'></a><a href='#L1080'>1080</a>
|
|
1146
|
+
<a name='L1081'></a><a href='#L1081'>1081</a>
|
|
1147
|
+
<a name='L1082'></a><a href='#L1082'>1082</a>
|
|
1148
|
+
<a name='L1083'></a><a href='#L1083'>1083</a>
|
|
1149
|
+
<a name='L1084'></a><a href='#L1084'>1084</a>
|
|
1150
|
+
<a name='L1085'></a><a href='#L1085'>1085</a>
|
|
1151
|
+
<a name='L1086'></a><a href='#L1086'>1086</a>
|
|
1152
|
+
<a name='L1087'></a><a href='#L1087'>1087</a>
|
|
1153
|
+
<a name='L1088'></a><a href='#L1088'>1088</a>
|
|
1154
|
+
<a name='L1089'></a><a href='#L1089'>1089</a>
|
|
1155
|
+
<a name='L1090'></a><a href='#L1090'>1090</a>
|
|
1156
|
+
<a name='L1091'></a><a href='#L1091'>1091</a>
|
|
1157
|
+
<a name='L1092'></a><a href='#L1092'>1092</a>
|
|
1158
|
+
<a name='L1093'></a><a href='#L1093'>1093</a>
|
|
1159
|
+
<a name='L1094'></a><a href='#L1094'>1094</a>
|
|
1160
|
+
<a name='L1095'></a><a href='#L1095'>1095</a>
|
|
1161
|
+
<a name='L1096'></a><a href='#L1096'>1096</a>
|
|
1162
|
+
<a name='L1097'></a><a href='#L1097'>1097</a>
|
|
1163
|
+
<a name='L1098'></a><a href='#L1098'>1098</a>
|
|
1164
|
+
<a name='L1099'></a><a href='#L1099'>1099</a>
|
|
1165
|
+
<a name='L1100'></a><a href='#L1100'>1100</a>
|
|
1166
|
+
<a name='L1101'></a><a href='#L1101'>1101</a>
|
|
1167
|
+
<a name='L1102'></a><a href='#L1102'>1102</a>
|
|
1168
|
+
<a name='L1103'></a><a href='#L1103'>1103</a>
|
|
1169
|
+
<a name='L1104'></a><a href='#L1104'>1104</a>
|
|
1170
|
+
<a name='L1105'></a><a href='#L1105'>1105</a>
|
|
1171
|
+
<a name='L1106'></a><a href='#L1106'>1106</a>
|
|
1172
|
+
<a name='L1107'></a><a href='#L1107'>1107</a>
|
|
1173
|
+
<a name='L1108'></a><a href='#L1108'>1108</a>
|
|
1174
|
+
<a name='L1109'></a><a href='#L1109'>1109</a>
|
|
1175
|
+
<a name='L1110'></a><a href='#L1110'>1110</a>
|
|
1176
|
+
<a name='L1111'></a><a href='#L1111'>1111</a>
|
|
1177
|
+
<a name='L1112'></a><a href='#L1112'>1112</a>
|
|
1178
|
+
<a name='L1113'></a><a href='#L1113'>1113</a>
|
|
1179
|
+
<a name='L1114'></a><a href='#L1114'>1114</a>
|
|
1180
|
+
<a name='L1115'></a><a href='#L1115'>1115</a>
|
|
1181
|
+
<a name='L1116'></a><a href='#L1116'>1116</a>
|
|
1182
|
+
<a name='L1117'></a><a href='#L1117'>1117</a>
|
|
1183
|
+
<a name='L1118'></a><a href='#L1118'>1118</a>
|
|
1184
|
+
<a name='L1119'></a><a href='#L1119'>1119</a>
|
|
1185
|
+
<a name='L1120'></a><a href='#L1120'>1120</a>
|
|
1186
|
+
<a name='L1121'></a><a href='#L1121'>1121</a>
|
|
1187
|
+
<a name='L1122'></a><a href='#L1122'>1122</a>
|
|
1188
|
+
<a name='L1123'></a><a href='#L1123'>1123</a>
|
|
1189
|
+
<a name='L1124'></a><a href='#L1124'>1124</a>
|
|
1190
|
+
<a name='L1125'></a><a href='#L1125'>1125</a>
|
|
1191
|
+
<a name='L1126'></a><a href='#L1126'>1126</a>
|
|
1192
|
+
<a name='L1127'></a><a href='#L1127'>1127</a>
|
|
1193
|
+
<a name='L1128'></a><a href='#L1128'>1128</a>
|
|
1194
|
+
<a name='L1129'></a><a href='#L1129'>1129</a>
|
|
1195
|
+
<a name='L1130'></a><a href='#L1130'>1130</a>
|
|
1196
|
+
<a name='L1131'></a><a href='#L1131'>1131</a>
|
|
1197
|
+
<a name='L1132'></a><a href='#L1132'>1132</a>
|
|
1198
|
+
<a name='L1133'></a><a href='#L1133'>1133</a>
|
|
1199
|
+
<a name='L1134'></a><a href='#L1134'>1134</a>
|
|
1200
|
+
<a name='L1135'></a><a href='#L1135'>1135</a>
|
|
1201
|
+
<a name='L1136'></a><a href='#L1136'>1136</a>
|
|
1202
|
+
<a name='L1137'></a><a href='#L1137'>1137</a>
|
|
1203
|
+
<a name='L1138'></a><a href='#L1138'>1138</a>
|
|
1204
|
+
<a name='L1139'></a><a href='#L1139'>1139</a>
|
|
1205
|
+
<a name='L1140'></a><a href='#L1140'>1140</a>
|
|
1206
|
+
<a name='L1141'></a><a href='#L1141'>1141</a>
|
|
1207
|
+
<a name='L1142'></a><a href='#L1142'>1142</a>
|
|
1208
|
+
<a name='L1143'></a><a href='#L1143'>1143</a>
|
|
1209
|
+
<a name='L1144'></a><a href='#L1144'>1144</a>
|
|
1210
|
+
<a name='L1145'></a><a href='#L1145'>1145</a>
|
|
1211
|
+
<a name='L1146'></a><a href='#L1146'>1146</a>
|
|
1212
|
+
<a name='L1147'></a><a href='#L1147'>1147</a>
|
|
1213
|
+
<a name='L1148'></a><a href='#L1148'>1148</a>
|
|
1214
|
+
<a name='L1149'></a><a href='#L1149'>1149</a>
|
|
1215
|
+
<a name='L1150'></a><a href='#L1150'>1150</a>
|
|
1216
|
+
<a name='L1151'></a><a href='#L1151'>1151</a>
|
|
1217
|
+
<a name='L1152'></a><a href='#L1152'>1152</a>
|
|
1218
|
+
<a name='L1153'></a><a href='#L1153'>1153</a>
|
|
1219
|
+
<a name='L1154'></a><a href='#L1154'>1154</a>
|
|
1220
|
+
<a name='L1155'></a><a href='#L1155'>1155</a>
|
|
1221
|
+
<a name='L1156'></a><a href='#L1156'>1156</a>
|
|
1222
|
+
<a name='L1157'></a><a href='#L1157'>1157</a>
|
|
1223
|
+
<a name='L1158'></a><a href='#L1158'>1158</a>
|
|
1224
|
+
<a name='L1159'></a><a href='#L1159'>1159</a>
|
|
1225
|
+
<a name='L1160'></a><a href='#L1160'>1160</a>
|
|
1226
|
+
<a name='L1161'></a><a href='#L1161'>1161</a>
|
|
1227
|
+
<a name='L1162'></a><a href='#L1162'>1162</a>
|
|
1228
|
+
<a name='L1163'></a><a href='#L1163'>1163</a>
|
|
1229
|
+
<a name='L1164'></a><a href='#L1164'>1164</a>
|
|
1230
|
+
<a name='L1165'></a><a href='#L1165'>1165</a>
|
|
1231
|
+
<a name='L1166'></a><a href='#L1166'>1166</a>
|
|
1232
|
+
<a name='L1167'></a><a href='#L1167'>1167</a>
|
|
1233
|
+
<a name='L1168'></a><a href='#L1168'>1168</a>
|
|
1234
|
+
<a name='L1169'></a><a href='#L1169'>1169</a>
|
|
1235
|
+
<a name='L1170'></a><a href='#L1170'>1170</a>
|
|
1236
|
+
<a name='L1171'></a><a href='#L1171'>1171</a>
|
|
1237
|
+
<a name='L1172'></a><a href='#L1172'>1172</a>
|
|
1238
|
+
<a name='L1173'></a><a href='#L1173'>1173</a>
|
|
1239
|
+
<a name='L1174'></a><a href='#L1174'>1174</a>
|
|
1240
|
+
<a name='L1175'></a><a href='#L1175'>1175</a>
|
|
1241
|
+
<a name='L1176'></a><a href='#L1176'>1176</a>
|
|
1242
|
+
<a name='L1177'></a><a href='#L1177'>1177</a>
|
|
1243
|
+
<a name='L1178'></a><a href='#L1178'>1178</a>
|
|
1244
|
+
<a name='L1179'></a><a href='#L1179'>1179</a>
|
|
1245
|
+
<a name='L1180'></a><a href='#L1180'>1180</a>
|
|
1246
|
+
<a name='L1181'></a><a href='#L1181'>1181</a>
|
|
1247
|
+
<a name='L1182'></a><a href='#L1182'>1182</a>
|
|
1248
|
+
<a name='L1183'></a><a href='#L1183'>1183</a>
|
|
1249
|
+
<a name='L1184'></a><a href='#L1184'>1184</a>
|
|
1250
|
+
<a name='L1185'></a><a href='#L1185'>1185</a>
|
|
1251
|
+
<a name='L1186'></a><a href='#L1186'>1186</a>
|
|
1252
|
+
<a name='L1187'></a><a href='#L1187'>1187</a>
|
|
1253
|
+
<a name='L1188'></a><a href='#L1188'>1188</a>
|
|
1254
|
+
<a name='L1189'></a><a href='#L1189'>1189</a>
|
|
1255
|
+
<a name='L1190'></a><a href='#L1190'>1190</a>
|
|
1256
|
+
<a name='L1191'></a><a href='#L1191'>1191</a>
|
|
1257
|
+
<a name='L1192'></a><a href='#L1192'>1192</a>
|
|
1258
|
+
<a name='L1193'></a><a href='#L1193'>1193</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
|
|
1259
|
+
<span class="cline-any cline-yes">1x</span>
|
|
959
1260
|
<span class="cline-any cline-yes">1x</span>
|
|
960
1261
|
<span class="cline-any cline-yes">1x</span>
|
|
961
1262
|
<span class="cline-any cline-yes">1x</span>
|
|
962
1263
|
<span class="cline-any cline-yes">1x</span>
|
|
963
1264
|
<span class="cline-any cline-yes">1x</span>
|
|
964
1265
|
<span class="cline-any cline-yes">1x</span>
|
|
965
|
-
<span class="cline-any cline-neutral"> </span>
|
|
966
1266
|
<span class="cline-any cline-yes">1x</span>
|
|
1267
|
+
<span class="cline-any cline-neutral"> </span>
|
|
967
1268
|
<span class="cline-any cline-yes">1x</span>
|
|
968
1269
|
<span class="cline-any cline-neutral"> </span>
|
|
969
1270
|
<span class="cline-any cline-neutral"> </span>
|
|
970
1271
|
<span class="cline-any cline-neutral"> </span>
|
|
1272
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1273
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1274
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1275
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1276
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1277
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1278
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1279
|
+
<span class="cline-any cline-neutral"> </span>
|
|
971
1280
|
<span class="cline-any cline-yes">1x</span>
|
|
1281
|
+
<span class="cline-any cline-neutral"> </span>
|
|
972
1282
|
<span class="cline-any cline-yes">1x</span>
|
|
1283
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1284
|
+
<span class="cline-any cline-neutral"> </span>
|
|
973
1285
|
<span class="cline-any cline-yes">1x</span>
|
|
1286
|
+
<span class="cline-any cline-no"> </span>
|
|
1287
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1288
|
+
<span class="cline-any cline-no"> </span>
|
|
1289
|
+
<span class="cline-any cline-no"> </span>
|
|
1290
|
+
<span class="cline-any cline-no"> </span>
|
|
1291
|
+
<span class="cline-any cline-no"> </span>
|
|
1292
|
+
<span class="cline-any cline-no"> </span>
|
|
1293
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1294
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1295
|
+
<span class="cline-any cline-no"> </span>
|
|
1296
|
+
<span class="cline-any cline-no"> </span>
|
|
1297
|
+
<span class="cline-any cline-no"> </span>
|
|
1298
|
+
<span class="cline-any cline-no"> </span>
|
|
1299
|
+
<span class="cline-any cline-no"> </span>
|
|
1300
|
+
<span class="cline-any cline-no"> </span>
|
|
1301
|
+
<span class="cline-any cline-no"> </span>
|
|
1302
|
+
<span class="cline-any cline-no"> </span>
|
|
1303
|
+
<span class="cline-any cline-no"> </span>
|
|
1304
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1305
|
+
<span class="cline-any cline-no"> </span>
|
|
1306
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1307
|
+
<span class="cline-any cline-no"> </span>
|
|
1308
|
+
<span class="cline-any cline-no"> </span>
|
|
1309
|
+
<span class="cline-any cline-no"> </span>
|
|
1310
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1311
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1312
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1313
|
+
<span class="cline-any cline-no"> </span>
|
|
1314
|
+
<span class="cline-any cline-no"> </span>
|
|
1315
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1316
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1317
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1318
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1319
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1320
|
+
<span class="cline-any cline-no"> </span>
|
|
1321
|
+
<span class="cline-any cline-no"> </span>
|
|
1322
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1323
|
+
<span class="cline-any cline-no"> </span>
|
|
1324
|
+
<span class="cline-any cline-no"> </span>
|
|
1325
|
+
<span class="cline-any cline-no"> </span>
|
|
1326
|
+
<span class="cline-any cline-no"> </span>
|
|
1327
|
+
<span class="cline-any cline-no"> </span>
|
|
1328
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1329
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1330
|
+
<span class="cline-any cline-no"> </span>
|
|
1331
|
+
<span class="cline-any cline-no"> </span>
|
|
1332
|
+
<span class="cline-any cline-no"> </span>
|
|
1333
|
+
<span class="cline-any cline-no"> </span>
|
|
1334
|
+
<span class="cline-any cline-no"> </span>
|
|
1335
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1336
|
+
<span class="cline-any cline-no"> </span>
|
|
1337
|
+
<span class="cline-any cline-no"> </span>
|
|
1338
|
+
<span class="cline-any cline-no"> </span>
|
|
1339
|
+
<span class="cline-any cline-no"> </span>
|
|
1340
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1341
|
+
<span class="cline-any cline-no"> </span>
|
|
1342
|
+
<span class="cline-any cline-no"> </span>
|
|
1343
|
+
<span class="cline-any cline-no"> </span>
|
|
1344
|
+
<span class="cline-any cline-no"> </span>
|
|
1345
|
+
<span class="cline-any cline-no"> </span>
|
|
1346
|
+
<span class="cline-any cline-no"> </span>
|
|
1347
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1348
|
+
<span class="cline-any cline-no"> </span>
|
|
1349
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1350
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1351
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1352
|
+
<span class="cline-any cline-no"> </span>
|
|
1353
|
+
<span class="cline-any cline-no"> </span>
|
|
1354
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1355
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1356
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1357
|
+
<span class="cline-any cline-no"> </span>
|
|
1358
|
+
<span class="cline-any cline-no"> </span>
|
|
1359
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1360
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1361
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1362
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1363
|
+
<span class="cline-any cline-neutral"> </span>
|
|
974
1364
|
<span class="cline-any cline-yes">1x</span>
|
|
1365
|
+
<span class="cline-any cline-no"> </span>
|
|
1366
|
+
<span class="cline-any cline-no"> </span>
|
|
1367
|
+
<span class="cline-any cline-no"> </span>
|
|
1368
|
+
<span class="cline-any cline-no"> </span>
|
|
1369
|
+
<span class="cline-any cline-no"> </span>
|
|
1370
|
+
<span class="cline-any cline-no"> </span>
|
|
1371
|
+
<span class="cline-any cline-no"> </span>
|
|
1372
|
+
<span class="cline-any cline-no"> </span>
|
|
1373
|
+
<span class="cline-any cline-no"> </span>
|
|
1374
|
+
<span class="cline-any cline-no"> </span>
|
|
1375
|
+
<span class="cline-any cline-no"> </span>
|
|
1376
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1377
|
+
<span class="cline-any cline-no"> </span>
|
|
1378
|
+
<span class="cline-any cline-no"> </span>
|
|
1379
|
+
<span class="cline-any cline-no"> </span>
|
|
1380
|
+
<span class="cline-any cline-no"> </span>
|
|
1381
|
+
<span class="cline-any cline-no"> </span>
|
|
1382
|
+
<span class="cline-any cline-no"> </span>
|
|
1383
|
+
<span class="cline-any cline-no"> </span>
|
|
1384
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1385
|
+
<span class="cline-any cline-no"> </span>
|
|
1386
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1387
|
+
<span class="cline-any cline-no"> </span>
|
|
1388
|
+
<span class="cline-any cline-no"> </span>
|
|
1389
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1390
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1391
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1392
|
+
<span class="cline-any cline-no"> </span>
|
|
1393
|
+
<span class="cline-any cline-no"> </span>
|
|
1394
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1395
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1396
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1397
|
+
<span class="cline-any cline-no"> </span>
|
|
1398
|
+
<span class="cline-any cline-no"> </span>
|
|
1399
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1400
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1401
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1402
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1403
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1404
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1405
|
+
<span class="cline-any cline-no"> </span>
|
|
1406
|
+
<span class="cline-any cline-no"> </span>
|
|
1407
|
+
<span class="cline-any cline-no"> </span>
|
|
1408
|
+
<span class="cline-any cline-no"> </span>
|
|
1409
|
+
<span class="cline-any cline-no"> </span>
|
|
1410
|
+
<span class="cline-any cline-no"> </span>
|
|
1411
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1412
|
+
<span class="cline-any cline-no"> </span>
|
|
1413
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1414
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1415
|
+
<span class="cline-any cline-no"> </span>
|
|
1416
|
+
<span class="cline-any cline-no"> </span>
|
|
1417
|
+
<span class="cline-any cline-no"> </span>
|
|
1418
|
+
<span class="cline-any cline-no"> </span>
|
|
1419
|
+
<span class="cline-any cline-no"> </span>
|
|
1420
|
+
<span class="cline-any cline-no"> </span>
|
|
1421
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1422
|
+
<span class="cline-any cline-no"> </span>
|
|
1423
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1424
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1425
|
+
<span class="cline-any cline-no"> </span>
|
|
1426
|
+
<span class="cline-any cline-no"> </span>
|
|
1427
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1428
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1429
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1430
|
+
<span class="cline-any cline-neutral"> </span>
|
|
975
1431
|
<span class="cline-any cline-neutral"> </span>
|
|
976
1432
|
<span class="cline-any cline-neutral"> </span>
|
|
977
1433
|
<span class="cline-any cline-yes">1x</span>
|
|
1434
|
+
<span class="cline-any cline-no"> </span>
|
|
1435
|
+
<span class="cline-any cline-no"> </span>
|
|
1436
|
+
<span class="cline-any cline-no"> </span>
|
|
1437
|
+
<span class="cline-any cline-no"> </span>
|
|
1438
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1439
|
+
<span class="cline-any cline-no"> </span>
|
|
1440
|
+
<span class="cline-any cline-no"> </span>
|
|
1441
|
+
<span class="cline-any cline-no"> </span>
|
|
1442
|
+
<span class="cline-any cline-no"> </span>
|
|
1443
|
+
<span class="cline-any cline-no"> </span>
|
|
1444
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1445
|
+
<span class="cline-any cline-no"> </span>
|
|
1446
|
+
<span class="cline-any cline-no"> </span>
|
|
1447
|
+
<span class="cline-any cline-no"> </span>
|
|
1448
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1449
|
+
<span class="cline-any cline-no"> </span>
|
|
1450
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1451
|
+
<span class="cline-any cline-no"> </span>
|
|
1452
|
+
<span class="cline-any cline-no"> </span>
|
|
1453
|
+
<span class="cline-any cline-no"> </span>
|
|
1454
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1455
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1456
|
+
<span class="cline-any cline-no"> </span>
|
|
1457
|
+
<span class="cline-any cline-no"> </span>
|
|
1458
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1459
|
+
<span class="cline-any cline-no"> </span>
|
|
1460
|
+
<span class="cline-any cline-no"> </span>
|
|
1461
|
+
<span class="cline-any cline-no"> </span>
|
|
1462
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1463
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1464
|
+
<span class="cline-any cline-no"> </span>
|
|
1465
|
+
<span class="cline-any cline-no"> </span>
|
|
1466
|
+
<span class="cline-any cline-no"> </span>
|
|
1467
|
+
<span class="cline-any cline-no"> </span>
|
|
1468
|
+
<span class="cline-any cline-no"> </span>
|
|
1469
|
+
<span class="cline-any cline-no"> </span>
|
|
1470
|
+
<span class="cline-any cline-no"> </span>
|
|
1471
|
+
<span class="cline-any cline-no"> </span>
|
|
1472
|
+
<span class="cline-any cline-no"> </span>
|
|
1473
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1474
|
+
<span class="cline-any cline-no"> </span>
|
|
1475
|
+
<span class="cline-any cline-no"> </span>
|
|
1476
|
+
<span class="cline-any cline-no"> </span>
|
|
1477
|
+
<span class="cline-any cline-no"> </span>
|
|
1478
|
+
<span class="cline-any cline-no"> </span>
|
|
1479
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1480
|
+
<span class="cline-any cline-no"> </span>
|
|
1481
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1482
|
+
<span class="cline-any cline-no"> </span>
|
|
1483
|
+
<span class="cline-any cline-no"> </span>
|
|
1484
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1485
|
+
<span class="cline-any cline-no"> </span>
|
|
1486
|
+
<span class="cline-any cline-no"> </span>
|
|
1487
|
+
<span class="cline-any cline-no"> </span>
|
|
1488
|
+
<span class="cline-any cline-no"> </span>
|
|
1489
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1490
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1491
|
+
<span class="cline-any cline-no"> </span>
|
|
1492
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1493
|
+
<span class="cline-any cline-no"> </span>
|
|
1494
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1495
|
+
<span class="cline-any cline-no"> </span>
|
|
1496
|
+
<span class="cline-any cline-no"> </span>
|
|
1497
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1498
|
+
<span class="cline-any cline-no"> </span>
|
|
1499
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1500
|
+
<span class="cline-any cline-no"> </span>
|
|
1501
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1502
|
+
<span class="cline-any cline-no"> </span>
|
|
1503
|
+
<span class="cline-any cline-no"> </span>
|
|
1504
|
+
<span class="cline-any cline-no"> </span>
|
|
1505
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1506
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1507
|
+
<span class="cline-any cline-no"> </span>
|
|
1508
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1509
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1510
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1511
|
+
<span class="cline-any cline-no"> </span>
|
|
1512
|
+
<span class="cline-any cline-no"> </span>
|
|
1513
|
+
<span class="cline-any cline-no"> </span>
|
|
1514
|
+
<span class="cline-any cline-neutral"> </span>
|
|
978
1515
|
<span class="cline-any cline-neutral"> </span>
|
|
979
1516
|
<span class="cline-any cline-neutral"> </span>
|
|
980
1517
|
<span class="cline-any cline-no"> </span>
|
|
@@ -1004,6 +1541,7 @@
|
|
|
1004
1541
|
<span class="cline-any cline-neutral"> </span>
|
|
1005
1542
|
<span class="cline-any cline-neutral"> </span>
|
|
1006
1543
|
<span class="cline-any cline-neutral"> </span>
|
|
1544
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1007
1545
|
<span class="cline-any cline-no"> </span>
|
|
1008
1546
|
<span class="cline-any cline-no"> </span>
|
|
1009
1547
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -1108,6 +1646,11 @@
|
|
|
1108
1646
|
<span class="cline-any cline-no"> </span>
|
|
1109
1647
|
<span class="cline-any cline-no"> </span>
|
|
1110
1648
|
<span class="cline-any cline-no"> </span>
|
|
1649
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1650
|
+
<span class="cline-any cline-no"> </span>
|
|
1651
|
+
<span class="cline-any cline-no"> </span>
|
|
1652
|
+
<span class="cline-any cline-no"> </span>
|
|
1653
|
+
<span class="cline-any cline-no"> </span>
|
|
1111
1654
|
<span class="cline-any cline-no"> </span>
|
|
1112
1655
|
<span class="cline-any cline-no"> </span>
|
|
1113
1656
|
<span class="cline-any cline-no"> </span>
|
|
@@ -1216,6 +1759,8 @@
|
|
|
1216
1759
|
<span class="cline-any cline-no"> </span>
|
|
1217
1760
|
<span class="cline-any cline-no"> </span>
|
|
1218
1761
|
<span class="cline-any cline-neutral"> </span>
|
|
1762
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1763
|
+
<span class="cline-any cline-no"> </span>
|
|
1219
1764
|
<span class="cline-any cline-no"> </span>
|
|
1220
1765
|
<span class="cline-any cline-no"> </span>
|
|
1221
1766
|
<span class="cline-any cline-no"> </span>
|
|
@@ -1243,6 +1788,9 @@
|
|
|
1243
1788
|
<span class="cline-any cline-no"> </span>
|
|
1244
1789
|
<span class="cline-any cline-no"> </span>
|
|
1245
1790
|
<span class="cline-any cline-no"> </span>
|
|
1791
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1792
|
+
<span class="cline-any cline-no"> </span>
|
|
1793
|
+
<span class="cline-any cline-no"> </span>
|
|
1246
1794
|
<span class="cline-any cline-no"> </span>
|
|
1247
1795
|
<span class="cline-any cline-neutral"> </span>
|
|
1248
1796
|
<span class="cline-any cline-no"> </span>
|
|
@@ -1326,11 +1874,31 @@
|
|
|
1326
1874
|
<span class="cline-any cline-neutral"> </span>
|
|
1327
1875
|
<span class="cline-any cline-neutral"> </span>
|
|
1328
1876
|
<span class="cline-any cline-no"> </span>
|
|
1877
|
+
<span class="cline-any cline-no"> </span>
|
|
1329
1878
|
<span class="cline-any cline-neutral"> </span>
|
|
1330
1879
|
<span class="cline-any cline-neutral"> </span>
|
|
1331
1880
|
<span class="cline-any cline-neutral"> </span>
|
|
1332
1881
|
<span class="cline-any cline-no"> </span>
|
|
1333
1882
|
<span class="cline-any cline-neutral"> </span>
|
|
1883
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1884
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1885
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1886
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1887
|
+
<span class="cline-any cline-no"> </span>
|
|
1888
|
+
<span class="cline-any cline-no"> </span>
|
|
1889
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1890
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1891
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1892
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1893
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1894
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1895
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1896
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1897
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1898
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1899
|
+
<span class="cline-any cline-no"> </span>
|
|
1900
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1901
|
+
<span class="cline-any cline-no"> </span>
|
|
1334
1902
|
<span class="cline-any cline-no"> </span>
|
|
1335
1903
|
<span class="cline-any cline-no"> </span>
|
|
1336
1904
|
<span class="cline-any cline-no"> </span>
|
|
@@ -1365,6 +1933,7 @@
|
|
|
1365
1933
|
<span class="cline-any cline-neutral"> </span>
|
|
1366
1934
|
<span class="cline-any cline-neutral"> </span>
|
|
1367
1935
|
<span class="cline-any cline-neutral"> </span>
|
|
1936
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1368
1937
|
<span class="cline-any cline-yes">1x</span>
|
|
1369
1938
|
<span class="cline-any cline-yes">1x</span>
|
|
1370
1939
|
<span class="cline-any cline-yes">1x</span>
|
|
@@ -1411,6 +1980,7 @@
|
|
|
1411
1980
|
<span class="cline-any cline-no"> </span>
|
|
1412
1981
|
<span class="cline-any cline-no"> </span>
|
|
1413
1982
|
<span class="cline-any cline-no"> </span>
|
|
1983
|
+
<span class="cline-any cline-no"> </span>
|
|
1414
1984
|
<span class="cline-any cline-neutral"> </span>
|
|
1415
1985
|
<span class="cline-any cline-no"> </span>
|
|
1416
1986
|
<span class="cline-any cline-no"> </span>
|
|
@@ -1418,6 +1988,7 @@
|
|
|
1418
1988
|
<span class="cline-any cline-no"> </span>
|
|
1419
1989
|
<span class="cline-any cline-no"> </span>
|
|
1420
1990
|
<span class="cline-any cline-no"> </span>
|
|
1991
|
+
<span class="cline-any cline-no"> </span>
|
|
1421
1992
|
<span class="cline-any cline-neutral"> </span>
|
|
1422
1993
|
<span class="cline-any cline-neutral"> </span>
|
|
1423
1994
|
<span class="cline-any cline-no"> </span>
|
|
@@ -1502,6 +2073,22 @@
|
|
|
1502
2073
|
<span class="cline-any cline-neutral"> </span>
|
|
1503
2074
|
<span class="cline-any cline-neutral"> </span>
|
|
1504
2075
|
<span class="cline-any cline-neutral"> </span>
|
|
2076
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2077
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2078
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2079
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2080
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2081
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2082
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2083
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2084
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2085
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2086
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2087
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2088
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2089
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2090
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2091
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1505
2092
|
<span class="cline-any cline-no"> </span>
|
|
1506
2093
|
<span class="cline-any cline-no"> </span>
|
|
1507
2094
|
<span class="cline-any cline-no"> </span>
|
|
@@ -1513,8 +2100,11 @@
|
|
|
1513
2100
|
<span class="cline-any cline-no"> </span>
|
|
1514
2101
|
<span class="cline-any cline-neutral"> </span>
|
|
1515
2102
|
<span class="cline-any cline-neutral"> </span>
|
|
2103
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2104
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1516
2105
|
<span class="cline-any cline-no"> </span>
|
|
1517
2106
|
<span class="cline-any cline-no"> </span>
|
|
2107
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1518
2108
|
<span class="cline-any cline-no"> </span>
|
|
1519
2109
|
<span class="cline-any cline-neutral"> </span>
|
|
1520
2110
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -1528,6 +2118,13 @@
|
|
|
1528
2118
|
<span class="cline-any cline-no"> </span>
|
|
1529
2119
|
<span class="cline-any cline-neutral"> </span>
|
|
1530
2120
|
<span class="cline-any cline-no"> </span>
|
|
2121
|
+
<span class="cline-any cline-no"> </span>
|
|
2122
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2123
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2124
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2125
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2126
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2127
|
+
<span class="cline-any cline-no"> </span>
|
|
1531
2128
|
<span class="cline-any cline-neutral"> </span>
|
|
1532
2129
|
<span class="cline-any cline-neutral"> </span>
|
|
1533
2130
|
<span class="cline-any cline-no"> </span>
|
|
@@ -1691,6 +2288,10 @@
|
|
|
1691
2288
|
<span class="cline-any cline-neutral"> </span>
|
|
1692
2289
|
<span class="cline-any cline-neutral"> </span>
|
|
1693
2290
|
<span class="cline-any cline-yes">1x</span>
|
|
2291
|
+
<span class="cline-any cline-no"> </span>
|
|
2292
|
+
<span class="cline-any cline-neutral"> </span>
|
|
2293
|
+
<span class="cline-any cline-no"> </span>
|
|
2294
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1694
2295
|
<span class="cline-any cline-neutral"> </span>
|
|
1695
2296
|
<span class="cline-any cline-no"> </span>
|
|
1696
2297
|
<span class="cline-any cline-no"> </span>
|
|
@@ -1764,6 +2365,7 @@
|
|
|
1764
2365
|
<span class="cline-any cline-neutral"> </span>
|
|
1765
2366
|
<span class="cline-any cline-neutral"> </span>
|
|
1766
2367
|
<span class="cline-any cline-neutral"> </span>
|
|
2368
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1767
2369
|
<span class="cline-any cline-no"> </span>
|
|
1768
2370
|
<span class="cline-any cline-no"> </span>
|
|
1769
2371
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -1845,18 +2447,17 @@
|
|
|
1845
2447
|
<span class="cline-any cline-no"> </span>
|
|
1846
2448
|
<span class="cline-any cline-no"> </span>
|
|
1847
2449
|
<span class="cline-any cline-neutral"> </span>
|
|
1848
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1849
|
-
|
|
1850
|
-
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import { App, LogicItem, Logic, Module, View, ViewElement, Argument, SelectMembers, SynatxNode, BindDirective, CallLogic } from '../../concepts';
|
|
2450
|
+
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import { cloneDeep } from 'lodash';
|
|
2451
|
+
import { App, LogicItem, Logic, Module, View, ViewElement, Argument, SelectMembers, SynatxNode, BindDirective, CallLogic } from '../../concepts';
|
|
1851
2452
|
import { addBreakpointNodesFromApp } from '../../breakpoint';
|
|
1852
2453
|
import { getConceptConstructor } from '../../decorators';
|
|
1853
2454
|
import { config } from '../../config';
|
|
1854
2455
|
import storageService from './service';
|
|
1855
2456
|
import { v4 as uuidv4 } from 'uuid';
|
|
1856
2457
|
import stepRecorder from '../../manager/stepRecorder';
|
|
2458
|
+
import * as jsoner from './jsoner';
|
|
1857
2459
|
/// #if !process.env.NODE_ENV || process.env.BUILD_TARGET === 'node'
|
|
1858
2460
|
import * as fs from 'fs-extra';
|
|
1859
|
-
import * as jsoner from './jsoner';
|
|
1860
2461
|
import type { NaslServer } from 'src/server/naslServer';
|
|
1861
2462
|
/// #endif
|
|
1862
2463
|
|
|
@@ -1868,254 +2469,496 @@ export const batchInstruct = storageService.batchInstruct;
|
|
|
1868
2469
|
export const breakpoint = storageService.breakpoint;
|
|
1869
2470
|
|
|
1870
2471
|
let tabTimestamp: string;
|
|
1871
|
-
export
|
|
1872
|
-
|
|
1873
|
-
|
|
1874
|
-
|
|
1875
|
-
|
|
1876
|
-
|
|
1877
|
-
|
|
1878
|
-
|
|
1879
|
-
|
|
1880
|
-
|
|
1881
|
-
|
|
1882
|
-
|
|
1883
|
-
|
|
1884
|
-
|
|
2472
|
+
export const databaseTypes = storageService.databaseTypes;
|
|
2473
|
+
|
|
2474
|
+
export const operationRecordInfoMap: Map<string, any> = new Map();
|
|
2475
|
+
|
|
2476
|
+
// 操作栈记录
|
|
2477
|
+
export function <span class="fstat-no" title="function not covered" >doOperationRecord(</span>operation: Operation) {
|
|
2478
|
+
const request = <span class="cstat-no" title="statement not covered" >indexedDB.open('naslData', 1);</span>
|
|
2479
|
+
|
|
2480
|
+
<span class="cstat-no" title="statement not covered" > request.onupgradeneeded = <span class="fstat-no" title="function not covered" >(e</span>vent: any) => {</span>
|
|
2481
|
+
const db = <span class="cstat-no" title="statement not covered" >event.target.result;</span>
|
|
2482
|
+
const objectStore = <span class="cstat-no" title="statement not covered" >db.createObjectStore('operationRecord', { autoIncrement: true });</span>
|
|
2483
|
+
<span class="cstat-no" title="statement not covered" > objectStore.createIndex('appId', 'appId');</span>
|
|
2484
|
+
<span class="cstat-no" title="statement not covered" > objectStore.createIndex('timestamp', 'timestamp');</span>
|
|
2485
|
+
};
|
|
2486
|
+
|
|
2487
|
+
<span class="cstat-no" title="statement not covered" > request.onsuccess = <span class="fstat-no" title="function not covered" >(e</span>vent: any) => {</span>
|
|
2488
|
+
const db = <span class="cstat-no" title="statement not covered" >event.target.result;</span>
|
|
2489
|
+
const transaction = <span class="cstat-no" title="statement not covered" >db.transaction('operationRecord', 'readwrite');</span>
|
|
2490
|
+
const objectStore = <span class="cstat-no" title="statement not covered" >transaction.objectStore('operationRecord');</span>
|
|
2491
|
+
<span class="cstat-no" title="statement not covered" > operation.appId = operationRecordInfoMap.get('appId');</span>
|
|
2492
|
+
<span class="cstat-no" title="statement not covered" > operation.branchId = operationRecordInfoMap.get('branchId');</span>
|
|
2493
|
+
<span class="cstat-no" title="statement not covered" > operation.accountId = operationRecordInfoMap.get('accountId');</span>
|
|
2494
|
+
<span class="cstat-no" title="statement not covered" > operation.userId = operationRecordInfoMap.get('userId');</span>
|
|
2495
|
+
<span class="cstat-no" title="statement not covered" > operation.phone = operationRecordInfoMap.get('phone');</span>
|
|
2496
|
+
// 将时间戳添加到记录中
|
|
2497
|
+
<span class="cstat-no" title="statement not covered" > operation.timestamp = Date.now();</span>
|
|
2498
|
+
// 这份数据不存在向上的引用,因此用cloneDeep没有关系
|
|
2499
|
+
<span class="cstat-no" title="statement not covered" > objectStore.put(cloneDeep(operation));</span>
|
|
2500
|
+
<span class="cstat-no" title="statement not covered" > transaction.oncomplete = <span class="fstat-no" title="function not covered" >() =</span>> {</span>
|
|
2501
|
+
<span class="cstat-no" title="statement not covered" > db.close();</span>
|
|
2502
|
+
};
|
|
2503
|
+
};
|
|
2504
|
+
|
|
2505
|
+
<span class="cstat-no" title="statement not covered" > request.onerror = <span class="fstat-no" title="function not covered" >function(e</span>vent) {</span>
|
|
2506
|
+
<span class="cstat-no" title="statement not covered" > console.log('Failed to open database');</span>
|
|
2507
|
+
};
|
|
2508
|
+
}
|
|
2509
|
+
|
|
2510
|
+
// 删除失效数据
|
|
2511
|
+
async function <span class="fstat-no" title="function not covered" >deleteExpiredRecords(</span>) {
|
|
2512
|
+
<span class="cstat-no" title="statement not covered" > return new Promise(<span class="fstat-no" title="function not covered" >(r</span>esolve, reject) => {</span>
|
|
2513
|
+
const request = <span class="cstat-no" title="statement not covered" >indexedDB.open('naslData', 1);</span>
|
|
2514
|
+
|
|
2515
|
+
<span class="cstat-no" title="statement not covered" > request.onupgradeneeded = <span class="fstat-no" title="function not covered" >(e</span>vent: any) => {</span>
|
|
2516
|
+
const db = <span class="cstat-no" title="statement not covered" >event.target.result;</span>
|
|
2517
|
+
const objectStore = <span class="cstat-no" title="statement not covered" >db.createObjectStore('operationRecord', { autoIncrement: true });</span>
|
|
2518
|
+
<span class="cstat-no" title="statement not covered" > objectStore.createIndex('appId', 'appId');</span>
|
|
2519
|
+
<span class="cstat-no" title="statement not covered" > objectStore.createIndex('timestamp', 'timestamp');</span>
|
|
2520
|
+
};
|
|
2521
|
+
|
|
2522
|
+
<span class="cstat-no" title="statement not covered" > request.onsuccess = <span class="fstat-no" title="function not covered" >(e</span>vent: any) => {</span>
|
|
2523
|
+
const db = <span class="cstat-no" title="statement not covered" >event.target.result;</span>
|
|
2524
|
+
const transaction = <span class="cstat-no" title="statement not covered" >db.transaction('operationRecord', 'readwrite');</span>
|
|
2525
|
+
const objectStore = <span class="cstat-no" title="statement not covered" >transaction.objectStore('operationRecord');</span>
|
|
2526
|
+
const index = <span class="cstat-no" title="statement not covered" >objectStore.index('timestamp');</span>
|
|
2527
|
+
// 设置有效期,默认7天
|
|
2528
|
+
const localStorageExpiresAt = <span class="cstat-no" title="statement not covered" >window.localStorage.getItem('expiresAt');</span>
|
|
2529
|
+
const expiresAt = <span class="cstat-no" title="statement not covered" >Date.now() - (localStorageExpiresAt ? +localStorageExpiresAt : 7 * 24 * 60 * 60 * 1000);</span>
|
|
2530
|
+
const range = <span class="cstat-no" title="statement not covered" >IDBKeyRange.upperBound(expiresAt);</span>
|
|
2531
|
+
const expiredRecordsRequest = <span class="cstat-no" title="statement not covered" >index.openCursor(range);</span>
|
|
2532
|
+
|
|
2533
|
+
<span class="cstat-no" title="statement not covered" > expiredRecordsRequest.onsuccess = <span class="fstat-no" title="function not covered" >(e</span>vent: any) => {</span>
|
|
2534
|
+
const cursor = <span class="cstat-no" title="statement not covered" >event.target.result;</span>
|
|
2535
|
+
<span class="cstat-no" title="statement not covered" > if (cursor) {</span>
|
|
2536
|
+
<span class="cstat-no" title="statement not covered" > console.log(cursor);</span>
|
|
2537
|
+
<span class="cstat-no" title="statement not covered" > objectStore.delete(cursor.primaryKey);</span>
|
|
2538
|
+
<span class="cstat-no" title="statement not covered" > cursor.continue();</span>
|
|
2539
|
+
} else {
|
|
2540
|
+
<span class="cstat-no" title="statement not covered" > resolve(void 0);</span>
|
|
2541
|
+
}
|
|
2542
|
+
};
|
|
2543
|
+
|
|
2544
|
+
<span class="cstat-no" title="statement not covered" > transaction.oncomplete = <span class="fstat-no" title="function not covered" >() =</span>> {</span>
|
|
2545
|
+
<span class="cstat-no" title="statement not covered" > db.close();</span>
|
|
2546
|
+
};
|
|
2547
|
+
};
|
|
2548
|
+
|
|
2549
|
+
<span class="cstat-no" title="statement not covered" > request.onerror = <span class="fstat-no" title="function not covered" >(e</span>vent) => {</span>
|
|
2550
|
+
<span class="cstat-no" title="statement not covered" > reject('Failed to open database');</span>
|
|
2551
|
+
};
|
|
2552
|
+
});
|
|
2553
|
+
}
|
|
2554
|
+
|
|
2555
|
+
// 操作栈查询
|
|
2556
|
+
export function <span class="fstat-no" title="function not covered" >operationRecordQuery(</span>app: any) {
|
|
2557
|
+
<span class="cstat-no" title="statement not covered" > return new Promise(<span class="fstat-no" title="function not covered" >(r</span>esolve, reject) => {</span>
|
|
2558
|
+
const appId = <span class="cstat-no" title="statement not covered" >app?.id;</span>
|
|
2559
|
+
const request = <span class="cstat-no" title="statement not covered" >indexedDB.open('naslData', 1);</span>
|
|
2560
|
+
<span class="cstat-no" title="statement not covered" > request.onsuccess = <span class="fstat-no" title="function not covered" >(e</span>vent: any) => {</span>
|
|
2561
|
+
const db = <span class="cstat-no" title="statement not covered" >event.target.result;</span>
|
|
2562
|
+
const transaction = <span class="cstat-no" title="statement not covered" >db.transaction('operationRecord', 'readonly');</span>
|
|
2563
|
+
const objectStore = <span class="cstat-no" title="statement not covered" >transaction.objectStore('operationRecord');</span>
|
|
2564
|
+
const index = <span class="cstat-no" title="statement not covered" >objectStore.index('appId');</span> // 查询 'appId' 索引
|
|
2565
|
+
const range = <span class="cstat-no" title="statement not covered" >IDBKeyRange.only(appId);</span>
|
|
2566
|
+
const request = <span class="cstat-no" title="statement not covered" >index.openCursor(range);</span>
|
|
2567
|
+
const result: any[] = <span class="cstat-no" title="statement not covered" >[];</span>
|
|
2568
|
+
|
|
2569
|
+
<span class="cstat-no" title="statement not covered" > request.onsuccess = <span class="fstat-no" title="function not covered" >(e</span>vent: any) => {</span>
|
|
2570
|
+
const cursor = <span class="cstat-no" title="statement not covered" >event.target.result;</span>
|
|
2571
|
+
<span class="cstat-no" title="statement not covered" > if (cursor) {</span>
|
|
2572
|
+
const record = <span class="cstat-no" title="statement not covered" >cursor.value;</span>
|
|
2573
|
+
const branchId = <span class="cstat-no" title="statement not covered" >operationRecordInfoMap.get('branchId');</span>
|
|
2574
|
+
<span class="cstat-no" title="statement not covered" > if (record.branchId === branchId) {</span>
|
|
2575
|
+
<span class="cstat-no" title="statement not covered" > result.push(record);</span>
|
|
2576
|
+
}
|
|
2577
|
+
<span class="cstat-no" title="statement not covered" > cursor.continue();</span>
|
|
2578
|
+
} else {
|
|
2579
|
+
<span class="cstat-no" title="statement not covered" > console.log('操作记录栈:', result);</span>
|
|
2580
|
+
<span class="cstat-no" title="statement not covered" > resolve(result);</span>
|
|
2581
|
+
}
|
|
2582
|
+
};
|
|
2583
|
+
|
|
2584
|
+
<span class="cstat-no" title="statement not covered" > transaction.oncomplete = <span class="fstat-no" title="function not covered" >() =</span>> {</span>
|
|
2585
|
+
<span class="cstat-no" title="statement not covered" > db.close();</span>
|
|
2586
|
+
};
|
|
2587
|
+
};
|
|
2588
|
+
|
|
2589
|
+
<span class="cstat-no" title="statement not covered" > request.onerror = <span class="fstat-no" title="function not covered" >(e</span>vent) => {</span>
|
|
2590
|
+
<span class="cstat-no" title="statement not covered" > reject('Failed to open database');</span>
|
|
2591
|
+
};
|
|
2592
|
+
});
|
|
2593
|
+
}
|
|
2594
|
+
|
|
2595
|
+
// 获取父对象
|
|
2596
|
+
function <span class="fstat-no" title="function not covered" >getParentInfo(</span>appJson: any, path: string) {
|
|
2597
|
+
const pathArr: string[] = <span class="cstat-no" title="statement not covered" >[];</span>
|
|
2598
|
+
<span class="cstat-no" title="statement not covered" > (path?.split('.') || []).forEach(<span class="fstat-no" title="function not covered" >(p</span>athItem: string) => {</span>
|
|
2599
|
+
const arrayPropertyKey = <span class="cstat-no" title="statement not covered" >pathItem.split('[')[0];</span>
|
|
2600
|
+
const matchArr = <span class="cstat-no" title="statement not covered" >pathItem.match(/\[(.+?)\]/);</span>
|
|
2601
|
+
<span class="cstat-no" title="statement not covered" > if (matchArr) {</span>
|
|
2602
|
+
<span class="cstat-no" title="statement not covered" > pathArr.push(arrayPropertyKey, matchArr[0]);</span>
|
|
2603
|
+
} else {
|
|
2604
|
+
<span class="cstat-no" title="statement not covered" > pathArr.push(pathItem);</span>
|
|
2605
|
+
}
|
|
2606
|
+
});
|
|
2607
|
+
<span class="cstat-no" title="statement not covered" > pathArr.pop();</span>
|
|
2608
|
+
let parentPath = <span class="cstat-no" title="statement not covered" >'';</span>
|
|
2609
|
+
<span class="cstat-no" title="statement not covered" > pathArr.forEach(<span class="fstat-no" title="function not covered" >(p</span>athItem: string, index: number) => {</span>
|
|
2610
|
+
const matchArr = <span class="cstat-no" title="statement not covered" >pathItem.match(/\[(.+?)\]/);</span>
|
|
2611
|
+
<span class="cstat-no" title="statement not covered" > if (matchArr || index === 0) {</span>
|
|
2612
|
+
<span class="cstat-no" title="statement not covered" > parentPath += pathItem;</span>
|
|
2613
|
+
} else {
|
|
2614
|
+
<span class="cstat-no" title="statement not covered" > parentPath += `.${pathItem}`</span>
|
|
2615
|
+
}
|
|
2616
|
+
});
|
|
2617
|
+
const parentNode = <span class="cstat-no" title="statement not covered" >jsoner.queryNodeByPath(appJson, parentPath);</span>
|
|
2618
|
+
<span class="cstat-no" title="statement not covered" > return {</span>
|
|
2619
|
+
parentPath,
|
|
2620
|
+
parentNode,
|
|
2621
|
+
};
|
|
2622
|
+
}
|
|
2623
|
+
|
|
2624
|
+
// 操作记录回放
|
|
2625
|
+
export async function <span class="fstat-no" title="function not covered" >operationRecordPlayback(</span>app: any, operationRecordAction: 'undo' | 'redo') {
|
|
2626
|
+
const operationRecord: any = <span class="cstat-no" title="statement not covered" >await operationRecordQuery(app);</span>
|
|
2627
|
+
let operationRecordIndex = <span class="cstat-no" title="statement not covered" >operationRecordInfoMap.get('operationRecordIndex');</span>
|
|
2628
|
+
<span class="cstat-no" title="statement not covered" > if ([null, undefined].includes(operationRecordIndex)) {</span>
|
|
2629
|
+
<span class="cstat-no" title="statement not covered" > operationRecordIndex = operationRecord?.length;</span>
|
|
2630
|
+
}
|
|
2631
|
+
const appJson = <span class="cstat-no" title="statement not covered" >app.toJSON();</span>
|
|
2632
|
+
<span class="cstat-no" title="statement not covered" > if (operationRecordAction === 'undo') {</span>
|
|
2633
|
+
<span class="cstat-no" title="statement not covered" > if (operationRecordIndex > 0) {</span>
|
|
2634
|
+
const currentRecordItem = <span class="cstat-no" title="statement not covered" >operationRecord?.[operationRecordIndex];</span>
|
|
2635
|
+
const { type, action: recordItemAction } = <span class="cstat-no" title="statement not covered" >currentRecordItem || {};</span>
|
|
2636
|
+
// 多人协作
|
|
2637
|
+
<span class="cstat-no" title="statement not covered" > if (type === 'cooperation' && recordItemAction === 'confirmPull') {</span>
|
|
2638
|
+
<span class="cstat-no" title="statement not covered" > console.log(`当前所处栈位置:${operationRecordIndex},已经进行了多人协作“合并”操作,无法继续对操作栈进行回放!`);</span>
|
|
2639
|
+
<span class="cstat-no" title="statement not covered" > return;</span>
|
|
2640
|
+
}
|
|
2641
|
+
<span class="cstat-no" title="statement not covered" > operationRecordIndex--;</span>
|
|
2642
|
+
} else {
|
|
2643
|
+
<span class="cstat-no" title="statement not covered" > console.log(`当前所处栈位置:${operationRecordIndex},无法继续回放`);</span>
|
|
2644
|
+
<span class="cstat-no" title="statement not covered" > console.log('当前appJSON:', appJson);</span>
|
|
2645
|
+
<span class="cstat-no" title="statement not covered" > return;</span>
|
|
2646
|
+
}
|
|
2647
|
+
} else {
|
|
2648
|
+
<span class="cstat-no" title="statement not covered" > if (operationRecordIndex < operationRecord?.length) {</span>
|
|
2649
|
+
<span class="cstat-no" title="statement not covered" > operationRecordIndex++;</span>
|
|
2650
|
+
} else {
|
|
2651
|
+
<span class="cstat-no" title="statement not covered" > console.log(`当前所处栈位置:${operationRecordIndex},无法继续前进`);</span>
|
|
2652
|
+
<span class="cstat-no" title="statement not covered" > console.log('当前appJSON:', appJson);</span>
|
|
2653
|
+
<span class="cstat-no" title="statement not covered" > return;</span>
|
|
2654
|
+
}
|
|
2655
|
+
}
|
|
2656
|
+
<span class="cstat-no" title="statement not covered" > operationRecordInfoMap.set('operationRecordIndex', operationRecordIndex);</span>
|
|
2657
|
+
const currentIndex = <span class="cstat-no" title="statement not covered" >operationRecordIndex;</span>
|
|
2658
|
+
<span class="cstat-no" title="statement not covered" > ([...operationRecord].splice(currentIndex, operationRecord?.length) || []).reverse()?.forEach(<span class="fstat-no" title="function not covered" >(r</span>ecordItem: any) => {</span>
|
|
2659
|
+
const { actionItem } = <span class="cstat-no" title="statement not covered" >recordItem || {};</span>
|
|
2660
|
+
const { list } = <span class="cstat-no" title="statement not covered" >actionItem || {};</span>
|
|
2661
|
+
<span class="cstat-no" title="statement not covered" > [...(list || [])].reverse().forEach(<span class="fstat-no" title="function not covered" >(a</span>ctionItem: any) => {</span>
|
|
2662
|
+
const { path, action, object, oldObject, parentKey, index: oldIndex } = <span class="cstat-no" title="statement not covered" >actionItem || {};</span>
|
|
2663
|
+
const { parentNode } = <span class="cstat-no" title="statement not covered" >getParentInfo(appJson, path);</span>
|
|
2664
|
+
let newPath = <span class="cstat-no" title="statement not covered" >path;</span>
|
|
2665
|
+
// 如果涉及到改名操作,需要特殊处理
|
|
2666
|
+
<span class="cstat-no" title="statement not covered" > if (operationRecordAction === 'undo' && action === 'update' && object?.name) {</span>
|
|
2667
|
+
const pathArr = <span class="cstat-no" title="statement not covered" >path?.split('.') || [];</span>
|
|
2668
|
+
const lastPathItem = <span class="cstat-no" title="statement not covered" >pathArr?.pop();</span>
|
|
2669
|
+
<span class="cstat-no" title="statement not covered" > if (lastPathItem) {</span>
|
|
2670
|
+
<span class="cstat-no" title="statement not covered" > pathArr.push(lastPathItem.replace(/(name=)[^\]]+/, `$1${object?.name}`));</span>
|
|
2671
|
+
}
|
|
2672
|
+
<span class="cstat-no" title="statement not covered" > newPath = pathArr.join('.');</span>
|
|
2673
|
+
}
|
|
2674
|
+
const node = <span class="cstat-no" title="statement not covered" >jsoner.queryNodeByPath(appJson, newPath);</span>
|
|
2675
|
+
<span class="cstat-no" title="statement not covered" > switch (action) {</span>
|
|
2676
|
+
case 'create':
|
|
2677
|
+
<span class="cstat-no" title="statement not covered" > if (Array.isArray(parentNode)) {</span>
|
|
2678
|
+
const index = <span class="cstat-no" title="statement not covered" >parentNode.indexOf(node);</span>
|
|
2679
|
+
<span class="cstat-no" title="statement not covered" > if (index !== -1) {</span>
|
|
2680
|
+
<span class="cstat-no" title="statement not covered" > parentNode.splice(index, 1);</span>
|
|
2681
|
+
}
|
|
2682
|
+
} else {
|
|
2683
|
+
<span class="cstat-no" title="statement not covered" > parentNode[parentKey] = null;</span>
|
|
2684
|
+
}
|
|
2685
|
+
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
2686
|
+
case 'delete':
|
|
2687
|
+
<span class="cstat-no" title="statement not covered" > if (Array.isArray(parentNode) && oldIndex !== -1) {</span>
|
|
2688
|
+
<span class="cstat-no" title="statement not covered" > parentNode.splice(oldIndex, 0, oldObject);</span>
|
|
2689
|
+
} else {
|
|
2690
|
+
<span class="cstat-no" title="statement not covered" > parentNode[parentKey] = oldObject;</span>
|
|
2691
|
+
}
|
|
2692
|
+
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
2693
|
+
case 'update':
|
|
2694
|
+
<span class="cstat-no" title="statement not covered" > for (const key in oldObject) {</span>
|
|
2695
|
+
<span class="cstat-no" title="statement not covered" > if (node) {</span>
|
|
2696
|
+
(<span class="cstat-no" title="statement not covered" >node as any)[key] = oldObject[key] ?? null;</span>
|
|
2697
|
+
}
|
|
2698
|
+
}
|
|
2699
|
+
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
2700
|
+
}
|
|
2701
|
+
});
|
|
2702
|
+
});
|
|
2703
|
+
<span class="cstat-no" title="statement not covered" > console.log('当前所处栈位置:', currentIndex);</span>
|
|
2704
|
+
<span class="cstat-no" title="statement not covered" > console.log('当前appJSON:', appJson);</span>
|
|
2705
|
+
<span class="cstat-no" title="statement not covered" > return appJson;</span>
|
|
2706
|
+
}
|
|
2707
|
+
|
|
2708
|
+
function <span class="fstat-no" title="function not covered" >getLogic(</span>key: string, app: any, diffLogicList: string[]) {
|
|
2709
|
+
<span class="cstat-no" title="statement not covered" > if (!diffLogicList.includes(key)) {</span>
|
|
2710
|
+
<span class="cstat-no" title="statement not covered" > diffLogicList.push(key);</span>
|
|
2711
|
+
<span class="cstat-no" title="statement not covered" > if (key.startsWith('app')) {</span>
|
|
2712
|
+
const index = <span class="cstat-no" title="statement not covered" >key.lastIndexOf('.');</span>
|
|
2713
|
+
const name = <span class="cstat-no" title="statement not covered" >key.slice(index + 1);</span>
|
|
2714
|
+
const logic = <span class="cstat-no" title="statement not covered" >app.logics.find(<span class="fstat-no" title="function not covered" >(i</span>tem: any) => <span class="cstat-no" title="statement not covered" >item.name === name)</span>;</span>
|
|
2715
|
+
<span class="cstat-no" title="statement not covered" > if (logic && logic.body && logic.body.length > 2) {</span>
|
|
2716
|
+
<span class="cstat-no" title="statement not covered" > logic.body.map(<span class="fstat-no" title="function not covered" >(i</span>tem: any) => <span class="cstat-no" title="statement not covered" >getStatement(item, app, diffLogicList))</span>;</span>
|
|
2717
|
+
}
|
|
2718
|
+
} else <span class="cstat-no" title="statement not covered" >if (key.startsWith('extensions')) {</span>
|
|
2719
|
+
const _pathArr = <span class="cstat-no" title="statement not covered" >key.split('.');</span>
|
|
1885
2720
|
const _name = <span class="cstat-no" title="statement not covered" >_pathArr[1];</span>
|
|
1886
|
-
const _path =
|
|
1887
|
-
const _list =
|
|
1888
|
-
|
|
1889
|
-
const name = it.name.replaceAll('-', '_')
|
|
1890
|
-
|
|
1891
|
-
|
|
1892
|
-
|
|
1893
|
-
if (logic && logic.body && logic.body.length > 2) {
|
|
1894
|
-
logic.body.map((
|
|
2721
|
+
const _path = <span class="cstat-no" title="statement not covered" >_pathArr[3];</span>
|
|
2722
|
+
const _list = <span class="cstat-no" title="statement not covered" >app.dependencies;</span>
|
|
2723
|
+
const _module = <span class="cstat-no" title="statement not covered" >_list.find(<span class="fstat-no" title="function not covered" >(i</span>t: Module) => {</span>
|
|
2724
|
+
const name = <span class="cstat-no" title="statement not covered" >it.name.replaceAll('-', '_');</span>
|
|
2725
|
+
<span class="cstat-no" title="statement not covered" > return name === _name;</span>
|
|
2726
|
+
});
|
|
2727
|
+
const logic = <span class="cstat-no" title="statement not covered" >_module?.logics?.find(<span class="fstat-no" title="function not covered" >(i</span>tem: Logic) => <span class="cstat-no" title="statement not covered" >item.name === _path)</span>;</span>
|
|
2728
|
+
<span class="cstat-no" title="statement not covered" > if (logic && logic.body && logic.body.length > 2) {</span>
|
|
2729
|
+
<span class="cstat-no" title="statement not covered" > logic.body.map(<span class="fstat-no" title="function not covered" >(i</span>tem: any) => <span class="cstat-no" title="statement not covered" >getStatement(item, app, diffLogicList))</span>;</span>
|
|
1895
2730
|
}
|
|
1896
2731
|
}
|
|
1897
2732
|
}
|
|
1898
|
-
}
|
|
1899
|
-
|
|
1900
|
-
|
|
1901
|
-
|
|
1902
|
-
|
|
1903
|
-
|
|
1904
|
-
|
|
2733
|
+
}
|
|
2734
|
+
|
|
2735
|
+
/* 获取LogicITEM */
|
|
2736
|
+
function <span class="fstat-no" title="function not covered" >getStatement(</span>state: any, app: any, diffLogicList: string[]) {
|
|
2737
|
+
let logicItems = <span class="cstat-no" title="statement not covered" >[];</span>
|
|
2738
|
+
<span class="cstat-no" title="statement not covered" > switch (state.concept) {</span>
|
|
2739
|
+
case 'Assignment':
|
|
2740
|
+
<span class="cstat-no" title="statement not covered" > logicItems = [state.left, state.right];</span>
|
|
2741
|
+
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
2742
|
+
case 'IfStatement':
|
|
2743
|
+
<span class="cstat-no" title="statement not covered" > logicItems = [...state.consequent, ...state.alternate];</span>
|
|
2744
|
+
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
2745
|
+
case 'ForEachStatement':
|
|
2746
|
+
<span class="cstat-no" title="statement not covered" > logicItems = [...state.body, state.each, state.start, state.end];</span>
|
|
2747
|
+
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
2748
|
+
case 'Match':
|
|
2749
|
+
<span class="cstat-no" title="statement not covered" > logicItems = [state.expression, ...state.cases.map(getStatement).flat(1)];</span>
|
|
2750
|
+
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
2751
|
+
case 'MatchCase':
|
|
2752
|
+
<span class="cstat-no" title="statement not covered" > logicItems = [...state.patterns, ...state.body];</span>
|
|
2753
|
+
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
2754
|
+
case 'SwitchStatement':
|
|
2755
|
+
<span class="cstat-no" title="statement not covered" > logicItems = state.cases.map(getStatement).flat(1);</span>
|
|
1905
2756
|
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
1906
|
-
|
|
1907
|
-
logicItems = [
|
|
2757
|
+
case 'SwitchCase':
|
|
2758
|
+
<span class="cstat-no" title="statement not covered" > logicItems = [state.test, ...state.consequent];</span>
|
|
1908
2759
|
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
1909
|
-
|
|
1910
|
-
logicItems = [
|
|
2760
|
+
case 'WhileStatement':
|
|
2761
|
+
<span class="cstat-no" title="statement not covered" > logicItems = [state.test, ...state.body];</span>
|
|
1911
2762
|
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
1912
|
-
|
|
1913
|
-
logicItems =
|
|
2763
|
+
case 'CallLogic':
|
|
2764
|
+
<span class="cstat-no" title="statement not covered" > logicItems = state.arguments?.map(<span class="fstat-no" title="function not covered" >(i</span>tem: Argument) => <span class="cstat-no" title="statement not covered" >item.expression)</span>;</span>
|
|
2765
|
+
<span class="cstat-no" title="statement not covered" > getLogic(state.calleewholeKey, app, diffLogicList);</span>
|
|
1914
2766
|
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
1915
|
-
|
|
1916
|
-
logicItems =
|
|
2767
|
+
case 'CallFunction':
|
|
2768
|
+
<span class="cstat-no" title="statement not covered" > logicItems = state.arguments?.map(<span class="fstat-no" title="function not covered" >(i</span>tem: Argument) => <span class="cstat-no" title="statement not covered" >item.expression)</span>;</span>
|
|
1917
2769
|
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
1918
|
-
|
|
1919
|
-
logicItems = state.
|
|
2770
|
+
case 'CallInterface':
|
|
2771
|
+
<span class="cstat-no" title="statement not covered" > logicItems = state.arguments?.map(<span class="fstat-no" title="function not covered" >(i</span>tem: Argument) => <span class="cstat-no" title="statement not covered" >item.expression)</span>;</span>
|
|
1920
2772
|
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
1921
|
-
|
|
1922
|
-
logicItems = [state.
|
|
2773
|
+
case 'ExternalDestination':
|
|
2774
|
+
<span class="cstat-no" title="statement not covered" > logicItems = [state.anchor, state.link];</span>
|
|
1923
2775
|
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
1924
|
-
|
|
1925
|
-
logicItems = [state.
|
|
1926
|
-
<span class="cstat-no" title="statement not covered" > break;<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" ></span></span></span>
|
|
1927
|
-
ca<span class="cstat-no" title="statement not covered" >se 'CallLogic':</span>
|
|
1928
|
-
<span class="cstat-no" title="statement not covered" > logicIt</span>ems = state.arguments?.map((item: Argument) => item.expression);
|
|
1929
|
-
getLogic(state.calleewholeKey, app, diffLogicList);
|
|
1930
|
-
<span class="cstat-no" title="statement not covered" > break;<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" ></span></span></span>
|
|
1931
|
-
ca<span class="cstat-no" title="statement not covered" >se 'Cal</span>lFunction':
|
|
1932
|
-
logicItems = state.arguments?.map((item: Argument) => item.expression);
|
|
1933
|
-
<span class="cstat-no" title="statement not covered" > break;<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" ></span></span></span>
|
|
1934
|
-
ca<span class="cstat-no" title="statement not covered" >se 'Cal</span>lInterface':
|
|
1935
|
-
logicItems = state.arguments?.map((item: Argument) => item.expression);
|
|
2776
|
+
case 'BatchAssignment':
|
|
2777
|
+
<span class="cstat-no" title="statement not covered" > logicItems = [state.left?.expression, ...state.left?.members, ...state.rights.map(<span class="fstat-no" title="function not covered" >(i</span>tem: SelectMembers) => <span class="cstat-no" title="statement not covered" >[item?.expression, ...item?.members])</span>.flat(1)];</span>
|
|
1936
2778
|
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
1937
|
-
|
|
1938
|
-
logicItems = [state.
|
|
1939
|
-
<span class="cstat-no" title="statement not covered" > break;<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" ></span></span></span>
|
|
1940
|
-
ca<span class="cstat-no" title="statement not covered" >se 'Bat</span>chAssignment':
|
|
1941
|
-
logicItems = [state.left?.expression, ...state.left?.members, ...state.rights.map((item: SelectMembers) => [item?.expression, ...item?.members]).flat(1)];
|
|
2779
|
+
case 'MemberExpression':
|
|
2780
|
+
<span class="cstat-no" title="statement not covered" > logicItems = [state.object, state.property];</span>
|
|
1942
2781
|
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
1943
|
-
|
|
1944
|
-
logicItems = [state.
|
|
2782
|
+
case 'StringInterpolation':
|
|
2783
|
+
<span class="cstat-no" title="statement not covered" > logicItems = [...state.expressions];</span>
|
|
1945
2784
|
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
1946
|
-
|
|
1947
|
-
logicItems = [...state.
|
|
1948
|
-
<span class="cstat-no" title="statement not covered" > break;<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" ></span></span></span>
|
|
1949
|
-
ca<span class="cstat-no" title="statement not covered" >se 'New</span>Composite':
|
|
1950
|
-
logicItems = [...state.rights.map((item: SelectMembers) => item.expression)];
|
|
2785
|
+
case 'NewComposite':
|
|
2786
|
+
<span class="cstat-no" title="statement not covered" > logicItems = [...state.rights.map(<span class="fstat-no" title="function not covered" >(i</span>tem: SelectMembers) => <span class="cstat-no" title="statement not covered" >item.expression)</span>];</span>
|
|
1951
2787
|
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
1952
|
-
|
|
1953
|
-
logicItems = [...state.items]
|
|
2788
|
+
case 'NewList':
|
|
2789
|
+
<span class="cstat-no" title="statement not covered" > logicItems = [...state.items];</span>
|
|
1954
2790
|
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
1955
2791
|
default:
|
|
1956
|
-
break
|
|
1957
|
-
|
|
2792
|
+
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
2793
|
+
}
|
|
1958
2794
|
|
|
1959
|
-
return logicItems.filter((
|
|
2795
|
+
<span class="cstat-no" title="statement not covered" > return logicItems.filter(<span class="fstat-no" title="function not covered" >(i</span>tem: LogicItem) => <span class="cstat-no" title="statement not covered" >!!item)</span>;</span>
|
|
1960
2796
|
}
|
|
1961
|
-
|
|
1962
|
-
|
|
1963
|
-
|
|
1964
|
-
if (!target.app.miniEnable) {
|
|
1965
|
-
return false
|
|
1966
|
-
}
|
|
1967
|
-
|
|
1968
|
-
|
|
1969
|
-
if (len > 2) {
|
|
2797
|
+
|
|
2798
|
+
/* 小程序影响的服务端发布 */
|
|
2799
|
+
function <span class="fstat-no" title="function not covered" >getMiniAppChange(</span>target: any, obj: any, action: string) {
|
|
2800
|
+
<span class="cstat-no" title="statement not covered" > if (!target.app.miniEnable) {</span>
|
|
2801
|
+
<span class="cstat-no" title="statement not covered" > return false;</span>
|
|
2802
|
+
}
|
|
2803
|
+
/* 分端以后需要改 */
|
|
2804
|
+
const len = <span class="cstat-no" title="statement not covered" >target.nodePath?.split('.').length;</span>
|
|
2805
|
+
<span class="cstat-no" title="statement not covered" > if (len > 2) {</span>
|
|
1970
2806
|
<span class="cstat-no" title="statement not covered" > return false;</span>
|
|
1971
|
-
}
|
|
1972
|
-
if (action === 'delete') {
|
|
2807
|
+
}
|
|
2808
|
+
<span class="cstat-no" title="statement not covered" > if (action === 'delete') {</span>
|
|
1973
2809
|
<span class="cstat-no" title="statement not covered" > return true;</span>
|
|
1974
|
-
}
|
|
1975
|
-
if ('name' in obj || 'title' in obj) {
|
|
1976
|
-
return true
|
|
2810
|
+
} else {
|
|
2811
|
+
<span class="cstat-no" title="statement not covered" > if ('name' in obj || 'title' in obj) {</span>
|
|
2812
|
+
<span class="cstat-no" title="statement not covered" > return true;</span>
|
|
1977
2813
|
}
|
|
1978
2814
|
}
|
|
1979
2815
|
}
|
|
1980
2816
|
|
|
1981
2817
|
let aiExecuted = 0;
|
|
1982
|
-
let sessionPath = ''
|
|
1983
|
-
// AI
|
|
1984
|
-
|
|
1985
|
-
|
|
1986
|
-
|
|
1987
|
-
app.emit('logic:accepted', { ...actionItem, sessionPath })
|
|
2818
|
+
let sessionPath = '';
|
|
2819
|
+
// AI 生成内容是否被采纳
|
|
2820
|
+
const handleAIPoint = <span class="fstat-no" title="function not covered" >(a</span>pp: any, actionItem: any) => {
|
|
2821
|
+
const { actionMsg, action } = <span class="cstat-no" title="statement not covered" >actionItem || {};</span>
|
|
2822
|
+
<span class="cstat-no" title="statement not covered" > if (aiExecuted > 0) {</span>
|
|
2823
|
+
<span class="cstat-no" title="statement not covered" > app.emit('logic:accepted', { ...actionItem, sessionPath });</span>
|
|
1988
2824
|
<span class="cstat-no" title="statement not covered" > aiExecuted -= 1;</span>
|
|
1989
|
-
}
|
|
1990
|
-
if (actionMsg.includes('自然语言生成代码') && !action) {
|
|
2825
|
+
}
|
|
2826
|
+
<span class="cstat-no" title="statement not covered" > if (actionMsg.includes('自然语言生成代码') && !action) {</span>
|
|
1991
2827
|
<span class="cstat-no" title="statement not covered" > aiExecuted += 1;</span>
|
|
1992
2828
|
// eslint-disable-next-line prefer-destructuring
|
|
1993
|
-
sessionPath = actionMsg.match(/:(.*)/)[1]
|
|
2829
|
+
<span class="cstat-no" title="statement not covered" > sessionPath = actionMsg.match(/:(.*)/)[1];</span>
|
|
1994
2830
|
}
|
|
1995
2831
|
}
|
|
1996
2832
|
|
|
1997
2833
|
/**
|
|
1998
|
-
*
|
|
1999
|
-
|
|
2000
|
-
async function
|
|
2001
|
-
|
|
2002
|
-
|
|
2003
|
-
<span class="cstat-no" title="statement not covered" >
|
|
2004
|
-
|
|
2005
|
-
|
|
2006
|
-
|
|
2007
|
-
|
|
2008
|
-
|
|
2009
|
-
|
|
2010
|
-
|
|
2011
|
-
|
|
2012
|
-
|
|
2013
|
-
if (
|
|
2014
|
-
<span class="cstat-no" title="statement not covered" >
|
|
2015
|
-
|
|
2016
|
-
|
|
2017
|
-
|
|
2018
|
-
|
|
2019
|
-
|
|
2020
|
-
|
|
2021
|
-
|
|
2022
|
-
|
|
2023
|
-
|
|
2024
|
-
<span class="cstat-no" title="statement not covered" >
|
|
2025
|
-
|
|
2026
|
-
|
|
2027
|
-
|
|
2028
|
-
|
|
2029
|
-
|
|
2030
|
-
|
|
2031
|
-
<span class="cstat-no" title="statement not covered" >
|
|
2032
|
-
|
|
2033
|
-
|
|
2034
|
-
|
|
2035
|
-
|
|
2036
|
-
<span class="cstat-no" title="statement not covered" >
|
|
2037
|
-
|
|
2038
|
-
|
|
2039
|
-
|
|
2834
|
+
* 执行更新
|
|
2835
|
+
*/
|
|
2836
|
+
async function <span class="fstat-no" title="function not covered" >doAction(</span>app: any, actionItem: any) {
|
|
2837
|
+
const isOperationRecord = <span class="cstat-no" title="statement not covered" >operationRecordInfoMap.get('isOperationRecord');</span>
|
|
2838
|
+
<span class="cstat-no" title="statement not covered" > if (isOperationRecord) {</span>
|
|
2839
|
+
<span class="cstat-no" title="statement not covered" > console.log('正在进行操作栈回放操作,如需行任何Nasl操作请刷新页面');</span>
|
|
2840
|
+
<span class="cstat-no" title="statement not covered" > return;</span>
|
|
2841
|
+
}
|
|
2842
|
+
let hasFrontEnd = <span class="cstat-no" title="statement not covered" >false;</span>
|
|
2843
|
+
let hasBackEnd = <span class="cstat-no" title="statement not covered" >false;</span>
|
|
2844
|
+
const actionList: any[] = <span class="cstat-no" title="statement not covered" >[];</span>
|
|
2845
|
+
const { list, actionMsg, action } = <span class="cstat-no" title="statement not covered" >actionItem || {};</span>
|
|
2846
|
+
<span class="cstat-no" title="statement not covered" > handleAIPoint(app, actionItem);</span>
|
|
2847
|
+
const itemloop = <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >(_</span>i: LogicItem, app: any, diffArr: string[]) => {</span>
|
|
2848
|
+
const _l = <span class="cstat-no" title="statement not covered" >getStatement(_i, app, diffArr);</span>
|
|
2849
|
+
<span class="cstat-no" title="statement not covered" > if (_l.length) {</span>
|
|
2850
|
+
<span class="cstat-no" title="statement not covered" > _l.map(<span class="fstat-no" title="function not covered" >(_</span>ii: LogicItem) => <span class="cstat-no" title="statement not covered" >itemloop(_ii, app, diffArr))</span>;</span>
|
|
2851
|
+
}
|
|
2852
|
+
};
|
|
2853
|
+
const loopEle = <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >(v</span>iew: View | ViewElement, checkAuth: boolean) => {</span>
|
|
2854
|
+
<span class="cstat-no" title="statement not covered" > if (view instanceof View) {</span>
|
|
2855
|
+
<span class="cstat-no" title="statement not covered" > view?.elements?.forEach(<span class="fstat-no" title="function not covered" >(i</span>tem) => <span class="cstat-no" title="statement not covered" >loopEle(item, checkAuth))</span>;</span>
|
|
2856
|
+
}
|
|
2857
|
+
<span class="cstat-no" title="statement not covered" > view?.children?.forEach(<span class="fstat-no" title="function not covered" >(i</span>tem) => <span class="cstat-no" title="statement not covered" >loopEle(item, checkAuth))</span>;</span>
|
|
2858
|
+
<span class="cstat-no" title="statement not covered" > if (view instanceof ViewElement) {</span>
|
|
2859
|
+
<span class="cstat-no" title="statement not covered" > if (view.bindEvents.length) {</span>
|
|
2860
|
+
const diffArr: string[] = <span class="cstat-no" title="statement not covered" >[];</span>
|
|
2861
|
+
<span class="cstat-no" title="statement not covered" > view.bindEvents.forEach(<span class="fstat-no" title="function not covered" >(b</span>indEvent) => {</span>
|
|
2862
|
+
<span class="cstat-no" title="statement not covered" > bindEvent.logics.forEach(<span class="fstat-no" title="function not covered" >(l</span>ogic) => {</span>
|
|
2863
|
+
<span class="cstat-no" title="statement not covered" > logic.body.forEach(<span class="fstat-no" title="function not covered" >(l</span>ogicItem) => <span class="cstat-no" title="statement not covered" >itemloop(logicItem, app, diffArr))</span>;</span>
|
|
2864
|
+
});
|
|
2865
|
+
});
|
|
2866
|
+
const result = <span class="cstat-no" title="statement not covered" >diffArr.filter(<span class="fstat-no" title="function not covered" >(i</span>tem) => <span class="cstat-no" title="statement not covered" >item.startsWith('app') || item.startsWith('extensions'))</span>;</span>
|
|
2867
|
+
<span class="cstat-no" title="statement not covered" > if (result.length) {</span>
|
|
2868
|
+
<span class="cstat-no" title="statement not covered" > hasBackEnd = true;</span>
|
|
2869
|
+
}
|
|
2870
|
+
}
|
|
2871
|
+
<span class="cstat-no" title="statement not covered" > if (view.tag === 'u-uploader' || view.tag === 'van-uploader') {</span>
|
|
2872
|
+
const bute = <span class="cstat-no" title="statement not covered" >view?.bindAttrs.find(<span class="fstat-no" title="function not covered" >(i</span>tem) => <span class="cstat-no" title="statement not covered" >item.name === 'url')</span>;</span>
|
|
2873
|
+
const needUpdateBackEnd = <span class="cstat-no" title="statement not covered" >bute?.value?.endsWith('/import') || bute?.value?.includes('/upload/');</span>
|
|
2874
|
+
<span class="cstat-no" title="statement not covered" > if (checkAuth) {</span>
|
|
2875
|
+
<span class="cstat-no" title="statement not covered" > if (needUpdateBackEnd && !view.view.parentAuth) {</span>
|
|
2876
|
+
<span class="cstat-no" title="statement not covered" > hasBackEnd = true;</span>
|
|
2877
|
+
}
|
|
2878
|
+
} else {
|
|
2879
|
+
<span class="cstat-no" title="statement not covered" > if (needUpdateBackEnd) {</span>
|
|
2880
|
+
<span class="cstat-no" title="statement not covered" > hasBackEnd = true;</span>
|
|
2040
2881
|
}
|
|
2041
2882
|
}
|
|
2042
2883
|
}
|
|
2043
2884
|
}
|
|
2044
|
-
}
|
|
2045
|
-
|
|
2046
|
-
const loopEleAuth =
|
|
2047
|
-
|
|
2048
|
-
const bindDirective = item?.bindDirectives?.find(
|
|
2049
|
-
<span class="
|
|
2050
|
-
)
|
|
2051
|
-
if (bindDirective) {
|
|
2885
|
+
};
|
|
2886
|
+
|
|
2887
|
+
const loopEleAuth = <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >(v</span>iewElement: ViewElement) => {</span>
|
|
2888
|
+
<span class="cstat-no" title="statement not covered" > viewElement?.children?.forEach(<span class="fstat-no" title="function not covered" >(i</span>tem: ViewElement) => {</span>
|
|
2889
|
+
const bindDirective = <span class="cstat-no" title="statement not covered" >item?.bindDirectives?.find(</span>
|
|
2890
|
+
<span class="fstat-no" title="function not covered" > (i</span>tem: BindDirective) => <span class="cstat-no" title="statement not covered" >item.name === 'auth'</span>
|
|
2891
|
+
)
|
|
2892
|
+
<span class="cstat-no" title="statement not covered" > if (bindDirective) {</span>
|
|
2052
2893
|
<span class="cstat-no" title="statement not covered" > hasBackEnd = true</span>
|
|
2053
2894
|
}
|
|
2054
|
-
loopEleAuth(item)
|
|
2055
|
-
|
|
2056
|
-
}
|
|
2057
|
-
|
|
2058
|
-
|
|
2059
|
-
list.forEach(
|
|
2060
|
-
const
|
|
2061
|
-
|
|
2062
|
-
|
|
2063
|
-
if (['backend', 'overriddenLogics', 'dataSources', 'processes', 'roles', 'logics', 'enums', 'structures', 'interfaces', 'interfaceDependencies', 'configuration', 'dependencies', 'authLogics', 'authLogicsForCallInterface', 'triggerLaunchers', 'connections'].some((
|
|
2895
|
+
<span class="cstat-no" title="statement not covered" > loopEleAuth(item)</span>
|
|
2896
|
+
})
|
|
2897
|
+
}
|
|
2898
|
+
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
2899
|
+
<span class="cstat-no" title="statement not covered" > if (Array.isArray(list)) {</span>
|
|
2900
|
+
<span class="cstat-no" title="statement not covered" > list.forEach(<span class="fstat-no" title="function not covered" >(e</span>vent) => {</span>
|
|
2901
|
+
const emitTarget = <span class="cstat-no" title="statement not covered" >event?.originEvent?.target as SynatxNode;</span>
|
|
2902
|
+
const _path: string = <span class="cstat-no" title="statement not covered" >event.originEvent.path;</span>
|
|
2903
|
+
const _root = <span class="cstat-no" title="statement not covered" >_path.split('.')?.[1] || '';</span>
|
|
2904
|
+
<span class="cstat-no" title="statement not covered" > if (['backend', 'overriddenLogics', 'dataSources', 'processes', 'roles', 'logics', 'enums', 'structures', 'interfaces', 'interfaceDependencies', 'configuration', 'dependencies', 'authLogics', 'authLogicsForCallInterface', 'triggerLaunchers', 'connections'].some(<span class="fstat-no" title="function not covered" >(i</span>tem) => <span class="cstat-no" title="statement not covered" >_root.startsWith(item))</span>) {</span>
|
|
2064
2905
|
<span class="cstat-no" title="statement not covered" > hasBackEnd = true;</span>
|
|
2065
|
-
}
|
|
2066
|
-
|
|
2067
|
-
|
|
2068
|
-
|
|
2069
|
-
hasBackEnd = true
|
|
2070
|
-
hasFrontEnd = true
|
|
2071
|
-
|
|
2072
|
-
}
|
|
2073
|
-
if (emitTarget.concept === 'ValidationRule') {
|
|
2074
|
-
if (
|
|
2906
|
+
}
|
|
2907
|
+
<span class="cstat-no" title="statement not covered" > if (emitTarget) {</span>
|
|
2908
|
+
<span class="cstat-no" title="statement not covered" > if (emitTarget.concept === 'App') {</span>
|
|
2909
|
+
<span class="cstat-no" title="statement not covered" > if (event?.object?.preferenceMap || event?.originEvent?.object?.preferenceMap) {</span>
|
|
2910
|
+
<span class="cstat-no" title="statement not covered" > hasBackEnd = true</span>
|
|
2911
|
+
<span class="cstat-no" title="statement not covered" > hasFrontEnd = true</span>
|
|
2912
|
+
}
|
|
2913
|
+
}
|
|
2914
|
+
<span class="cstat-no" title="statement not covered" > if (emitTarget.concept === 'ValidationRule') {</span>
|
|
2915
|
+
<span class="cstat-no" title="statement not covered" > if (</span>
|
|
2075
2916
|
event?.object?.enableServerValidation ||
|
|
2076
|
-
|
|
2077
|
-
)
|
|
2078
|
-
hasBackEnd = true
|
|
2079
|
-
hasFrontEnd = true
|
|
2080
|
-
|
|
2081
|
-
}
|
|
2082
|
-
|
|
2083
|
-
|
|
2084
|
-
|
|
2085
|
-
emitTarget.body.forEach((
|
|
2086
|
-
itemloop(it, app, diffArr)
|
|
2087
|
-
})
|
|
2088
|
-
|
|
2089
|
-
|
|
2090
|
-
if (result.length) {
|
|
2091
|
-
hasBackEnd = true
|
|
2092
|
-
|
|
2093
|
-
}
|
|
2094
|
-
if ('view' in emitTarget && emitTarget.view) {
|
|
2917
|
+
event?.originEvent?.object?.enableServerValidation
|
|
2918
|
+
) {
|
|
2919
|
+
<span class="cstat-no" title="statement not covered" > hasBackEnd = true</span>
|
|
2920
|
+
<span class="cstat-no" title="statement not covered" > hasFrontEnd = true</span>
|
|
2921
|
+
}
|
|
2922
|
+
}
|
|
2923
|
+
<span class="cstat-no" title="statement not covered" > if (emitTarget.concept === 'Logic') {</span>
|
|
2924
|
+
const diffArr: string[] = <span class="cstat-no" title="statement not covered" >[];</span>
|
|
2925
|
+
<span class="cstat-no" title="statement not covered" > if (emitTarget.body.length > 2) {</span>
|
|
2926
|
+
<span class="cstat-no" title="statement not covered" > emitTarget.body.forEach(<span class="fstat-no" title="function not covered" >(i</span>t: LogicItem) => {</span>
|
|
2927
|
+
<span class="cstat-no" title="statement not covered" > itemloop(it, app, diffArr);</span>
|
|
2928
|
+
});
|
|
2929
|
+
}
|
|
2930
|
+
const result = <span class="cstat-no" title="statement not covered" >diffArr.filter(<span class="fstat-no" title="function not covered" >(i</span>tem) => <span class="cstat-no" title="statement not covered" >item.startsWith('app') || item.startsWith('extensions'))</span>;</span>
|
|
2931
|
+
<span class="cstat-no" title="statement not covered" > if (result.length) {</span>
|
|
2932
|
+
<span class="cstat-no" title="statement not covered" > hasBackEnd = true;</span>
|
|
2933
|
+
}
|
|
2934
|
+
}
|
|
2935
|
+
<span class="cstat-no" title="statement not covered" > if ('view' in emitTarget && emitTarget.view) {</span>
|
|
2095
2936
|
<span class="cstat-no" title="statement not covered" > hasFrontEnd = true</span>
|
|
2096
|
-
}
|
|
2097
|
-
|
|
2937
|
+
}
|
|
2938
|
+
<span class="cstat-no" title="statement not covered" > if (emitTarget.concept === 'BindDirective') {</span>
|
|
2098
2939
|
const isDelete = <span class="cstat-no" title="statement not covered" >event?.originEvent?.action === 'delete'</span>
|
|
2099
|
-
|
|
2100
|
-
|
|
2101
|
-
if (isAuto) {
|
|
2102
|
-
hasBackEnd = true
|
|
2103
|
-
|
|
2104
|
-
}
|
|
2105
|
-
if (event?.originEvent?.object?.name === 'auth') {
|
|
2106
|
-
hasBackEnd = true
|
|
2107
|
-
|
|
2108
|
-
|
|
2109
|
-
|
|
2110
|
-
if (getMiniAppChange(emitTarget, event?.originEvent?.object, event?.originEvent?.action)) {
|
|
2111
|
-
|
|
2112
|
-
}
|
|
2113
|
-
|
|
2114
|
-
const
|
|
2115
|
-
<span class="cstat-no" title="statement not covered" >
|
|
2116
|
-
|
|
2117
|
-
|
|
2118
|
-
|
|
2940
|
+
<span class="cstat-no" title="statement not covered" > if (isDelete) {</span>
|
|
2941
|
+
const isAuto = <span class="cstat-no" title="statement not covered" >~event?.originEvent?.path?.indexOf('name=auth')</span>
|
|
2942
|
+
<span class="cstat-no" title="statement not covered" > if (isAuto) {</span>
|
|
2943
|
+
<span class="cstat-no" title="statement not covered" > hasBackEnd = true</span>
|
|
2944
|
+
}
|
|
2945
|
+
}
|
|
2946
|
+
<span class="cstat-no" title="statement not covered" > if (event?.originEvent?.object?.name === 'auth') {</span>
|
|
2947
|
+
<span class="cstat-no" title="statement not covered" > hasBackEnd = true</span>
|
|
2948
|
+
}
|
|
2949
|
+
}
|
|
2950
|
+
<span class="cstat-no" title="statement not covered" > if (emitTarget.concept === 'View') {</span>
|
|
2951
|
+
<span class="cstat-no" title="statement not covered" > if (getMiniAppChange(emitTarget, event?.originEvent?.object, event?.originEvent?.action)) {</span>
|
|
2952
|
+
<span class="cstat-no" title="statement not covered" > hasBackEnd = true;</span>
|
|
2953
|
+
}
|
|
2954
|
+
|
|
2955
|
+
const isDelete = <span class="cstat-no" title="statement not covered" >event?.originEvent?.action === 'delete';</span>
|
|
2956
|
+
const isAuthView = <span class="cstat-no" title="statement not covered" >emitTarget.auth && event?.originEvent?.object?.name;</span>
|
|
2957
|
+
const isUpdateAuth = <span class="cstat-no" title="statement not covered" >event?.originEvent?.action === 'update' && "auth" in (event?.originEvent?.object || {});</span>
|
|
2958
|
+
const isUpdateAuthDes = <span class="cstat-no" title="statement not covered" >event?.originEvent?.action === 'update' && "authDescription" in (event?.originEvent?.object || {});</span>
|
|
2959
|
+
const isUpdateBindRoles = <span class="cstat-no" title="statement not covered" >event?.originEvent?.action === 'update' && event?.originEvent?.object && event?.originEvent?.object?.bindRoles;</span>
|
|
2960
|
+
<span class="cstat-no" title="statement not covered" > if (isDelete || isUpdateAuth || isUpdateBindRoles || isAuthView||isUpdateAuthDes) {</span>
|
|
2961
|
+
<span class="cstat-no" title="statement not covered" > hasBackEnd = true;</span>
|
|
2119
2962
|
// const app = emitTarget.app;
|
|
2120
2963
|
// const diffArr: string[] = [];
|
|
2121
2964
|
// emitTarget.logics.forEach((logic: Logic) => {
|
|
@@ -2130,76 +2973,79 @@ async function doAc<span class="cstat-no" title="statement not covered" >tion(a<
|
|
|
2130
2973
|
// hasBackEnd = true;
|
|
2131
2974
|
// }
|
|
2132
2975
|
// emitTarget.children.forEach((item: View | ViewElement) => loopEle(item, isDelete));
|
|
2133
|
-
|
|
2976
|
+
// emitTarget.elements.forEach((item: View | ViewElement) => loopEle(item, isDelete));
|
|
2134
2977
|
}
|
|
2135
2978
|
<span class="cstat-no" title="statement not covered" > hasFrontEnd = true;</span>
|
|
2136
|
-
}
|
|
2137
|
-
|
|
2138
|
-
|
|
2139
|
-
|
|
2140
|
-
|
|
2141
|
-
|
|
2142
|
-
|
|
2143
|
-
|
|
2144
|
-
|
|
2145
|
-
|
|
2146
|
-
|
|
2147
|
-
|
|
2148
|
-
|
|
2149
|
-
|
|
2150
|
-
|
|
2979
|
+
}
|
|
2980
|
+
<span class="cstat-no" title="statement not covered" > if (emitTarget.concept === 'ViewElement') {</span>
|
|
2981
|
+
<span class="cstat-no" title="statement not covered" > if ("authDescription" in (event?.originEvent?.object || {})) {</span>
|
|
2982
|
+
<span class="cstat-no" title="statement not covered" > hasBackEnd = true;</span>
|
|
2983
|
+
} ;
|
|
2984
|
+
<span class="cstat-no" title="statement not covered" > if (event?.originEvent?.object?.name) {</span>
|
|
2985
|
+
const bindDirective = <span class="cstat-no" title="statement not covered" >emitTarget.bindDirectives.find(</span>
|
|
2986
|
+
<span class="fstat-no" title="function not covered" > (i</span>tem: BindDirective) => <span class="cstat-no" title="statement not covered" >item.name === 'auth'</span>
|
|
2987
|
+
)
|
|
2988
|
+
<span class="cstat-no" title="statement not covered" > if (bindDirective) {</span>
|
|
2989
|
+
<span class="cstat-no" title="statement not covered" > hasBackEnd = true;</span>
|
|
2990
|
+
}
|
|
2991
|
+
}
|
|
2992
|
+
<span class="cstat-no" title="statement not covered" > if (event?.originEvent?.action === 'delete') {</span>
|
|
2993
|
+
const bindDirective = <span class="cstat-no" title="statement not covered" >emitTarget?.bindDirectives?.find(</span>
|
|
2994
|
+
<span class="fstat-no" title="function not covered" > (i</span>tem: BindDirective) => <span class="cstat-no" title="statement not covered" >item.name === 'auth'</span>
|
|
2995
|
+
)
|
|
2996
|
+
<span class="cstat-no" title="statement not covered" > if (bindDirective) {</span>
|
|
2151
2997
|
<span class="cstat-no" title="statement not covered" > hasBackEnd = true</span>
|
|
2152
2998
|
}
|
|
2153
2999
|
<span class="cstat-no" title="statement not covered" > loopEleAuth(emitTarget)</span>
|
|
2154
|
-
}
|
|
2155
|
-
|
|
2156
|
-
if (event?.originEvent?.object && event?.originEvent?.object?.bindRoles) {
|
|
2157
|
-
hasBackEnd = true
|
|
2158
|
-
|
|
3000
|
+
}
|
|
3001
|
+
<span class="cstat-no" title="statement not covered" > if (event?.originEvent?.action !== 'create') {</span>
|
|
3002
|
+
<span class="cstat-no" title="statement not covered" > if (event?.originEvent?.object && event?.originEvent?.object?.bindRoles) {</span>
|
|
3003
|
+
<span class="cstat-no" title="statement not covered" > hasBackEnd = true</span>
|
|
3004
|
+
}
|
|
2159
3005
|
}
|
|
2160
3006
|
<span class="cstat-no" title="statement not covered" > loopEle(emitTarget, true)</span>
|
|
2161
3007
|
}
|
|
2162
|
-
|
|
2163
|
-
|
|
3008
|
+
<span class="cstat-no" title="statement not covered" > if (emitTarget.concept === 'BindAttribute' && emitTarget.name === 'url') {</span>
|
|
3009
|
+
const needUpdateBackEnd =
|
|
2164
3010
|
<span class="cstat-no" title="statement not covered" > emitTarget?.value?.endsWith('/import') || emitTarget?.value?.includes('/upload/')</span>
|
|
2165
|
-
if (!emitTarget.view.parentAuth && needUpdateBackEnd) {
|
|
2166
|
-
hasBackEnd = true
|
|
2167
|
-
|
|
2168
|
-
}
|
|
2169
|
-
|
|
2170
|
-
const arrlist:
|
|
2171
|
-
getLogic((emitTarget as CallLogic).calleeKey, emitTarget.app, arrlist)
|
|
2172
|
-
<span class="cstat-no" title="statement not covered" >
|
|
2173
|
-
|
|
2174
|
-
if (result.length) {
|
|
2175
|
-
hasBackEnd = true
|
|
3011
|
+
<span class="cstat-no" title="statement not covered" > if (!emitTarget.view.parentAuth && needUpdateBackEnd) {</span>
|
|
3012
|
+
<span class="cstat-no" title="statement not covered" > hasBackEnd = true</span>
|
|
3013
|
+
}
|
|
3014
|
+
}
|
|
3015
|
+
<span class="cstat-no" title="statement not covered" > if (emitTarget.concept === 'CallLogic') {</span>
|
|
3016
|
+
const arrlist: string[] = <span class="cstat-no" title="statement not covered" >[];</span>
|
|
3017
|
+
<span class="cstat-no" title="statement not covered" > getLogic((emitTarget as CallLogic).calleeKey, emitTarget.app, arrlist);</span>
|
|
3018
|
+
const result = <span class="cstat-no" title="statement not covered" >arrlist.filter(<span class="fstat-no" title="function not covered" >(i</span>tem) => <span class="cstat-no" title="statement not covered" >item.startsWith('app') || item.startsWith('extensions'))</span>;</span>
|
|
3019
|
+
// console.log(result, 'CallLogic');
|
|
3020
|
+
<span class="cstat-no" title="statement not covered" > if (result.length) {</span>
|
|
3021
|
+
<span class="cstat-no" title="statement not covered" > hasBackEnd = true;</span>
|
|
2176
3022
|
}
|
|
2177
|
-
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2178
|
-
//<span class="cstat-no" title="statement not covered" > 更新端时需要出发后端更新</span>
|
|
2179
|
-
if (emitTarget.concept === 'Frontend') {
|
|
2180
|
-
hasBackEnd = true;
|
|
2181
3023
|
}
|
|
2182
|
-
|
|
2183
|
-
<span class="cstat-no" title="statement not covered"
|
|
2184
|
-
|
|
2185
|
-
|
|
2186
|
-
|
|
2187
|
-
|
|
3024
|
+
// 更新端时需要出发后端更新
|
|
3025
|
+
<span class="cstat-no" title="statement not covered" > if (emitTarget.concept === 'Frontend') {</span>
|
|
3026
|
+
<span class="cstat-no" title="statement not covered" > hasBackEnd = true;</span>
|
|
3027
|
+
}
|
|
3028
|
+
}
|
|
3029
|
+
|
|
3030
|
+
<span class="cstat-no" title="statement not covered" > event.eventList.forEach(<span class="fstat-no" title="function not covered" >({</span> action, path, object: objItem }: { action: string; path: string; object: any }) => {</span>
|
|
3031
|
+
<span class="cstat-no" title="statement not covered" > if (Array.isArray(objItem)) {</span>
|
|
3032
|
+
<span class="cstat-no" title="statement not covered" > if (action === 'update') {</span>
|
|
3033
|
+
<span class="cstat-no" title="statement not covered" > actionList.push({</span>
|
|
2188
3034
|
action,
|
|
2189
3035
|
path,
|
|
2190
3036
|
node: objItem[0],
|
|
2191
|
-
|
|
2192
|
-
}
|
|
2193
|
-
objItem.forEach((
|
|
2194
|
-
actionList.push({
|
|
3037
|
+
});
|
|
3038
|
+
} else {
|
|
3039
|
+
<span class="cstat-no" title="statement not covered" > objItem.forEach(<span class="fstat-no" title="function not covered" >(i</span>tem, index) => {</span>
|
|
3040
|
+
<span class="cstat-no" title="statement not covered" > actionList.push({</span>
|
|
2195
3041
|
action,
|
|
2196
3042
|
path,
|
|
2197
3043
|
node: item,
|
|
2198
3044
|
});
|
|
2199
3045
|
});
|
|
2200
|
-
|
|
3046
|
+
}
|
|
2201
3047
|
} else {
|
|
2202
|
-
actionList.push({
|
|
3048
|
+
<span class="cstat-no" title="statement not covered" > actionList.push({</span>
|
|
2203
3049
|
action,
|
|
2204
3050
|
path,
|
|
2205
3051
|
object: objItem,
|
|
@@ -2207,46 +3053,66 @@ async function doAc<span class="cstat-no" title="statement not covered" >tion(a<
|
|
|
2207
3053
|
}
|
|
2208
3054
|
});
|
|
2209
3055
|
});
|
|
2210
|
-
|
|
2211
|
-
}
|
|
2212
|
-
console.log(error)
|
|
2213
|
-
taskQueue.refreshNasl(app, {
|
|
3056
|
+
}
|
|
3057
|
+
} catch (error) {
|
|
3058
|
+
<span class="cstat-no" title="statement not covered" > console.log(error);</span>
|
|
3059
|
+
<span class="cstat-no" title="statement not covered" > taskQueue.refreshNasl(app, {</span>
|
|
2214
3060
|
errorInfo: {
|
|
2215
3061
|
message: error?.message,
|
|
2216
3062
|
stack: error?.stack,
|
|
2217
|
-
|
|
3063
|
+
},
|
|
2218
3064
|
});
|
|
2219
|
-
return
|
|
2220
|
-
}
|
|
3065
|
+
<span class="cstat-no" title="statement not covered" > return;</span>
|
|
3066
|
+
}
|
|
2221
3067
|
|
|
2222
|
-
const
|
|
2223
|
-
|
|
2224
|
-
|
|
3068
|
+
const uuid = <span class="cstat-no" title="statement not covered" >uuidv4().replace(/-/g, '');</span>
|
|
3069
|
+
const instructList = <span class="cstat-no" title="statement not covered" >[{</span>
|
|
3070
|
+
uuid,
|
|
3071
|
+
actions: actionList,
|
|
2225
3072
|
}];
|
|
2226
|
-
<span class="cstat-no" title="statement not covered" >
|
|
2227
|
-
|
|
2228
|
-
|
|
2229
|
-
|
|
3073
|
+
const operation: Operation = <span class="cstat-no" title="statement not covered" >{</span>
|
|
3074
|
+
type: 'doAction',
|
|
3075
|
+
uuid,
|
|
3076
|
+
actionItem: {
|
|
3077
|
+
actionMsg,
|
|
3078
|
+
list: list.map(<span class="fstat-no" title="function not covered" >(i</span>tem: any) => {
|
|
3079
|
+
const { path, action, object, oldObject, parentKey, index } = <span class="cstat-no" title="statement not covered" >item?.originEvent || {};</span>
|
|
3080
|
+
<span class="cstat-no" title="statement not covered" > return {</span>
|
|
3081
|
+
path,
|
|
3082
|
+
action,
|
|
3083
|
+
parentKey,
|
|
3084
|
+
index,
|
|
3085
|
+
object: object?.toJSON?.() || object,
|
|
3086
|
+
oldObject: oldObject?.toJSON?.() || oldObject,
|
|
3087
|
+
}
|
|
3088
|
+
}),
|
|
3089
|
+
},
|
|
3090
|
+
};
|
|
3091
|
+
<span class="cstat-no" title="statement not covered" > saveNasl({ app, hasFrontEnd, hasBackEnd, instructList, operationList: [operation] });</span>
|
|
3092
|
+
// 进行nasl操作后需要将Index重置
|
|
3093
|
+
<span class="cstat-no" title="statement not covered" > operationRecordInfoMap.set('operationRecordIndex', null);</span>
|
|
3094
|
+
<span class="cstat-no" title="statement not covered" > if (!app._historying) {</span>
|
|
3095
|
+
<span class="cstat-no" title="statement not covered" > if (app._historyIndex !== app._historyList.length) {</span>
|
|
2230
3096
|
<span class="cstat-no" title="statement not covered" > app._historyList = app._historyList.splice(0, app._historyIndex);</span>
|
|
2231
3097
|
}
|
|
2232
|
-
|
|
3098
|
+
<span class="cstat-no" title="statement not covered" > app._historyList.push({</span>
|
|
2233
3099
|
actionMsg,
|
|
2234
|
-
<span class="
|
|
3100
|
+
list: list.map(<span class="fstat-no" title="function not covered" >(i</span>tem: any) => <span class="cstat-no" title="statement not covered" >item?.originEvent)</span>,
|
|
2235
3101
|
});
|
|
2236
|
-
|
|
3102
|
+
<span class="cstat-no" title="statement not covered" > app._historyIndex = app._historyList.length;</span>
|
|
2237
3103
|
} else {
|
|
2238
|
-
const actionMap = {
|
|
3104
|
+
const actionMap = <span class="cstat-no" title="statement not covered" >{</span>
|
|
2239
3105
|
undo: '已撤销操作:',
|
|
2240
|
-
redo: '
|
|
2241
|
-
|
|
2242
|
-
<span class="cstat-no" title="statement not covered" >
|
|
2243
|
-
|
|
2244
|
-
if (process.env.BUILD_TARGET !== 'node') {
|
|
2245
|
-
<span class="cstat-no" title="statement not covered" > require('element-plus')
|
|
3106
|
+
redo: '已重做操作:',
|
|
3107
|
+
};
|
|
3108
|
+
let msg = <span class="cstat-no" title="statement not covered" >actionMap[action as 'undo' | 'redo'];</span>
|
|
3109
|
+
<span class="cstat-no" title="statement not covered" > msg += actionMsg;</span>
|
|
3110
|
+
<span class="cstat-no" title="statement not covered" > if (process.env.BUILD_TARGET !== 'node') {</span>
|
|
3111
|
+
<span class="cstat-no" title="statement not covered" > require('element-plus').ElMessage.info(msg);</span>
|
|
2246
3112
|
}
|
|
2247
3113
|
<span class="cstat-no" title="statement not covered" > app._historying = false;</span>
|
|
2248
3114
|
}
|
|
2249
|
-
stepRecorder.initialized && stepRecorder.record(actionMsg, actionItem, actionList)
|
|
3115
|
+
<span class="cstat-no" title="statement not covered" > stepRecorder.initialized && stepRecorder.record(actionMsg, actionItem, actionList);</span>
|
|
2250
3116
|
}
|
|
2251
3117
|
|
|
2252
3118
|
type Instruct = {
|
|
@@ -2258,6 +3124,7 @@ type TaskOption = {
|
|
|
2258
3124
|
hasFrontEnd: boolean,
|
|
2259
3125
|
hasBackEnd: boolean,
|
|
2260
3126
|
instructList: Instruct[],
|
|
3127
|
+
operationList: Operation[],
|
|
2261
3128
|
};
|
|
2262
3129
|
enum TaskQueueStatus {
|
|
2263
3130
|
ExceedMaxTaskCount,
|
|
@@ -2275,141 +3142,162 @@ class TaskQueue {
|
|
|
2275
3142
|
lastQueue: TaskOption[] = []
|
|
2276
3143
|
running: Boolean = false
|
|
2277
3144
|
maxTaskCount: number = 10
|
|
2278
|
-
|
|
2279
|
-
|
|
2280
|
-
addTask(task: TaskOption) {
|
|
3145
|
+
status?: TaskQueueStatus = undefined
|
|
3146
|
+
|
|
3147
|
+
<span class="fstat-no" title="function not covered" > addTask(</span>task: TaskOption) {
|
|
2281
3148
|
<span class="cstat-no" title="statement not covered" > this.queue.push(task);</span>
|
|
2282
|
-
|
|
2283
|
-
|
|
2284
|
-
this.status = TaskQueueStatus.ExceedMaxTaskCount
|
|
2285
|
-
task.app.emit('ExceedMaxTaskCount')
|
|
2286
|
-
|
|
2287
|
-
|
|
2288
|
-
this.run()
|
|
2289
|
-
|
|
2290
|
-
|
|
2291
|
-
|
|
3149
|
+
|
|
3150
|
+
<span class="cstat-no" title="statement not covered" > if (this.queue.length >= this.maxTaskCount) {</span>
|
|
3151
|
+
<span class="cstat-no" title="statement not covered" > this.status = TaskQueueStatus.ExceedMaxTaskCount;</span>
|
|
3152
|
+
<span class="cstat-no" title="statement not covered" > task.app.emit('ExceedMaxTaskCount');</span>
|
|
3153
|
+
}
|
|
3154
|
+
|
|
3155
|
+
<span class="cstat-no" title="statement not covered" > this.run();</span>
|
|
3156
|
+
}
|
|
3157
|
+
|
|
3158
|
+
<span class="fstat-no" title="function not covered" > clear(</span>) {
|
|
2292
3159
|
<span class="cstat-no" title="statement not covered" > this.queue = [];</span>
|
|
2293
3160
|
<span class="cstat-no" title="statement not covered" > this.lastQueue = [];</span>
|
|
2294
|
-
this.status = undefined
|
|
2295
|
-
this.running = false
|
|
2296
|
-
|
|
2297
|
-
|
|
2298
|
-
|
|
3161
|
+
<span class="cstat-no" title="statement not covered" > this.status = undefined;</span>
|
|
3162
|
+
<span class="cstat-no" title="statement not covered" > this.running = false;</span>
|
|
3163
|
+
}
|
|
3164
|
+
|
|
3165
|
+
<span class="fstat-no" title="function not covered" > async </span>run(queue = <span class="branch-0 cbranch-no" title="branch not covered" >this.queue)</span> {
|
|
2299
3166
|
<span class="cstat-no" title="statement not covered" > if (this.running)</span>
|
|
2300
3167
|
<span class="cstat-no" title="statement not covered" > return;</span>
|
|
2301
|
-
if (queue.length === 0)
|
|
2302
|
-
|
|
2303
|
-
|
|
2304
|
-
const app =
|
|
2305
|
-
let hasFrontEnd =
|
|
2306
|
-
let hasBackEnd = false
|
|
2307
|
-
<span class="cstat-no" title="statement not covered" >
|
|
2308
|
-
<span class="cstat-no" title="statement not covered"
|
|
2309
|
-
|
|
3168
|
+
<span class="cstat-no" title="statement not covered" > if (queue.length === 0)</span>
|
|
3169
|
+
<span class="cstat-no" title="statement not covered" > return;</span>
|
|
3170
|
+
|
|
3171
|
+
const app = <span class="cstat-no" title="statement not covered" >queue[0].app;</span>
|
|
3172
|
+
let hasFrontEnd = <span class="cstat-no" title="statement not covered" >false;</span>
|
|
3173
|
+
let hasBackEnd = <span class="cstat-no" title="statement not covered" >false;</span>
|
|
3174
|
+
let instructList: Instruct[] = <span class="cstat-no" title="statement not covered" >[];</span>
|
|
3175
|
+
let operationList: Operation[] = <span class="cstat-no" title="statement not covered" >[];</span>
|
|
3176
|
+
|
|
3177
|
+
<span class="cstat-no" title="statement not covered" > for (const task of queue) {</span>
|
|
2310
3178
|
<span class="cstat-no" title="statement not covered" > if (task.hasFrontEnd)</span>
|
|
2311
3179
|
<span class="cstat-no" title="statement not covered" > hasFrontEnd = true;</span>
|
|
2312
3180
|
<span class="cstat-no" title="statement not covered" > if (task.hasBackEnd)</span>
|
|
2313
|
-
hasBackEnd = true
|
|
2314
|
-
instructList = instructList.concat(task.instructList)
|
|
2315
|
-
<span class="cstat-no" title="statement not covered" >
|
|
2316
|
-
|
|
2317
|
-
|
|
2318
|
-
|
|
2319
|
-
this.
|
|
2320
|
-
<span class="cstat-no" title="statement not covered" >
|
|
2321
|
-
|
|
2322
|
-
|
|
2323
|
-
|
|
2324
|
-
|
|
3181
|
+
<span class="cstat-no" title="statement not covered" > hasBackEnd = true;</span>
|
|
3182
|
+
<span class="cstat-no" title="statement not covered" > instructList = instructList.concat(task.instructList);</span>
|
|
3183
|
+
<span class="cstat-no" title="statement not covered" > operationList = operationList.concat(task.operationList);</span>
|
|
3184
|
+
}
|
|
3185
|
+
|
|
3186
|
+
<span class="cstat-no" title="statement not covered" > if (queue === this.queue) {</span>
|
|
3187
|
+
<span class="cstat-no" title="statement not covered" > this.lastQueue = [...queue];</span>
|
|
3188
|
+
<span class="cstat-no" title="statement not covered" > this.queue = [];</span>
|
|
3189
|
+
}
|
|
3190
|
+
|
|
3191
|
+
<span class="cstat-no" title="statement not covered" > this.running = true;</span>
|
|
3192
|
+
const error = <span class="cstat-no" title="statement not covered" >await _saveNasl({</span>
|
|
3193
|
+
app, hasFrontEnd, hasBackEnd, instructList, operationList
|
|
2325
3194
|
});
|
|
2326
3195
|
|
|
2327
|
-
|
|
2328
|
-
|
|
2329
|
-
|
|
2330
|
-
this.recover(app)
|
|
2331
|
-
|
|
3196
|
+
// code: 401650, 检测到当前应用拉取操作已被强制结束, 用户确认后再刷新
|
|
3197
|
+
// code: 500502 msg: '该应用已在新tab 页打开,请刷新!' 不重试或刷新
|
|
3198
|
+
<span class="cstat-no" title="statement not covered" > if (!error)</span>
|
|
3199
|
+
<span class="cstat-no" title="statement not covered" > this.recover(app);</span>
|
|
3200
|
+
else <span class="cstat-no" title="statement not covered" >if (![401650, 500502].includes(error.code)) {</span>
|
|
2332
3201
|
// 连接失败,或超时,或后端持久化异常
|
|
2333
|
-
|
|
2334
|
-
|
|
2335
|
-
this.running = false
|
|
3202
|
+
<span class="cstat-no" title="statement not covered" > if ((error.message === 'Network Error' || error.message?.includes('timeout') || error.code === 500500)</span>
|
|
3203
|
+
&& this.status !== TaskQueueStatus.Retrying) {
|
|
3204
|
+
<span class="cstat-no" title="statement not covered" > this.running = false;</span>
|
|
2336
3205
|
<span class="cstat-no" title="statement not covered" > this.retry();</span>
|
|
2337
3206
|
} else
|
|
2338
|
-
<span class="cstat-no" title="statement not covered" > this.
|
|
2339
|
-
|
|
2340
|
-
return
|
|
2341
|
-
|
|
2342
|
-
|
|
2343
|
-
<span class="cstat-no" title="statement not covered" > this.running
|
|
2344
|
-
|
|
2345
|
-
this.run()
|
|
2346
|
-
|
|
2347
|
-
|
|
2348
|
-
|
|
2349
|
-
if (this.lastQueue.length === 0)
|
|
2350
|
-
|
|
2351
|
-
|
|
2352
|
-
<span class="cstat-no" title="statement not covered" >
|
|
2353
|
-
<span class="cstat-no" title="statement not covered" > this.status =
|
|
2354
|
-
app.emit('Retrying')
|
|
2355
|
-
this.run(this.lastQueue)
|
|
2356
|
-
|
|
2357
|
-
|
|
2358
|
-
async refreshNasl(app: App, options: RefreshNaslOptions = { errorInfo: {} }) {
|
|
2359
|
-
const failedQueue = this.lastQueue.map(({ hasFrontEnd, hasBackEnd, instructList }) => ({
|
|
2360
|
-
hasFrontEnd
|
|
3207
|
+
<span class="cstat-no" title="statement not covered" > this.refreshNasl(app);</span>
|
|
3208
|
+
|
|
3209
|
+
<span class="cstat-no" title="statement not covered" > return;</span>
|
|
3210
|
+
}
|
|
3211
|
+
|
|
3212
|
+
<span class="cstat-no" title="statement not covered" > this.running = false;</span>
|
|
3213
|
+
|
|
3214
|
+
<span class="cstat-no" title="statement not covered" > this.run();</span>
|
|
3215
|
+
}
|
|
3216
|
+
|
|
3217
|
+
<span class="fstat-no" title="function not covered" > retry(</span>) {
|
|
3218
|
+
<span class="cstat-no" title="statement not covered" > if (this.lastQueue.length === 0)</span>
|
|
3219
|
+
<span class="cstat-no" title="statement not covered" > return;</span>
|
|
3220
|
+
|
|
3221
|
+
const app = <span class="cstat-no" title="statement not covered" >this.lastQueue[0].app;</span>
|
|
3222
|
+
<span class="cstat-no" title="statement not covered" > this.status = TaskQueueStatus.Retrying;</span>
|
|
3223
|
+
<span class="cstat-no" title="statement not covered" > app.emit('Retrying');</span>
|
|
3224
|
+
<span class="cstat-no" title="statement not covered" > this.run(this.lastQueue);</span>
|
|
3225
|
+
}
|
|
3226
|
+
|
|
3227
|
+
<span class="fstat-no" title="function not covered" > async </span>refreshNasl(app: App, options: RefreshNaslOptions = <span class="branch-0 cbranch-no" title="branch not covered" >{ errorInfo: {} })</span> {
|
|
3228
|
+
const failedQueue = <span class="cstat-no" title="statement not covered" >this.lastQueue.map(<span class="fstat-no" title="function not covered" >({</span> hasFrontEnd, hasBackEnd, instructList }) => (<span class="cstat-no" title="statement not covered" >{</span></span>
|
|
3229
|
+
hasFrontEnd, hasBackEnd, instructList,
|
|
2361
3230
|
}));
|
|
2362
|
-
const queue = this.queue.map(({ hasFrontEnd, hasBackEnd, instructList }) => ({
|
|
2363
|
-
|
|
3231
|
+
const queue = <span class="cstat-no" title="statement not covered" >this.queue.map(<span class="fstat-no" title="function not covered" >({</span> hasFrontEnd, hasBackEnd, instructList }) => (<span class="cstat-no" title="statement not covered" >{</span></span>
|
|
3232
|
+
hasFrontEnd, hasBackEnd, instructList,
|
|
2364
3233
|
}));
|
|
2365
|
-
await storageService.saveFrontendNasl({
|
|
3234
|
+
<span class="cstat-no" title="statement not covered" > await storageService.saveFrontendNasl({</span>
|
|
2366
3235
|
body: {
|
|
2367
3236
|
nasl: app?.toJSON(),
|
|
2368
3237
|
failedQueue,
|
|
2369
3238
|
queue,
|
|
2370
|
-
|
|
2371
|
-
|
|
2372
|
-
}).catch((
|
|
2373
|
-
<span class="cstat-no" title="statement not covered" > console.log(
|
|
2374
|
-
|
|
2375
|
-
this.clear()
|
|
2376
|
-
app.emit('refresh')
|
|
2377
|
-
|
|
2378
|
-
|
|
2379
|
-
recover(app: App) {
|
|
2380
|
-
|
|
2381
|
-
|
|
2382
|
-
<span class="cstat-no" title="statement not covered" > app.
|
|
2383
|
-
this.status = undefined
|
|
3239
|
+
errorInfo: options.errorInfo,
|
|
3240
|
+
},
|
|
3241
|
+
}).catch(<span class="fstat-no" title="function not covered" >(e</span>rr: any) => {
|
|
3242
|
+
<span class="cstat-no" title="statement not covered" > console.log('备份 nasl 失败:', err);</span>
|
|
3243
|
+
});
|
|
3244
|
+
<span class="cstat-no" title="statement not covered" > this.clear();</span>
|
|
3245
|
+
<span class="cstat-no" title="statement not covered" > app.emit('refresh');</span>
|
|
3246
|
+
}
|
|
3247
|
+
|
|
3248
|
+
<span class="fstat-no" title="function not covered" > recover(</span>app: App) {
|
|
3249
|
+
<span class="cstat-no" title="statement not covered" > switch (this.status) {</span>
|
|
3250
|
+
case TaskQueueStatus.ExceedMaxTaskCount:
|
|
3251
|
+
<span class="cstat-no" title="statement not covered" > app.emit('BelowMaxTaskCount');</span>
|
|
3252
|
+
<span class="cstat-no" title="statement not covered" > this.status = undefined;</span>
|
|
3253
|
+
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
3254
|
+
case TaskQueueStatus.Retrying:
|
|
3255
|
+
<span class="cstat-no" title="statement not covered" > app.emit('SuccessRetry');</span>
|
|
3256
|
+
<span class="cstat-no" title="statement not covered" > this.status = undefined;</span>
|
|
2384
3257
|
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
2385
|
-
ca<span class="cstat-no" title="statement not covered" >se TaskQueueStatus.Retryi</span>ng:
|
|
2386
|
-
<span class="cstat-no" title="statement not covered" > app.emi</span>t('SuccessRetry');
|
|
2387
|
-
this.status = undefined;
|
|
2388
|
-
break;
|
|
2389
3258
|
}
|
|
2390
3259
|
}
|
|
2391
3260
|
}
|
|
2392
|
-
|
|
2393
|
-
|
|
2394
|
-
async function saveNasl(options: TaskOption) {
|
|
2395
|
-
taskQueue.addTask(options)
|
|
2396
|
-
}
|
|
2397
|
-
|
|
2398
|
-
|
|
2399
|
-
|
|
3261
|
+
|
|
3262
|
+
export const taskQueue = new TaskQueue();
|
|
3263
|
+
async function <span class="fstat-no" title="function not covered" >saveNasl(</span>options: TaskOption) {
|
|
3264
|
+
<span class="cstat-no" title="statement not covered" > taskQueue.addTask(options);</span>
|
|
3265
|
+
}
|
|
3266
|
+
|
|
3267
|
+
class Operation {
|
|
3268
|
+
appId?: string;
|
|
3269
|
+
branchId?: string;
|
|
3270
|
+
accountId?: string;
|
|
3271
|
+
userId?: string;
|
|
3272
|
+
phone?: string;
|
|
3273
|
+
actionItem: any;
|
|
3274
|
+
res?: any;
|
|
3275
|
+
err?: any;
|
|
3276
|
+
parentKey?: string;
|
|
3277
|
+
timestamp?: any;
|
|
3278
|
+
type?: string;
|
|
3279
|
+
uuid?: string;
|
|
3280
|
+
action?: string;
|
|
3281
|
+
}
|
|
3282
|
+
|
|
3283
|
+
async function <span class="fstat-no" title="function not covered" >_saveNasl(</span>options: TaskOption) {
|
|
3284
|
+
const { app, hasFrontEnd, hasBackEnd, instructList, operationList } = <span class="cstat-no" title="statement not covered" >options;</span>
|
|
2400
3285
|
<span class="cstat-no" title="statement not covered" > app.emit('saving');</span>
|
|
2401
|
-
|
|
2402
|
-
|
|
3286
|
+
let ChangedNASLType = <span class="cstat-no" title="statement not covered" >'';</span>
|
|
3287
|
+
<span class="cstat-no" title="statement not covered" > if (hasFrontEnd && hasBackEnd) {</span>
|
|
2403
3288
|
<span class="cstat-no" title="statement not covered" > ChangedNASLType = 'both';</span>
|
|
2404
3289
|
} else <span class="cstat-no" title="statement not covered" >if (hasFrontEnd) {</span>
|
|
2405
3290
|
<span class="cstat-no" title="statement not covered" > ChangedNASLType = 'web';</span>
|
|
2406
|
-
} else if (hasBackEnd) {
|
|
2407
|
-
ChangedNASLType = 'backend'
|
|
2408
|
-
|
|
2409
|
-
|
|
2410
|
-
|
|
2411
|
-
|
|
2412
|
-
|
|
3291
|
+
} else <span class="cstat-no" title="statement not covered" >if (hasBackEnd) {</span>
|
|
3292
|
+
<span class="cstat-no" title="statement not covered" > ChangedNASLType = 'backend';</span>
|
|
3293
|
+
}
|
|
3294
|
+
let res: any;
|
|
3295
|
+
let err: any;
|
|
3296
|
+
|
|
3297
|
+
<span class="cstat-no" title="statement not covered" > if (config.storage.protocol === 'http') {</span>
|
|
3298
|
+
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
3299
|
+
// 接口请求
|
|
3300
|
+
<span class="cstat-no" title="statement not covered" > res = await storageService.batchInstruct({</span>
|
|
2413
3301
|
body: instructList,
|
|
2414
3302
|
headers: {
|
|
2415
3303
|
appId: app.id,
|
|
@@ -2417,27 +3305,34 @@ as<span class="cstat-no" title="statement not covered" >ync function _saveNa</sp
|
|
|
2417
3305
|
tabTimestamp,
|
|
2418
3306
|
// 其他封装在 storageService 里了
|
|
2419
3307
|
},
|
|
2420
|
-
|
|
3308
|
+
});
|
|
2421
3309
|
} catch (error) {
|
|
2422
|
-
|
|
3310
|
+
<span class="cstat-no" title="statement not covered" > err = error;</span>
|
|
2423
3311
|
}
|
|
2424
|
-
|
|
2425
|
-
|
|
3312
|
+
<span class="cstat-no" title="statement not covered" > operationList.forEach(<span class="fstat-no" title="function not covered" >(o</span>peration) => {</span>
|
|
3313
|
+
<span class="cstat-no" title="statement not covered" > doOperationRecord({</span>
|
|
3314
|
+
...operation,
|
|
3315
|
+
res,
|
|
3316
|
+
err,
|
|
3317
|
+
});
|
|
3318
|
+
});
|
|
3319
|
+
} else <span class="cstat-no" title="statement not covered" >if (config.storage.protocol === 'mock') {</span>
|
|
3320
|
+
// Do nothing
|
|
2426
3321
|
} else {
|
|
2427
|
-
const json =
|
|
2428
|
-
|
|
2429
|
-
|
|
2430
|
-
for (const { actions } of instructList) {
|
|
2431
|
-
actionList = actionList.concat(actions)
|
|
2432
|
-
|
|
2433
|
-
|
|
2434
|
-
jsoner.batchAction(json, actionList)
|
|
2435
|
-
await fs.writeJSON(config.storage.basePath, json, {
|
|
3322
|
+
const json = <span class="cstat-no" title="statement not covered" >await fs.readJSON(config.storage.basePath);</span>
|
|
3323
|
+
|
|
3324
|
+
let actionList: any[] = <span class="cstat-no" title="statement not covered" >[];</span>
|
|
3325
|
+
<span class="cstat-no" title="statement not covered" > for (const { actions } of instructList) {</span>
|
|
3326
|
+
<span class="cstat-no" title="statement not covered" > actionList = actionList.concat(actions);</span>
|
|
3327
|
+
}
|
|
3328
|
+
|
|
3329
|
+
<span class="cstat-no" title="statement not covered" > jsoner.batchAction(json, actionList);</span>
|
|
3330
|
+
<span class="cstat-no" title="statement not covered" > await fs.writeJSON(config.storage.basePath, json, {</span>
|
|
2436
3331
|
spaces: 4,
|
|
2437
|
-
|
|
2438
|
-
|
|
2439
|
-
app.emit('saved', err)
|
|
2440
|
-
return err
|
|
3332
|
+
});
|
|
3333
|
+
}
|
|
3334
|
+
<span class="cstat-no" title="statement not covered" > app.emit('saved', err);</span>
|
|
3335
|
+
<span class="cstat-no" title="statement not covered" > return err;</span>
|
|
2441
3336
|
}
|
|
2442
3337
|
|
|
2443
3338
|
export interface ProxyApp extends App {
|
|
@@ -2451,123 +3346,123 @@ export interface ProxyApp extends App {
|
|
|
2451
3346
|
_actionMsg: string;
|
|
2452
3347
|
_action: string;
|
|
2453
3348
|
naslServer: NaslServer;
|
|
2454
|
-
}
|
|
2455
|
-
|
|
2456
|
-
|
|
2457
|
-
<span class="cstat-no" title="statement not covered" > app._isCollectingCount
|
|
2458
|
-
<span class="cstat-no" title="statement not covered" > app._collectingList = [
|
|
3349
|
+
}
|
|
3350
|
+
|
|
3351
|
+
export function <span class="fstat-no" title="function not covered" >handleApp(</span>app: ProxyApp) {
|
|
3352
|
+
<span class="cstat-no" title="statement not covered" > app._isCollectingCount = 0;</span>
|
|
3353
|
+
<span class="cstat-no" title="statement not covered" > app._collectingList = [];</span>
|
|
2459
3354
|
<span class="cstat-no" title="statement not covered" > app._historyList = [];</span>
|
|
2460
|
-
<span class="cstat-no" title="statement not covered" > app._historyIndex
|
|
2461
|
-
app._historying = false
|
|
2462
|
-
<span class="cstat-no" title="statement not covered" > app._timer =
|
|
2463
|
-
|
|
2464
|
-
|
|
2465
|
-
const proxyApp = this
|
|
2466
|
-
proxyApp._historying = true
|
|
2467
|
-
|
|
2468
|
-
|
|
2469
|
-
|
|
2470
|
-
const proxyApp = this
|
|
2471
|
-
proxyApp._historying = true
|
|
3355
|
+
<span class="cstat-no" title="statement not covered" > app._historyIndex = 0;</span>
|
|
3356
|
+
<span class="cstat-no" title="statement not covered" > app._historying = false;</span>
|
|
3357
|
+
<span class="cstat-no" title="statement not covered" > app._timer = null;</span>
|
|
3358
|
+
|
|
3359
|
+
<span class="cstat-no" title="statement not covered" > app.on('undo', <span class="fstat-no" title="function not covered" >function (this: ProxyApp) {</span></span>
|
|
3360
|
+
const proxyApp = <span class="cstat-no" title="statement not covered" >this;</span>
|
|
3361
|
+
<span class="cstat-no" title="statement not covered" > proxyApp._historying = true;</span>
|
|
3362
|
+
});
|
|
3363
|
+
|
|
3364
|
+
<span class="cstat-no" title="statement not covered" > app.on('redo', <span class="fstat-no" title="function not covered" >function (this: ProxyApp) {</span></span>
|
|
3365
|
+
const proxyApp = <span class="cstat-no" title="statement not covered" >this;</span>
|
|
3366
|
+
<span class="cstat-no" title="statement not covered" > proxyApp._historying = true;</span>
|
|
2472
3367
|
});
|
|
2473
3368
|
|
|
2474
3369
|
/**
|
|
2475
|
-
|
|
2476
|
-
|
|
2477
|
-
|
|
2478
|
-
|
|
2479
|
-
if (proxyApp._timer) {
|
|
3370
|
+
* 开启收集
|
|
3371
|
+
*/
|
|
3372
|
+
<span class="cstat-no" title="statement not covered" > app.on('collect:start', <span class="fstat-no" title="function not covered" >function (this: ProxyApp, e</span>vent: any) {</span>
|
|
3373
|
+
const proxyApp = <span class="cstat-no" title="statement not covered" >this;</span>
|
|
3374
|
+
<span class="cstat-no" title="statement not covered" > if (proxyApp._timer) {</span>
|
|
2480
3375
|
<span class="cstat-no" title="statement not covered" > clearTimeout(proxyApp._timer);</span>
|
|
2481
|
-
}
|
|
2482
|
-
if (!proxyApp._noTimer) {
|
|
3376
|
+
}
|
|
3377
|
+
<span class="cstat-no" title="statement not covered" > if (!proxyApp._noTimer) {</span>
|
|
2483
3378
|
<span class="cstat-no" title="statement not covered" > proxyApp._noTimer = event.noTimer;</span>
|
|
2484
|
-
}
|
|
2485
|
-
|
|
2486
|
-
|
|
2487
|
-
console.error('收集超时,请及时排查原因', event)
|
|
2488
|
-
taskQueue.refreshNasl(proxyApp, {
|
|
3379
|
+
}
|
|
3380
|
+
<span class="cstat-no" title="statement not covered" > if (!proxyApp._noTimer) {</span>
|
|
3381
|
+
<span class="cstat-no" title="statement not covered" > proxyApp._timer = setTimeout(<span class="fstat-no" title="function not covered" >() =</span>> {</span>
|
|
3382
|
+
<span class="cstat-no" title="statement not covered" > console.error('收集超时,请及时排查原因', event);</span>
|
|
3383
|
+
<span class="cstat-no" title="statement not covered" > taskQueue.refreshNasl(proxyApp, {</span>
|
|
2489
3384
|
errorInfo: {
|
|
2490
3385
|
message: '收集超时,请及时排查原因',
|
|
2491
3386
|
},
|
|
2492
3387
|
});
|
|
2493
|
-
|
|
2494
|
-
}<span class="cstat-no" title="statement not covered" ></span>
|
|
2495
|
-
if<span class="cstat-no" title="statement not covered" > (!proxyApp._isCollectingCount) {</span>
|
|
2496
|
-
proxyApp._actionMsg = event?.actionMsg;
|
|
2497
|
-
<span class="cstat-no" title="statement not covered" > proxyApp._action = event?.act</span>ion;
|
|
3388
|
+
}, 2500);
|
|
2498
3389
|
}
|
|
2499
|
-
proxyApp._isCollectingCount
|
|
3390
|
+
<span class="cstat-no" title="statement not covered" > if (!proxyApp._isCollectingCount) {</span>
|
|
3391
|
+
<span class="cstat-no" title="statement not covered" > proxyApp._actionMsg = event?.actionMsg;</span>
|
|
3392
|
+
<span class="cstat-no" title="statement not covered" > proxyApp._action = event?.action;</span>
|
|
3393
|
+
}
|
|
3394
|
+
<span class="cstat-no" title="statement not covered" > proxyApp._isCollectingCount++;</span>
|
|
2500
3395
|
});
|
|
2501
3396
|
|
|
2502
3397
|
/**
|
|
2503
|
-
|
|
2504
|
-
|
|
2505
|
-
|
|
2506
|
-
<span class="cstat-no" title="statement not covered" >
|
|
2507
|
-
|
|
2508
|
-
|
|
2509
|
-
if (proxyApp._timer) {
|
|
2510
|
-
clearTimeout(proxyApp._timer)
|
|
2511
|
-
}
|
|
2512
|
-
//
|
|
2513
|
-
const
|
|
2514
|
-
<span class="cstat-no" title="statement not covered" >
|
|
2515
|
-
<span class="cstat-no" title="statement not covered" >
|
|
2516
|
-
<span class="cstat-no" title="statement not covered" > proxyApp.
|
|
3398
|
+
* 结束收集
|
|
3399
|
+
*/
|
|
3400
|
+
<span class="cstat-no" title="statement not covered" > app.on('collect:end', <span class="fstat-no" title="function not covered" >async </span>function (this: ProxyApp) {</span>
|
|
3401
|
+
const proxyApp = <span class="cstat-no" title="statement not covered" >this;</span>
|
|
3402
|
+
<span class="cstat-no" title="statement not covered" > proxyApp._isCollectingCount--;</span>
|
|
3403
|
+
<span class="cstat-no" title="statement not covered" > if (proxyApp._isCollectingCount === 0) {</span>
|
|
3404
|
+
<span class="cstat-no" title="statement not covered" > if (proxyApp._timer) {</span>
|
|
3405
|
+
<span class="cstat-no" title="statement not covered" > clearTimeout(proxyApp._timer);</span>
|
|
3406
|
+
}
|
|
3407
|
+
// 结束收集时,立即将全局收集变量状态重置,防止下次收集数据混乱
|
|
3408
|
+
const collectingList = <span class="cstat-no" title="statement not covered" >proxyApp._collectingList;</span>
|
|
3409
|
+
const actionMsg = <span class="cstat-no" title="statement not covered" >proxyApp._actionMsg;</span>
|
|
3410
|
+
const action = <span class="cstat-no" title="statement not covered" >proxyApp._action;</span>
|
|
3411
|
+
<span class="cstat-no" title="statement not covered" > proxyApp._collectingList = [];</span>
|
|
2517
3412
|
<span class="cstat-no" title="statement not covered" > proxyApp._actionMsg = '';</span>
|
|
2518
3413
|
<span class="cstat-no" title="statement not covered" > proxyApp._action = '';</span>
|
|
2519
|
-
|
|
2520
|
-
|
|
2521
|
-
mountDatabaseTypes(proxyApp)
|
|
2522
|
-
proxyApp.naslServer?.embeddedTSEmitter?.emit('change', {
|
|
2523
|
-
|
|
3414
|
+
<span class="cstat-no" title="statement not covered" > proxyApp._noTimer = undefined;</span>
|
|
3415
|
+
<span class="cstat-no" title="statement not covered" > if (Array.isArray(collectingList) && collectingList.length) {</span>
|
|
3416
|
+
<span class="cstat-no" title="statement not covered" > mountDatabaseTypes(proxyApp);</span>
|
|
3417
|
+
<span class="cstat-no" title="statement not covered" > proxyApp.naslServer?.embeddedTSEmitter?.emit('change', {</span>
|
|
3418
|
+
value: collectingList,
|
|
2524
3419
|
});
|
|
2525
|
-
await doAction(proxyApp, {
|
|
3420
|
+
<span class="cstat-no" title="statement not covered" > await doAction(proxyApp, {</span>
|
|
2526
3421
|
list: collectingList,
|
|
2527
3422
|
actionMsg,
|
|
2528
3423
|
action,
|
|
2529
|
-
})
|
|
2530
|
-
|
|
2531
|
-
} <span class="cstat-no" title="statement not covered" >
|
|
2532
|
-
proxyApp._isCollectingCount = 0
|
|
2533
|
-
throw Error('关闭收集有问题,请排查')
|
|
3424
|
+
});
|
|
3425
|
+
}
|
|
3426
|
+
} else <span class="cstat-no" title="statement not covered" >if (proxyApp._isCollectingCount < 0) {</span>
|
|
3427
|
+
<span class="cstat-no" title="statement not covered" > proxyApp._isCollectingCount = 0;</span>
|
|
3428
|
+
<span class="cstat-no" title="statement not covered" > throw Error('关闭收集有问题,请排查');</span>
|
|
2534
3429
|
}
|
|
2535
3430
|
});
|
|
2536
3431
|
|
|
2537
3432
|
/**
|
|
2538
|
-
|
|
2539
|
-
|
|
2540
|
-
app.on('storage', function (this: ProxyApp,
|
|
2541
|
-
<span class="cstat-no" title="statement not covered" >
|
|
2542
|
-
|
|
2543
|
-
if (proxyApp._isCollectingCount === 0) {
|
|
2544
|
-
proxyApp.naslServer?.embeddedTSEmitter?.emit('change', {
|
|
2545
|
-
value: [event]
|
|
2546
|
-
})
|
|
2547
|
-
let actionMsg =
|
|
2548
|
-
<span class="cstat-no" title="statement not covered" >
|
|
2549
|
-
const { concept, name } = target || {}
|
|
2550
|
-
|
|
2551
|
-
|
|
2552
|
-
actionMsg = '添加'
|
|
3433
|
+
* 有变更
|
|
3434
|
+
*/
|
|
3435
|
+
<span class="cstat-no" title="statement not covered" > app.on('storage', <span class="fstat-no" title="function not covered" >function (this: ProxyApp, e</span>vent: any) {</span>
|
|
3436
|
+
const proxyApp = <span class="cstat-no" title="statement not covered" >this;</span>
|
|
3437
|
+
// 是否正在收集
|
|
3438
|
+
<span class="cstat-no" title="statement not covered" > if (proxyApp._isCollectingCount === 0) {</span>
|
|
3439
|
+
<span class="cstat-no" title="statement not covered" > proxyApp.naslServer?.embeddedTSEmitter?.emit('change', {</span>
|
|
3440
|
+
value: [event],
|
|
3441
|
+
});
|
|
3442
|
+
let actionMsg = <span class="cstat-no" title="statement not covered" >'';</span>
|
|
3443
|
+
const { action, target } = <span class="cstat-no" title="statement not covered" >event.originEvent || {};</span>
|
|
3444
|
+
const { concept, name } = <span class="cstat-no" title="statement not covered" >target || {};</span>
|
|
3445
|
+
<span class="cstat-no" title="statement not covered" > switch (action) {</span>
|
|
3446
|
+
case 'create':
|
|
3447
|
+
<span class="cstat-no" title="statement not covered" > actionMsg = '添加';</span>
|
|
2553
3448
|
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
2554
|
-
|
|
2555
|
-
actionMsg = '删除'
|
|
3449
|
+
case 'delete':
|
|
3450
|
+
<span class="cstat-no" title="statement not covered" > actionMsg = '删除';</span>
|
|
2556
3451
|
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
2557
|
-
|
|
2558
|
-
actionMsg = '修改'
|
|
3452
|
+
case 'update':
|
|
3453
|
+
<span class="cstat-no" title="statement not covered" > actionMsg = '修改';</span>
|
|
2559
3454
|
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
2560
|
-
|
|
2561
|
-
|
|
2562
|
-
if (name) {
|
|
3455
|
+
}
|
|
3456
|
+
<span class="cstat-no" title="statement not covered" > actionMsg += getConceptConstructor(concept).nodeTitle;</span>
|
|
3457
|
+
<span class="cstat-no" title="statement not covered" > if (name) {</span>
|
|
2563
3458
|
<span class="cstat-no" title="statement not covered" > actionMsg += `“${name}”`;</span>
|
|
2564
3459
|
}
|
|
2565
|
-
doAction(proxyApp, {
|
|
3460
|
+
<span class="cstat-no" title="statement not covered" > doAction(proxyApp, {</span>
|
|
2566
3461
|
list: [event],
|
|
2567
3462
|
actionMsg,
|
|
2568
|
-
|
|
3463
|
+
});
|
|
2569
3464
|
} else {
|
|
2570
|
-
proxyApp._collectingList.push(event)
|
|
3465
|
+
<span class="cstat-no" title="statement not covered" > proxyApp._collectingList.push(event);</span>
|
|
2571
3466
|
}
|
|
2572
3467
|
});
|
|
2573
3468
|
}
|
|
@@ -2582,13 +3477,17 @@ type BreakpointItem =
|
|
|
2582
3477
|
/**
|
|
2583
3478
|
* 加载 app
|
|
2584
3479
|
* @param appId 如果是从文件读,就不需要传
|
|
2585
|
-
* @returns app
|
|
3480
|
+
* @returns app 对象
|
|
2586
3481
|
*/
|
|
2587
|
-
|
|
2588
|
-
|
|
2589
|
-
|
|
2590
|
-
|
|
2591
|
-
|
|
3482
|
+
export async function <span class="fstat-no" title="function not covered" >loadApp(</span>appId?: string) {
|
|
3483
|
+
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
3484
|
+
// 删除失效数据
|
|
3485
|
+
<span class="cstat-no" title="statement not covered" > deleteExpiredRecords();</span>
|
|
3486
|
+
} catch(err) { }
|
|
3487
|
+
let app: App;
|
|
3488
|
+
<span class="cstat-no" title="statement not covered" > if (config.storage.protocol === 'http') {</span>
|
|
3489
|
+
<span class="cstat-no" title="statement not covered" > console.time('batchQuery');</span>
|
|
3490
|
+
const promises = <span class="cstat-no" title="statement not covered" >[</span>
|
|
2592
3491
|
storageService.batchQuery({
|
|
2593
3492
|
body: [
|
|
2594
3493
|
{
|
|
@@ -2608,37 +3507,37 @@ ex<span class="cstat-no" title="statement not covered" >port async function load
|
|
|
2608
3507
|
storageService.breakpoint({
|
|
2609
3508
|
body: { appId }
|
|
2610
3509
|
})
|
|
2611
|
-
]
|
|
3510
|
+
]
|
|
3511
|
+
|
|
3512
|
+
const [batchQueryRes, breakpointRes] = <span class="cstat-no" title="statement not covered" >await Promise.all(promises)</span>
|
|
2612
3513
|
|
|
2613
|
-
const [batchQueryRes, breakpointRes] = await Promise.all(promises)
|
|
2614
|
-
<span class="cstat-no" title="statement not covered" ></span>
|
|
2615
3514
|
// 请求
|
|
2616
3515
|
<span class="cstat-no" title="statement not covered" > console.timeEnd('batchQuery');</span>
|
|
2617
|
-
|
|
2618
|
-
tabTimestamp = batchQueryRes?.headers?.tabtimestamp
|
|
2619
|
-
<span class="cstat-no" title="statement not covered" >
|
|
2620
|
-
|
|
2621
|
-
console.time('new App')
|
|
2622
|
-
<span class="cstat-no" title="statement not covered" > app = new App(Object.
|
|
2623
|
-
|
|
2624
|
-
breakpointRes?.forEach((
|
|
2625
|
-
<span class="cstat-no" title="statement not covered" >
|
|
2626
|
-
|
|
2627
|
-
if (breakpointStatus) {
|
|
2628
|
-
<span class="cstat-no" title="statement not covered" >
|
|
2629
|
-
|
|
2630
|
-
if (node) {
|
|
2631
|
-
node.breakpoint = breakpointStatus
|
|
3516
|
+
|
|
3517
|
+
<span class="cstat-no" title="statement not covered" > tabTimestamp = batchQueryRes?.headers?.tabtimestamp;</span>
|
|
3518
|
+
const data = <span class="cstat-no" title="statement not covered" >batchQueryRes?.data?.result;</span>
|
|
3519
|
+
|
|
3520
|
+
<span class="cstat-no" title="statement not covered" > console.time('new App');</span>
|
|
3521
|
+
<span class="cstat-no" title="statement not covered" > app = new App(Object.assign(data?.[0], { id: appId }));</span>
|
|
3522
|
+
|
|
3523
|
+
<span class="cstat-no" title="statement not covered" > breakpointRes?.forEach(<span class="fstat-no" title="function not covered" >(i</span>tem: BreakpointItem = <span class="branch-0 cbranch-no" title="branch not covered" >{})</span> => {</span>
|
|
3524
|
+
const { path, breakpointStatus } = <span class="cstat-no" title="statement not covered" >item</span>
|
|
3525
|
+
|
|
3526
|
+
<span class="cstat-no" title="statement not covered" > if (breakpointStatus) {</span>
|
|
3527
|
+
const node = <span class="cstat-no" title="statement not covered" >app.findNodeByPath(path)</span>
|
|
3528
|
+
|
|
3529
|
+
<span class="cstat-no" title="statement not covered" > if (node) {</span>
|
|
3530
|
+
<span class="cstat-no" title="statement not covered" > node.breakpoint = breakpointStatus</span>
|
|
2632
3531
|
}
|
|
2633
|
-
|
|
2634
|
-
|
|
2635
|
-
|
|
2636
|
-
if (!app.id) {
|
|
3532
|
+
}
|
|
3533
|
+
})
|
|
3534
|
+
<span class="cstat-no" title="statement not covered" > console.timeEnd('new App');</span>
|
|
3535
|
+
<span class="cstat-no" title="statement not covered" > if (!app.id) {</span>
|
|
2637
3536
|
<span class="cstat-no" title="statement not covered" > app.id = appId;</span>
|
|
2638
|
-
}
|
|
3537
|
+
}
|
|
2639
3538
|
<span class="cstat-no" title="statement not covered" > addBreakpointNodesFromApp(app)</span>
|
|
2640
|
-
} else if (config.storage.protocol === 'mock') {
|
|
2641
|
-
app = new App({
|
|
3539
|
+
} else <span class="cstat-no" title="statement not covered" >if (config.storage.protocol === 'mock') {</span>
|
|
3540
|
+
<span class="cstat-no" title="statement not covered" > app = new App({</span>
|
|
2642
3541
|
id: appId,
|
|
2643
3542
|
concept: 'App',
|
|
2644
3543
|
name: 'devapp',
|
|
@@ -2656,88 +3555,89 @@ ex<span class="cstat-no" title="statement not covered" >port async function load
|
|
|
2656
3555
|
dependencies: [],
|
|
2657
3556
|
interfaceDependencies: [],
|
|
2658
3557
|
frontends: [],
|
|
2659
|
-
|
|
2660
|
-
|
|
2661
|
-
|
|
2662
|
-
|
|
2663
|
-
<span class="cstat-no" title="statement not covered" >
|
|
2664
|
-
|
|
2665
|
-
|
|
2666
|
-
<span class="cstat-no" title="statement not covered" > (app as
|
|
2667
|
-
|
|
2668
|
-
|
|
3558
|
+
metadataTypes: []
|
|
3559
|
+
});
|
|
3560
|
+
} else {
|
|
3561
|
+
const json = <span class="cstat-no" title="statement not covered" >await fs.readJSON(config.storage.basePath);</span>
|
|
3562
|
+
<span class="cstat-no" title="statement not covered" > app = new App(appId ? Object.assign(json, { id: appId }) : json);</span>
|
|
3563
|
+
}
|
|
3564
|
+
// config.scope = app.scope;
|
|
3565
|
+
<span class="cstat-no" title="statement not covered" > handleApp(app as ProxyApp);</span>
|
|
3566
|
+
(<span class="cstat-no" title="statement not covered" >app as any)._isCollectingCount = 0;</span>
|
|
3567
|
+
<span class="cstat-no" title="statement not covered" > mountDatabaseTypes(app);</span>
|
|
3568
|
+
<span class="cstat-no" title="statement not covered" > return app as App;</span>
|
|
2669
3569
|
}
|
|
2670
|
-
|
|
2671
|
-
|
|
2672
|
-
|
|
2673
|
-
if (!app.__databaseTypeMap) {
|
|
2674
|
-
|
|
2675
|
-
}
|
|
2676
|
-
<span class="cstat-no" title="statement not covered" >
|
|
2677
|
-
|
|
2678
|
-
|
|
2679
|
-
|
|
2680
|
-
|
|
2681
|
-
if (dataSourceSqlType && !app.__databaseTypeMap[dataSourceSqlType]) {
|
|
2682
|
-
dbTypeSet.add(dataSourceSqlType)
|
|
3570
|
+
|
|
3571
|
+
// 在app上挂载所有的数据库类型
|
|
3572
|
+
export async function <span class="fstat-no" title="function not covered" >mountDatabaseTypes(</span>app: App) {
|
|
3573
|
+
<span class="cstat-no" title="statement not covered" > if (!app.__databaseTypeMap) {</span>
|
|
3574
|
+
<span class="cstat-no" title="statement not covered" > app.__databaseTypeMap = {};</span>
|
|
3575
|
+
}
|
|
3576
|
+
const dataSources = <span class="cstat-no" title="statement not covered" >app?.dataSources;</span>
|
|
3577
|
+
const dbTypeSet = <span class="cstat-no" title="statement not covered" >new Set();</span>
|
|
3578
|
+
<span class="cstat-no" title="statement not covered" > if (Array.isArray(dataSources)) {</span>
|
|
3579
|
+
<span class="cstat-no" title="statement not covered" > dataSources.forEach(<span class="fstat-no" title="function not covered" >(d</span>ataSource) => {</span>
|
|
3580
|
+
const dataSourceSqlType = <span class="cstat-no" title="statement not covered" >JSON.parse(dataSource.dataSourceConfig?.devProperty?.value || '{}')?.type;</span>
|
|
3581
|
+
<span class="cstat-no" title="statement not covered" > if (dataSourceSqlType && !app.__databaseTypeMap[dataSourceSqlType]) {</span>
|
|
3582
|
+
<span class="cstat-no" title="statement not covered" > dbTypeSet.add(dataSourceSqlType);</span>
|
|
2683
3583
|
}
|
|
2684
|
-
})
|
|
2685
|
-
|
|
2686
|
-
const dbTypes =
|
|
2687
|
-
if (Array.isArray(dbTypes) && dbTypes.length) {
|
|
2688
|
-
const res: any = await databaseTypes({
|
|
3584
|
+
});
|
|
3585
|
+
}
|
|
3586
|
+
const dbTypes = <span class="cstat-no" title="statement not covered" >[...dbTypeSet];</span>
|
|
3587
|
+
<span class="cstat-no" title="statement not covered" > if (Array.isArray(dbTypes) && dbTypes.length) {</span>
|
|
3588
|
+
const res: any = <span class="cstat-no" title="statement not covered" >await databaseTypes({</span>
|
|
2689
3589
|
query: {
|
|
2690
3590
|
dbTypes: dbTypes.join(','),
|
|
2691
|
-
|
|
2692
|
-
})
|
|
2693
|
-
|
|
2694
|
-
res.forEach(
|
|
2695
|
-
<span class="cstat-no" title="statement not covered" >
|
|
2696
|
-
|
|
2697
|
-
|
|
2698
|
-
columnTypes.forEach(
|
|
2699
|
-
const { naslType, dataBaseTypes } = columnType
|
|
2700
|
-
<span class="cstat-no" title="statement not covered" >
|
|
2701
|
-
|
|
2702
|
-
|
|
2703
|
-
|
|
2704
|
-
|
|
2705
|
-
|
|
3591
|
+
},
|
|
3592
|
+
});
|
|
3593
|
+
<span class="cstat-no" title="statement not covered" > if (Array.isArray(res)) {</span>
|
|
3594
|
+
<span class="cstat-no" title="statement not covered" > res.forEach(<span class="fstat-no" title="function not covered" >(d</span>atabaseType: any) => {</span>
|
|
3595
|
+
const { dbType, columnTypes } = <span class="cstat-no" title="statement not covered" >databaseType || {};</span>
|
|
3596
|
+
const columnTypeMap: any = <span class="cstat-no" title="statement not covered" >{};</span>
|
|
3597
|
+
<span class="cstat-no" title="statement not covered" > if (Array.isArray(columnTypes)) {</span>
|
|
3598
|
+
<span class="cstat-no" title="statement not covered" > columnTypes.forEach(<span class="fstat-no" title="function not covered" >(c</span>olumnType) => {</span>
|
|
3599
|
+
const { naslType, dataBaseTypes } = <span class="cstat-no" title="statement not covered" >columnType;</span>
|
|
3600
|
+
const dataBaseTypeMap: any = <span class="cstat-no" title="statement not covered" >{};</span>
|
|
3601
|
+
let defaultDataBaseType;
|
|
3602
|
+
<span class="cstat-no" title="statement not covered" > if (Array.isArray(dataBaseTypes)) {</span>
|
|
3603
|
+
<span class="cstat-no" title="statement not covered" > dataBaseTypes.forEach(<span class="fstat-no" title="function not covered" >(d</span>ataBaseType) => {</span>
|
|
3604
|
+
const { type } = <span class="cstat-no" title="statement not covered" >dataBaseType || {};</span>
|
|
3605
|
+
<span class="cstat-no" title="statement not covered" > if (type) {</span>
|
|
2706
3606
|
<span class="cstat-no" title="statement not covered" > dataBaseTypeMap[type] = dataBaseType;</span>
|
|
2707
|
-
|
|
2708
|
-
if (defaultType) {
|
|
2709
|
-
defaultDataBaseType = dataBaseType
|
|
3607
|
+
const { defaultType } = <span class="cstat-no" title="statement not covered" >dataBaseType;</span>
|
|
3608
|
+
<span class="cstat-no" title="statement not covered" > if (defaultType) {</span>
|
|
3609
|
+
<span class="cstat-no" title="statement not covered" > defaultDataBaseType = dataBaseType;</span>
|
|
2710
3610
|
}
|
|
2711
3611
|
}
|
|
2712
|
-
|
|
3612
|
+
});
|
|
2713
3613
|
}
|
|
2714
|
-
columnTypeMap[naslType] = {
|
|
3614
|
+
<span class="cstat-no" title="statement not covered" > columnTypeMap[naslType] = {</span>
|
|
2715
3615
|
dataBaseTypes,
|
|
2716
3616
|
dataBaseTypeMap,
|
|
2717
3617
|
defaultDataBaseType,
|
|
2718
3618
|
};
|
|
2719
|
-
|
|
3619
|
+
});
|
|
2720
3620
|
}
|
|
2721
|
-
app.__databaseTypeMap[dbType] = columnTypeMap
|
|
3621
|
+
<span class="cstat-no" title="statement not covered" > app.__databaseTypeMap[dbType] = columnTypeMap;</span>
|
|
2722
3622
|
});
|
|
2723
|
-
|
|
2724
|
-
}
|
|
2725
|
-
|
|
2726
|
-
dataSources.forEach((
|
|
2727
|
-
dataSource.__hasDatabaseConfig = !!(app.__databaseTypeMap?.[dataSource.dataSourceSqlType])
|
|
3623
|
+
}
|
|
3624
|
+
}
|
|
3625
|
+
<span class="cstat-no" title="statement not covered" > if (Array.isArray(dataSources)) {</span>
|
|
3626
|
+
<span class="cstat-no" title="statement not covered" > dataSources.forEach(<span class="fstat-no" title="function not covered" >(d</span>ataSource) => {</span>
|
|
3627
|
+
<span class="cstat-no" title="statement not covered" > dataSource.__hasDatabaseConfig = !!(app.__databaseTypeMap?.[dataSource.dataSourceSqlType]);</span>
|
|
2728
3628
|
});
|
|
2729
3629
|
}
|
|
2730
3630
|
}
|
|
2731
3631
|
|
|
2732
3632
|
/**
|
|
2733
3633
|
* 加载 app
|
|
2734
|
-
* @returns app
|
|
2735
|
-
|
|
2736
|
-
export
|
|
2737
|
-
<span class="cstat-no" title="statement not covered" >
|
|
2738
|
-
<span class="cstat-no" title="statement not covered" >
|
|
2739
|
-
handleApp(app as ProxyApp)
|
|
2740
|
-
return app
|
|
3634
|
+
* @returns app 对象
|
|
3635
|
+
*/
|
|
3636
|
+
export function <span class="fstat-no" title="function not covered" >loadAppSync(</span>) {
|
|
3637
|
+
const json = <span class="cstat-no" title="statement not covered" >fs.readJSONSync(config.storage.basePath);</span>
|
|
3638
|
+
const app = <span class="cstat-no" title="statement not covered" >new App(json);</span>
|
|
3639
|
+
<span class="cstat-no" title="statement not covered" > handleApp(app as ProxyApp);</span>
|
|
3640
|
+
<span class="cstat-no" title="statement not covered" > return app;</span>
|
|
2741
3641
|
}
|
|
2742
3642
|
</pre></td></tr></table></pre>
|
|
2743
3643
|
|
|
@@ -2746,7 +3646,7 @@ export functio<span class="cstat-no" title="statement not covered" >n loadAppSyn
|
|
|
2746
3646
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
2747
3647
|
Code coverage generated by
|
|
2748
3648
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
2749
|
-
at 2023-10-
|
|
3649
|
+
at 2023-10-31T12:16:02.007Z
|
|
2750
3650
|
</div>
|
|
2751
3651
|
<script src="../../../prettify.js"></script>
|
|
2752
3652
|
<script>
|