@lcap/nasl 3.4.0-beta.9 → 3.4.1-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.nyc_output/{559608df-ab15-4969-acf0-5239dacd6111.json → d58d92d8-c0d6-479b-9f82-1f4da8e73ff3.json} +1 -1
- package/.nyc_output/processinfo/d58d92d8-c0d6-479b-9f82-1f4da8e73ff3.json +1 -0
- package/.nyc_output/processinfo/index.json +1 -1
- package/coverage/index.html +138 -153
- package/coverage/src/automate/engine/index.html +1 -1
- package/coverage/src/automate/engine/utils.js.html +46 -46
- package/coverage/src/bak/index.html +15 -15
- package/coverage/src/bak/translator.js.html +57 -153
- 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 +7 -43
- package/coverage/src/breakpoint/generator/CallbackNode.ts.html +8 -59
- package/coverage/src/breakpoint/generator/index.html +21 -21
- 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 +2 -2
- 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 +3 -3
- 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 +180 -609
- package/coverage/src/common/Command.ts.html +2 -2
- package/coverage/src/common/EventEmitter.ts.html +6 -6
- package/coverage/src/common/Messager.ts.html +1 -1
- package/coverage/src/common/asyncFuncMap.ts.html +1 -1
- package/coverage/src/common/index.html +21 -36
- package/coverage/src/common/index.ts.html +4 -7
- package/coverage/src/concepts/Abort__.ts.html +9 -39
- package/coverage/src/concepts/Anchor__.ts.html +29 -86
- package/coverage/src/concepts/AnonymousFunction__.ts.html +169 -262
- package/coverage/src/concepts/App__.ts.html +152 -1205
- package/coverage/src/concepts/Argument__.ts.html +51 -120
- package/coverage/src/concepts/Assignee__.ts.html +34 -124
- package/coverage/src/concepts/AssignmentLine__.ts.html +15 -48
- package/coverage/src/concepts/Assignment__.ts.html +69 -147
- package/coverage/src/concepts/Attribute__.ts.html +14 -41
- package/coverage/src/concepts/AuthInterface__.ts.html +6 -9
- package/coverage/src/concepts/AuthLogicForCallInterface__.ts.html +144 -108
- package/coverage/src/concepts/AuthLogic__.ts.html +6 -18
- package/coverage/src/concepts/BackendVariable__.ts.html +51 -135
- package/coverage/src/concepts/Backend__.ts.html +28 -106
- package/coverage/src/concepts/BatchAssignment__.ts.html +169 -274
- package/coverage/src/concepts/BinaryExpression__.ts.html +110 -188
- package/coverage/src/concepts/BindAttribute__.ts.html +93 -213
- package/coverage/src/concepts/BindDirective__.ts.html +26 -131
- package/coverage/src/concepts/BindEvent__.ts.html +71 -167
- package/coverage/src/concepts/BindStyle__.ts.html +21 -78
- package/coverage/src/concepts/BooleanLiteral__.ts.html +20 -47
- package/coverage/src/concepts/CallAuthInterface__.ts.html +48 -105
- package/coverage/src/concepts/CallConnector__.ts.html +35 -62
- package/coverage/src/concepts/CallFunction__.ts.html +160 -328
- package/coverage/src/concepts/CallInterface__.ts.html +60 -93
- package/coverage/src/concepts/CallLogic__.ts.html +427 -544
- package/coverage/src/concepts/CallQueryComponent__.ts.html +93 -126
- package/coverage/src/concepts/Comment__.ts.html +10 -43
- package/coverage/src/concepts/CompletionProperty__.ts.html +13 -40
- package/coverage/src/concepts/ConfigGroup__.ts.html +20 -47
- package/coverage/src/concepts/ConfigPropertyValue__.ts.html +19 -22
- package/coverage/src/concepts/ConfigProperty__.ts.html +40 -97
- package/coverage/src/concepts/Configuration__.ts.html +21 -48
- package/coverage/src/concepts/Connection__.ts.html +22 -97
- package/coverage/src/concepts/ConnectorTrigger__.ts.html +6 -9
- package/coverage/src/concepts/Connector__.ts.html +38 -161
- package/coverage/src/concepts/Constant__.ts.html +24 -84
- package/coverage/src/concepts/DataSource__.ts.html +57 -111
- package/coverage/src/concepts/DatabaseTypeAnnotation__.ts.html +6 -9
- package/coverage/src/concepts/Destination__.ts.html +55 -97
- package/coverage/src/concepts/End__.ts.html +26 -56
- package/coverage/src/concepts/EntityIndex__.ts.html +10 -40
- package/coverage/src/concepts/EntityProperty__.ts.html +56 -164
- package/coverage/src/concepts/Entity__.ts.html +91 -169
- package/coverage/src/concepts/EnumItem__.ts.html +10 -40
- package/coverage/src/concepts/Enum__.ts.html +24 -84
- package/coverage/src/concepts/Event__.ts.html +14 -41
- package/coverage/src/concepts/ExternalDestination__.ts.html +21 -75
- package/coverage/src/concepts/ForEachStatement__.ts.html +95 -143
- package/coverage/src/concepts/FrontendLibrary__.ts.html +20 -71
- package/coverage/src/concepts/FrontendVariable__.ts.html +1 -1
- package/coverage/src/concepts/Frontend__.ts.html +57 -213
- package/coverage/src/concepts/Function__.ts.html +86 -239
- package/coverage/src/concepts/Identifier__.ts.html +73 -103
- package/coverage/src/concepts/IfStatement__.ts.html +75 -138
- package/coverage/src/concepts/Integration__.ts.html +19 -70
- package/coverage/src/concepts/InterfaceParam__.ts.html +21 -78
- package/coverage/src/concepts/Interface__.ts.html +60 -162
- package/coverage/src/concepts/JSBlock__.ts.html +9 -39
- package/coverage/src/concepts/JavaLogic__.ts.html +9 -42
- package/coverage/src/concepts/LogicItem__.ts.html +26 -56
- package/coverage/src/concepts/Logic__.ts.html +322 -409
- package/coverage/src/concepts/MatchCase__.ts.html +97 -181
- package/coverage/src/concepts/Match__.ts.html +63 -135
- package/coverage/src/concepts/MemberExpression__.ts.html +128 -185
- package/coverage/src/concepts/MicroApp__.ts.html +6 -9
- package/coverage/src/concepts/Module__.ts.html +36 -690
- package/coverage/src/concepts/MsgTriggerEvent__.ts.html +14 -41
- package/coverage/src/concepts/MsgTriggerLauncher__.ts.html +14 -41
- package/coverage/src/concepts/Namespace__.ts.html +92 -359
- package/coverage/src/concepts/NewComposite__.ts.html +146 -326
- package/coverage/src/concepts/NewList__.ts.html +57 -195
- package/coverage/src/concepts/NewMap__.ts.html +63 -168
- package/coverage/src/concepts/New__.ts.html +9 -39
- package/coverage/src/concepts/NullLiteral__.ts.html +9 -36
- package/coverage/src/concepts/NumericLiteral__.ts.html +32 -86
- package/coverage/src/concepts/OqlQueryComponent__.ts.html +35 -161
- package/coverage/src/concepts/OverriddenLogic__.ts.html +201 -324
- package/coverage/src/concepts/Param__.ts.html +80 -155
- package/coverage/src/concepts/Point__.ts.html +6 -9
- package/coverage/src/concepts/ProcessComponent__.ts.html +21 -72
- package/coverage/src/concepts/ProcessElement__.ts.html +116 -524
- package/coverage/src/concepts/ProcessOutcome__.ts.html +13 -85
- package/coverage/src/concepts/ProcessOutcomes__.ts.html +13 -85
- package/coverage/src/concepts/Process__.ts.html +70 -217
- package/coverage/src/concepts/QueryAggregateExpression__.ts.html +16 -67
- package/coverage/src/concepts/QueryFieldExpression__.ts.html +11 -41
- package/coverage/src/concepts/QueryFromExpression__.ts.html +21 -81
- package/coverage/src/concepts/QueryGroupByExpression__.ts.html +19 -70
- package/coverage/src/concepts/QueryJoinExpression__.ts.html +25 -85
- package/coverage/src/concepts/QueryLimitExpression__.ts.html +20 -77
- package/coverage/src/concepts/QueryOrderByExpression__.ts.html +20 -80
- package/coverage/src/concepts/QuerySelectExpression__.ts.html +15 -42
- package/coverage/src/concepts/Rect__.ts.html +6 -9
- package/coverage/src/concepts/Return__.ts.html +50 -131
- package/coverage/src/concepts/Role__.ts.html +15 -45
- package/coverage/src/concepts/SelectMembers__.ts.html +24 -81
- package/coverage/src/concepts/Slot__.ts.html +13 -40
- package/coverage/src/concepts/SqlQueryComponent__.ts.html +24 -84
- package/coverage/src/concepts/Start__.ts.html +14 -41
- package/coverage/src/concepts/StringInterpolation__.ts.html +46 -127
- package/coverage/src/concepts/StringLiteral__.ts.html +32 -62
- package/coverage/src/concepts/StructureProperty__.ts.html +29 -86
- package/coverage/src/concepts/Structure__.ts.html +38 -122
- package/coverage/src/concepts/SwitchCase__.ts.html +36 -87
- package/coverage/src/concepts/SwitchStatement__.ts.html +33 -90
- package/coverage/src/concepts/Theme__.ts.html +12 -15
- package/coverage/src/concepts/Transactional__.ts.html +6 -9
- package/coverage/src/concepts/TriggerEvent__.ts.html +14 -41
- package/coverage/src/concepts/TriggerLauncher__.ts.html +13 -46
- package/coverage/src/concepts/TypeAnnotation__.ts.html +117 -348
- package/coverage/src/concepts/TypeParam__.ts.html +12 -42
- package/coverage/src/concepts/UnaryExpression__.ts.html +27 -105
- package/coverage/src/concepts/Unparsed__.ts.html +12 -36
- package/coverage/src/concepts/UseComponent__.ts.html +6 -9
- package/coverage/src/concepts/ValidationRule__.ts.html +48 -87
- package/coverage/src/concepts/Variable__.ts.html +46 -127
- package/coverage/src/concepts/ViewBlock__.ts.html +6 -9
- package/coverage/src/concepts/ViewComponent__.ts.html +24 -99
- package/coverage/src/concepts/ViewElement__.ts.html +288 -498
- package/coverage/src/concepts/View__.ts.html +170 -482
- package/coverage/src/concepts/WhileStatement__.ts.html +55 -118
- 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 +2 -2
- package/coverage/src/concepts/basics/stdlib/nasl.ui.ts.html +1 -1
- package/coverage/src/concepts/basics/stdlib/nasl.util.ts.html +3 -3
- 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 +964 -1024
- package/coverage/src/concepts/index.ts.html +1 -1
- package/coverage/src/concepts/index__.ts.html +4 -16
- package/coverage/src/config.ts.html +1 -1
- package/coverage/src/decorators/index.html +5 -5
- package/coverage/src/decorators/index.ts.html +32 -32
- package/coverage/src/decorators/promise.ts.html +10 -10
- package/coverage/src/eventBus.ts.html +1 -1
- package/coverage/src/generator/compileComponent.ts.html +1 -1
- package/coverage/src/generator/genBundleFiles.ts.html +23 -17
- package/coverage/src/generator/genHash.ts.html +1 -1
- package/coverage/src/generator/genMetaData.ts.html +16 -103
- package/coverage/src/generator/genReleaseBody.ts.html +43 -43
- package/coverage/src/generator/icestark.ts.html +4 -10
- package/coverage/src/generator/index.html +21 -21
- 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 +20 -92
- package/coverage/src/generator/qiankun.ts.html +3 -9
- 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 +14 -11
- package/coverage/src/manager/index.html +13 -13
- 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 +18 -78
- package/coverage/src/sentry/index.html +14 -14
- package/coverage/src/sentry/index.ts.html +32 -38
- package/coverage/src/server/createUiTs.ts.html +6 -15
- package/coverage/src/server/entity2LogicNamespace.ts.html +9 -9
- package/coverage/src/server/event.js.html +1 -1
- package/coverage/src/server/extendBaseNode.ts.html +43 -73
- package/coverage/src/server/formatTsUtils.ts.html +28 -31
- 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 +8 -20
- package/coverage/src/server/getMemberIdentifier.ts.html +120 -231
- package/coverage/src/server/getProcessComponents.ts.html +1 -1
- package/coverage/src/server/getProcesses.ts.html +13 -163
- package/coverage/src/server/getValidates.ts.html +1 -1
- package/coverage/src/server/index.html +63 -63
- package/coverage/src/server/index.ts.html +3 -6
- package/coverage/src/server/naslServer.ts.html +949 -1207
- 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 +14 -59
- package/coverage/src/service/creator/add.configs.js.html +9 -27
- package/coverage/src/service/creator/errHandles.js.html +37 -28
- package/coverage/src/service/creator/index.html +23 -23
- 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 +29 -29
- package/coverage/src/service/storage/index.ts.html +1 -1
- package/coverage/src/service/storage/init.ts.html +600 -1533
- package/coverage/src/service/storage/jsoner.ts.html +13 -76
- package/coverage/src/service/storage/map.ts.html +3 -3
- 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 +58 -37
- package/coverage/src/templator/genCurdEditMultipleKeyBlock.ts.html +19 -19
- package/coverage/src/templator/genCurdMultipleKeyBlock.ts.html +89 -71
- package/coverage/src/templator/genEditTableBlock.ts.html +13 -76
- 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 +3 -66
- package/coverage/src/templator/genUpdateBlock.ts.html +32 -35
- package/coverage/src/templator/index.html +38 -38
- package/coverage/src/templator/index.ts.html +1 -1
- package/coverage/src/templator/utils.ts.html +11 -74
- package/coverage/src/translator/constant.ts.html +1 -1
- package/coverage/src/translator/index.html +21 -21
- package/coverage/src/translator/index.ts.html +1 -1
- package/coverage/src/translator/utils.ts.html +68 -389
- package/coverage/src/utils/cookie.ts.html +4 -4
- package/coverage/src/utils/env.ts.html +1 -1
- package/coverage/src/utils/index.html +49 -34
- package/coverage/src/utils/index.ts.html +22 -115
- package/coverage/src/utils/logger.ts.html +1 -1
- package/coverage/src/utils/sortTsString.ts.html +10 -25
- package/coverage/src/utils/string.ts.html +8 -110
- 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/automate/engine/utils.d.ts +1 -1
- package/out/automate/engine/utils.js +1 -5
- package/out/automate/engine/utils.js.map +1 -1
- package/out/common/BaseNode.d.ts +2 -0
- package/out/common/BaseNode.js +24 -1
- package/out/common/BaseNode.js.map +1 -1
- package/out/concepts/BindAttribute__.js +3 -0
- package/out/concepts/BindAttribute__.js.map +1 -1
- package/out/concepts/CallLogic__.js +18 -22
- package/out/concepts/CallLogic__.js.map +1 -1
- package/out/concepts/Destination__.d.ts +1 -1
- package/out/concepts/Destination__.js +2 -2
- package/out/concepts/Destination__.js.map +1 -1
- package/out/concepts/Logic__.js +22 -5
- package/out/concepts/Logic__.js.map +1 -1
- package/out/concepts/ProcessElement__.js +9 -1
- package/out/concepts/ProcessElement__.js.map +1 -1
- package/out/concepts/ViewElement__.d.ts +1 -0
- package/out/concepts/ViewElement__.js +8 -1
- package/out/concepts/ViewElement__.js.map +1 -1
- package/out/concepts/View__.js +1 -1
- package/out/concepts/View__.js.map +1 -1
- package/out/generator/genBundleFiles.d.ts +1 -0
- package/out/generator/genBundleFiles.js +4 -1
- package/out/generator/genBundleFiles.js.map +1 -1
- package/out/server/getProcesses.js +3 -3
- package/out/server/getProcesses.js.map +1 -1
- package/out/server/naslServer.js +9 -2
- package/out/server/naslServer.js.map +1 -1
- package/out/utils/i18nInfo.js +7 -2
- package/out/utils/i18nInfo.js.map +1 -1
- package/package.json +1 -1
- package/src/automate/engine/utils.js +1 -5
- package/src/common/BaseNode.ts +23 -2
- package/src/concepts/BindAttribute__.ts +2 -0
- package/src/concepts/CallLogic__.ts +21 -22
- package/src/concepts/Destination__.ts +2 -2
- package/src/concepts/Logic__.ts +36 -22
- package/src/concepts/ProcessElement__.ts +8 -1
- package/src/concepts/ViewElement__.ts +11 -2
- package/src/concepts/View__.ts +1 -1
- package/src/generator/genBundleFiles.ts +8 -3
- package/src/server/getProcesses.ts +3 -3
- package/src/server/naslServer.ts +9 -2
- package/src/utils/i18nInfo.ts +7 -2
- package/.nyc_output/processinfo/559608df-ab15-4969-acf0-5239dacd6111.json +0 -1
- package/coverage/src/common/utils.ts.html +0 -136
- package/coverage/src/concepts/AbstractInterface__.ts.html +0 -280
- package/coverage/src/concepts/Block__.ts.html +0 -910
- package/coverage/src/concepts/CountersignPolicy__.ts.html +0 -316
- package/coverage/src/concepts/DefaultValue__.ts.html +0 -1000
- package/coverage/src/concepts/I18nInfo__.ts.html +0 -436
- package/coverage/src/concepts/ImportedInterface__.ts.html +0 -268
- package/coverage/src/concepts/MetadataType__.ts.html +0 -2053
- package/coverage/src/concepts/MultiApprovalPolicy__.ts.html +0 -292
- package/coverage/src/concepts/SequentialPolicy__.ts.html +0 -259
- package/coverage/src/concepts/StaticString__.ts.html +0 -403
- package/coverage/src/concepts/basics/constants.ts.html +0 -88
- package/coverage/src/concepts/basics/index.html +0 -116
- package/coverage/src/concepts/utils/asserts.ts.html +0 -27967
- package/coverage/src/concepts/utils/index.html +0 -116
- package/coverage/src/utils/i18nInfo.ts.html +0 -166
- package/coverage/src/utils/time-slicing/constant.ts.html +0 -196
- package/coverage/src/utils/time-slicing/controller.ts.html +0 -1144
- package/coverage/src/utils/time-slicing/index.html +0 -236
- package/coverage/src/utils/time-slicing/index.ts.html +0 -103
- package/coverage/src/utils/time-slicing/page-state.ts.html +0 -121
- package/coverage/src/utils/time-slicing/performance.ts.html +0 -253
- package/coverage/src/utils/time-slicing/runner.ts.html +0 -241
- package/coverage/src/utils/time-slicing/tool.ts.html +0 -220
- package/coverage/src/utils/time-slicing/utils.ts.html +0 -355
- package/coverage/src/utils/time-slicing/wrapper.ts.html +0 -259
|
@@ -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">6.39% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>30/469</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.66% </span>
|
|
34
34
|
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>2/
|
|
35
|
+
<span class='fraction'>2/300</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.49% </span>
|
|
41
41
|
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>1/
|
|
42
|
+
<span class='fraction'>1/67</span>
|
|
43
43
|
</div>
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">
|
|
47
|
+
<span class="strong">6.69% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>30/448</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -955,578 +955,26 @@
|
|
|
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>
|
|
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>
|
|
1259
|
-
<a name='L1194'></a><a href='#L1194'>1194</a>
|
|
1260
|
-
<a name='L1195'></a><a href='#L1195'>1195</a>
|
|
1261
|
-
<a name='L1196'></a><a href='#L1196'>1196</a>
|
|
1262
|
-
<a name='L1197'></a><a href='#L1197'>1197</a>
|
|
1263
|
-
<a name='L1198'></a><a href='#L1198'>1198</a>
|
|
1264
|
-
<a name='L1199'></a><a href='#L1199'>1199</a>
|
|
1265
|
-
<a name='L1200'></a><a href='#L1200'>1200</a>
|
|
1266
|
-
<a name='L1201'></a><a href='#L1201'>1201</a>
|
|
1267
|
-
<a name='L1202'></a><a href='#L1202'>1202</a>
|
|
1268
|
-
<a name='L1203'></a><a href='#L1203'>1203</a>
|
|
1269
|
-
<a name='L1204'></a><a href='#L1204'>1204</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
|
|
958
|
+
<a name='L893'></a><a href='#L893'>893</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
|
|
1270
959
|
<span class="cline-any cline-yes">1x</span>
|
|
1271
960
|
<span class="cline-any cline-yes">1x</span>
|
|
1272
961
|
<span class="cline-any cline-yes">1x</span>
|
|
1273
962
|
<span class="cline-any cline-yes">1x</span>
|
|
1274
963
|
<span class="cline-any cline-yes">1x</span>
|
|
1275
964
|
<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-yes">1x</span>
|
|
1280
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1281
965
|
<span class="cline-any cline-neutral"> </span>
|
|
1282
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1283
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1284
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1285
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1286
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1287
966
|
<span class="cline-any cline-yes">1x</span>
|
|
1288
967
|
<span class="cline-any cline-yes">1x</span>
|
|
1289
968
|
<span class="cline-any cline-neutral"> </span>
|
|
1290
969
|
<span class="cline-any cline-neutral"> </span>
|
|
1291
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1292
970
|
<span class="cline-any cline-neutral"> </span>
|
|
1293
971
|
<span class="cline-any cline-yes">1x</span>
|
|
1294
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1295
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1296
972
|
<span class="cline-any cline-yes">1x</span>
|
|
1297
|
-
<span class="cline-any cline-no"> </span>
|
|
1298
|
-
<span class="cline-any cline-neutral"> </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-neutral"> </span>
|
|
1306
|
-
<span class="cline-any cline-no"> </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-no"> </span>
|
|
1311
|
-
<span class="cline-any cline-no"> </span>
|
|
1312
|
-
<span class="cline-any cline-no"> </span>
|
|
1313
|
-
<span class="cline-any cline-no"> </span>
|
|
1314
|
-
<span class="cline-any cline-no"> </span>
|
|
1315
|
-
<span class="cline-any cline-no"> </span>
|
|
1316
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1317
|
-
<span class="cline-any cline-no"> </span>
|
|
1318
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1319
|
-
<span class="cline-any cline-no"> </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-neutral"> </span>
|
|
1324
|
-
<span class="cline-any cline-no"> </span>
|
|
1325
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1326
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1327
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1328
|
-
<span class="cline-any cline-no"> </span>
|
|
1329
|
-
<span class="cline-any cline-no"> </span>
|
|
1330
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1331
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1332
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1333
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1334
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1335
|
-
<span class="cline-any cline-no"> </span>
|
|
1336
|
-
<span class="cline-any cline-no"> </span>
|
|
1337
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1338
|
-
<span class="cline-any cline-no"> </span>
|
|
1339
|
-
<span class="cline-any cline-no"> </span>
|
|
1340
|
-
<span class="cline-any cline-no"> </span>
|
|
1341
|
-
<span class="cline-any cline-no"> </span>
|
|
1342
|
-
<span class="cline-any cline-no"> </span>
|
|
1343
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1344
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1345
|
-
<span class="cline-any cline-no"> </span>
|
|
1346
|
-
<span class="cline-any cline-no"> </span>
|
|
1347
|
-
<span class="cline-any cline-no"> </span>
|
|
1348
|
-
<span class="cline-any cline-no"> </span>
|
|
1349
|
-
<span class="cline-any cline-no"> </span>
|
|
1350
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1351
|
-
<span class="cline-any cline-no"> </span>
|
|
1352
|
-
<span class="cline-any cline-no"> </span>
|
|
1353
|
-
<span class="cline-any cline-no"> </span>
|
|
1354
|
-
<span class="cline-any cline-no"> </span>
|
|
1355
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1356
|
-
<span class="cline-any cline-no"> </span>
|
|
1357
|
-
<span class="cline-any cline-no"> </span>
|
|
1358
|
-
<span class="cline-any cline-no"> </span>
|
|
1359
|
-
<span class="cline-any cline-no"> </span>
|
|
1360
|
-
<span class="cline-any cline-no"> </span>
|
|
1361
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1362
|
-
<span class="cline-any cline-no"> </span>
|
|
1363
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1364
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1365
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1366
|
-
<span class="cline-any cline-no"> </span>
|
|
1367
|
-
<span class="cline-any cline-no"> </span>
|
|
1368
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1369
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1370
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1371
|
-
<span class="cline-any cline-no"> </span>
|
|
1372
|
-
<span class="cline-any cline-no"> </span>
|
|
1373
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1374
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1375
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1376
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1377
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1378
973
|
<span class="cline-any cline-yes">1x</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-no"> </span>
|
|
1385
|
-
<span class="cline-any cline-no"> </span>
|
|
1386
|
-
<span class="cline-any cline-no"> </span>
|
|
1387
|
-
<span class="cline-any cline-no"> </span>
|
|
1388
|
-
<span class="cline-any cline-no"> </span>
|
|
1389
|
-
<span class="cline-any cline-no"> </span>
|
|
1390
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1391
|
-
<span class="cline-any cline-no"> </span>
|
|
1392
|
-
<span class="cline-any cline-no"> </span>
|
|
1393
|
-
<span class="cline-any cline-no"> </span>
|
|
1394
|
-
<span class="cline-any cline-no"> </span>
|
|
1395
|
-
<span class="cline-any cline-no"> </span>
|
|
1396
|
-
<span class="cline-any cline-no"> </span>
|
|
1397
|
-
<span class="cline-any cline-no"> </span>
|
|
1398
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1399
|
-
<span class="cline-any cline-no"> </span>
|
|
1400
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1401
|
-
<span class="cline-any cline-no"> </span>
|
|
1402
|
-
<span class="cline-any cline-no"> </span>
|
|
1403
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1404
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1405
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1406
|
-
<span class="cline-any cline-no"> </span>
|
|
1407
|
-
<span class="cline-any cline-no"> </span>
|
|
1408
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1409
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1410
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1411
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1412
|
-
<span class="cline-any cline-no"> </span>
|
|
1413
|
-
<span class="cline-any cline-no"> </span>
|
|
1414
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1415
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1416
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1417
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1418
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1419
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1420
|
-
<span class="cline-any cline-no"> </span>
|
|
1421
|
-
<span class="cline-any cline-no"> </span>
|
|
1422
|
-
<span class="cline-any cline-no"> </span>
|
|
1423
|
-
<span class="cline-any cline-no"> </span>
|
|
1424
|
-
<span class="cline-any cline-no"> </span>
|
|
1425
|
-
<span class="cline-any cline-no"> </span>
|
|
1426
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1427
|
-
<span class="cline-any cline-no"> </span>
|
|
1428
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1429
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1430
|
-
<span class="cline-any cline-no"> </span>
|
|
1431
|
-
<span class="cline-any cline-no"> </span>
|
|
1432
|
-
<span class="cline-any cline-no"> </span>
|
|
1433
|
-
<span class="cline-any cline-no"> </span>
|
|
1434
|
-
<span class="cline-any cline-no"> </span>
|
|
1435
|
-
<span class="cline-any cline-no"> </span>
|
|
1436
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1437
|
-
<span class="cline-any cline-no"> </span>
|
|
1438
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1439
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1440
|
-
<span class="cline-any cline-no"> </span>
|
|
1441
|
-
<span class="cline-any cline-no"> </span>
|
|
1442
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1443
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1444
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1445
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1446
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1447
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1448
974
|
<span class="cline-any cline-yes">1x</span>
|
|
1449
|
-
<span class="cline-any cline-no"> </span>
|
|
1450
|
-
<span class="cline-any cline-no"> </span>
|
|
1451
|
-
<span class="cline-any cline-no"> </span>
|
|
1452
|
-
<span class="cline-any cline-no"> </span>
|
|
1453
975
|
<span class="cline-any cline-neutral"> </span>
|
|
1454
|
-
<span class="cline-any cline-no"> </span>
|
|
1455
|
-
<span class="cline-any cline-no"> </span>
|
|
1456
|
-
<span class="cline-any cline-no"> </span>
|
|
1457
|
-
<span class="cline-any cline-no"> </span>
|
|
1458
|
-
<span class="cline-any cline-no"> </span>
|
|
1459
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1460
|
-
<span class="cline-any cline-no"> </span>
|
|
1461
|
-
<span class="cline-any cline-no"> </span>
|
|
1462
|
-
<span class="cline-any cline-no"> </span>
|
|
1463
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1464
|
-
<span class="cline-any cline-no"> </span>
|
|
1465
|
-
<span class="cline-any cline-neutral"> </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-neutral"> </span>
|
|
1470
|
-
<span class="cline-any cline-neutral"> </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-neutral"> </span>
|
|
1478
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1479
|
-
<span class="cline-any cline-no"> </span>
|
|
1480
|
-
<span class="cline-any cline-no"> </span>
|
|
1481
|
-
<span class="cline-any cline-no"> </span>
|
|
1482
|
-
<span class="cline-any cline-no"> </span>
|
|
1483
|
-
<span class="cline-any cline-no"> </span>
|
|
1484
|
-
<span class="cline-any cline-no"> </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-neutral"> </span>
|
|
1489
|
-
<span class="cline-any cline-no"> </span>
|
|
1490
|
-
<span class="cline-any cline-no"> </span>
|
|
1491
|
-
<span class="cline-any cline-no"> </span>
|
|
1492
|
-
<span class="cline-any cline-no"> </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-neutral"> </span>
|
|
1497
|
-
<span class="cline-any cline-no"> </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-no"> </span>
|
|
1502
|
-
<span class="cline-any cline-no"> </span>
|
|
1503
|
-
<span class="cline-any cline-no"> </span>
|
|
1504
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1505
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1506
|
-
<span class="cline-any cline-no"> </span>
|
|
1507
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1508
|
-
<span class="cline-any cline-no"> </span>
|
|
1509
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1510
|
-
<span class="cline-any cline-no"> </span>
|
|
1511
|
-
<span class="cline-any cline-no"> </span>
|
|
1512
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1513
|
-
<span class="cline-any cline-no"> </span>
|
|
1514
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1515
|
-
<span class="cline-any cline-no"> </span>
|
|
1516
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1517
|
-
<span class="cline-any cline-no"> </span>
|
|
1518
|
-
<span class="cline-any cline-no"> </span>
|
|
1519
|
-
<span class="cline-any cline-no"> </span>
|
|
1520
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1521
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1522
|
-
<span class="cline-any cline-no"> </span>
|
|
1523
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1524
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1525
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1526
|
-
<span class="cline-any cline-no"> </span>
|
|
1527
|
-
<span class="cline-any cline-no"> </span>
|
|
1528
|
-
<span class="cline-any cline-no"> </span>
|
|
1529
976
|
<span class="cline-any cline-neutral"> </span>
|
|
977
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1530
978
|
<span class="cline-any cline-neutral"> </span>
|
|
1531
979
|
<span class="cline-any cline-neutral"> </span>
|
|
1532
980
|
<span class="cline-any cline-no"> </span>
|
|
@@ -1556,7 +1004,6 @@
|
|
|
1556
1004
|
<span class="cline-any cline-neutral"> </span>
|
|
1557
1005
|
<span class="cline-any cline-neutral"> </span>
|
|
1558
1006
|
<span class="cline-any cline-neutral"> </span>
|
|
1559
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1560
1007
|
<span class="cline-any cline-no"> </span>
|
|
1561
1008
|
<span class="cline-any cline-no"> </span>
|
|
1562
1009
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -1661,11 +1108,6 @@
|
|
|
1661
1108
|
<span class="cline-any cline-no"> </span>
|
|
1662
1109
|
<span class="cline-any cline-no"> </span>
|
|
1663
1110
|
<span class="cline-any cline-no"> </span>
|
|
1664
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1665
|
-
<span class="cline-any cline-no"> </span>
|
|
1666
|
-
<span class="cline-any cline-no"> </span>
|
|
1667
|
-
<span class="cline-any cline-no"> </span>
|
|
1668
|
-
<span class="cline-any cline-no"> </span>
|
|
1669
1111
|
<span class="cline-any cline-no"> </span>
|
|
1670
1112
|
<span class="cline-any cline-no"> </span>
|
|
1671
1113
|
<span class="cline-any cline-no"> </span>
|
|
@@ -1774,8 +1216,6 @@
|
|
|
1774
1216
|
<span class="cline-any cline-no"> </span>
|
|
1775
1217
|
<span class="cline-any cline-no"> </span>
|
|
1776
1218
|
<span class="cline-any cline-neutral"> </span>
|
|
1777
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1778
|
-
<span class="cline-any cline-no"> </span>
|
|
1779
1219
|
<span class="cline-any cline-no"> </span>
|
|
1780
1220
|
<span class="cline-any cline-no"> </span>
|
|
1781
1221
|
<span class="cline-any cline-no"> </span>
|
|
@@ -1803,9 +1243,6 @@
|
|
|
1803
1243
|
<span class="cline-any cline-no"> </span>
|
|
1804
1244
|
<span class="cline-any cline-no"> </span>
|
|
1805
1245
|
<span class="cline-any cline-no"> </span>
|
|
1806
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1807
|
-
<span class="cline-any cline-no"> </span>
|
|
1808
|
-
<span class="cline-any cline-no"> </span>
|
|
1809
1246
|
<span class="cline-any cline-no"> </span>
|
|
1810
1247
|
<span class="cline-any cline-neutral"> </span>
|
|
1811
1248
|
<span class="cline-any cline-no"> </span>
|
|
@@ -1885,29 +1322,10 @@
|
|
|
1885
1322
|
<span class="cline-any cline-neutral"> </span>
|
|
1886
1323
|
<span class="cline-any cline-neutral"> </span>
|
|
1887
1324
|
<span class="cline-any cline-neutral"> </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-no"> </span>
|
|
1892
|
-
<span class="cline-any cline-no"> </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-no"> </span>
|
|
1897
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1898
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1899
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1900
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1901
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1902
|
-
<span class="cline-any cline-no"> </span>
|
|
1903
|
-
<span class="cline-any cline-no"> </span>
|
|
1904
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1905
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1906
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1907
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1908
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1325
|
+
<span class="cline-any cline-no"> </span>
|
|
1909
1326
|
<span class="cline-any cline-neutral"> </span>
|
|
1910
1327
|
<span class="cline-any cline-neutral"> </span>
|
|
1328
|
+
<span class="cline-any cline-no"> </span>
|
|
1911
1329
|
<span class="cline-any cline-neutral"> </span>
|
|
1912
1330
|
<span class="cline-any cline-neutral"> </span>
|
|
1913
1331
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -1916,7 +1334,6 @@
|
|
|
1916
1334
|
<span class="cline-any cline-no"> </span>
|
|
1917
1335
|
<span class="cline-any cline-no"> </span>
|
|
1918
1336
|
<span class="cline-any cline-no"> </span>
|
|
1919
|
-
<span class="cline-any cline-no"> </span>
|
|
1920
1337
|
<span class="cline-any cline-neutral"> </span>
|
|
1921
1338
|
<span class="cline-any cline-no"> </span>
|
|
1922
1339
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -1948,7 +1365,6 @@
|
|
|
1948
1365
|
<span class="cline-any cline-neutral"> </span>
|
|
1949
1366
|
<span class="cline-any cline-neutral"> </span>
|
|
1950
1367
|
<span class="cline-any cline-neutral"> </span>
|
|
1951
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1952
1368
|
<span class="cline-any cline-yes">1x</span>
|
|
1953
1369
|
<span class="cline-any cline-yes">1x</span>
|
|
1954
1370
|
<span class="cline-any cline-yes">1x</span>
|
|
@@ -1995,7 +1411,6 @@
|
|
|
1995
1411
|
<span class="cline-any cline-no"> </span>
|
|
1996
1412
|
<span class="cline-any cline-no"> </span>
|
|
1997
1413
|
<span class="cline-any cline-no"> </span>
|
|
1998
|
-
<span class="cline-any cline-no"> </span>
|
|
1999
1414
|
<span class="cline-any cline-neutral"> </span>
|
|
2000
1415
|
<span class="cline-any cline-no"> </span>
|
|
2001
1416
|
<span class="cline-any cline-no"> </span>
|
|
@@ -2003,7 +1418,6 @@
|
|
|
2003
1418
|
<span class="cline-any cline-no"> </span>
|
|
2004
1419
|
<span class="cline-any cline-no"> </span>
|
|
2005
1420
|
<span class="cline-any cline-no"> </span>
|
|
2006
|
-
<span class="cline-any cline-no"> </span>
|
|
2007
1421
|
<span class="cline-any cline-neutral"> </span>
|
|
2008
1422
|
<span class="cline-any cline-neutral"> </span>
|
|
2009
1423
|
<span class="cline-any cline-no"> </span>
|
|
@@ -2018,7 +1432,6 @@
|
|
|
2018
1432
|
<span class="cline-any cline-neutral"> </span>
|
|
2019
1433
|
<span class="cline-any cline-neutral"> </span>
|
|
2020
1434
|
<span class="cline-any cline-neutral"> </span>
|
|
2021
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2022
1435
|
<span class="cline-any cline-no"> </span>
|
|
2023
1436
|
<span class="cline-any cline-no"> </span>
|
|
2024
1437
|
<span class="cline-any cline-no"> </span>
|
|
@@ -2089,22 +1502,6 @@
|
|
|
2089
1502
|
<span class="cline-any cline-neutral"> </span>
|
|
2090
1503
|
<span class="cline-any cline-neutral"> </span>
|
|
2091
1504
|
<span class="cline-any cline-neutral"> </span>
|
|
2092
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2093
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2094
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2095
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2096
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2097
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2098
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2099
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2100
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2101
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2102
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2103
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2104
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2105
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2106
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2107
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2108
1505
|
<span class="cline-any cline-no"> </span>
|
|
2109
1506
|
<span class="cline-any cline-no"> </span>
|
|
2110
1507
|
<span class="cline-any cline-no"> </span>
|
|
@@ -2116,11 +1513,8 @@
|
|
|
2116
1513
|
<span class="cline-any cline-no"> </span>
|
|
2117
1514
|
<span class="cline-any cline-neutral"> </span>
|
|
2118
1515
|
<span class="cline-any cline-neutral"> </span>
|
|
2119
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2120
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2121
1516
|
<span class="cline-any cline-no"> </span>
|
|
2122
1517
|
<span class="cline-any cline-no"> </span>
|
|
2123
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2124
1518
|
<span class="cline-any cline-no"> </span>
|
|
2125
1519
|
<span class="cline-any cline-neutral"> </span>
|
|
2126
1520
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -2134,19 +1528,6 @@
|
|
|
2134
1528
|
<span class="cline-any cline-no"> </span>
|
|
2135
1529
|
<span class="cline-any cline-neutral"> </span>
|
|
2136
1530
|
<span class="cline-any cline-no"> </span>
|
|
2137
|
-
<span class="cline-any cline-no"> </span>
|
|
2138
|
-
<span class="cline-any cline-no"> </span>
|
|
2139
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2140
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2141
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2142
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2143
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2144
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2145
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2146
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2147
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2148
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2149
|
-
<span class="cline-any cline-no"> </span>
|
|
2150
1531
|
<span class="cline-any cline-neutral"> </span>
|
|
2151
1532
|
<span class="cline-any cline-neutral"> </span>
|
|
2152
1533
|
<span class="cline-any cline-no"> </span>
|
|
@@ -2310,10 +1691,6 @@
|
|
|
2310
1691
|
<span class="cline-any cline-neutral"> </span>
|
|
2311
1692
|
<span class="cline-any cline-neutral"> </span>
|
|
2312
1693
|
<span class="cline-any cline-yes">1x</span>
|
|
2313
|
-
<span class="cline-any cline-no"> </span>
|
|
2314
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2315
|
-
<span class="cline-any cline-no"> </span>
|
|
2316
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2317
1694
|
<span class="cline-any cline-neutral"> </span>
|
|
2318
1695
|
<span class="cline-any cline-no"> </span>
|
|
2319
1696
|
<span class="cline-any cline-no"> </span>
|
|
@@ -2387,7 +1764,6 @@
|
|
|
2387
1764
|
<span class="cline-any cline-neutral"> </span>
|
|
2388
1765
|
<span class="cline-any cline-neutral"> </span>
|
|
2389
1766
|
<span class="cline-any cline-neutral"> </span>
|
|
2390
|
-
<span class="cline-any cline-neutral"> </span>
|
|
2391
1767
|
<span class="cline-any cline-no"> </span>
|
|
2392
1768
|
<span class="cline-any cline-no"> </span>
|
|
2393
1769
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -2469,17 +1845,18 @@
|
|
|
2469
1845
|
<span class="cline-any cline-no"> </span>
|
|
2470
1846
|
<span class="cline-any cline-no"> </span>
|
|
2471
1847
|
<span class="cline-any cline-neutral"> </span>
|
|
2472
|
-
<span class="cline-any cline-neutral"> </span
|
|
2473
|
-
|
|
1848
|
+
<span class="cline-any cline-neutral"> </span>
|
|
1849
|
+
<span class="cline-any cline-neutral"> </span>
|
|
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';
|
|
2474
1851
|
import { addBreakpointNodesFromApp } from '../../breakpoint';
|
|
2475
1852
|
import { getConceptConstructor } from '../../decorators';
|
|
2476
1853
|
import { config } from '../../config';
|
|
2477
1854
|
import storageService from './service';
|
|
2478
1855
|
import { v4 as uuidv4 } from 'uuid';
|
|
2479
1856
|
import stepRecorder from '../../manager/stepRecorder';
|
|
2480
|
-
import * as jsoner from './jsoner';
|
|
2481
1857
|
/// #if !process.env.NODE_ENV || process.env.BUILD_TARGET === 'node'
|
|
2482
1858
|
import * as fs from 'fs-extra';
|
|
1859
|
+
import * as jsoner from './jsoner';
|
|
2483
1860
|
import type { NaslServer } from 'src/server/naslServer';
|
|
2484
1861
|
/// #endif
|
|
2485
1862
|
|
|
@@ -2491,500 +1868,254 @@ export const batchInstruct = storageService.batchInstruct;
|
|
|
2491
1868
|
export const breakpoint = storageService.breakpoint;
|
|
2492
1869
|
|
|
2493
1870
|
let tabTimestamp: string;
|
|
2494
|
-
export
|
|
2495
|
-
|
|
2496
|
-
|
|
2497
|
-
|
|
2498
|
-
|
|
2499
|
-
|
|
2500
|
-
|
|
2501
|
-
|
|
2502
|
-
<span class="cstat-no" title="statement not covered" >
|
|
2503
|
-
|
|
2504
|
-
|
|
2505
|
-
<span class="cstat-no" title="statement not covered"
|
|
2506
|
-
<span class="cstat-no" title="statement not covered" >
|
|
2507
|
-
|
|
2508
|
-
|
|
2509
|
-
<span class="cstat-no" title="statement not covered" > request.onsuccess = <span class="fstat-no" title="function not covered" >(e</span>vent: any) => {</span>
|
|
2510
|
-
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
2511
|
-
const db = <span class="cstat-no" title="statement not covered" >event.target.result;</span>
|
|
2512
|
-
const transaction = <span class="cstat-no" title="statement not covered" >db.transaction('operationRecord', 'readwrite');</span>
|
|
2513
|
-
const objectStore = <span class="cstat-no" title="statement not covered" >transaction.objectStore('operationRecord');</span>
|
|
2514
|
-
<span class="cstat-no" title="statement not covered" > operation.appId = operationRecordInfoMap.get('appId');</span>
|
|
2515
|
-
<span class="cstat-no" title="statement not covered" > operation.branchId = operationRecordInfoMap.get('branchId');</span>
|
|
2516
|
-
<span class="cstat-no" title="statement not covered" > operation.accountId = operationRecordInfoMap.get('accountId');</span>
|
|
2517
|
-
<span class="cstat-no" title="statement not covered" > operation.userId = operationRecordInfoMap.get('userId');</span>
|
|
2518
|
-
<span class="cstat-no" title="statement not covered" > operation.phone = operationRecordInfoMap.get('phone');</span>
|
|
2519
|
-
// 将时间戳添加到记录中
|
|
2520
|
-
<span class="cstat-no" title="statement not covered" > operation.timestamp = Date.now();</span>
|
|
2521
|
-
// 这份数据不存在向上的引用,因此用cloneDeep没有关系
|
|
2522
|
-
<span class="cstat-no" title="statement not covered" > objectStore.put(cloneDeep(operation));</span>
|
|
2523
|
-
<span class="cstat-no" title="statement not covered" > transaction.oncomplete = <span class="fstat-no" title="function not covered" >() =</span>> {</span>
|
|
2524
|
-
<span class="cstat-no" title="statement not covered" > db.close();</span>
|
|
2525
|
-
};
|
|
2526
|
-
} catch(err) {
|
|
2527
|
-
<span class="cstat-no" title="statement not covered" > console.log(err);</span>
|
|
2528
|
-
}
|
|
2529
|
-
};
|
|
2530
|
-
|
|
2531
|
-
<span class="cstat-no" title="statement not covered" > request.onerror = <span class="fstat-no" title="function not covered" >function(e</span>vent) {</span>
|
|
2532
|
-
<span class="cstat-no" title="statement not covered" > console.log('Failed to open database');</span>
|
|
2533
|
-
};
|
|
2534
|
-
}
|
|
2535
|
-
|
|
2536
|
-
// 删除失效数据
|
|
2537
|
-
async function <span class="fstat-no" title="function not covered" >deleteExpiredRecords(</span>) {
|
|
2538
|
-
<span class="cstat-no" title="statement not covered" > return new Promise(<span class="fstat-no" title="function not covered" >(r</span>esolve, reject) => {</span>
|
|
2539
|
-
const request = <span class="cstat-no" title="statement not covered" >indexedDB.open('naslData', 1);</span>
|
|
2540
|
-
|
|
2541
|
-
<span class="cstat-no" title="statement not covered" > request.onupgradeneeded = <span class="fstat-no" title="function not covered" >(e</span>vent: any) => {</span>
|
|
2542
|
-
const db = <span class="cstat-no" title="statement not covered" >event.target.result;</span>
|
|
2543
|
-
const objectStore = <span class="cstat-no" title="statement not covered" >db.createObjectStore('operationRecord', { autoIncrement: true });</span>
|
|
2544
|
-
<span class="cstat-no" title="statement not covered" > objectStore.createIndex('appId', 'appId');</span>
|
|
2545
|
-
<span class="cstat-no" title="statement not covered" > objectStore.createIndex('timestamp', 'timestamp');</span>
|
|
2546
|
-
};
|
|
2547
|
-
|
|
2548
|
-
<span class="cstat-no" title="statement not covered" > request.onsuccess = <span class="fstat-no" title="function not covered" >(e</span>vent: any) => {</span>
|
|
2549
|
-
const db = <span class="cstat-no" title="statement not covered" >event.target.result;</span>
|
|
2550
|
-
const transaction = <span class="cstat-no" title="statement not covered" >db.transaction('operationRecord', 'readwrite');</span>
|
|
2551
|
-
const objectStore = <span class="cstat-no" title="statement not covered" >transaction.objectStore('operationRecord');</span>
|
|
2552
|
-
const index = <span class="cstat-no" title="statement not covered" >objectStore.index('timestamp');</span>
|
|
2553
|
-
// 设置有效期,默认7天
|
|
2554
|
-
const localStorageExpiresAt = <span class="cstat-no" title="statement not covered" >window.localStorage.getItem('expiresAt');</span>
|
|
2555
|
-
const expiresAt = <span class="cstat-no" title="statement not covered" >Date.now() - (localStorageExpiresAt ? +localStorageExpiresAt : 7 * 24 * 60 * 60 * 1000);</span>
|
|
2556
|
-
const range = <span class="cstat-no" title="statement not covered" >IDBKeyRange.upperBound(expiresAt);</span>
|
|
2557
|
-
const expiredRecordsRequest = <span class="cstat-no" title="statement not covered" >index.openCursor(range);</span>
|
|
2558
|
-
|
|
2559
|
-
<span class="cstat-no" title="statement not covered" > expiredRecordsRequest.onsuccess = <span class="fstat-no" title="function not covered" >(e</span>vent: any) => {</span>
|
|
2560
|
-
const cursor = <span class="cstat-no" title="statement not covered" >event.target.result;</span>
|
|
2561
|
-
<span class="cstat-no" title="statement not covered" > if (cursor) {</span>
|
|
2562
|
-
<span class="cstat-no" title="statement not covered" > objectStore.delete(cursor.primaryKey);</span>
|
|
2563
|
-
<span class="cstat-no" title="statement not covered" > cursor.continue();</span>
|
|
2564
|
-
} else {
|
|
2565
|
-
<span class="cstat-no" title="statement not covered" > resolve(void 0);</span>
|
|
2566
|
-
}
|
|
2567
|
-
};
|
|
2568
|
-
|
|
2569
|
-
<span class="cstat-no" title="statement not covered" > transaction.oncomplete = <span class="fstat-no" title="function not covered" >() =</span>> {</span>
|
|
2570
|
-
<span class="cstat-no" title="statement not covered" > db.close();</span>
|
|
2571
|
-
};
|
|
2572
|
-
};
|
|
2573
|
-
|
|
2574
|
-
<span class="cstat-no" title="statement not covered" > request.onerror = <span class="fstat-no" title="function not covered" >(e</span>vent) => {</span>
|
|
2575
|
-
<span class="cstat-no" title="statement not covered" > reject('Failed to open database');</span>
|
|
2576
|
-
};
|
|
2577
|
-
});
|
|
2578
|
-
}
|
|
2579
|
-
|
|
2580
|
-
// 操作栈查询
|
|
2581
|
-
export function <span class="fstat-no" title="function not covered" >operationRecordQuery(</span>app: any) {
|
|
2582
|
-
<span class="cstat-no" title="statement not covered" > return new Promise(<span class="fstat-no" title="function not covered" >(r</span>esolve, reject) => {</span>
|
|
2583
|
-
const appId = <span class="cstat-no" title="statement not covered" >app?.id;</span>
|
|
2584
|
-
const request = <span class="cstat-no" title="statement not covered" >indexedDB.open('naslData', 1);</span>
|
|
2585
|
-
<span class="cstat-no" title="statement not covered" > request.onsuccess = <span class="fstat-no" title="function not covered" >(e</span>vent: any) => {</span>
|
|
2586
|
-
const db = <span class="cstat-no" title="statement not covered" >event.target.result;</span>
|
|
2587
|
-
const transaction = <span class="cstat-no" title="statement not covered" >db.transaction('operationRecord', 'readonly');</span>
|
|
2588
|
-
const objectStore = <span class="cstat-no" title="statement not covered" >transaction.objectStore('operationRecord');</span>
|
|
2589
|
-
const index = <span class="cstat-no" title="statement not covered" >objectStore.index('appId');</span> // 查询 'appId' 索引
|
|
2590
|
-
const range = <span class="cstat-no" title="statement not covered" >IDBKeyRange.only(appId);</span>
|
|
2591
|
-
const request = <span class="cstat-no" title="statement not covered" >index.openCursor(range);</span>
|
|
2592
|
-
const result: any[] = <span class="cstat-no" title="statement not covered" >[];</span>
|
|
2593
|
-
|
|
2594
|
-
<span class="cstat-no" title="statement not covered" > request.onsuccess = <span class="fstat-no" title="function not covered" >(e</span>vent: any) => {</span>
|
|
2595
|
-
const cursor = <span class="cstat-no" title="statement not covered" >event.target.result;</span>
|
|
2596
|
-
<span class="cstat-no" title="statement not covered" > if (cursor) {</span>
|
|
2597
|
-
const record = <span class="cstat-no" title="statement not covered" >cursor.value;</span>
|
|
2598
|
-
const branchId = <span class="cstat-no" title="statement not covered" >operationRecordInfoMap.get('branchId');</span>
|
|
2599
|
-
<span class="cstat-no" title="statement not covered" > if (record.branchId === branchId) {</span>
|
|
2600
|
-
<span class="cstat-no" title="statement not covered" > result.push(record);</span>
|
|
2601
|
-
}
|
|
2602
|
-
<span class="cstat-no" title="statement not covered" > cursor.continue();</span>
|
|
2603
|
-
} else {
|
|
2604
|
-
<span class="cstat-no" title="statement not covered" > console.log('操作记录栈:', result);</span>
|
|
2605
|
-
<span class="cstat-no" title="statement not covered" > resolve(result);</span>
|
|
2606
|
-
}
|
|
2607
|
-
};
|
|
2608
|
-
|
|
2609
|
-
<span class="cstat-no" title="statement not covered" > transaction.oncomplete = <span class="fstat-no" title="function not covered" >() =</span>> {</span>
|
|
2610
|
-
<span class="cstat-no" title="statement not covered" > db.close();</span>
|
|
2611
|
-
};
|
|
2612
|
-
|
|
2613
|
-
};
|
|
2614
|
-
|
|
2615
|
-
<span class="cstat-no" title="statement not covered" > request.onerror = <span class="fstat-no" title="function not covered" >(e</span>vent) => {</span>
|
|
2616
|
-
<span class="cstat-no" title="statement not covered" > reject('Failed to open database');</span>
|
|
2617
|
-
};
|
|
2618
|
-
});
|
|
2619
|
-
}
|
|
2620
|
-
|
|
2621
|
-
// 获取父对象
|
|
2622
|
-
function <span class="fstat-no" title="function not covered" >getParentInfo(</span>appJson: any, path: string) {
|
|
2623
|
-
const pathArr: string[] = <span class="cstat-no" title="statement not covered" >[];</span>
|
|
2624
|
-
<span class="cstat-no" title="statement not covered" > (path?.split('.') || []).forEach(<span class="fstat-no" title="function not covered" >(p</span>athItem: string) => {</span>
|
|
2625
|
-
const arrayPropertyKey = <span class="cstat-no" title="statement not covered" >pathItem.split('[')[0];</span>
|
|
2626
|
-
const matchArr = <span class="cstat-no" title="statement not covered" >pathItem.match(/\[(.+?)\]/);</span>
|
|
2627
|
-
<span class="cstat-no" title="statement not covered" > if (matchArr) {</span>
|
|
2628
|
-
<span class="cstat-no" title="statement not covered" > pathArr.push(arrayPropertyKey, matchArr[0]);</span>
|
|
2629
|
-
} else {
|
|
2630
|
-
<span class="cstat-no" title="statement not covered" > pathArr.push(pathItem);</span>
|
|
2631
|
-
}
|
|
2632
|
-
});
|
|
2633
|
-
<span class="cstat-no" title="statement not covered" > pathArr.pop();</span>
|
|
2634
|
-
let parentPath = <span class="cstat-no" title="statement not covered" >'';</span>
|
|
2635
|
-
<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>
|
|
2636
|
-
const matchArr = <span class="cstat-no" title="statement not covered" >pathItem.match(/\[(.+?)\]/);</span>
|
|
2637
|
-
<span class="cstat-no" title="statement not covered" > if (matchArr || index === 0) {</span>
|
|
2638
|
-
<span class="cstat-no" title="statement not covered" > parentPath += pathItem;</span>
|
|
2639
|
-
} else {
|
|
2640
|
-
<span class="cstat-no" title="statement not covered" > parentPath += `.${pathItem}`</span>
|
|
2641
|
-
}
|
|
2642
|
-
});
|
|
2643
|
-
const parentNode = <span class="cstat-no" title="statement not covered" >jsoner.queryNodeByPath(appJson, parentPath);</span>
|
|
2644
|
-
<span class="cstat-no" title="statement not covered" > return {</span>
|
|
2645
|
-
parentPath,
|
|
2646
|
-
parentNode,
|
|
2647
|
-
};
|
|
2648
|
-
}
|
|
2649
|
-
|
|
2650
|
-
// 操作记录回放
|
|
2651
|
-
export async function <span class="fstat-no" title="function not covered" >operationRecordPlayback(</span>app: any, operationRecordAction: 'undo' | 'redo') {
|
|
2652
|
-
const operationRecord: any = <span class="cstat-no" title="statement not covered" >await operationRecordQuery(app);</span>
|
|
2653
|
-
let operationRecordIndex = <span class="cstat-no" title="statement not covered" >operationRecordInfoMap.get('operationRecordIndex');</span>
|
|
2654
|
-
<span class="cstat-no" title="statement not covered" > if ([null, undefined].includes(operationRecordIndex)) {</span>
|
|
2655
|
-
<span class="cstat-no" title="statement not covered" > operationRecordIndex = operationRecord?.length;</span>
|
|
2656
|
-
}
|
|
2657
|
-
const appJson = <span class="cstat-no" title="statement not covered" >app.toJSON();</span>
|
|
2658
|
-
<span class="cstat-no" title="statement not covered" > if (operationRecordAction === 'undo') {</span>
|
|
2659
|
-
<span class="cstat-no" title="statement not covered" > if (operationRecordIndex > 0) {</span>
|
|
2660
|
-
const currentRecordItem = <span class="cstat-no" title="statement not covered" >operationRecord?.[operationRecordIndex];</span>
|
|
2661
|
-
const { type, action: recordItemAction } = <span class="cstat-no" title="statement not covered" >currentRecordItem || {};</span>
|
|
2662
|
-
// 多人协作
|
|
2663
|
-
<span class="cstat-no" title="statement not covered" > if (type === 'cooperation' && recordItemAction === 'confirmPull') {</span>
|
|
2664
|
-
<span class="cstat-no" title="statement not covered" > console.log(`当前所处栈位置:${operationRecordIndex},已经进行了多人协作“合并”操作,无法继续对操作栈进行回放!`);</span>
|
|
2665
|
-
<span class="cstat-no" title="statement not covered" > return;</span>
|
|
2666
|
-
}
|
|
2667
|
-
<span class="cstat-no" title="statement not covered" > operationRecordIndex--;</span>
|
|
2668
|
-
} else {
|
|
2669
|
-
<span class="cstat-no" title="statement not covered" > console.log(`当前所处栈位置:${operationRecordIndex},无法继续回放`);</span>
|
|
2670
|
-
<span class="cstat-no" title="statement not covered" > console.log('当前appJSON:', appJson);</span>
|
|
2671
|
-
<span class="cstat-no" title="statement not covered" > return;</span>
|
|
2672
|
-
}
|
|
2673
|
-
} else {
|
|
2674
|
-
<span class="cstat-no" title="statement not covered" > if (operationRecordIndex < operationRecord?.length) {</span>
|
|
2675
|
-
<span class="cstat-no" title="statement not covered" > operationRecordIndex++;</span>
|
|
2676
|
-
} else {
|
|
2677
|
-
<span class="cstat-no" title="statement not covered" > console.log(`当前所处栈位置:${operationRecordIndex},无法继续前进`);</span>
|
|
2678
|
-
<span class="cstat-no" title="statement not covered" > console.log('当前appJSON:', appJson);</span>
|
|
2679
|
-
<span class="cstat-no" title="statement not covered" > return;</span>
|
|
2680
|
-
}
|
|
2681
|
-
}
|
|
2682
|
-
<span class="cstat-no" title="statement not covered" > operationRecordInfoMap.set('operationRecordIndex', operationRecordIndex);</span>
|
|
2683
|
-
const currentIndex = <span class="cstat-no" title="statement not covered" >operationRecordIndex;</span>
|
|
2684
|
-
<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>
|
|
2685
|
-
const { actionItem } = <span class="cstat-no" title="statement not covered" >recordItem || {};</span>
|
|
2686
|
-
const { list } = <span class="cstat-no" title="statement not covered" >actionItem || {};</span>
|
|
2687
|
-
<span class="cstat-no" title="statement not covered" > [...(list || [])].reverse().forEach(<span class="fstat-no" title="function not covered" >(a</span>ctionItem: any) => {</span>
|
|
2688
|
-
const { path, action, object, oldObject, parentKey, index: oldIndex } = <span class="cstat-no" title="statement not covered" >actionItem || {};</span>
|
|
2689
|
-
const { parentNode } = <span class="cstat-no" title="statement not covered" >getParentInfo(appJson, path);</span>
|
|
2690
|
-
let newPath = <span class="cstat-no" title="statement not covered" >path;</span>
|
|
2691
|
-
// 如果涉及到改名操作,需要特殊处理
|
|
2692
|
-
<span class="cstat-no" title="statement not covered" > if (operationRecordAction === 'undo' && action === 'update' && object?.name) {</span>
|
|
2693
|
-
const pathArr = <span class="cstat-no" title="statement not covered" >path?.split('.') || [];</span>
|
|
2694
|
-
const lastPathItem = <span class="cstat-no" title="statement not covered" >pathArr?.pop();</span>
|
|
2695
|
-
<span class="cstat-no" title="statement not covered" > if (lastPathItem) {</span>
|
|
2696
|
-
<span class="cstat-no" title="statement not covered" > pathArr.push(lastPathItem.replace(/(name=)[^\]]+/, `$1${object?.name}`));</span>
|
|
2697
|
-
}
|
|
2698
|
-
<span class="cstat-no" title="statement not covered" > newPath = pathArr.join('.');</span>
|
|
2699
|
-
}
|
|
2700
|
-
const node = <span class="cstat-no" title="statement not covered" >jsoner.queryNodeByPath(appJson, newPath);</span>
|
|
2701
|
-
<span class="cstat-no" title="statement not covered" > switch (action) {</span>
|
|
2702
|
-
case 'create':
|
|
2703
|
-
<span class="cstat-no" title="statement not covered" > if (Array.isArray(parentNode)) {</span>
|
|
2704
|
-
const index = <span class="cstat-no" title="statement not covered" >parentNode.indexOf(node);</span>
|
|
2705
|
-
<span class="cstat-no" title="statement not covered" > if (index !== -1) {</span>
|
|
2706
|
-
<span class="cstat-no" title="statement not covered" > parentNode.splice(index, 1);</span>
|
|
2707
|
-
}
|
|
2708
|
-
} else {
|
|
2709
|
-
<span class="cstat-no" title="statement not covered" > parentNode[parentKey] = null;</span>
|
|
2710
|
-
}
|
|
2711
|
-
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
2712
|
-
case 'delete':
|
|
2713
|
-
<span class="cstat-no" title="statement not covered" > if (Array.isArray(parentNode) && oldIndex !== -1) {</span>
|
|
2714
|
-
<span class="cstat-no" title="statement not covered" > parentNode.splice(oldIndex, 0, oldObject);</span>
|
|
2715
|
-
} else {
|
|
2716
|
-
<span class="cstat-no" title="statement not covered" > parentNode[parentKey] = oldObject;</span>
|
|
2717
|
-
}
|
|
2718
|
-
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
2719
|
-
case 'update':
|
|
2720
|
-
<span class="cstat-no" title="statement not covered" > for (const key in oldObject) {</span>
|
|
2721
|
-
<span class="cstat-no" title="statement not covered" > if (node) {</span>
|
|
2722
|
-
(<span class="cstat-no" title="statement not covered" >node as any)[key] = oldObject[key] ?? null;</span>
|
|
2723
|
-
}
|
|
2724
|
-
}
|
|
2725
|
-
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
2726
|
-
}
|
|
2727
|
-
});
|
|
2728
|
-
});
|
|
2729
|
-
<span class="cstat-no" title="statement not covered" > console.log('当前所处栈位置:', currentIndex);</span>
|
|
2730
|
-
<span class="cstat-no" title="statement not covered" > console.log('当前appJSON:', appJson);</span>
|
|
2731
|
-
<span class="cstat-no" title="statement not covered" > return appJson;</span>
|
|
2732
|
-
}
|
|
2733
|
-
|
|
2734
|
-
function <span class="fstat-no" title="function not covered" >getLogic(</span>key: string, app: any, diffLogicList: string[]) {
|
|
2735
|
-
<span class="cstat-no" title="statement not covered" > if (!diffLogicList.includes(key)) {</span>
|
|
2736
|
-
<span class="cstat-no" title="statement not covered" > diffLogicList.push(key);</span>
|
|
2737
|
-
<span class="cstat-no" title="statement not covered" > if (key.startsWith('app')) {</span>
|
|
2738
|
-
const index = <span class="cstat-no" title="statement not covered" >key.lastIndexOf('.');</span>
|
|
2739
|
-
const name = <span class="cstat-no" title="statement not covered" >key.slice(index + 1);</span>
|
|
2740
|
-
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>
|
|
2741
|
-
<span class="cstat-no" title="statement not covered" > if (logic && logic.body && logic.body.length > 2) {</span>
|
|
2742
|
-
<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>
|
|
2743
|
-
}
|
|
2744
|
-
} else <span class="cstat-no" title="statement not covered" >if (key.startsWith('extensions')) {</span>
|
|
2745
|
-
const _pathArr = <span class="cstat-no" title="statement not covered" >key.split('.');</span>
|
|
1871
|
+
export co<span class="fstat-no" title="function not covered" >nst datab</span>aseTypes = storageService.databaseTypes;
|
|
1872
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
1873
|
+
func<span class="cstat-no" title="statement not covered" >tion getLogic(key: string</span>, app: any, diffLogicList: string[]) {
|
|
1874
|
+
if<span class="cstat-no" title="statement not covered" > (!diffLogicList.includes(key)) {</span>
|
|
1875
|
+
diffLogicList.pu<span class="cstat-no" title="statement not covered" >sh(key);</span>
|
|
1876
|
+
if (key.startsW<span class="cstat-no" title="statement not covered" >ith('app')) {</span>
|
|
1877
|
+
const index = <span class="cstat-no" title="statement not covered" >key.lastIndexOf(<span class="fstat-no" title="function not covered" >'.</span>');<span class="cstat-no" title="statement not covered" ></span></span>
|
|
1878
|
+
<span class="cstat-no" title="statement not covered" > const name = key.slice(index + 1);</span>
|
|
1879
|
+
co<span class="cstat-no" title="statement not covered" >nst logic = app<span class="fstat-no" title="function not covered" >.l</span>ogics.find((i<span class="cstat-no" title="statement not covered" >tem: any) => item.name === name);</span></span>
|
|
1880
|
+
if (logic && logic.body && logic.body.length > 2) {
|
|
1881
|
+
log<span class="cstat-no" title="statement not covered" >ic.body.map((item: any) => getStatement(item, app, diffLogicList));</span>
|
|
1882
|
+
}<span class="cstat-no" title="statement not covered" ></span>
|
|
1883
|
+
} else if (key.s<span class="cstat-no" title="statement not covered" >tartsWith('e</span>xtensions')) {
|
|
1884
|
+
const _pathArr<span class="cstat-no" title="statement not covered" > = key.split</span>('.');
|
|
2746
1885
|
const _name = <span class="cstat-no" title="statement not covered" >_pathArr[1];</span>
|
|
2747
|
-
const _path = <span class="cstat-no" title="statement not covered" >
|
|
2748
|
-
const _list = <span class="cstat-no" title="statement not covered" >
|
|
2749
|
-
|
|
2750
|
-
const name =
|
|
2751
|
-
<span class="cstat-no" title="statement not covered"
|
|
2752
|
-
})
|
|
2753
|
-
|
|
2754
|
-
|
|
2755
|
-
|
|
1886
|
+
const _path = _p<span class="cstat-no" title="statement not covered" >athArr[3];<span class="fstat-no" title="function not covered" ></span></span>
|
|
1887
|
+
const _list = a<span class="cstat-no" title="statement not covered" >pp.dependencies;</span>
|
|
1888
|
+
co<span class="cstat-no" title="statement not covered" >nst _module = _list.fin</span>d((it: Module) => {
|
|
1889
|
+
const name = it.name.replaceAll('-', '_');
|
|
1890
|
+
return name <span class="cstat-no" title="statement not covered" >=== _name;<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" ></span></span></span>
|
|
1891
|
+
<span class="cstat-no" title="statement not covered" > });</span>
|
|
1892
|
+
co<span class="cstat-no" title="statement not covered" >nst logic = _mo<span class="fstat-no" title="function not covered" >du</span>le?.logics?.f<span class="cstat-no" title="statement not covered" >ind((item: Logic) => item.name === _pat</span>h)</span>;
|
|
1893
|
+
if (logic && logic.body && logic.body.length > 2) {
|
|
1894
|
+
logic.body.map((item: any) => getStatement(item, app, diffLogicList));
|
|
2756
1895
|
}
|
|
2757
1896
|
}
|
|
2758
1897
|
}
|
|
2759
|
-
}
|
|
2760
|
-
|
|
2761
|
-
|
|
2762
|
-
|
|
2763
|
-
|
|
2764
|
-
<span class="cstat-no" title="statement not covered" >
|
|
2765
|
-
|
|
2766
|
-
<span class="cstat-no" title="statement not covered" > logicItems = [state.left, state.right];</span>
|
|
2767
|
-
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
2768
|
-
case 'IfStatement':
|
|
2769
|
-
<span class="cstat-no" title="statement not covered" > logicItems = [...state.consequent, ...state.alternate];</span>
|
|
2770
|
-
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
2771
|
-
case 'ForEachStatement':
|
|
2772
|
-
<span class="cstat-no" title="statement not covered" > logicItems = [...state.body, state.each, state.start, state.end];</span>
|
|
1898
|
+
}<span class="fstat-no" title="function not covered" ></span>
|
|
1899
|
+
/* 获取LogicITEM */<span class="cstat-no" title="statement not covered" ></span>
|
|
1900
|
+
fu<span class="cstat-no" title="statement not covered" >nction getStatement(state: any, app: any, diffLogicList: string[]) {</span>
|
|
1901
|
+
let logicItems = [];
|
|
1902
|
+
swit<span class="cstat-no" title="statement not covered" >ch (state.concept) {</span>
|
|
1903
|
+
ca<span class="cstat-no" title="statement not covered" >se 'Ass</span>ignment':
|
|
1904
|
+
logicItems = [state.left, state.right];
|
|
2773
1905
|
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
2774
|
-
|
|
2775
|
-
|
|
1906
|
+
ca<span class="cstat-no" title="statement not covered" >se 'IfS</span>tatement':
|
|
1907
|
+
logicItems = [...state.consequent, ...state.alternate];
|
|
2776
1908
|
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
2777
|
-
|
|
2778
|
-
|
|
1909
|
+
ca<span class="cstat-no" title="statement not covered" >se 'For</span>EachStatement':
|
|
1910
|
+
logicItems = [...state.body, state.each, state.start, state.end];
|
|
2779
1911
|
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
2780
|
-
|
|
2781
|
-
|
|
1912
|
+
ca<span class="cstat-no" title="statement not covered" >se 'Mat</span>ch':
|
|
1913
|
+
logicItems = [state.expression, ...state.cases.map(getStatement).flat(1)];
|
|
2782
1914
|
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
2783
|
-
|
|
2784
|
-
|
|
1915
|
+
ca<span class="cstat-no" title="statement not covered" >se 'Mat</span>chCase':
|
|
1916
|
+
logicItems = [...state.patterns, ...state.body];
|
|
2785
1917
|
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
2786
|
-
|
|
2787
|
-
|
|
1918
|
+
ca<span class="cstat-no" title="statement not covered" >se 'Swi</span>tchStatement':
|
|
1919
|
+
logicItems = state.cases.map(getStatement).flat(1);
|
|
2788
1920
|
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
2789
|
-
|
|
2790
|
-
|
|
2791
|
-
<span class="cstat-no" title="statement not covered" > getLogic(state.calleewholeKey, app, diffLogicList);</span>
|
|
1921
|
+
ca<span class="cstat-no" title="statement not covered" >se 'Swi</span>tchCase':
|
|
1922
|
+
logicItems = [state.test, ...state.consequent];
|
|
2792
1923
|
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
2793
|
-
|
|
2794
|
-
|
|
1924
|
+
ca<span class="cstat-no" title="statement not covered" >se 'Whi</span>leStatement':
|
|
1925
|
+
logicItems = [state.test, ...state.body];
|
|
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);
|
|
2795
1936
|
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
2796
|
-
|
|
2797
|
-
|
|
1937
|
+
ca<span class="cstat-no" title="statement not covered" >se 'Ext</span>ernalDestination':
|
|
1938
|
+
logicItems = [state.anchor, state.link];
|
|
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)];
|
|
2798
1942
|
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
2799
|
-
|
|
2800
|
-
|
|
1943
|
+
ca<span class="cstat-no" title="statement not covered" >se 'Mem</span>berExpression':
|
|
1944
|
+
logicItems = [state.object, state.property];
|
|
2801
1945
|
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
2802
|
-
|
|
2803
|
-
|
|
1946
|
+
ca<span class="cstat-no" title="statement not covered" >se 'Str</span>ingInterpolation':
|
|
1947
|
+
logicItems = [...state.expressions];
|
|
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)];
|
|
2804
1951
|
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
2805
|
-
|
|
2806
|
-
|
|
2807
|
-
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
2808
|
-
case 'StringInterpolation':
|
|
2809
|
-
<span class="cstat-no" title="statement not covered" > logicItems = [...state.expressions];</span>
|
|
2810
|
-
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
2811
|
-
case 'NewComposite':
|
|
2812
|
-
<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>
|
|
2813
|
-
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
2814
|
-
case 'NewList':
|
|
2815
|
-
<span class="cstat-no" title="statement not covered" > logicItems = [...state.items];</span>
|
|
1952
|
+
ca<span class="cstat-no" title="statement not covered" >se 'New</span>List':
|
|
1953
|
+
logicItems = [...state.items];
|
|
2816
1954
|
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
2817
1955
|
default:
|
|
2818
|
-
|
|
2819
|
-
}
|
|
1956
|
+
break;
|
|
1957
|
+
<span class="cstat-no" title="statement not covered" > }<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" ></span></span></span>
|
|
2820
1958
|
|
|
2821
|
-
|
|
1959
|
+
return logicItems.filter((item: LogicItem) => !!item);
|
|
2822
1960
|
}
|
|
2823
|
-
|
|
2824
|
-
|
|
2825
|
-
|
|
2826
|
-
|
|
2827
|
-
|
|
2828
|
-
}
|
|
2829
|
-
/* 分端以后需要改
|
|
2830
|
-
|
|
2831
|
-
|
|
1961
|
+
<span class="fstat-no" title="function not covered" ></span>
|
|
1962
|
+
/*<span class="cstat-no" title="statement not covered" > 小程序影响的服务端发布 */</span>
|
|
1963
|
+
func<span class="cstat-no" title="statement not covered" >tion getMiniAp</span>pChange(target: any, obj: any, action: string) {
|
|
1964
|
+
if (!target.app.miniEnable) {
|
|
1965
|
+
return false;
|
|
1966
|
+
}<span class="cstat-no" title="statement not covered" ></span>
|
|
1967
|
+
<span class="cstat-no" title="statement not covered" > /* 分端以后需要改 */</span>
|
|
1968
|
+
co<span class="cstat-no" title="statement not covered" >nst len = targ</span>et.nodePath?.split('.').length;
|
|
1969
|
+
if (len > 2) {
|
|
2832
1970
|
<span class="cstat-no" title="statement not covered" > return false;</span>
|
|
2833
|
-
}
|
|
2834
|
-
|
|
1971
|
+
}<span class="cstat-no" title="statement not covered" ></span>
|
|
1972
|
+
if (action === 'delete') {
|
|
2835
1973
|
<span class="cstat-no" title="statement not covered" > return true;</span>
|
|
2836
|
-
}
|
|
2837
|
-
|
|
2838
|
-
|
|
1974
|
+
} el<span class="cstat-no" title="statement not covered" >se {</span>
|
|
1975
|
+
if ('name' in obj || 'title' in obj) {
|
|
1976
|
+
return true;
|
|
2839
1977
|
}
|
|
2840
1978
|
}
|
|
2841
1979
|
}
|
|
2842
1980
|
|
|
2843
1981
|
let aiExecuted = 0;
|
|
2844
|
-
let sessionPath = ''
|
|
2845
|
-
// AI
|
|
2846
|
-
|
|
2847
|
-
|
|
2848
|
-
<span class="cstat-no" title="statement not covered" >
|
|
2849
|
-
|
|
1982
|
+
let sessionPath = '';<span class="fstat-no" title="function not covered" ></span>
|
|
1983
|
+
// AI 生成内容是否被采纳<span class="cstat-no" title="statement not covered" ></span>
|
|
1984
|
+
co<span class="cstat-no" title="statement not covered" >nst handleAIPoint = (app: any, actionItem: any) => {</span>
|
|
1985
|
+
co<span class="cstat-no" title="statement not covered" >nst { actionMsg, action } = actionItem || {};</span>
|
|
1986
|
+
if<span class="cstat-no" title="statement not covered" > (aiExecuted > 0)</span> {
|
|
1987
|
+
app.emit('logic:accepted', { ...actionItem, sessionPath });
|
|
2850
1988
|
<span class="cstat-no" title="statement not covered" > aiExecuted -= 1;</span>
|
|
2851
|
-
}
|
|
2852
|
-
|
|
1989
|
+
}<span class="cstat-no" title="statement not covered" ></span>
|
|
1990
|
+
if (actionMsg.includes('自然语言生成代码') && !action) {
|
|
2853
1991
|
<span class="cstat-no" title="statement not covered" > aiExecuted += 1;</span>
|
|
2854
1992
|
// eslint-disable-next-line prefer-destructuring
|
|
2855
|
-
|
|
1993
|
+
sessionPath = actionMsg.match(/:(.*)/)[1];
|
|
2856
1994
|
}
|
|
2857
1995
|
}
|
|
2858
1996
|
|
|
2859
1997
|
/**
|
|
2860
|
-
*
|
|
2861
|
-
|
|
2862
|
-
async function <span class="
|
|
2863
|
-
|
|
2864
|
-
|
|
2865
|
-
<span class="cstat-no" title="statement not covered" >
|
|
2866
|
-
<span class="cstat-no" title="statement not covered" >
|
|
2867
|
-
|
|
2868
|
-
|
|
2869
|
-
|
|
2870
|
-
|
|
2871
|
-
|
|
2872
|
-
<span class="cstat-no" title="statement not covered"
|
|
2873
|
-
|
|
2874
|
-
|
|
2875
|
-
|
|
2876
|
-
<span class="cstat-no" title="statement not covered" >
|
|
2877
|
-
}
|
|
2878
|
-
|
|
2879
|
-
|
|
2880
|
-
<span class="cstat-no" title="statement not covered" >
|
|
2881
|
-
<span class="cstat-no" title="statement not covered" >
|
|
2882
|
-
|
|
2883
|
-
|
|
2884
|
-
|
|
2885
|
-
|
|
2886
|
-
|
|
2887
|
-
<span class="cstat-no" title="statement not covered" >
|
|
2888
|
-
|
|
2889
|
-
|
|
2890
|
-
|
|
2891
|
-
|
|
2892
|
-
|
|
2893
|
-
<span class="cstat-no" title="statement not covered" >
|
|
2894
|
-
<span class="cstat-no" title="statement not covered" >
|
|
2895
|
-
|
|
2896
|
-
|
|
2897
|
-
|
|
2898
|
-
|
|
2899
|
-
|
|
2900
|
-
|
|
2901
|
-
|
|
2902
|
-
<span class="cstat-no" title="statement not covered" > hasBackEnd = true;</span>
|
|
2903
|
-
}
|
|
2904
|
-
} else {
|
|
2905
|
-
<span class="cstat-no" title="statement not covered" > if (needUpdateBackEnd) {</span>
|
|
2906
|
-
<span class="cstat-no" title="statement not covered" > hasBackEnd = true;</span>
|
|
1998
|
+
* 执行更新<span class="fstat-no" title="function not covered" ></span>
|
|
1999
|
+
*/<span class="cstat-no" title="statement not covered" ></span>
|
|
2000
|
+
async function doAc<span class="cstat-no" title="statement not covered" >tion(a</span>pp: any, actionItem: any) {
|
|
2001
|
+
let hasFrontEnd = false;<span class="cstat-no" title="statement not covered" ></span>
|
|
2002
|
+
let hasBackEnd = false;<span class="cstat-no" title="statement not covered" ></span>
|
|
2003
|
+
<span class="cstat-no" title="statement not covered" > const actionList: any[] = [];</span>
|
|
2004
|
+
const { list, act<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >io</span>nMsg, action } = actionItem || {};</span>
|
|
2005
|
+
handleAIPoint<span class="cstat-no" title="statement not covered" >(app, actionItem);</span>
|
|
2006
|
+
co<span class="cstat-no" title="statement not covered" >nst itemloop = (_i: LogicItem, app: any, diffArr: string[]) => {</span>
|
|
2007
|
+
co<span class="cstat-no" title="statement not covered" >nst _l <span class="fstat-no" title="function not covered" >= </span>getStatement(_i, a<span class="cstat-no" title="statement not covered" >pp, diffArr);</span></span>
|
|
2008
|
+
if (_l.length) {
|
|
2009
|
+
_l.map((_ii: LogicItem) => itemloop(_ii, app, diffArr));
|
|
2010
|
+
}<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" ></span></span>
|
|
2011
|
+
};<span class="cstat-no" title="statement not covered" ></span>
|
|
2012
|
+
cons<span class="cstat-no" title="statement not covered" >t loopEle = (view: View <span class="fstat-no" title="function not covered" >| </span>ViewElem<span class="cstat-no" title="statement not covered" >ent, checkAuth: boolean) </span>=></span> {
|
|
2013
|
+
if (view instanceof View) {
|
|
2014
|
+
<span class="cstat-no" title="statement not covered" > view?.elements?.forEac<span class="fstat-no" title="function not covered" >h(</span>(item) =<span class="cstat-no" title="statement not covered" >> loopEle(item, checkAuth</span>))</span>;
|
|
2015
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2016
|
+
vi<span class="cstat-no" title="statement not covered" >ew?.children?.forEach((item) => loopEle(item, checkAuth));</span>
|
|
2017
|
+
if (view instanceof ViewElemen<span class="cstat-no" title="statement not covered" >t) </span>{
|
|
2018
|
+
if<span class="cstat-no" title="statement not covered" > (view.bindEvents.length<span class="fstat-no" title="function not covered" >) </span>{</span>
|
|
2019
|
+
co<span class="cstat-no" title="statement not covered" >nst diffArr: string[] = [<span class="fstat-no" title="function not covered" >];</span></span>
|
|
2020
|
+
view<span class="cstat-no" title="statement not covered" >.bindEvents.forEach<span class="fstat-no" title="function not covered" >((</span>bindEvent) =><span class="cstat-no" title="statement not covered" > {</span></span>
|
|
2021
|
+
bindEvent.logics.forEach((logic) => {
|
|
2022
|
+
logic.body.forEach((logicItem) => itemloop(logicItem, app, diffArr));
|
|
2023
|
+
});<span class="cstat-no" title="statement not covered" ><span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" ></span></span></span>
|
|
2024
|
+
<span class="cstat-no" title="statement not covered" > });</span>
|
|
2025
|
+
co<span class="cstat-no" title="statement not covered" >nst result = diffAr</span>r.filter((item) => item.startsWith('app') || item.startsWith('extensions'));
|
|
2026
|
+
if (result.length) {
|
|
2027
|
+
hasBackEnd = true;
|
|
2028
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2029
|
+
}<span class="cstat-no" title="statement not covered" ><span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" ></span></span></span>
|
|
2030
|
+
if (view.tag === 'u-uploader<span class="cstat-no" title="statement not covered" >' || view.tag === 'van-uploader') {</span>
|
|
2031
|
+
<span class="cstat-no" title="statement not covered" > const bute = view?.bindAttrs.find((item) => item.name === 'url');</span>
|
|
2032
|
+
co<span class="cstat-no" title="statement not covered" >nst needUpdateBackEnd = bute?.value?.endsWith('/import') || bute?.value?.includes('/upload/');</span>
|
|
2033
|
+
if (<span class="cstat-no" title="statement not covered" >checkAuth) {</span>
|
|
2034
|
+
if (needUpdateBackEnd && !view.view.parentAuth) {
|
|
2035
|
+
hasBackEnd = true;
|
|
2036
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2037
|
+
} el<span class="cstat-no" title="statement not covered" >se {</span>
|
|
2038
|
+
if (needUpdateBackEnd) {
|
|
2039
|
+
hasBackEnd = true;
|
|
2907
2040
|
}
|
|
2908
2041
|
}
|
|
2909
2042
|
}
|
|
2910
2043
|
}
|
|
2911
|
-
}
|
|
2912
|
-
|
|
2913
|
-
const loopEleAuth = <span class="cstat-no" title="statement not covered"
|
|
2914
|
-
<span class="
|
|
2915
|
-
const bindDirective =
|
|
2916
|
-
<span class="
|
|
2917
|
-
)
|
|
2918
|
-
|
|
2044
|
+
};<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" ></span></span>
|
|
2045
|
+
<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" ></span></span>
|
|
2046
|
+
const loopEleAuth = (viewE<span class="cstat-no" title="statement not covered" >lement: ViewElement) => {</span>
|
|
2047
|
+
view<span class="fstat-no" title="function not covered" >El</span>ement?.children?.forEac<span class="cstat-no" title="statement not covered" >h((item: ViewElement)</span> => {
|
|
2048
|
+
const bindDirective = item?.bindDirectives?.find(
|
|
2049
|
+
<span class="cstat-no" title="statement not covered" > (item: BindDirective) => item.name === 'auth'</span>
|
|
2050
|
+
)<span class="cstat-no" title="statement not covered" ></span>
|
|
2051
|
+
if (bindDirective) {
|
|
2919
2052
|
<span class="cstat-no" title="statement not covered" > hasBackEnd = true</span>
|
|
2920
2053
|
}
|
|
2921
|
-
|
|
2922
|
-
})
|
|
2923
|
-
}
|
|
2924
|
-
<span class="cstat-no" title="statement not covered" >
|
|
2925
|
-
<span class="cstat-no" title="statement not covered" >
|
|
2926
|
-
|
|
2927
|
-
const
|
|
2928
|
-
const _path: string =
|
|
2929
|
-
|
|
2930
|
-
|
|
2054
|
+
loopEleAuth(item)
|
|
2055
|
+
<span class="cstat-no" title="statement not covered" > })</span>
|
|
2056
|
+
}<span class="cstat-no" title="statement not covered" ></span>
|
|
2057
|
+
try <span class="cstat-no" title="statement not covered" >{<span class="fstat-no" title="function not covered" ></span></span>
|
|
2058
|
+
if (Array.isArray(list)<span class="cstat-no" title="statement not covered" >) {</span>
|
|
2059
|
+
list.forEach((event) => <span class="cstat-no" title="statement not covered" >{</span>
|
|
2060
|
+
const emitTarg<span class="cstat-no" title="statement not covered" >et = event?.originEvent?.tar</span>get as SynatxNode;
|
|
2061
|
+
<span class="cstat-no" title="statement not covered" > const _path: string = event.originEvent.path;<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" ></span></span></span>
|
|
2062
|
+
co<span class="cstat-no" title="statement not covered" >nst _root = _path.s</span>plit('.')?.[1] || '';
|
|
2063
|
+
if (['backend', 'overriddenLogics', 'dataSources', 'processes', 'roles', 'logics', 'enums', 'structures', 'interfaces', 'interfaceDependencies', 'configuration', 'dependencies', 'authLogics', 'authLogicsForCallInterface', 'triggerLaunchers', 'connections'].some((item) => _root.startsWith(item))) {
|
|
2931
2064
|
<span class="cstat-no" title="statement not covered" > hasBackEnd = true;</span>
|
|
2932
|
-
}
|
|
2933
|
-
<span class="cstat-no" title="statement not covered" >
|
|
2934
|
-
<span class="cstat-no" title="statement not covered" >
|
|
2935
|
-
<span class="cstat-no" title="statement not covered" >
|
|
2936
|
-
|
|
2937
|
-
|
|
2938
|
-
}
|
|
2939
|
-
}
|
|
2940
|
-
|
|
2941
|
-
|
|
2065
|
+
}<span class="cstat-no" title="statement not covered" ></span>
|
|
2066
|
+
if (<span class="cstat-no" title="statement not covered" >emitTarget) {</span>
|
|
2067
|
+
if (<span class="cstat-no" title="statement not covered" >emitTarget.concept === 'App') {</span>
|
|
2068
|
+
if<span class="cstat-no" title="statement not covered" > (event?.object?.preferenceMap || event?.originEvent?.object?.preferenceMap) {</span>
|
|
2069
|
+
hasBackEnd = true
|
|
2070
|
+
hasFrontEnd = true
|
|
2071
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2072
|
+
}<span class="cstat-no" title="statement not covered" ></span>
|
|
2073
|
+
if (emitTarget.concept === 'ValidationRule') {
|
|
2074
|
+
if (
|
|
2942
2075
|
event?.object?.enableServerValidation ||
|
|
2943
|
-
event?.originEvent?.object?.enableServerValidation
|
|
2944
|
-
) {
|
|
2945
|
-
|
|
2946
|
-
|
|
2947
|
-
}
|
|
2948
|
-
}
|
|
2949
|
-
<span class="cstat-no" title="statement not covered" >
|
|
2950
|
-
|
|
2951
|
-
<span class="cstat-no" title="statement not covered" >
|
|
2952
|
-
|
|
2953
|
-
|
|
2954
|
-
})
|
|
2955
|
-
}
|
|
2956
|
-
|
|
2957
|
-
|
|
2958
|
-
|
|
2959
|
-
}
|
|
2960
|
-
}
|
|
2961
|
-
|
|
2076
|
+
<span class="cstat-no" title="statement not covered" > event?.originEvent?.object?.enableServerValidation</span>
|
|
2077
|
+
) <span class="cstat-no" title="statement not covered" >{</span>
|
|
2078
|
+
hasBackEnd = true
|
|
2079
|
+
hasFrontEnd = true
|
|
2080
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2081
|
+
}<span class="cstat-no" title="statement not covered" ></span>
|
|
2082
|
+
if<span class="cstat-no" title="statement not covered" > (emitTarget.concept === 'Logic') {</span>
|
|
2083
|
+
co<span class="cstat-no" title="statement not covered" >nst diffArr: string[] = <span class="fstat-no" title="function not covered" >[]</span>;</span>
|
|
2084
|
+
if (<span class="cstat-no" title="statement not covered" >emitTarget.body.length > 2) </span>{
|
|
2085
|
+
emitTarget.body.forEach((it: LogicItem) => {
|
|
2086
|
+
itemloop(it, app, diffArr);
|
|
2087
|
+
});<span class="cstat-no" title="statement not covered" ><span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" ></span></span></span>
|
|
2088
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2089
|
+
co<span class="cstat-no" title="statement not covered" >nst result = diffAr</span>r.filter((item) => item.startsWith('app') || item.startsWith('extensions'));
|
|
2090
|
+
if (result.length) {
|
|
2091
|
+
hasBackEnd = true;
|
|
2092
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2093
|
+
}<span class="cstat-no" title="statement not covered" ></span>
|
|
2094
|
+
if ('view' in emitTarget && emitTarget.view) {
|
|
2962
2095
|
<span class="cstat-no" title="statement not covered" > hasFrontEnd = true</span>
|
|
2963
|
-
}
|
|
2964
|
-
<span class="cstat-no" title="statement not covered" >
|
|
2096
|
+
}<span class="cstat-no" title="statement not covered" ></span>
|
|
2097
|
+
if<span class="cstat-no" title="statement not covered" > (emitTarget.concept === 'BindDirective') {</span>
|
|
2965
2098
|
const isDelete = <span class="cstat-no" title="statement not covered" >event?.originEvent?.action === 'delete'</span>
|
|
2966
|
-
<span class="cstat-no" title="statement not covered" >
|
|
2967
|
-
|
|
2968
|
-
|
|
2969
|
-
|
|
2970
|
-
}
|
|
2971
|
-
}
|
|
2972
|
-
|
|
2973
|
-
|
|
2974
|
-
}
|
|
2975
|
-
}
|
|
2976
|
-
<span class="cstat-no" title="statement not covered" >
|
|
2977
|
-
|
|
2978
|
-
<span class="cstat-no" title="statement not covered" >
|
|
2979
|
-
}
|
|
2980
|
-
|
|
2981
|
-
const
|
|
2982
|
-
|
|
2983
|
-
|
|
2984
|
-
|
|
2985
|
-
|
|
2986
|
-
<span class="cstat-no" title="statement not covered" > if (isDelete || isUpdateAuth || isUpdateBindRoles || isAuthView||isUpdateAuthDes) {</span>
|
|
2987
|
-
<span class="cstat-no" title="statement not covered" > hasBackEnd = true;</span>
|
|
2099
|
+
if<span class="cstat-no" title="statement not covered" > (isDelete) {</span>
|
|
2100
|
+
co<span class="cstat-no" title="statement not covered" >nst isAuto = ~event?.originEvent?.path?.indexOf('name=auth')</span>
|
|
2101
|
+
if (isAuto) {
|
|
2102
|
+
hasBackEnd = true
|
|
2103
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2104
|
+
}<span class="cstat-no" title="statement not covered" ></span>
|
|
2105
|
+
if (event?.originEvent?.object?.name === 'auth') {
|
|
2106
|
+
hasBackEnd = true
|
|
2107
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2108
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2109
|
+
if (<span class="cstat-no" title="statement not covered" >emitTarget.concept </span>=== 'View') {
|
|
2110
|
+
if (getMiniAppChange(emitTarget, event?.originEvent?.object, event?.originEvent?.action)) {
|
|
2111
|
+
hasBackEnd = tr<span class="cstat-no" title="statement not covered" >ue;</span>
|
|
2112
|
+
}<span class="cstat-no" title="statement not covered" ></span>
|
|
2113
|
+
const isDelete = even<span class="cstat-no" title="statement not covered" >t?.originEvent?.action === 'delete';</span>
|
|
2114
|
+
const isAuthView = emitTar<span class="cstat-no" title="statement not covered" >get.auth && event?.originEvent?.object?.name;</span>
|
|
2115
|
+
<span class="cstat-no" title="statement not covered" > const isUpdateAuth = event?.originEvent?.action === 'update' && event?.originEvent?.object && event?.originEvent?.object?.auth</span>
|
|
2116
|
+
co<span class="cstat-no" title="statement not covered" >nst isUpdateBindRol</span>es = event?.originEvent?.action === 'update' && event?.originEvent?.object && event?.originEvent?.object?.bindRoles;
|
|
2117
|
+
if (isDelete || isUpdateAuth || isUpdateBindRoles || isAuthView) {
|
|
2118
|
+
hasBackEnd = true;
|
|
2988
2119
|
// const app = emitTarget.app;
|
|
2989
2120
|
// const diffArr: string[] = [];
|
|
2990
2121
|
// emitTarget.logics.forEach((logic: Logic) => {
|
|
@@ -2999,79 +2130,76 @@ async function <span class="fstat-no" title="function not covered" >doAction(</s
|
|
|
2999
2130
|
// hasBackEnd = true;
|
|
3000
2131
|
// }
|
|
3001
2132
|
// emitTarget.children.forEach((item: View | ViewElement) => loopEle(item, isDelete));
|
|
3002
|
-
// emitTarget.
|
|
2133
|
+
<span class="cstat-no" title="statement not covered" > // emitTarget.elem</span>ents.forEach((item: View | ViewElement) => loopEle(item, isDelete));
|
|
3003
2134
|
}
|
|
3004
2135
|
<span class="cstat-no" title="statement not covered" > hasFrontEnd = true;</span>
|
|
3005
|
-
}
|
|
3006
|
-
|
|
3007
|
-
<span class="
|
|
3008
|
-
|
|
3009
|
-
|
|
3010
|
-
<span class="cstat-no" title="statement not covered"
|
|
3011
|
-
|
|
3012
|
-
|
|
3013
|
-
|
|
3014
|
-
<span class="cstat-no" title="statement not covered"
|
|
3015
|
-
<span class="cstat-no" title="statement not covered" >
|
|
3016
|
-
|
|
3017
|
-
|
|
3018
|
-
<span class="cstat-no" title="statement not covered"
|
|
3019
|
-
|
|
3020
|
-
<span class="fstat-no" title="function not covered" > (i</span>tem: BindDirective) => <span class="cstat-no" title="statement not covered" >item.name === 'auth'</span>
|
|
3021
|
-
)
|
|
3022
|
-
<span class="cstat-no" title="statement not covered" > if (bindDirective) {</span>
|
|
2136
|
+
}<span class="cstat-no" title="statement not covered" ></span>
|
|
2137
|
+
if (emitTarget.concept ===<span class="cstat-no" title="statement not covered" > 'ViewElement') {</span>
|
|
2138
|
+
if (<span class="fstat-no" title="function not covered" >ev</span>ent?.originEvent?.objec<span class="cstat-no" title="statement not covered" >t?.name) {</span>
|
|
2139
|
+
const bindDirective = emitTarget.bindDirectives.find(
|
|
2140
|
+
<span class="cstat-no" title="statement not covered" > (item: BindDirective) => item.name === 'auth'</span>
|
|
2141
|
+
)<span class="cstat-no" title="statement not covered" ></span>
|
|
2142
|
+
if (bindDirective) {
|
|
2143
|
+
hasBackEnd = true;
|
|
2144
|
+
}<span class="cstat-no" title="statement not covered" ></span>
|
|
2145
|
+
}<span class="cstat-no" title="statement not covered" ></span>
|
|
2146
|
+
if (<span class="fstat-no" title="function not covered" >ev</span>ent?.originEvent?.actio<span class="cstat-no" title="statement not covered" >n === 'delete') {</span>
|
|
2147
|
+
const bindDirective = emitTarget?.bindDirectives?.find(
|
|
2148
|
+
<span class="cstat-no" title="statement not covered" > (item: BindDirective) => item.name === 'auth'</span>
|
|
2149
|
+
)<span class="cstat-no" title="statement not covered" ></span>
|
|
2150
|
+
if (bindDirective) {
|
|
3023
2151
|
<span class="cstat-no" title="statement not covered" > hasBackEnd = true</span>
|
|
3024
2152
|
}
|
|
3025
2153
|
<span class="cstat-no" title="statement not covered" > loopEleAuth(emitTarget)</span>
|
|
3026
|
-
}
|
|
3027
|
-
<span class="cstat-no" title="statement not covered" >
|
|
3028
|
-
|
|
3029
|
-
|
|
3030
|
-
}
|
|
2154
|
+
}<span class="cstat-no" title="statement not covered" ></span>
|
|
2155
|
+
if (<span class="cstat-no" title="statement not covered" >event?.originEvent?.action !== 'create') {</span>
|
|
2156
|
+
if (event?.originEvent?.object && event?.originEvent?.object?.bindRoles) {
|
|
2157
|
+
hasBackEnd = true
|
|
2158
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
3031
2159
|
}
|
|
3032
2160
|
<span class="cstat-no" title="statement not covered" > loopEle(emitTarget, true)</span>
|
|
3033
2161
|
}
|
|
3034
|
-
<span class="cstat-no" title="statement not covered" >
|
|
3035
|
-
const needUpdateBackEnd
|
|
2162
|
+
if (<span class="cstat-no" title="statement not covered" >emitTarget.concept === 'BindAttribute' && emitTarget.name === 'url') {</span>
|
|
2163
|
+
<span class="cstat-no" title="statement not covered" > const needUpdateBackEnd =</span>
|
|
3036
2164
|
<span class="cstat-no" title="statement not covered" > emitTarget?.value?.endsWith('/import') || emitTarget?.value?.includes('/upload/')</span>
|
|
3037
|
-
|
|
3038
|
-
|
|
3039
|
-
}
|
|
3040
|
-
}
|
|
3041
|
-
<span class="cstat-no" title="statement not covered" >
|
|
3042
|
-
const arrlist: string[] =
|
|
3043
|
-
|
|
3044
|
-
|
|
3045
|
-
|
|
3046
|
-
|
|
3047
|
-
|
|
2165
|
+
if (!emitTarget.view.parentAuth && needUpdateBackEnd) {
|
|
2166
|
+
hasBackEnd = true
|
|
2167
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2168
|
+
}<span class="cstat-no" title="statement not covered" ></span>
|
|
2169
|
+
if<span class="cstat-no" title="statement not covered" > (emitTarget.concept === 'CallLogic') {</span>
|
|
2170
|
+
const arrlist: <span class="cstat-no" title="statement not covered" >string[] = [];<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" ></span></span></span>
|
|
2171
|
+
getLogic((emitTarget as CallLogic).calleeKey, emitTarget.app, arrlist);
|
|
2172
|
+
<span class="cstat-no" title="statement not covered" > const result = arrlist.filter((item) => item.startsWith('app') || item.startsWith('extensions'));</span>
|
|
2173
|
+
//<span class="cstat-no" title="statement not covered" > console.log(result</span>, 'CallLogic');
|
|
2174
|
+
if (result.length) {
|
|
2175
|
+
hasBackEnd = true;
|
|
3048
2176
|
}
|
|
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;
|
|
3049
2181
|
}
|
|
3050
|
-
|
|
3051
|
-
<span class="cstat-no" title="statement not covered"
|
|
3052
|
-
<span class="cstat-no" title="statement not covered" >
|
|
3053
|
-
|
|
3054
|
-
|
|
3055
|
-
|
|
3056
|
-
<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>
|
|
3057
|
-
<span class="cstat-no" title="statement not covered" > if (Array.isArray(objItem)) {</span>
|
|
3058
|
-
<span class="cstat-no" title="statement not covered" > if (action === 'update') {</span>
|
|
3059
|
-
<span class="cstat-no" title="statement not covered" > actionList.push({</span>
|
|
2182
|
+
}<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" ></span></span>
|
|
2183
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
2184
|
+
even<span class="cstat-no" title="statement not covered" >t.eventList.forEach(({ action, path, object: objItem }: { action: string; path: string; object: any }) => {</span>
|
|
2185
|
+
if (<span class="cstat-no" title="statement not covered" >Array.isArray(objItem)) {</span>
|
|
2186
|
+
if (action === 'update') {
|
|
2187
|
+
actionList.push({
|
|
3060
2188
|
action,
|
|
3061
2189
|
path,
|
|
3062
2190
|
node: objItem[0],
|
|
3063
|
-
})
|
|
3064
|
-
}
|
|
3065
|
-
|
|
3066
|
-
|
|
2191
|
+
<span class="cstat-no" title="statement not covered" > });<span class="fstat-no" title="function not covered" ></span></span>
|
|
2192
|
+
} el<span class="cstat-no" title="statement not covered" >se {</span>
|
|
2193
|
+
objItem.forEach((item, index) => {
|
|
2194
|
+
actionList.push({
|
|
3067
2195
|
action,
|
|
3068
2196
|
path,
|
|
3069
2197
|
node: item,
|
|
3070
2198
|
});
|
|
3071
2199
|
});
|
|
3072
|
-
}
|
|
2200
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
3073
2201
|
} else {
|
|
3074
|
-
|
|
2202
|
+
actionList.push({
|
|
3075
2203
|
action,
|
|
3076
2204
|
path,
|
|
3077
2205
|
object: objItem,
|
|
@@ -3079,66 +2207,46 @@ async function <span class="fstat-no" title="function not covered" >doAction(</s
|
|
|
3079
2207
|
}
|
|
3080
2208
|
});
|
|
3081
2209
|
});
|
|
3082
|
-
}
|
|
3083
|
-
} catch (error) {
|
|
3084
|
-
|
|
3085
|
-
|
|
2210
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2211
|
+
} <span class="cstat-no" title="statement not covered" >catch (error) {</span>
|
|
2212
|
+
console.log(error);
|
|
2213
|
+
taskQueue.refreshNasl(app, {
|
|
3086
2214
|
errorInfo: {
|
|
3087
2215
|
message: error?.message,
|
|
3088
2216
|
stack: error?.stack,
|
|
3089
|
-
}
|
|
2217
|
+
<span class="cstat-no" title="statement not covered" > },</span>
|
|
3090
2218
|
});
|
|
3091
|
-
|
|
3092
|
-
}
|
|
2219
|
+
return;
|
|
2220
|
+
}<span class="cstat-no" title="statement not covered" ></span>
|
|
3093
2221
|
|
|
3094
|
-
const
|
|
3095
|
-
|
|
3096
|
-
|
|
3097
|
-
actions: actionList,
|
|
2222
|
+
const instructList = [{
|
|
2223
|
+
uuid: uuidv4().replace(/-/g, ''),
|
|
2224
|
+
<span class="cstat-no" title="statement not covered" > actions: actionList,</span>
|
|
3098
2225
|
}];
|
|
3099
|
-
|
|
3100
|
-
|
|
3101
|
-
|
|
3102
|
-
|
|
3103
|
-
actionMsg,
|
|
3104
|
-
list: list.map(<span class="fstat-no" title="function not covered" >(i</span>tem: any) => {
|
|
3105
|
-
const { path, action, object, oldObject, parentKey, index } = <span class="cstat-no" title="statement not covered" >item?.originEvent || {};</span>
|
|
3106
|
-
<span class="cstat-no" title="statement not covered" > return {</span>
|
|
3107
|
-
path,
|
|
3108
|
-
action,
|
|
3109
|
-
parentKey,
|
|
3110
|
-
index,
|
|
3111
|
-
object: object?.toJSON?.() || object,
|
|
3112
|
-
oldObject: oldObject?.toJSON?.() || oldObject,
|
|
3113
|
-
}
|
|
3114
|
-
}),
|
|
3115
|
-
},
|
|
3116
|
-
};
|
|
3117
|
-
<span class="cstat-no" title="statement not covered" > saveNasl({ app, hasFrontEnd, hasBackEnd, instructList, operationList: [operation] });</span>
|
|
3118
|
-
// 进行nasl操作后需要将Index重置
|
|
3119
|
-
<span class="cstat-no" title="statement not covered" > operationRecordInfoMap.set('operationRecordIndex', null);</span>
|
|
3120
|
-
<span class="cstat-no" title="statement not covered" > if (!app._historying) {</span>
|
|
3121
|
-
<span class="cstat-no" title="statement not covered" > if (app._historyIndex !== app._historyList.length) {</span>
|
|
2226
|
+
<span class="cstat-no" title="statement not covered" > saveNasl({ app, hasFrontEnd, hasBackEnd, instructList });</span>
|
|
2227
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
2228
|
+
if (<span class="cstat-no" title="statement not covered" >!app._historying) {</span>
|
|
2229
|
+
if (app._historyIndex !== app._historyList.length) {
|
|
3122
2230
|
<span class="cstat-no" title="statement not covered" > app._historyList = app._historyList.splice(0, app._historyIndex);</span>
|
|
3123
2231
|
}
|
|
3124
|
-
|
|
2232
|
+
app._historyList.<span class="fstat-no" title="function not covered" >pu</span>sh({<span class="cstat-no" title="statement not covered" ></span>
|
|
3125
2233
|
actionMsg,
|
|
3126
|
-
|
|
2234
|
+
<span class="cstat-no" title="statement not covered" > list: list.map((item: any) => item.originEv</span>ent),
|
|
3127
2235
|
});
|
|
3128
|
-
<span class="cstat-no" title="statement not covered"
|
|
2236
|
+
app._historyIndex <span class="cstat-no" title="statement not covered" >= app._historyList.length;</span>
|
|
3129
2237
|
} else {
|
|
3130
|
-
const actionMap =
|
|
2238
|
+
const actionMap = {
|
|
3131
2239
|
undo: '已撤销操作:',
|
|
3132
|
-
redo: '
|
|
3133
|
-
}
|
|
3134
|
-
|
|
3135
|
-
<span class="cstat-no" title="statement not covered" >
|
|
3136
|
-
|
|
3137
|
-
<span class="cstat-no" title="statement not covered" > require('element-plus')
|
|
2240
|
+
redo: '已<span class="cstat-no" title="statement not covered" >重做操作:',</span>
|
|
2241
|
+
<span class="cstat-no" title="statement not covered" > };</span>
|
|
2242
|
+
<span class="cstat-no" title="statement not covered" > let msg = actionMap[action as 'undo' | 'redo'];</span>
|
|
2243
|
+
ms<span class="cstat-no" title="statement not covered" >g += actionMsg;</span>
|
|
2244
|
+
if (process.env.BUILD_TARGET !== 'node') {
|
|
2245
|
+
<span class="cstat-no" title="statement not covered" > require('element-plus')</span>.ElMessage.info(msg);
|
|
3138
2246
|
}
|
|
3139
2247
|
<span class="cstat-no" title="statement not covered" > app._historying = false;</span>
|
|
3140
2248
|
}
|
|
3141
|
-
|
|
2249
|
+
stepRecorder.initialized && stepRecorder.record(actionMsg, actionItem, actionList);
|
|
3142
2250
|
}
|
|
3143
2251
|
|
|
3144
2252
|
type Instruct = {
|
|
@@ -3150,7 +2258,6 @@ type TaskOption = {
|
|
|
3150
2258
|
hasFrontEnd: boolean,
|
|
3151
2259
|
hasBackEnd: boolean,
|
|
3152
2260
|
instructList: Instruct[],
|
|
3153
|
-
operationList: Operation[],
|
|
3154
2261
|
};
|
|
3155
2262
|
enum TaskQueueStatus {
|
|
3156
2263
|
ExceedMaxTaskCount,
|
|
@@ -3168,163 +2275,141 @@ class TaskQueue {
|
|
|
3168
2275
|
lastQueue: TaskOption[] = []
|
|
3169
2276
|
running: Boolean = false
|
|
3170
2277
|
maxTaskCount: number = 10
|
|
3171
|
-
status
|
|
3172
|
-
|
|
3173
|
-
|
|
2278
|
+
<span class="fstat-no" title="function not covered" > status?:</span> TaskQueueStatus = undefined
|
|
2279
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
2280
|
+
addTask(task: TaskOption) {
|
|
3174
2281
|
<span class="cstat-no" title="statement not covered" > this.queue.push(task);</span>
|
|
3175
|
-
|
|
3176
|
-
<span class="cstat-no" title="statement not covered" >
|
|
3177
|
-
|
|
3178
|
-
|
|
3179
|
-
}
|
|
3180
|
-
|
|
3181
|
-
|
|
3182
|
-
}
|
|
3183
|
-
|
|
3184
|
-
<span class="
|
|
2282
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
2283
|
+
if<span class="cstat-no" title="statement not covered" > (this.queue.length >= this.maxTaskCo</span>unt) {
|
|
2284
|
+
this.status = TaskQueueStatus.ExceedMaxTaskCount;
|
|
2285
|
+
task.app.emit('ExceedMaxTaskCount');
|
|
2286
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2287
|
+
|
|
2288
|
+
this.run();
|
|
2289
|
+
<span class="fstat-no" title="function not covered" > }</span>
|
|
2290
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
2291
|
+
cl<span class="cstat-no" title="statement not covered" >ear() {</span>
|
|
3185
2292
|
<span class="cstat-no" title="statement not covered" > this.queue = [];</span>
|
|
3186
2293
|
<span class="cstat-no" title="statement not covered" > this.lastQueue = [];</span>
|
|
3187
|
-
|
|
3188
|
-
|
|
3189
|
-
}
|
|
3190
|
-
|
|
3191
|
-
<span class="
|
|
2294
|
+
this.status = undefined;
|
|
2295
|
+
this.running = false;
|
|
2296
|
+
<span class="fstat-no" title="function not covered" > }<span class="branch-0 cbranch-no" title="branch not covered" ></span></span>
|
|
2297
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
2298
|
+
asyn<span class="cstat-no" title="statement not covered" >c run(qu</span>eue = this.queue) {
|
|
3192
2299
|
<span class="cstat-no" title="statement not covered" > if (this.running)</span>
|
|
3193
2300
|
<span class="cstat-no" title="statement not covered" > return;</span>
|
|
3194
|
-
|
|
3195
|
-
|
|
3196
|
-
|
|
3197
|
-
const app = <span class="cstat-no" title="statement not covered" >
|
|
3198
|
-
let hasFrontEnd =
|
|
3199
|
-
let hasBackEnd =
|
|
3200
|
-
|
|
3201
|
-
|
|
3202
|
-
|
|
3203
|
-
<span class="cstat-no" title="statement not covered" > for (const task of queue) {</span>
|
|
2301
|
+
if (queue.length === 0)
|
|
2302
|
+
return;<span class="cstat-no" title="statement not covered" ></span>
|
|
2303
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
2304
|
+
const app = queue<span class="cstat-no" title="statement not covered" >[0].ap</span>p;
|
|
2305
|
+
let hasFrontEnd = false;<span class="cstat-no" title="statement not covered" ></span>
|
|
2306
|
+
let hasBackEnd = false;
|
|
2307
|
+
<span class="cstat-no" title="statement not covered" > let instructList: Instruct[] = [];</span>
|
|
2308
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
2309
|
+
for <span class="cstat-no" title="statement not covered" >(const task of queue</span>) {
|
|
3204
2310
|
<span class="cstat-no" title="statement not covered" > if (task.hasFrontEnd)</span>
|
|
3205
2311
|
<span class="cstat-no" title="statement not covered" > hasFrontEnd = true;</span>
|
|
3206
2312
|
<span class="cstat-no" title="statement not covered" > if (task.hasBackEnd)</span>
|
|
3207
|
-
|
|
3208
|
-
|
|
3209
|
-
<span class="cstat-no" title="statement not covered" >
|
|
3210
|
-
|
|
3211
|
-
|
|
3212
|
-
|
|
3213
|
-
|
|
3214
|
-
<span class="cstat-no" title="statement not covered" >
|
|
3215
|
-
|
|
3216
|
-
|
|
3217
|
-
|
|
3218
|
-
|
|
3219
|
-
app, hasFrontEnd, hasBackEnd, instructList, operationList
|
|
2313
|
+
hasBackEnd = true;
|
|
2314
|
+
instructList = instructList.concat(task.instructList);
|
|
2315
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2316
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
2317
|
+
if<span class="cstat-no" title="statement not covered" > (queue === this.</span>queue) {
|
|
2318
|
+
this.lastQueue = [...queue];
|
|
2319
|
+
this.queue = [];
|
|
2320
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2321
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
2322
|
+
this.running = true;
|
|
2323
|
+
const error = await _saveNasl({
|
|
2324
|
+
app, hasFrontEnd, hasBackEnd, instructList,
|
|
3220
2325
|
});
|
|
3221
2326
|
|
|
3222
|
-
// code: 401650, 检测到当前应用拉取操作已被强制结束,
|
|
3223
|
-
|
|
3224
|
-
|
|
3225
|
-
|
|
3226
|
-
<span class="cstat-no" title="statement not covered" >
|
|
3227
|
-
else <span class="cstat-no" title="statement not covered" >if (![401650, 500502, 500505].includes(error.code)) {</span>
|
|
2327
|
+
<span class="cstat-no" title="statement not covered" > // code: 401650, 检测到当前应用拉取操作已被强制结束, 用户确认后再刷新</span>
|
|
2328
|
+
//<span class="cstat-no" title="statement not covered" > code: 500502 msg:</span> "该应用已在新tab 页打开,请刷新!" 不重试或刷新
|
|
2329
|
+
if (!<span class="cstat-no" title="statement not covered" >error)</span>
|
|
2330
|
+
this.recover(app);
|
|
2331
|
+
el<span class="cstat-no" title="statement not covered" >se if (![401650, 500502].includes(error.code)) {</span>
|
|
3228
2332
|
// 连接失败,或超时,或后端持久化异常
|
|
3229
|
-
<span class="cstat-no" title="statement not covered" >
|
|
3230
|
-
&& this.status !== TaskQueueStatus.Retrying) {
|
|
3231
|
-
|
|
2333
|
+
if<span class="cstat-no" title="statement not covered" > ((error.message === '</span>Network Error' || error.message?.includes('timeout') || error.code === 500500)
|
|
2334
|
+
<span class="cstat-no" title="statement not covered" > && this.status</span> !== TaskQueueStatus.Retrying) {
|
|
2335
|
+
this.running = false;
|
|
3232
2336
|
<span class="cstat-no" title="statement not covered" > this.retry();</span>
|
|
3233
2337
|
} else
|
|
3234
|
-
<span class="cstat-no" title="statement not covered" > this.
|
|
3235
|
-
|
|
3236
|
-
|
|
3237
|
-
}
|
|
3238
|
-
|
|
3239
|
-
<span class="cstat-no" title="statement not covered" > this.running = false
|
|
3240
|
-
|
|
3241
|
-
|
|
3242
|
-
}
|
|
3243
|
-
|
|
3244
|
-
<span class="
|
|
3245
|
-
|
|
3246
|
-
|
|
3247
|
-
|
|
3248
|
-
|
|
3249
|
-
<span class="cstat-no" title="statement not covered" > this.status =
|
|
3250
|
-
|
|
3251
|
-
|
|
3252
|
-
}
|
|
3253
|
-
|
|
3254
|
-
|
|
3255
|
-
const failedQueue =
|
|
3256
|
-
hasFrontEnd
|
|
2338
|
+
<span class="cstat-no" title="statement not covered" > this.r</span>efreshNasl(app);
|
|
2339
|
+
|
|
2340
|
+
return;
|
|
2341
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2342
|
+
|
|
2343
|
+
<span class="cstat-no" title="statement not covered" > this.running</span> = false;
|
|
2344
|
+
|
|
2345
|
+
this.run();
|
|
2346
|
+
<span class="fstat-no" title="function not covered" > }</span>
|
|
2347
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
2348
|
+
retr<span class="cstat-no" title="statement not covered" >y() {</span>
|
|
2349
|
+
if (this.lastQueue.length === 0)
|
|
2350
|
+
return;<span class="cstat-no" title="statement not covered" ></span>
|
|
2351
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
2352
|
+
<span class="cstat-no" title="statement not covered" > const app = this.lastQ</span>ueue[0].app;
|
|
2353
|
+
<span class="cstat-no" title="statement not covered" > this.status = TaskQueueSta</span>tus.Retrying;
|
|
2354
|
+
app.emit('Retrying');
|
|
2355
|
+
this.run(this.lastQueue);
|
|
2356
|
+
<span class="fstat-no" title="function not covered" > }<span class="branch-0 cbranch-no" title="branch not covered" ></span></span>
|
|
2357
|
+
<span class="cstat-no" title="statement not covered" ><span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" ></span></span></span>
|
|
2358
|
+
async refreshNasl(app: App, options: RefreshNaslOptions = { errorInfo: {} }) {
|
|
2359
|
+
const failedQueue = this.lastQueue.map(({ hasFrontEnd, hasBackEnd, instructList }) => ({
|
|
2360
|
+
hasFrontEnd,<span class="cstat-no" title="statement not covered" > hasBackEnd, in<span class="fstat-no" title="function not covered" >st</span>ructList,<span class="cstat-no" title="statement not covered" ></span></span>
|
|
3257
2361
|
}));
|
|
3258
|
-
const queue =
|
|
3259
|
-
hasFrontEnd, hasBackEnd, instructList
|
|
2362
|
+
const queue = this.queue.map(({ hasFrontEnd, hasBackEnd, instructList }) => ({
|
|
2363
|
+
<span class="cstat-no" title="statement not covered" > hasFrontEnd, hasBackEnd, instructList,</span>
|
|
3260
2364
|
}));
|
|
3261
|
-
|
|
2365
|
+
await storageService.saveFrontendNasl({
|
|
3262
2366
|
body: {
|
|
3263
2367
|
nasl: app?.toJSON(),
|
|
3264
2368
|
failedQueue,
|
|
3265
2369
|
queue,
|
|
3266
|
-
|
|
3267
|
-
}
|
|
3268
|
-
}).catch(
|
|
3269
|
-
<span class="cstat-no" title="statement not covered" > console.log('备份 nasl 失败:', err)
|
|
3270
|
-
})
|
|
3271
|
-
|
|
3272
|
-
|
|
3273
|
-
}
|
|
3274
|
-
|
|
3275
|
-
|
|
3276
|
-
<span class="cstat-no" title="statement not covered" >
|
|
3277
|
-
|
|
3278
|
-
<span class="cstat-no" title="statement not covered" > app.
|
|
3279
|
-
|
|
3280
|
-
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
3281
|
-
case TaskQueueStatus.Retrying:
|
|
3282
|
-
<span class="cstat-no" title="statement not covered" > app.emit('SuccessRetry');</span>
|
|
3283
|
-
<span class="cstat-no" title="statement not covered" > this.status = undefined;</span>
|
|
2370
|
+
error<span class="fstat-no" title="function not covered" >In</span>fo: options.errorInfo,
|
|
2371
|
+
<span class="cstat-no" title="statement not covered" > },</span>
|
|
2372
|
+
}).catch((err: any) => {
|
|
2373
|
+
<span class="cstat-no" title="statement not covered" > console.log(</span>'备份 nasl 失败:', err);
|
|
2374
|
+
<span class="cstat-no" title="statement not covered" > });</span>
|
|
2375
|
+
this.clear();
|
|
2376
|
+
app.emit('refresh');
|
|
2377
|
+
<span class="fstat-no" title="function not covered" > }</span>
|
|
2378
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
2379
|
+
recover(app: App) {
|
|
2380
|
+
swit<span class="cstat-no" title="statement not covered" >ch (this.status) {</span>
|
|
2381
|
+
ca<span class="cstat-no" title="statement not covered" >se TaskQueueStatus.Exceed</span>MaxTaskCount:
|
|
2382
|
+
<span class="cstat-no" title="statement not covered" > app.emi</span>t('BelowMaxTaskCount');
|
|
2383
|
+
this.status = undefined;
|
|
3284
2384
|
<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;
|
|
3285
2389
|
}
|
|
3286
2390
|
}
|
|
3287
2391
|
}
|
|
3288
|
-
|
|
3289
|
-
|
|
3290
|
-
async function
|
|
3291
|
-
|
|
3292
|
-
}
|
|
3293
|
-
|
|
3294
|
-
class
|
|
3295
|
-
|
|
3296
|
-
branchId?: string;
|
|
3297
|
-
accountId?: string;
|
|
3298
|
-
userId?: string;
|
|
3299
|
-
phone?: string;
|
|
3300
|
-
actionItem: any;
|
|
3301
|
-
res?: any;
|
|
3302
|
-
err?: any;
|
|
3303
|
-
parentKey?: string;
|
|
3304
|
-
timestamp?: any;
|
|
3305
|
-
type?: string;
|
|
3306
|
-
uuid?: string;
|
|
3307
|
-
action?: string;
|
|
3308
|
-
}
|
|
3309
|
-
|
|
3310
|
-
async function <span class="fstat-no" title="function not covered" >_saveNasl(</span>options: TaskOption) {
|
|
3311
|
-
const { app, hasFrontEnd, hasBackEnd, instructList, operationList } = <span class="cstat-no" title="statement not covered" >options;</span>
|
|
2392
|
+
<span class="fstat-no" title="function not covered" ></span>
|
|
2393
|
+
ex<span class="cstat-no" title="statement not covered" >port const taskQueue = new T</span>askQueue();
|
|
2394
|
+
async function saveNasl(options: TaskOption) {
|
|
2395
|
+
taskQueue.addTask(options);
|
|
2396
|
+
}<span class="fstat-no" title="function not covered" ></span>
|
|
2397
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
2398
|
+
as<span class="cstat-no" title="statement not covered" >ync function _saveNa</span>sl(options: TaskOption) {
|
|
2399
|
+
const { app, hasFrontE<span class="cstat-no" title="statement not covered" >nd,</span> hasBackEnd, instructList } = options;
|
|
3312
2400
|
<span class="cstat-no" title="statement not covered" > app.emit('saving');</span>
|
|
3313
|
-
|
|
3314
|
-
<span class="cstat-no" title="statement not covered" >
|
|
2401
|
+
le<span class="cstat-no" title="statement not covered" >t ChangedNASLType = '';</span>
|
|
2402
|
+
if (has<span class="cstat-no" title="statement not covered" >FrontEnd && hasBackEnd) {</span>
|
|
3315
2403
|
<span class="cstat-no" title="statement not covered" > ChangedNASLType = 'both';</span>
|
|
3316
2404
|
} else <span class="cstat-no" title="statement not covered" >if (hasFrontEnd) {</span>
|
|
3317
2405
|
<span class="cstat-no" title="statement not covered" > ChangedNASLType = 'web';</span>
|
|
3318
|
-
} else
|
|
3319
|
-
|
|
3320
|
-
}
|
|
3321
|
-
|
|
3322
|
-
|
|
3323
|
-
|
|
3324
|
-
|
|
3325
|
-
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
3326
|
-
// 接口请求
|
|
3327
|
-
<span class="cstat-no" title="statement not covered" > res = await storageService.batchInstruct({</span>
|
|
2406
|
+
} else if (hasBackEnd) {
|
|
2407
|
+
ChangedNASLType = 'backend';
|
|
2408
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2409
|
+
le<span class="cstat-no" title="statement not covered" >t err;</span>
|
|
2410
|
+
if (<span class="cstat-no" title="statement not covered" >config.storage.protocol === 'http') {</span>
|
|
2411
|
+
try {
|
|
2412
|
+
await storageService.batchInstruct({
|
|
3328
2413
|
body: instructList,
|
|
3329
2414
|
headers: {
|
|
3330
2415
|
appId: app.id,
|
|
@@ -3332,40 +2417,27 @@ async function <span class="fstat-no" title="function not covered" >_saveNasl(</
|
|
|
3332
2417
|
tabTimestamp,
|
|
3333
2418
|
// 其他封装在 storageService 里了
|
|
3334
2419
|
},
|
|
3335
|
-
})
|
|
2420
|
+
<span class="cstat-no" title="statement not covered" > });</span>
|
|
3336
2421
|
} catch (error) {
|
|
3337
|
-
<span class="cstat-no" title="statement not covered" >
|
|
2422
|
+
err<span class="cstat-no" title="statement not covered" > = error;</span>
|
|
3338
2423
|
}
|
|
3339
|
-
|
|
3340
|
-
<span class="cstat-no" title="statement not covered"
|
|
3341
|
-
<span class="cstat-no" title="statement not covered" > doOperationRecord({</span>
|
|
3342
|
-
...operation,
|
|
3343
|
-
res,
|
|
3344
|
-
err: {
|
|
3345
|
-
code,
|
|
3346
|
-
msg,
|
|
3347
|
-
result,
|
|
3348
|
-
success,
|
|
3349
|
-
},
|
|
3350
|
-
});
|
|
3351
|
-
});
|
|
3352
|
-
} else <span class="cstat-no" title="statement not covered" >if (config.storage.protocol === 'mock') {</span>
|
|
3353
|
-
// Do nothing
|
|
2424
|
+
} else if (config.storage.protocol === 'mock') {
|
|
2425
|
+
// Do nothing<span class="cstat-no" title="statement not covered" ></span>
|
|
3354
2426
|
} else {
|
|
3355
|
-
const json = <span class="cstat-no" title="statement not covered" >
|
|
3356
|
-
|
|
3357
|
-
|
|
3358
|
-
|
|
3359
|
-
|
|
3360
|
-
}
|
|
3361
|
-
|
|
3362
|
-
|
|
3363
|
-
|
|
2427
|
+
const json = await fs.re<span class="cstat-no" title="statement not covered" >adJ</span>SON(config.storage.basePath);
|
|
2428
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
2429
|
+
le<span class="cstat-no" title="statement not covered" >t actionList: any[] = [];</span>
|
|
2430
|
+
for (const { actions } of instructList) {
|
|
2431
|
+
actionList = actionList.concat(actions);
|
|
2432
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2433
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
2434
|
+
jsoner.batchAction(json, actionList);
|
|
2435
|
+
await fs.writeJSON(config.storage.basePath, json, {
|
|
3364
2436
|
spaces: 4,
|
|
3365
|
-
})
|
|
3366
|
-
}
|
|
3367
|
-
|
|
3368
|
-
|
|
2437
|
+
<span class="cstat-no" title="statement not covered" > });</span>
|
|
2438
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2439
|
+
app.emit('saved', err);
|
|
2440
|
+
return err;
|
|
3369
2441
|
}
|
|
3370
2442
|
|
|
3371
2443
|
export interface ProxyApp extends App {
|
|
@@ -3379,123 +2451,123 @@ export interface ProxyApp extends App {
|
|
|
3379
2451
|
_actionMsg: string;
|
|
3380
2452
|
_action: string;
|
|
3381
2453
|
naslServer: NaslServer;
|
|
3382
|
-
}
|
|
3383
|
-
|
|
3384
|
-
|
|
3385
|
-
<span class="cstat-no" title="statement not covered" > app._isCollectingCount
|
|
3386
|
-
<span class="cstat-no" title="statement not covered" > app._collectingList = [
|
|
2454
|
+
}<span class="fstat-no" title="function not covered" ></span>
|
|
2455
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
2456
|
+
ex<span class="cstat-no" title="statement not covered" >port function handleApp(ap</span>p: ProxyApp) {
|
|
2457
|
+
<span class="cstat-no" title="statement not covered" > app._isCollectingCount </span>= 0;
|
|
2458
|
+
<span class="cstat-no" title="statement not covered" > app._collectingList = [</span>];
|
|
3387
2459
|
<span class="cstat-no" title="statement not covered" > app._historyList = [];</span>
|
|
3388
|
-
<span class="cstat-no" title="statement not covered" > app._historyIndex
|
|
3389
|
-
|
|
3390
|
-
<span class="cstat-no" title="statement not covered" > app._timer =
|
|
3391
|
-
|
|
3392
|
-
<span class="cstat-no" title="statement not covered" >
|
|
3393
|
-
const proxyApp =
|
|
3394
|
-
|
|
3395
|
-
})
|
|
3396
|
-
|
|
3397
|
-
<span class="cstat-no" title="statement not covered" >
|
|
3398
|
-
const proxyApp =
|
|
3399
|
-
|
|
2460
|
+
<span class="cstat-no" title="statement not covered" > app._historyIndex =</span> 0;
|
|
2461
|
+
app._historying = false;
|
|
2462
|
+
<span class="cstat-no" title="statement not covered" > app._timer = nu<span class="fstat-no" title="function not covered" >ll;</span></span>
|
|
2463
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
2464
|
+
ap<span class="cstat-no" title="statement not covered" >p.on('undo', function (this: </span>ProxyApp) {
|
|
2465
|
+
const proxyApp = this;
|
|
2466
|
+
proxyApp._historying = true;
|
|
2467
|
+
<span class="cstat-no" title="statement not covered" > });<span class="fstat-no" title="function not covered" ></span></span>
|
|
2468
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
2469
|
+
ap<span class="cstat-no" title="statement not covered" >p.on('redo', function (this: </span>ProxyApp) {
|
|
2470
|
+
const proxyApp = this;
|
|
2471
|
+
proxyApp._historying = true;
|
|
3400
2472
|
});
|
|
3401
2473
|
|
|
3402
2474
|
/**
|
|
3403
|
-
*
|
|
3404
|
-
|
|
3405
|
-
<span class="cstat-no" title="statement not covered" >
|
|
3406
|
-
|
|
3407
|
-
|
|
2475
|
+
<span class="cstat-no" title="statement not covered" > * 开启收集<span class="fstat-no" title="function not covered" ></span></span>
|
|
2476
|
+
*/<span class="cstat-no" title="statement not covered" ></span>
|
|
2477
|
+
ap<span class="cstat-no" title="statement not covered" >p.on('collect:start', function (this: ProxyApp, event: any) {</span>
|
|
2478
|
+
co<span class="cstat-no" title="statement not covered" >nst proxyApp = this;</span>
|
|
2479
|
+
if (proxyApp._timer) {
|
|
3408
2480
|
<span class="cstat-no" title="statement not covered" > clearTimeout(proxyApp._timer);</span>
|
|
3409
|
-
}
|
|
3410
|
-
|
|
2481
|
+
}<span class="cstat-no" title="statement not covered" ></span>
|
|
2482
|
+
if (!proxyApp._noTimer) {
|
|
3411
2483
|
<span class="cstat-no" title="statement not covered" > proxyApp._noTimer = event.noTimer;</span>
|
|
3412
|
-
}
|
|
3413
|
-
<span class="cstat-no" title="statement not covered"
|
|
3414
|
-
<span class="cstat-no" title="statement not covered" >
|
|
3415
|
-
|
|
3416
|
-
|
|
2484
|
+
}<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" ></span></span>
|
|
2485
|
+
if (<span class="cstat-no" title="statement not covered" >!proxyApp._noTimer) {</span>
|
|
2486
|
+
pr<span class="cstat-no" title="statement not covered" >oxyApp._timer = setTimeout(() => {</span>
|
|
2487
|
+
console.error('收集超时,请及时排查原因', event);
|
|
2488
|
+
taskQueue.refreshNasl(proxyApp, {
|
|
3417
2489
|
errorInfo: {
|
|
3418
2490
|
message: '收集超时,请及时排查原因',
|
|
3419
2491
|
},
|
|
3420
2492
|
});
|
|
3421
|
-
}, 2500)
|
|
3422
|
-
}
|
|
3423
|
-
<span class="cstat-no" title="statement not covered" >
|
|
3424
|
-
|
|
3425
|
-
<span class="cstat-no" title="statement not covered" > proxyApp._action = event?.
|
|
2493
|
+
<span class="cstat-no" title="statement not covered" > }, 2500);</span>
|
|
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;
|
|
3426
2498
|
}
|
|
3427
|
-
|
|
2499
|
+
proxyApp._isCollectingCount++;
|
|
3428
2500
|
});
|
|
3429
2501
|
|
|
3430
2502
|
/**
|
|
3431
|
-
*
|
|
3432
|
-
|
|
3433
|
-
<span class="cstat-no" title="statement not covered" >
|
|
3434
|
-
|
|
3435
|
-
<span class="cstat-no" title="statement not covered" >
|
|
3436
|
-
<span class="cstat-no" title="statement not covered" >
|
|
3437
|
-
|
|
3438
|
-
|
|
3439
|
-
}
|
|
3440
|
-
//
|
|
3441
|
-
const
|
|
3442
|
-
|
|
3443
|
-
|
|
3444
|
-
<span class="cstat-no" title="statement not covered" > proxyApp.
|
|
2503
|
+
<span class="cstat-no" title="statement not covered" > * 结束收集<span class="fstat-no" title="function not covered" ></span></span>
|
|
2504
|
+
*/<span class="cstat-no" title="statement not covered" ></span>
|
|
2505
|
+
ap<span class="cstat-no" title="statement not covered" >p.on('collect:end', async funct</span>ion (this: ProxyApp) {
|
|
2506
|
+
<span class="cstat-no" title="statement not covered" > const proxyApp = this;</span>
|
|
2507
|
+
pr<span class="cstat-no" title="statement not covered" >oxyApp._isCollectingCount--;</span>
|
|
2508
|
+
if (<span class="cstat-no" title="statement not covered" >proxyApp._isCollectingCount ===</span> 0) {
|
|
2509
|
+
if (proxyApp._timer) {
|
|
2510
|
+
clearTimeout(proxyApp._timer);
|
|
2511
|
+
}<span class="cstat-no" title="statement not covered" ></span>
|
|
2512
|
+
// 结束收集时,立即将全局收集变量<span class="cstat-no" title="statement not covered" >状态重置,防止下次收集数据混乱</span>
|
|
2513
|
+
const collectin<span class="cstat-no" title="statement not covered" >gList = proxyApp.</span>_collectingList;
|
|
2514
|
+
<span class="cstat-no" title="statement not covered" > const actionMsg = proxyApp._act</span>ionMsg;
|
|
2515
|
+
<span class="cstat-no" title="statement not covered" > const action = proxyApp._a</span>ction;
|
|
2516
|
+
<span class="cstat-no" title="statement not covered" > proxyApp._collectingLis</span>t = [];
|
|
3445
2517
|
<span class="cstat-no" title="statement not covered" > proxyApp._actionMsg = '';</span>
|
|
3446
2518
|
<span class="cstat-no" title="statement not covered" > proxyApp._action = '';</span>
|
|
3447
|
-
<span class="cstat-no" title="statement not covered" >
|
|
3448
|
-
<span class="cstat-no" title="statement not covered" >
|
|
3449
|
-
|
|
3450
|
-
|
|
3451
|
-
value: collectingList
|
|
2519
|
+
pr<span class="cstat-no" title="statement not covered" >oxyApp._noTimer = undefined;</span>
|
|
2520
|
+
if<span class="cstat-no" title="statement not covered" > (Array.isArray(collectingList) && collectingList.length) {</span>
|
|
2521
|
+
mountDatabaseTypes(proxyApp);
|
|
2522
|
+
proxyApp.naslServer?.embeddedTSEmitter?.emit('change', {
|
|
2523
|
+
<span class="cstat-no" title="statement not covered" > value: collectingList,</span>
|
|
3452
2524
|
});
|
|
3453
|
-
|
|
2525
|
+
await doAction(proxyApp, {
|
|
3454
2526
|
list: collectingList,
|
|
3455
2527
|
actionMsg,
|
|
3456
2528
|
action,
|
|
3457
|
-
})
|
|
3458
|
-
}
|
|
3459
|
-
}
|
|
3460
|
-
|
|
3461
|
-
|
|
2529
|
+
});<span class="cstat-no" title="statement not covered" ></span>
|
|
2530
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2531
|
+
} <span class="cstat-no" title="statement not covered" >else if (proxyApp._isCollect</span>ingCount < 0) {
|
|
2532
|
+
proxyApp._isCollectingCount = 0;
|
|
2533
|
+
throw Error('关闭收集有问题,请排查');
|
|
3462
2534
|
}
|
|
3463
2535
|
});
|
|
3464
2536
|
|
|
3465
2537
|
/**
|
|
3466
|
-
*
|
|
3467
|
-
|
|
3468
|
-
|
|
3469
|
-
|
|
3470
|
-
|
|
3471
|
-
|
|
3472
|
-
|
|
3473
|
-
value: [event]
|
|
3474
|
-
})
|
|
3475
|
-
let actionMsg =
|
|
3476
|
-
|
|
3477
|
-
const { concept, name } =
|
|
3478
|
-
<span class="cstat-no" title="statement not covered" >
|
|
3479
|
-
|
|
3480
|
-
|
|
2538
|
+
<span class="cstat-no" title="statement not covered" > * 有变更<span class="fstat-no" title="function not covered" ></span></span>
|
|
2539
|
+
*/<span class="cstat-no" title="statement not covered" ></span>
|
|
2540
|
+
app.on('storage', function (this: ProxyApp, event: any) {
|
|
2541
|
+
<span class="cstat-no" title="statement not covered" > const proxyApp = this;</span>
|
|
2542
|
+
//<span class="cstat-no" title="statement not covered" > 是否正在收集</span>
|
|
2543
|
+
if (proxyApp._isCollectingCount === 0) {
|
|
2544
|
+
proxyApp.naslServer?.embeddedTSEmitter?.emit('change', {
|
|
2545
|
+
value: [event]<span class="cstat-no" title="statement not covered" >,</span>
|
|
2546
|
+
});<span class="cstat-no" title="statement not covered" ></span>
|
|
2547
|
+
let actionMsg = '';<span class="cstat-no" title="statement not covered" ></span>
|
|
2548
|
+
<span class="cstat-no" title="statement not covered" > const { action, target } = event.originEvent || {};</span>
|
|
2549
|
+
const { concept, name } = target || {};
|
|
2550
|
+
swit<span class="cstat-no" title="statement not covered" >ch (action) {</span>
|
|
2551
|
+
ca<span class="cstat-no" title="statement not covered" >se 'cre</span>ate':
|
|
2552
|
+
actionMsg = '添加';
|
|
3481
2553
|
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
3482
|
-
|
|
3483
|
-
|
|
2554
|
+
ca<span class="cstat-no" title="statement not covered" >se 'del</span>ete':
|
|
2555
|
+
actionMsg = '删除';
|
|
3484
2556
|
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
3485
|
-
|
|
3486
|
-
|
|
2557
|
+
ca<span class="cstat-no" title="statement not covered" >se 'upd</span>ate':
|
|
2558
|
+
actionMsg = '修改';
|
|
3487
2559
|
<span class="cstat-no" title="statement not covered" > break;</span>
|
|
3488
|
-
}
|
|
3489
|
-
<span class="cstat-no" title="statement not covered" >
|
|
3490
|
-
|
|
2560
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2561
|
+
ac<span class="cstat-no" title="statement not covered" >tionMsg += getConceptConst</span>ructor(concept).nodeTitle;
|
|
2562
|
+
if (name) {
|
|
3491
2563
|
<span class="cstat-no" title="statement not covered" > actionMsg += `“${name}”`;</span>
|
|
3492
2564
|
}
|
|
3493
|
-
|
|
2565
|
+
doAction(proxyApp, {
|
|
3494
2566
|
list: [event],
|
|
3495
2567
|
actionMsg,
|
|
3496
|
-
})
|
|
2568
|
+
<span class="cstat-no" title="statement not covered" > });</span>
|
|
3497
2569
|
} else {
|
|
3498
|
-
|
|
2570
|
+
proxyApp._collectingList.push(event);
|
|
3499
2571
|
}
|
|
3500
2572
|
});
|
|
3501
2573
|
}
|
|
@@ -3510,17 +2582,13 @@ type BreakpointItem =
|
|
|
3510
2582
|
/**
|
|
3511
2583
|
* 加载 app
|
|
3512
2584
|
* @param appId 如果是从文件读,就不需要传
|
|
3513
|
-
* @returns app
|
|
2585
|
+
* @returns app 对象<span class="fstat-no" title="function not covered" ></span>
|
|
3514
2586
|
*/
|
|
3515
|
-
|
|
3516
|
-
<span class="cstat-no" title="statement not covered" >
|
|
3517
|
-
|
|
3518
|
-
|
|
3519
|
-
|
|
3520
|
-
let app: App;
|
|
3521
|
-
<span class="cstat-no" title="statement not covered" > if (config.storage.protocol === 'http') {</span>
|
|
3522
|
-
<span class="cstat-no" title="statement not covered" > console.time('batchQuery');</span>
|
|
3523
|
-
const promises = <span class="cstat-no" title="statement not covered" >[</span>
|
|
2587
|
+
ex<span class="cstat-no" title="statement not covered" >port async function loadApp(appId?: string) {</span>
|
|
2588
|
+
le<span class="cstat-no" title="statement not covered" >t app: App;</span>
|
|
2589
|
+
if (config.storage.<span class="cstat-no" title="statement not covered" >protocol === 'http') {</span>
|
|
2590
|
+
console.time('batchQuery');
|
|
2591
|
+
const promises = [
|
|
3524
2592
|
storageService.batchQuery({
|
|
3525
2593
|
body: [
|
|
3526
2594
|
{
|
|
@@ -3540,37 +2608,37 @@ export async function <span class="fstat-no" title="function not covered" >loadA
|
|
|
3540
2608
|
storageService.breakpoint({
|
|
3541
2609
|
body: { appId }
|
|
3542
2610
|
})
|
|
3543
|
-
]
|
|
3544
|
-
|
|
3545
|
-
const [batchQueryRes, breakpointRes] = <span class="cstat-no" title="statement not covered" >await Promise.all(promises)</span>
|
|
2611
|
+
]<span class="cstat-no" title="statement not covered" ></span>
|
|
3546
2612
|
|
|
2613
|
+
const [batchQueryRes, breakpointRes] = await Promise.all(promises)
|
|
2614
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
3547
2615
|
// 请求
|
|
3548
2616
|
<span class="cstat-no" title="statement not covered" > console.timeEnd('batchQuery');</span>
|
|
3549
|
-
|
|
3550
|
-
|
|
3551
|
-
|
|
3552
|
-
|
|
3553
|
-
|
|
3554
|
-
<span class="cstat-no" title="statement not covered" > app = new App(Object.
|
|
3555
|
-
|
|
3556
|
-
|
|
3557
|
-
|
|
3558
|
-
|
|
3559
|
-
|
|
3560
|
-
|
|
3561
|
-
|
|
3562
|
-
|
|
3563
|
-
|
|
2617
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
2618
|
+
tabTimestamp = batchQueryRes?.headers?.tabtimestamp;
|
|
2619
|
+
<span class="cstat-no" title="statement not covered" > const data = batchQueryRe</span>s?.data?.result;
|
|
2620
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
2621
|
+
console.time('new App');
|
|
2622
|
+
<span class="cstat-no" title="statement not covered" > app = new App(Object.as<span class="fstat-no" title="function not covered" >si</span>gn(data?.[0], { id: ap<span class="branch-0 cbranch-no" title="branch not covered" >pId</span> }));</span>
|
|
2623
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
2624
|
+
breakpointRes?.forEach((item: BreakpointItem = {}) => {
|
|
2625
|
+
<span class="cstat-no" title="statement not covered" > const { path, breakpointStatus } = item</span>
|
|
2626
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
2627
|
+
if (breakpointStatus) {
|
|
2628
|
+
<span class="cstat-no" title="statement not covered" > const node = app.findNodeByPath(path)</span>
|
|
2629
|
+
<span class="cstat-no" title="statement not covered" ></span>
|
|
2630
|
+
if (node) {
|
|
2631
|
+
node.breakpoint = breakpointStatus
|
|
3564
2632
|
}
|
|
3565
|
-
}
|
|
3566
|
-
})
|
|
3567
|
-
<span class="cstat-no" title="statement not covered" >
|
|
3568
|
-
|
|
2633
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2634
|
+
<span class="cstat-no" title="statement not covered" > })</span>
|
|
2635
|
+
co<span class="cstat-no" title="statement not covered" >nsole.timeEnd('n</span>ew App');
|
|
2636
|
+
if (!app.id) {
|
|
3569
2637
|
<span class="cstat-no" title="statement not covered" > app.id = appId;</span>
|
|
3570
|
-
}
|
|
2638
|
+
}<span class="cstat-no" title="statement not covered" ></span>
|
|
3571
2639
|
<span class="cstat-no" title="statement not covered" > addBreakpointNodesFromApp(app)</span>
|
|
3572
|
-
} else
|
|
3573
|
-
|
|
2640
|
+
} else if (config.storage.protocol === 'mock') {
|
|
2641
|
+
app = new App({
|
|
3574
2642
|
id: appId,
|
|
3575
2643
|
concept: 'App',
|
|
3576
2644
|
name: 'devapp',
|
|
@@ -3588,89 +2656,88 @@ export async function <span class="fstat-no" title="function not covered" >loadA
|
|
|
3588
2656
|
dependencies: [],
|
|
3589
2657
|
interfaceDependencies: [],
|
|
3590
2658
|
frontends: [],
|
|
3591
|
-
|
|
3592
|
-
|
|
3593
|
-
|
|
3594
|
-
|
|
3595
|
-
<span class="cstat-no" title="statement not covered" >
|
|
3596
|
-
|
|
3597
|
-
|
|
3598
|
-
<span class="cstat-no" title="statement not covered" >
|
|
3599
|
-
(
|
|
3600
|
-
|
|
3601
|
-
<span class="cstat-no" title="statement not covered" > return app as App;</span>
|
|
2659
|
+
});<span class="cstat-no" title="statement not covered" ></span>
|
|
2660
|
+
} <span class="cstat-no" title="statement not covered" >else {</span>
|
|
2661
|
+
const json = await fs.readJSON(config.storage.basePath);
|
|
2662
|
+
app = new App(appId ? Object.assign(json, { id: appId }) : json);
|
|
2663
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2664
|
+
/<span class="cstat-no" title="statement not covered" >/ config.scope = app.scope;</span>
|
|
2665
|
+
<span class="cstat-no" title="statement not covered" > handleApp(app as ProxyApp</span>);
|
|
2666
|
+
<span class="cstat-no" title="statement not covered" > (app as any)._isCol</span>lectingCount = 0;
|
|
2667
|
+
mountDatabaseTypes(app);
|
|
2668
|
+
return app as App;
|
|
3602
2669
|
}
|
|
3603
|
-
|
|
3604
|
-
|
|
3605
|
-
|
|
3606
|
-
|
|
3607
|
-
<span class="cstat-no" title="statement not covered" >
|
|
3608
|
-
}
|
|
3609
|
-
|
|
3610
|
-
|
|
3611
|
-
<span class="cstat-no" title="statement not covered" >
|
|
3612
|
-
<span class="cstat-no" title="statement not covered" >
|
|
3613
|
-
|
|
3614
|
-
|
|
3615
|
-
|
|
2670
|
+
<span class="fstat-no" title="function not covered" ></span>
|
|
2671
|
+
//<span class="cstat-no" title="statement not covered" > 在app上挂载所有的数据库类型</span>
|
|
2672
|
+
expo<span class="cstat-no" title="statement not covered" >rt async function mountDatab</span>aseTypes(app: App) {
|
|
2673
|
+
if (!app.__databaseTypeMap) {
|
|
2674
|
+
app.__databaseType<span class="cstat-no" title="statement not covered" >Map = {};</span>
|
|
2675
|
+
}<span class="cstat-no" title="statement not covered" ></span>
|
|
2676
|
+
<span class="cstat-no" title="statement not covered" > const dataSources = app?.dataSources;</span>
|
|
2677
|
+
co<span class="cstat-no" title="statement not covered" >nst dbTypeSet = new <span class="fstat-no" title="function not covered" >Se</span>t();</span>
|
|
2678
|
+
if (Array.isArray(dataSources)<span class="cstat-no" title="statement not covered" >) {</span>
|
|
2679
|
+
da<span class="cstat-no" title="statement not covered" >taSources.forEach((dataSource) => {</span>
|
|
2680
|
+
co<span class="cstat-no" title="statement not covered" >nst dataSourceSqlType = JSON.parse</span>(dataSource.dataSourceConfig?.devProperty?.value || '{}')?.type;
|
|
2681
|
+
if (dataSourceSqlType && !app.__databaseTypeMap[dataSourceSqlType]) {
|
|
2682
|
+
dbTypeSet.add(dataSourceSqlType);
|
|
3616
2683
|
}
|
|
3617
|
-
})
|
|
3618
|
-
}
|
|
3619
|
-
const dbTypes =
|
|
3620
|
-
|
|
3621
|
-
const res: any =
|
|
2684
|
+
});<span class="cstat-no" title="statement not covered" ></span>
|
|
2685
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2686
|
+
const dbTypes = [..<span class="cstat-no" title="statement not covered" >.dbTypeSet];</span>
|
|
2687
|
+
if (Array.isArray(dbTypes) && dbTypes.length) {
|
|
2688
|
+
const res: any = await databaseTypes({
|
|
3622
2689
|
query: {
|
|
3623
2690
|
dbTypes: dbTypes.join(','),
|
|
3624
|
-
}
|
|
3625
|
-
})
|
|
3626
|
-
<span class="cstat-no" title="statement not covered"
|
|
3627
|
-
|
|
3628
|
-
|
|
3629
|
-
|
|
3630
|
-
<span class="cstat-no" title="statement not covered"
|
|
3631
|
-
|
|
3632
|
-
const { naslType, dataBaseTypes } =
|
|
3633
|
-
|
|
3634
|
-
|
|
3635
|
-
<span class="cstat-no" title="statement not covered" >
|
|
3636
|
-
<span class="cstat-no" title="statement not covered" >
|
|
3637
|
-
|
|
3638
|
-
<span class="cstat-no" title="statement not covered"
|
|
2691
|
+
<span class="cstat-no" title="statement not covered" > },</span>
|
|
2692
|
+
})<span class="cstat-no" title="statement not covered" >;<span class="fstat-no" title="function not covered" ></span></span>
|
|
2693
|
+
if (Array.isArray(res)) {<span class="cstat-no" title="statement not covered" ></span>
|
|
2694
|
+
res.forEach((databaseType: an<span class="cstat-no" title="statement not covered" >y) </span>=> {
|
|
2695
|
+
<span class="cstat-no" title="statement not covered" > const { dbType, columnTypes } = databaseType || {};</span>
|
|
2696
|
+
co<span class="cstat-no" title="statement not covered" >nst columnTypeMap: a<span class="fstat-no" title="function not covered" >ny</span> = {};</span>
|
|
2697
|
+
if (Array.isArray(columnTypes)) {<span class="cstat-no" title="statement not covered" ></span>
|
|
2698
|
+
columnTypes.forEach((columnType<span class="cstat-no" title="statement not covered" >) =</span>> {
|
|
2699
|
+
const { naslType, dataBaseTypes } = columnType;
|
|
2700
|
+
<span class="cstat-no" title="statement not covered" > const dataBaseTypeMap: any = {};</span>
|
|
2701
|
+
le<span class="cstat-no" title="statement not covered" >t defaultDataBaseType;<span class="fstat-no" title="function not covered" ></span></span>
|
|
2702
|
+
if (Array.isArray(dat<span class="cstat-no" title="statement not covered" >aBaseTypes)) {</span>
|
|
2703
|
+
da<span class="cstat-no" title="statement not covered" >taBaseTypes.forEach((dataBaseType) => {</span>
|
|
2704
|
+
co<span class="cstat-no" title="statement not covered" >nst { type } = dataBaseType || {};</span>
|
|
2705
|
+
if (type) {<span class="cstat-no" title="statement not covered" ></span>
|
|
3639
2706
|
<span class="cstat-no" title="statement not covered" > dataBaseTypeMap[type] = dataBaseType;</span>
|
|
3640
|
-
|
|
3641
|
-
|
|
3642
|
-
|
|
2707
|
+
co<span class="cstat-no" title="statement not covered" >nst { defaultType } = dataBaseType;</span>
|
|
2708
|
+
if (defaultType) {
|
|
2709
|
+
defaultDataBaseType = dataBaseType;
|
|
3643
2710
|
}
|
|
3644
2711
|
}
|
|
3645
|
-
})
|
|
2712
|
+
<span class="cstat-no" title="statement not covered" > });</span>
|
|
3646
2713
|
}
|
|
3647
|
-
|
|
2714
|
+
columnTypeMap[naslType] = {
|
|
3648
2715
|
dataBaseTypes,
|
|
3649
2716
|
dataBaseTypeMap,
|
|
3650
2717
|
defaultDataBaseType,
|
|
3651
2718
|
};
|
|
3652
|
-
})
|
|
2719
|
+
<span class="cstat-no" title="statement not covered" > });</span>
|
|
3653
2720
|
}
|
|
3654
|
-
|
|
2721
|
+
app.__databaseTypeMap[dbType] = columnTypeMap;
|
|
3655
2722
|
});
|
|
3656
|
-
}
|
|
3657
|
-
}
|
|
3658
|
-
<span class="cstat-no" title="statement not covered" >
|
|
3659
|
-
|
|
3660
|
-
|
|
2723
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
2724
|
+
}<span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" ></span></span>
|
|
2725
|
+
if (<span class="cstat-no" title="statement not covered" >Array.isArray(dataSources)) {</span>
|
|
2726
|
+
dataSources.forEach((dataSource) => {
|
|
2727
|
+
dataSource.__hasDatabaseConfig = !!(app.__databaseTypeMap?.[dataSource.dataSourceSqlType]);
|
|
3661
2728
|
});
|
|
3662
2729
|
}
|
|
3663
2730
|
}
|
|
3664
2731
|
|
|
3665
2732
|
/**
|
|
3666
2733
|
* 加载 app
|
|
3667
|
-
* @returns app
|
|
3668
|
-
|
|
3669
|
-
export
|
|
3670
|
-
|
|
3671
|
-
|
|
3672
|
-
|
|
3673
|
-
|
|
2734
|
+
* @returns app <span class="fstat-no" title="function not covered" >对象</span>
|
|
2735
|
+
*/<span class="cstat-no" title="statement not covered" ></span>
|
|
2736
|
+
export functio<span class="cstat-no" title="statement not covered" >n loadAppSync(</span>) {
|
|
2737
|
+
<span class="cstat-no" title="statement not covered" > const json = fs.readJSONSync</span>(config.storage.basePath);
|
|
2738
|
+
<span class="cstat-no" title="statement not covered" > const app = </span>new App(json);
|
|
2739
|
+
handleApp(app as ProxyApp);
|
|
2740
|
+
return app;
|
|
3674
2741
|
}
|
|
3675
2742
|
</pre></td></tr></table></pre>
|
|
3676
2743
|
|
|
@@ -3679,7 +2746,7 @@ export function <span class="fstat-no" title="function not covered" >loadAppSync
|
|
|
3679
2746
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
3680
2747
|
Code coverage generated by
|
|
3681
2748
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
3682
|
-
at 2023-
|
|
2749
|
+
at 2023-10-18T11:36:07.885Z
|
|
3683
2750
|
</div>
|
|
3684
2751
|
<script src="../../../prettify.js"></script>
|
|
3685
2752
|
<script>
|