@featurevisor/core 2.26.1 → 3.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +8 -0
- package/coverage/clover.xml +4991 -3130
- package/coverage/coverage-final.json +63 -39
- package/coverage/lcov-report/block-navigation.js +1 -1
- package/coverage/lcov-report/index.html +248 -98
- package/coverage/lcov-report/sorter.js +21 -7
- package/coverage/lcov-report/src/assess-distribution/index.html +116 -0
- package/coverage/lcov-report/src/assess-distribution/index.ts.html +754 -0
- package/coverage/lcov-report/{list → src/benchmark}/index.html +30 -30
- package/coverage/lcov-report/src/benchmark/index.ts.html +793 -0
- package/coverage/lcov-report/{builder → src/builder}/allocator.ts.html +38 -38
- package/coverage/lcov-report/{builder/buildScopedConditions.ts.html → src/builder/applyContextToConditions.ts.html} +80 -65
- package/coverage/lcov-report/{builder/buildScopedDatafile.ts.html → src/builder/applyContextToDatafile.ts.html} +92 -92
- package/coverage/lcov-report/{builder/buildScopedSegments.ts.html → src/builder/applyContextToSegments.ts.html} +103 -67
- package/coverage/lcov-report/{builder → src/builder}/buildDatafile.ts.html +336 -306
- package/coverage/lcov-report/src/builder/buildProject.ts.html +1117 -0
- package/coverage/lcov-report/src/builder/buildRuntimeDatafiles.ts.html +256 -0
- package/coverage/lcov-report/{builder → src/builder}/getFeatureRanges.ts.html +22 -22
- package/coverage/lcov-report/{builder → src/builder}/hashes.ts.html +50 -50
- package/coverage/lcov-report/{builder → src/builder}/index.html +114 -84
- package/coverage/lcov-report/{tester/cliFormat.ts.html → src/builder/index.ts.html} +17 -29
- package/coverage/lcov-report/{builder → src/builder}/mutateVariables.ts.html +55 -55
- package/coverage/lcov-report/{builder → src/builder}/mutator.ts.html +118 -118
- package/coverage/lcov-report/{builder → src/builder}/revision.ts.html +15 -15
- package/coverage/lcov-report/{builder → src/builder}/traffic.ts.html +86 -86
- package/coverage/lcov-report/src/cli/cli.ts.html +400 -0
- package/coverage/lcov-report/{tester → src/cli}/index.html +41 -41
- package/coverage/lcov-report/src/cli/plugins.ts.html +214 -0
- package/coverage/lcov-report/{config → src/config}/index.html +31 -31
- package/coverage/lcov-report/{config → src/config}/index.ts.html +12 -12
- package/coverage/lcov-report/{config → src/config}/projectConfig.ts.html +312 -96
- package/coverage/lcov-report/{datasource → src/datasource}/adapter.ts.html +28 -73
- package/coverage/lcov-report/{datasource → src/datasource}/datasource.ts.html +191 -104
- package/coverage/lcov-report/{datasource → src/datasource}/filesystemAdapter.ts.html +233 -635
- package/coverage/lcov-report/{datasource → src/datasource}/index.html +48 -48
- package/coverage/lcov-report/{datasource → src/datasource}/index.ts.html +14 -14
- package/coverage/lcov-report/src/evaluate/index.html +116 -0
- package/coverage/lcov-report/src/evaluate/index.ts.html +814 -0
- package/coverage/lcov-report/src/find-duplicate-segments/findDuplicateSegments.ts.html +313 -0
- package/coverage/lcov-report/src/find-duplicate-segments/index.html +131 -0
- package/coverage/lcov-report/src/find-duplicate-segments/index.ts.html +307 -0
- package/coverage/lcov-report/src/find-usage/index.html +116 -0
- package/coverage/lcov-report/src/find-usage/index.ts.html +1780 -0
- package/coverage/lcov-report/src/generate-code/index.html +131 -0
- package/coverage/lcov-report/src/generate-code/index.ts.html +403 -0
- package/coverage/lcov-report/{generate-code → src/generate-code}/typescript.ts.html +266 -1361
- package/coverage/lcov-report/{generate-code → src}/index.html +38 -23
- package/coverage/lcov-report/src/info/index.html +116 -0
- package/coverage/lcov-report/src/info/index.ts.html +472 -0
- package/coverage/lcov-report/src/init/index.html +116 -0
- package/coverage/lcov-report/src/init/index.ts.html +280 -0
- package/coverage/lcov-report/{linter → src/linter}/attributeSchema.ts.html +160 -157
- package/coverage/lcov-report/{linter → src/linter}/checkCircularDependency.ts.html +25 -25
- package/coverage/lcov-report/{linter → src/linter}/checkPercentageExceedingSlot.ts.html +42 -42
- package/coverage/lcov-report/{linter → src/linter}/conditionSchema.ts.html +207 -207
- package/coverage/lcov-report/{linter → src/linter}/featureSchema.ts.html +462 -471
- package/coverage/lcov-report/{linter → src/linter}/groupSchema.ts.html +25 -22
- package/coverage/lcov-report/{linter → src/linter}/index.html +129 -99
- package/coverage/lcov-report/src/linter/index.ts.html +88 -0
- package/coverage/lcov-report/{linter → src/linter}/lintProject.ts.html +740 -332
- package/coverage/lcov-report/{linter → src/linter}/mutationNotation.ts.html +130 -130
- package/coverage/lcov-report/{linter → src/linter}/printError.ts.html +27 -27
- package/coverage/lcov-report/{linter → src/linter}/schema.ts.html +153 -150
- package/coverage/lcov-report/{linter → src/linter}/segmentSchema.ts.html +18 -15
- package/coverage/lcov-report/src/linter/targetSchema.ts.html +223 -0
- package/coverage/lcov-report/{linter → src/linter}/testSchema.ts.html +54 -48
- package/coverage/lcov-report/{linter → src/linter}/zodHelpers.ts.html +17 -17
- package/coverage/lcov-report/src/list/index.html +131 -0
- package/coverage/lcov-report/src/list/index.ts.html +2065 -0
- package/coverage/lcov-report/{list → src/list}/matrix.ts.html +43 -58
- package/coverage/lcov-report/src/promoter/index.html +116 -0
- package/coverage/lcov-report/src/promoter/index.ts.html +3883 -0
- package/coverage/lcov-report/src/sets.ts.html +313 -0
- package/coverage/lcov-report/src/targeting.ts.html +403 -0
- package/coverage/lcov-report/src/tester/cliFormat.ts.html +133 -0
- package/coverage/lcov-report/{tester → src/tester}/helpers.ts.html +15 -15
- package/coverage/lcov-report/src/tester/index.html +206 -0
- package/coverage/lcov-report/src/tester/prettyDuration.ts.html +187 -0
- package/coverage/lcov-report/src/tester/printTestResult.ts.html +337 -0
- package/coverage/lcov-report/src/tester/testFeature.ts.html +1186 -0
- package/coverage/lcov-report/src/tester/testProject.ts.html +1018 -0
- package/coverage/lcov-report/src/tester/testSegment.ts.html +316 -0
- package/coverage/lcov-report/{utils → src/utils}/extractKeys.ts.html +68 -68
- package/coverage/lcov-report/{utils → src/utils}/git.ts.html +44 -68
- package/coverage/lcov-report/{utils → src/utils}/index.html +44 -44
- package/coverage/lcov-report/{utils → src/utils}/index.ts.html +14 -14
- package/coverage/lcov-report/{utils → src/utils}/pretty.ts.html +20 -20
- package/coverage/lcov.info +10121 -5723
- package/jest.config.js +13 -4
- package/lib/assess-distribution/index.d.ts +1 -1
- package/lib/assess-distribution/index.js +59 -40
- package/lib/assess-distribution/index.js.map +1 -1
- package/lib/benchmark/index.d.ts +8 -5
- package/lib/benchmark/index.js +82 -65
- package/lib/benchmark/index.js.map +1 -1
- package/lib/builder/applyContextToConditions.d.ts +5 -0
- package/lib/builder/{buildScopedConditions.js → applyContextToConditions.js} +19 -14
- package/lib/builder/applyContextToConditions.js.map +1 -0
- package/lib/builder/applyContextToDatafile.d.ts +2 -0
- package/lib/builder/{buildScopedDatafile.js → applyContextToDatafile.js} +26 -26
- package/lib/builder/applyContextToDatafile.js.map +1 -0
- package/lib/builder/applyContextToSegments.d.ts +5 -0
- package/lib/builder/{buildScopedSegments.js → applyContextToSegments.js} +19 -14
- package/lib/builder/applyContextToSegments.js.map +1 -0
- package/lib/builder/buildDatafile.d.ts +9 -6
- package/lib/builder/buildDatafile.js +86 -51
- package/lib/builder/buildDatafile.js.map +1 -1
- package/lib/builder/buildProject.d.ts +17 -3
- package/lib/builder/buildProject.js +151 -59
- package/lib/builder/buildProject.js.map +1 -1
- package/lib/builder/buildRuntimeDatafiles.d.ts +12 -0
- package/lib/builder/buildRuntimeDatafiles.js +35 -0
- package/lib/builder/buildRuntimeDatafiles.js.map +1 -0
- package/lib/builder/getFeatureRanges.js +34 -1
- package/lib/builder/getFeatureRanges.js.map +1 -1
- package/lib/builder/hashes.js +34 -1
- package/lib/builder/hashes.js.map +1 -1
- package/lib/builder/index.d.ts +0 -1
- package/lib/builder/index.js +0 -1
- package/lib/builder/index.js.map +1 -1
- package/lib/cli/cli.js +0 -4
- package/lib/cli/cli.js.map +1 -1
- package/lib/cli/plugins.js +7 -2
- package/lib/cli/plugins.js.map +1 -1
- package/lib/config/projectConfig.d.ts +17 -17
- package/lib/config/projectConfig.js +101 -15
- package/lib/config/projectConfig.js.map +1 -1
- package/lib/datasource/adapter.d.ts +7 -9
- package/lib/datasource/adapter.js +0 -7
- package/lib/datasource/adapter.js.map +1 -1
- package/lib/datasource/datasource.d.ts +15 -5
- package/lib/datasource/datasource.js +37 -9
- package/lib/datasource/datasource.js.map +1 -1
- package/lib/datasource/filesystemAdapter.d.ts +4 -10
- package/lib/datasource/filesystemAdapter.js +111 -149
- package/lib/datasource/filesystemAdapter.js.map +1 -1
- package/lib/evaluate/index.d.ts +1 -7
- package/lib/evaluate/index.js +81 -67
- package/lib/evaluate/index.js.map +1 -1
- package/lib/find-duplicate-segments/findDuplicateSegments.js +34 -1
- package/lib/find-duplicate-segments/findDuplicateSegments.js.map +1 -1
- package/lib/find-duplicate-segments/index.js +21 -13
- package/lib/find-duplicate-segments/index.js.map +1 -1
- package/lib/find-usage/index.js +57 -41
- package/lib/find-usage/index.js.map +1 -1
- package/lib/generate-code/index.d.ts +1 -1
- package/lib/generate-code/index.js +64 -21
- package/lib/generate-code/index.js.map +1 -1
- package/lib/generate-code/typescript.d.ts +1 -1
- package/lib/generate-code/typescript.js +59 -333
- package/lib/generate-code/typescript.js.map +1 -1
- package/lib/index.d.ts +2 -1
- package/lib/index.js +2 -1
- package/lib/index.js.map +1 -1
- package/lib/info/index.js +57 -16
- package/lib/info/index.js.map +1 -1
- package/lib/init/index.d.ts +2 -2
- package/lib/init/index.js +39 -3
- package/lib/init/index.js.map +1 -1
- package/lib/linter/attributeSchema.d.ts +1 -0
- package/lib/linter/attributeSchema.js +1 -0
- package/lib/linter/attributeSchema.js.map +1 -1
- package/lib/linter/conditionSchema.js +5 -5
- package/lib/linter/conditionSchema.js.map +1 -1
- package/lib/linter/featureSchema.d.ts +4 -1
- package/lib/linter/featureSchema.js +15 -13
- package/lib/linter/featureSchema.js.map +1 -1
- package/lib/linter/groupSchema.d.ts +1 -0
- package/lib/linter/groupSchema.js +1 -0
- package/lib/linter/groupSchema.js.map +1 -1
- package/lib/linter/lintProject.d.ts +1 -3
- package/lib/linter/lintProject.js +198 -68
- package/lib/linter/lintProject.js.map +1 -1
- package/lib/linter/schema.js +1 -0
- package/lib/linter/schema.js.map +1 -1
- package/lib/linter/segmentSchema.d.ts +1 -0
- package/lib/linter/segmentSchema.js +1 -0
- package/lib/linter/segmentSchema.js.map +1 -1
- package/lib/linter/targetSchema.d.ts +16 -0
- package/lib/linter/targetSchema.js +40 -0
- package/lib/linter/targetSchema.js.map +1 -0
- package/lib/linter/testSchema.d.ts +4 -3
- package/lib/linter/testSchema.js +9 -4
- package/lib/linter/testSchema.js.map +1 -1
- package/lib/list/index.d.ts +1 -0
- package/lib/list/index.js +131 -12
- package/lib/list/index.js.map +1 -1
- package/lib/list/matrix.js +3 -7
- package/lib/list/matrix.js.map +1 -1
- package/lib/promoter/index.d.ts +50 -0
- package/lib/promoter/index.js +880 -0
- package/lib/promoter/index.js.map +1 -0
- package/lib/sets.d.ts +11 -0
- package/lib/sets.js +81 -0
- package/lib/sets.js.map +1 -0
- package/lib/targeting.d.ts +14 -0
- package/lib/targeting.js +82 -0
- package/lib/targeting.js.map +1 -0
- package/lib/tester/cliFormat.d.ts +7 -1
- package/lib/tester/cliFormat.js +11 -2
- package/lib/tester/cliFormat.js.map +1 -1
- package/lib/tester/printTestResult.js +2 -2
- package/lib/tester/printTestResult.js.map +1 -1
- package/lib/tester/testFeature.d.ts +0 -1
- package/lib/tester/testFeature.js +8 -25
- package/lib/tester/testFeature.js.map +1 -1
- package/lib/tester/testProject.d.ts +2 -3
- package/lib/tester/testProject.js +93 -86
- package/lib/tester/testProject.js.map +1 -1
- package/lib/tester/testSegment.d.ts +1 -1
- package/lib/tester/testSegment.js +3 -21
- package/lib/tester/testSegment.js.map +1 -1
- package/lib/utils/git.js +45 -19
- package/lib/utils/git.js.map +1 -1
- package/package.json +12 -12
- package/src/assess-distribution/index.ts +72 -52
- package/src/benchmark/index.ts +124 -91
- package/src/builder/{buildScopedConditions.spec.ts → applyContextToConditions.spec.ts} +160 -142
- package/src/builder/{buildScopedConditions.ts → applyContextToConditions.ts} +19 -14
- package/src/builder/{buildScopedDatafile.spec.ts → applyContextToDatafile.spec.ts} +141 -81
- package/src/builder/{buildScopedDatafile.ts → applyContextToDatafile.ts} +33 -33
- package/src/builder/{buildScopedSegments.spec.ts → applyContextToSegments.spec.ts} +171 -151
- package/src/builder/{buildScopedSegments.ts → applyContextToSegments.ts} +26 -14
- package/src/builder/buildDatafile.spec.ts +192 -14
- package/src/builder/buildDatafile.ts +74 -64
- package/src/builder/buildProject.ts +171 -86
- package/src/builder/buildRuntimeDatafiles.ts +57 -0
- package/src/builder/index.ts +0 -1
- package/src/cli/cli.ts +0 -5
- package/src/cli/plugins.ts +7 -2
- package/src/config/projectConfig.spec.ts +171 -8
- package/src/config/projectConfig.ts +100 -28
- package/src/datasource/adapter.ts +8 -23
- package/src/datasource/datasource.ts +50 -21
- package/src/datasource/filesystemAdapter.spec.ts +133 -74
- package/src/datasource/filesystemAdapter.ts +93 -227
- package/src/evaluate/index.ts +109 -97
- package/src/find-duplicate-segments/index.ts +34 -16
- package/src/find-usage/index.ts +89 -44
- package/src/generate-code/index.ts +36 -24
- package/src/generate-code/typescript.spec.ts +106 -0
- package/src/generate-code/typescript.ts +33 -398
- package/src/index.ts +2 -1
- package/src/info/index.ts +72 -16
- package/src/init/index.ts +1 -1
- package/src/linter/attributeSchema.ts +1 -0
- package/src/linter/conditionSchema.spec.ts +23 -3
- package/src/linter/conditionSchema.ts +5 -5
- package/src/linter/featureSchema.spec.ts +107 -18
- package/src/linter/featureSchema.ts +25 -28
- package/src/linter/groupSchema.ts +1 -0
- package/src/linter/lintProject.spec.ts +131 -92
- package/src/linter/lintProject.ts +233 -97
- package/src/linter/schema.ts +1 -0
- package/src/linter/segmentSchema.spec.ts +5 -3
- package/src/linter/segmentSchema.ts +1 -0
- package/src/linter/targetSchema.spec.ts +159 -0
- package/src/linter/targetSchema.ts +46 -0
- package/src/linter/testSchema.spec.ts +70 -5
- package/src/linter/testSchema.ts +12 -10
- package/src/list/index.spec.ts +135 -0
- package/src/list/index.ts +188 -12
- package/src/list/matrix.ts +3 -8
- package/src/promoter/index.spec.ts +617 -0
- package/src/promoter/index.ts +1266 -0
- package/src/sets.ts +76 -0
- package/src/targeting.spec.ts +74 -0
- package/src/targeting.ts +106 -0
- package/src/tester/cliFormat.ts +11 -1
- package/src/tester/printTestResult.ts +12 -3
- package/src/tester/testFeature.ts +10 -36
- package/src/tester/testProject.spec.ts +50 -0
- package/src/tester/testProject.ts +89 -140
- package/src/tester/testSegment.ts +5 -22
- package/src/utils/git.ts +13 -21
- package/tsconfig.cjs.json +5 -1
- package/tsconfig.typecheck.json +9 -0
- package/coverage/lcov-report/builder/convertToV1.ts.html +0 -583
- package/lib/builder/allocator.spec.d.ts +0 -1
- package/lib/builder/allocator.spec.js +0 -85
- package/lib/builder/allocator.spec.js.map +0 -1
- package/lib/builder/buildDatafile.spec.d.ts +0 -1
- package/lib/builder/buildDatafile.spec.js +0 -233
- package/lib/builder/buildDatafile.spec.js.map +0 -1
- package/lib/builder/buildScopedConditions.d.ts +0 -5
- package/lib/builder/buildScopedConditions.js.map +0 -1
- package/lib/builder/buildScopedConditions.spec.d.ts +0 -1
- package/lib/builder/buildScopedConditions.spec.js +0 -2167
- package/lib/builder/buildScopedConditions.spec.js.map +0 -1
- package/lib/builder/buildScopedDatafile.d.ts +0 -2
- package/lib/builder/buildScopedDatafile.js.map +0 -1
- package/lib/builder/buildScopedDatafile.spec.d.ts +0 -1
- package/lib/builder/buildScopedDatafile.spec.js +0 -2277
- package/lib/builder/buildScopedDatafile.spec.js.map +0 -1
- package/lib/builder/buildScopedSegments.d.ts +0 -5
- package/lib/builder/buildScopedSegments.js.map +0 -1
- package/lib/builder/buildScopedSegments.spec.d.ts +0 -1
- package/lib/builder/buildScopedSegments.spec.js +0 -1062
- package/lib/builder/buildScopedSegments.spec.js.map +0 -1
- package/lib/builder/convertToV1.d.ts +0 -10
- package/lib/builder/convertToV1.js +0 -119
- package/lib/builder/convertToV1.js.map +0 -1
- package/lib/builder/mutateVariables.spec.d.ts +0 -1
- package/lib/builder/mutateVariables.spec.js +0 -1074
- package/lib/builder/mutateVariables.spec.js.map +0 -1
- package/lib/builder/mutator.spec.d.ts +0 -1
- package/lib/builder/mutator.spec.js +0 -368
- package/lib/builder/mutator.spec.js.map +0 -1
- package/lib/builder/revision.spec.d.ts +0 -1
- package/lib/builder/revision.spec.js +0 -21
- package/lib/builder/revision.spec.js.map +0 -1
- package/lib/builder/traffic.spec.d.ts +0 -1
- package/lib/builder/traffic.spec.js +0 -872
- package/lib/builder/traffic.spec.js.map +0 -1
- package/lib/config/projectConfig.spec.d.ts +0 -1
- package/lib/config/projectConfig.spec.js +0 -24
- package/lib/config/projectConfig.spec.js.map +0 -1
- package/lib/datasource/filesystemAdapter.spec.d.ts +0 -1
- package/lib/datasource/filesystemAdapter.spec.js +0 -88
- package/lib/datasource/filesystemAdapter.spec.js.map +0 -1
- package/lib/generate-code/typescript.spec.d.ts +0 -1
- package/lib/generate-code/typescript.spec.js +0 -78
- package/lib/generate-code/typescript.spec.js.map +0 -1
- package/lib/linter/attributeSchema.spec.d.ts +0 -1
- package/lib/linter/attributeSchema.spec.js +0 -266
- package/lib/linter/attributeSchema.spec.js.map +0 -1
- package/lib/linter/conditionSchema.spec.d.ts +0 -1
- package/lib/linter/conditionSchema.spec.js +0 -380
- package/lib/linter/conditionSchema.spec.js.map +0 -1
- package/lib/linter/featureSchema.spec.d.ts +0 -1
- package/lib/linter/featureSchema.spec.js +0 -1552
- package/lib/linter/featureSchema.spec.js.map +0 -1
- package/lib/linter/lintProject.spec.d.ts +0 -1
- package/lib/linter/lintProject.spec.js +0 -211
- package/lib/linter/lintProject.spec.js.map +0 -1
- package/lib/linter/mutationNotation.spec.d.ts +0 -1
- package/lib/linter/mutationNotation.spec.js +0 -598
- package/lib/linter/mutationNotation.spec.js.map +0 -1
- package/lib/linter/schema.spec.d.ts +0 -1
- package/lib/linter/schema.spec.js +0 -535
- package/lib/linter/schema.spec.js.map +0 -1
- package/lib/linter/segmentSchema.spec.d.ts +0 -1
- package/lib/linter/segmentSchema.spec.js +0 -303
- package/lib/linter/segmentSchema.spec.js.map +0 -1
- package/lib/linter/testSchema.spec.d.ts +0 -1
- package/lib/linter/testSchema.spec.js +0 -162
- package/lib/linter/testSchema.spec.js.map +0 -1
- package/lib/list/matrix.spec.d.ts +0 -1
- package/lib/list/matrix.spec.js +0 -42
- package/lib/list/matrix.spec.js.map +0 -1
- package/lib/site/exportSite.d.ts +0 -2
- package/lib/site/exportSite.js +0 -30
- package/lib/site/exportSite.js.map +0 -1
- package/lib/site/generateHistory.d.ts +0 -3
- package/lib/site/generateHistory.js +0 -31
- package/lib/site/generateHistory.js.map +0 -1
- package/lib/site/generateSiteSearchIndex.d.ts +0 -4
- package/lib/site/generateSiteSearchIndex.js +0 -195
- package/lib/site/generateSiteSearchIndex.js.map +0 -1
- package/lib/site/getLastModifiedFromHistory.d.ts +0 -2
- package/lib/site/getLastModifiedFromHistory.js +0 -18
- package/lib/site/getLastModifiedFromHistory.js.map +0 -1
- package/lib/site/getOwnerAndRepoFromUrl.d.ts +0 -4
- package/lib/site/getOwnerAndRepoFromUrl.js +0 -20
- package/lib/site/getOwnerAndRepoFromUrl.js.map +0 -1
- package/lib/site/getRelativePaths.d.ts +0 -6
- package/lib/site/getRelativePaths.js +0 -15
- package/lib/site/getRelativePaths.js.map +0 -1
- package/lib/site/getRepoDetails.d.ts +0 -8
- package/lib/site/getRepoDetails.js +0 -48
- package/lib/site/getRepoDetails.js.map +0 -1
- package/lib/site/index.d.ts +0 -2
- package/lib/site/index.js +0 -43
- package/lib/site/index.js.map +0 -1
- package/lib/site/serveSite.d.ts +0 -2
- package/lib/site/serveSite.js +0 -54
- package/lib/site/serveSite.js.map +0 -1
- package/lib/tester/helpers.spec.d.ts +0 -1
- package/lib/tester/helpers.spec.js +0 -115
- package/lib/tester/helpers.spec.js.map +0 -1
- package/src/builder/convertToV1.ts +0 -166
- package/src/site/exportSite.ts +0 -42
- package/src/site/generateHistory.ts +0 -40
- package/src/site/generateSiteSearchIndex.ts +0 -258
- package/src/site/getLastModifiedFromHistory.ts +0 -21
- package/src/site/getOwnerAndRepoFromUrl.ts +0 -17
- package/src/site/getRelativePaths.ts +0 -24
- package/src/site/getRepoDetails.ts +0 -62
- package/src/site/index.ts +0 -46
- package/src/site/serveSite.ts +0 -58
|
@@ -3,15 +3,15 @@
|
|
|
3
3
|
<html lang="en">
|
|
4
4
|
|
|
5
5
|
<head>
|
|
6
|
-
<title>Code coverage report for builder/buildDatafile.ts</title>
|
|
6
|
+
<title>Code coverage report for src/builder/buildDatafile.ts</title>
|
|
7
7
|
<meta charset="utf-8" />
|
|
8
|
-
<link rel="stylesheet" href="
|
|
9
|
-
<link rel="stylesheet" href="
|
|
10
|
-
<link rel="shortcut icon" type="image/x-icon" href="
|
|
8
|
+
<link rel="stylesheet" href="../../prettify.css" />
|
|
9
|
+
<link rel="stylesheet" href="../../base.css" />
|
|
10
|
+
<link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
|
|
11
11
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
12
12
|
<style type='text/css'>
|
|
13
13
|
.coverage-summary .sorter {
|
|
14
|
-
background-image: url(
|
|
14
|
+
background-image: url(../../sort-arrow-sprite.png);
|
|
15
15
|
}
|
|
16
16
|
</style>
|
|
17
17
|
</head>
|
|
@@ -19,34 +19,34 @@
|
|
|
19
19
|
<body>
|
|
20
20
|
<div class='wrapper'>
|
|
21
21
|
<div class='pad1'>
|
|
22
|
-
<h1><a href="
|
|
22
|
+
<h1><a href="../../index.html">All files</a> / <a href="index.html">src/builder</a> buildDatafile.ts</h1>
|
|
23
23
|
<div class='clearfix'>
|
|
24
24
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
|
-
<span class="strong">
|
|
26
|
+
<span class="strong">67.69% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>153/226</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">
|
|
33
|
+
<span class="strong">57.3% </span>
|
|
34
34
|
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>
|
|
35
|
+
<span class='fraction'>102/178</span>
|
|
36
36
|
</div>
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
<div class='fl pad1y space-right2'>
|
|
40
|
-
<span class="strong">
|
|
40
|
+
<span class="strong">59.37% </span>
|
|
41
41
|
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>
|
|
42
|
+
<span class='fraction'>19/32</span>
|
|
43
43
|
</div>
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">
|
|
47
|
+
<span class="strong">70.42% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>150/213</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -57,11 +57,11 @@
|
|
|
57
57
|
<template id="filterTemplate">
|
|
58
58
|
<div class="quiet">
|
|
59
59
|
Filter:
|
|
60
|
-
<input
|
|
60
|
+
<input type="search" id="fileSearch">
|
|
61
61
|
</div>
|
|
62
62
|
</template>
|
|
63
63
|
</div>
|
|
64
|
-
<div class='status-line
|
|
64
|
+
<div class='status-line high'></div>
|
|
65
65
|
<pre><table class="coverage">
|
|
66
66
|
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
|
|
67
67
|
<a name='L2'></a><a href='#L2'>2</a>
|
|
@@ -709,7 +709,17 @@
|
|
|
709
709
|
<a name='L644'></a><a href='#L644'>644</a>
|
|
710
710
|
<a name='L645'></a><a href='#L645'>645</a>
|
|
711
711
|
<a name='L646'></a><a href='#L646'>646</a>
|
|
712
|
-
<a name='L647'></a><a href='#L647'>647</a
|
|
712
|
+
<a name='L647'></a><a href='#L647'>647</a>
|
|
713
|
+
<a name='L648'></a><a href='#L648'>648</a>
|
|
714
|
+
<a name='L649'></a><a href='#L649'>649</a>
|
|
715
|
+
<a name='L650'></a><a href='#L650'>650</a>
|
|
716
|
+
<a name='L651'></a><a href='#L651'>651</a>
|
|
717
|
+
<a name='L652'></a><a href='#L652'>652</a>
|
|
718
|
+
<a name='L653'></a><a href='#L653'>653</a>
|
|
719
|
+
<a name='L654'></a><a href='#L654'>654</a>
|
|
720
|
+
<a name='L655'></a><a href='#L655'>655</a>
|
|
721
|
+
<a name='L656'></a><a href='#L656'>656</a>
|
|
722
|
+
<a name='L657'></a><a href='#L657'>657</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">3x</span>
|
|
713
723
|
<span class="cline-any cline-neutral"> </span>
|
|
714
724
|
<span class="cline-any cline-neutral"> </span>
|
|
715
725
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -733,18 +743,16 @@
|
|
|
733
743
|
<span class="cline-any cline-neutral"> </span>
|
|
734
744
|
<span class="cline-any cline-neutral"> </span>
|
|
735
745
|
<span class="cline-any cline-neutral"> </span>
|
|
736
|
-
<span class="cline-any cline-yes">1x</span>
|
|
737
746
|
<span class="cline-any cline-neutral"> </span>
|
|
738
|
-
<span class="cline-any cline-yes">
|
|
739
|
-
<span class="cline-any cline-yes">
|
|
747
|
+
<span class="cline-any cline-yes">3x</span>
|
|
748
|
+
<span class="cline-any cline-yes">3x</span>
|
|
740
749
|
<span class="cline-any cline-neutral"> </span>
|
|
741
|
-
<span class="cline-any cline-yes">
|
|
742
|
-
<span class="cline-any cline-yes">
|
|
743
|
-
<span class="cline-any cline-yes">1x</span>
|
|
744
|
-
<span class="cline-any cline-yes">1x</span>
|
|
750
|
+
<span class="cline-any cline-yes">3x</span>
|
|
751
|
+
<span class="cline-any cline-yes">3x</span>
|
|
745
752
|
<span class="cline-any cline-neutral"> </span>
|
|
746
753
|
<span class="cline-any cline-neutral"> </span>
|
|
747
754
|
<span class="cline-any cline-neutral"> </span>
|
|
755
|
+
<span class="cline-any cline-yes">3x</span>
|
|
748
756
|
<span class="cline-any cline-neutral"> </span>
|
|
749
757
|
<span class="cline-any cline-neutral"> </span>
|
|
750
758
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -758,18 +766,18 @@
|
|
|
758
766
|
<span class="cline-any cline-neutral"> </span>
|
|
759
767
|
<span class="cline-any cline-neutral"> </span>
|
|
760
768
|
<span class="cline-any cline-neutral"> </span>
|
|
761
|
-
<span class="cline-any cline-yes">1x</span>
|
|
762
769
|
<span class="cline-any cline-neutral"> </span>
|
|
763
770
|
<span class="cline-any cline-neutral"> </span>
|
|
771
|
+
<span class="cline-any cline-yes">1x</span>
|
|
764
772
|
<span class="cline-any cline-neutral"> </span>
|
|
765
773
|
<span class="cline-any cline-neutral"> </span>
|
|
766
|
-
<span class="cline-any cline-
|
|
774
|
+
<span class="cline-any cline-yes">1x</span>
|
|
767
775
|
<span class="cline-any cline-no"> </span>
|
|
768
776
|
<span class="cline-any cline-no"> </span>
|
|
769
777
|
<span class="cline-any cline-neutral"> </span>
|
|
770
778
|
<span class="cline-any cline-neutral"> </span>
|
|
771
|
-
<span class="cline-any cline-
|
|
772
|
-
<span class="cline-any cline-
|
|
779
|
+
<span class="cline-any cline-yes">1x</span>
|
|
780
|
+
<span class="cline-any cline-yes">1x</span>
|
|
773
781
|
<span class="cline-any cline-neutral"> </span>
|
|
774
782
|
<span class="cline-any cline-neutral"> </span>
|
|
775
783
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -784,9 +792,9 @@
|
|
|
784
792
|
<span class="cline-any cline-neutral"> </span>
|
|
785
793
|
<span class="cline-any cline-neutral"> </span>
|
|
786
794
|
<span class="cline-any cline-neutral"> </span>
|
|
787
|
-
<span class="cline-any cline-no"> </span>
|
|
788
795
|
<span class="cline-any cline-neutral"> </span>
|
|
789
796
|
<span class="cline-any cline-neutral"> </span>
|
|
797
|
+
<span class="cline-any cline-yes">1x</span>
|
|
790
798
|
<span class="cline-any cline-neutral"> </span>
|
|
791
799
|
<span class="cline-any cline-neutral"> </span>
|
|
792
800
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -800,156 +808,179 @@
|
|
|
800
808
|
<span class="cline-any cline-neutral"> </span>
|
|
801
809
|
<span class="cline-any cline-neutral"> </span>
|
|
802
810
|
<span class="cline-any cline-neutral"> </span>
|
|
811
|
+
<span class="cline-any cline-yes">2x</span>
|
|
812
|
+
<span class="cline-any cline-no"> </span>
|
|
803
813
|
<span class="cline-any cline-neutral"> </span>
|
|
804
814
|
<span class="cline-any cline-neutral"> </span>
|
|
815
|
+
<span class="cline-any cline-yes">2x</span>
|
|
816
|
+
<span class="cline-any cline-no"> </span>
|
|
805
817
|
<span class="cline-any cline-neutral"> </span>
|
|
806
818
|
<span class="cline-any cline-neutral"> </span>
|
|
819
|
+
<span class="cline-any cline-yes">2x</span>
|
|
820
|
+
<span class="cline-any cline-no"> </span>
|
|
807
821
|
<span class="cline-any cline-neutral"> </span>
|
|
808
822
|
<span class="cline-any cline-neutral"> </span>
|
|
823
|
+
<span class="cline-any cline-yes">2x</span>
|
|
824
|
+
<span class="cline-any cline-yes">3x</span>
|
|
809
825
|
<span class="cline-any cline-neutral"> </span>
|
|
810
826
|
<span class="cline-any cline-neutral"> </span>
|
|
827
|
+
<span class="cline-any cline-no"> </span>
|
|
811
828
|
<span class="cline-any cline-neutral"> </span>
|
|
812
|
-
<span class="cline-any cline-yes">1x</span>
|
|
813
829
|
<span class="cline-any cline-neutral"> </span>
|
|
814
830
|
<span class="cline-any cline-neutral"> </span>
|
|
831
|
+
<span class="cline-any cline-yes">16x</span>
|
|
832
|
+
<span class="cline-any cline-no"> </span>
|
|
815
833
|
<span class="cline-any cline-neutral"> </span>
|
|
816
834
|
<span class="cline-any cline-neutral"> </span>
|
|
835
|
+
<span class="cline-any cline-yes">16x</span>
|
|
817
836
|
<span class="cline-any cline-neutral"> </span>
|
|
818
|
-
<span class="cline-any cline-yes">
|
|
819
|
-
<span class="cline-any cline-yes">
|
|
820
|
-
<span class="cline-any cline-yes">
|
|
837
|
+
<span class="cline-any cline-yes">16x</span>
|
|
838
|
+
<span class="cline-any cline-yes">18x</span>
|
|
839
|
+
<span class="cline-any cline-yes">18x</span>
|
|
821
840
|
<span class="cline-any cline-neutral"> </span>
|
|
822
841
|
<span class="cline-any cline-neutral"> </span>
|
|
823
|
-
<span class="cline-any cline-yes">2x</span>
|
|
824
|
-
<span class="cline-any cline-yes">2x</span>
|
|
825
|
-
<span class="cline-any cline-yes">2x</span>
|
|
826
|
-
<span class="cline-any cline-no"> </span>
|
|
827
|
-
<span class="cline-any cline-no"> </span>
|
|
828
842
|
<span class="cline-any cline-neutral"> </span>
|
|
829
843
|
<span class="cline-any cline-neutral"> </span>
|
|
830
844
|
<span class="cline-any cline-neutral"> </span>
|
|
831
845
|
<span class="cline-any cline-neutral"> </span>
|
|
832
846
|
<span class="cline-any cline-neutral"> </span>
|
|
833
847
|
<span class="cline-any cline-neutral"> </span>
|
|
834
|
-
<span class="cline-any cline-yes">2x</span>
|
|
835
|
-
<span class="cline-any cline-yes">2x</span>
|
|
836
848
|
<span class="cline-any cline-neutral"> </span>
|
|
837
|
-
<span class="cline-any cline-yes">2x</span>
|
|
838
|
-
<span class="cline-any cline-yes">2x</span>
|
|
839
849
|
<span class="cline-any cline-neutral"> </span>
|
|
840
|
-
<span class="cline-any cline-yes">2x</span>
|
|
841
|
-
<span class="cline-any cline-yes">2x</span>
|
|
842
850
|
<span class="cline-any cline-neutral"> </span>
|
|
843
|
-
<span class="cline-any cline-yes">2x</span>
|
|
844
|
-
<span class="cline-any cline-no"> </span>
|
|
845
851
|
<span class="cline-any cline-neutral"> </span>
|
|
846
852
|
<span class="cline-any cline-neutral"> </span>
|
|
847
|
-
<span class="cline-any cline-yes">2x</span>
|
|
848
|
-
<span class="cline-any cline-no"> </span>
|
|
849
853
|
<span class="cline-any cline-neutral"> </span>
|
|
850
854
|
<span class="cline-any cline-neutral"> </span>
|
|
851
|
-
<span class="cline-any cline-yes">2x</span>
|
|
852
855
|
<span class="cline-any cline-neutral"> </span>
|
|
853
|
-
<span class="cline-any cline-
|
|
854
|
-
<span class="cline-any cline-no"> </span>
|
|
855
|
-
<span class="cline-any cline-no"> </span>
|
|
856
|
+
<span class="cline-any cline-yes">8x</span>
|
|
856
857
|
<span class="cline-any cline-neutral"> </span>
|
|
857
|
-
<span class="cline-any cline-no"> </span>
|
|
858
858
|
<span class="cline-any cline-neutral"> </span>
|
|
859
859
|
<span class="cline-any cline-neutral"> </span>
|
|
860
860
|
<span class="cline-any cline-neutral"> </span>
|
|
861
|
-
<span class="cline-any cline-no"> </span>
|
|
862
|
-
<span class="cline-any cline-no"> </span>
|
|
863
|
-
<span class="cline-any cline-no"> </span>
|
|
864
|
-
<span class="cline-any cline-no"> </span>
|
|
865
861
|
<span class="cline-any cline-neutral"> </span>
|
|
866
|
-
<span class="cline-any cline-
|
|
862
|
+
<span class="cline-any cline-yes">9x</span>
|
|
863
|
+
<span class="cline-any cline-yes">9x</span>
|
|
864
|
+
<span class="cline-any cline-yes">9x</span>
|
|
867
865
|
<span class="cline-any cline-neutral"> </span>
|
|
868
866
|
<span class="cline-any cline-neutral"> </span>
|
|
867
|
+
<span class="cline-any cline-yes">9x</span>
|
|
868
|
+
<span class="cline-any cline-yes">9x</span>
|
|
869
|
+
<span class="cline-any cline-yes">9x</span>
|
|
870
|
+
<span class="cline-any cline-yes">1x</span>
|
|
871
|
+
<span class="cline-any cline-yes">1x</span>
|
|
869
872
|
<span class="cline-any cline-neutral"> </span>
|
|
870
873
|
<span class="cline-any cline-neutral"> </span>
|
|
871
|
-
<span class="cline-any cline-no"> </span>
|
|
872
|
-
<span class="cline-any cline-no"> </span>
|
|
873
|
-
<span class="cline-any cline-no"> </span>
|
|
874
|
-
<span class="cline-any cline-no"> </span>
|
|
875
874
|
<span class="cline-any cline-neutral"> </span>
|
|
876
875
|
<span class="cline-any cline-neutral"> </span>
|
|
877
|
-
<span class="cline-any cline-no"> </span>
|
|
878
876
|
<span class="cline-any cline-neutral"> </span>
|
|
879
877
|
<span class="cline-any cline-neutral"> </span>
|
|
878
|
+
<span class="cline-any cline-yes">9x</span>
|
|
879
|
+
<span class="cline-any cline-yes">9x</span>
|
|
880
880
|
<span class="cline-any cline-neutral"> </span>
|
|
881
|
+
<span class="cline-any cline-yes">9x</span>
|
|
882
|
+
<span class="cline-any cline-yes">9x</span>
|
|
881
883
|
<span class="cline-any cline-neutral"> </span>
|
|
884
|
+
<span class="cline-any cline-yes">9x</span>
|
|
885
|
+
<span class="cline-any cline-yes">16x</span>
|
|
882
886
|
<span class="cline-any cline-neutral"> </span>
|
|
883
|
-
<span class="cline-any cline-yes">
|
|
887
|
+
<span class="cline-any cline-yes">16x</span>
|
|
884
888
|
<span class="cline-any cline-no"> </span>
|
|
885
889
|
<span class="cline-any cline-neutral"> </span>
|
|
886
890
|
<span class="cline-any cline-neutral"> </span>
|
|
891
|
+
<span class="cline-any cline-yes">16x</span>
|
|
887
892
|
<span class="cline-any cline-neutral"> </span>
|
|
893
|
+
<span class="cline-any cline-yes">16x</span>
|
|
894
|
+
<span class="cline-any cline-yes">2x</span>
|
|
888
895
|
<span class="cline-any cline-neutral"> </span>
|
|
889
896
|
<span class="cline-any cline-neutral"> </span>
|
|
897
|
+
<span class="cline-any cline-yes">14x</span>
|
|
898
|
+
<span class="cline-any cline-yes">1x</span>
|
|
899
|
+
<span class="cline-any cline-neutral"> </span>
|
|
900
|
+
<span class="cline-any cline-neutral"> </span>
|
|
901
|
+
<span class="cline-any cline-yes">13x</span>
|
|
902
|
+
<span class="cline-any cline-neutral"> </span>
|
|
890
903
|
<span class="cline-any cline-neutral"> </span>
|
|
891
|
-
<span class="cline-any cline-yes">2x</span>
|
|
892
|
-
<span class="cline-any cline-yes">2x</span>
|
|
893
|
-
<span class="cline-any cline-yes">2x</span>
|
|
894
|
-
<span class="cline-any cline-yes">2x</span>
|
|
895
904
|
<span class="cline-any cline-neutral"> </span>
|
|
896
905
|
<span class="cline-any cline-no"> </span>
|
|
897
|
-
<span class="cline-any cline-
|
|
906
|
+
<span class="cline-any cline-neutral"> </span>
|
|
907
|
+
<span class="cline-any cline-neutral"> </span>
|
|
908
|
+
<span class="cline-any cline-yes">13x</span>
|
|
909
|
+
<span class="cline-any cline-yes">3x</span>
|
|
910
|
+
<span class="cline-any cline-neutral"> </span>
|
|
911
|
+
<span class="cline-any cline-neutral"> </span>
|
|
912
|
+
<span class="cline-any cline-yes">10x</span>
|
|
898
913
|
<span class="cline-any cline-no"> </span>
|
|
899
914
|
<span class="cline-any cline-neutral"> </span>
|
|
900
915
|
<span class="cline-any cline-neutral"> </span>
|
|
901
|
-
<span class="cline-any cline-
|
|
916
|
+
<span class="cline-any cline-neutral"> </span>
|
|
917
|
+
<span class="cline-any cline-neutral"> </span>
|
|
918
|
+
<span class="cline-any cline-neutral"> </span>
|
|
919
|
+
<span class="cline-any cline-neutral"> </span>
|
|
920
|
+
<span class="cline-any cline-yes">10x</span>
|
|
921
|
+
<span class="cline-any cline-yes">9x</span>
|
|
922
|
+
<span class="cline-any cline-yes">9x</span>
|
|
923
|
+
<span class="cline-any cline-yes">9x</span>
|
|
924
|
+
<span class="cline-any cline-neutral"> </span>
|
|
925
|
+
<span class="cline-any cline-yes">1x</span>
|
|
926
|
+
<span class="cline-any cline-yes">1x</span>
|
|
927
|
+
<span class="cline-any cline-yes">1x</span>
|
|
928
|
+
<span class="cline-any cline-neutral"> </span>
|
|
929
|
+
<span class="cline-any cline-neutral"> </span>
|
|
930
|
+
<span class="cline-any cline-yes">10x</span>
|
|
902
931
|
<span class="cline-any cline-no"> </span>
|
|
903
932
|
<span class="cline-any cline-neutral"> </span>
|
|
904
933
|
<span class="cline-any cline-neutral"> </span>
|
|
905
|
-
<span class="cline-any cline-yes">
|
|
934
|
+
<span class="cline-any cline-yes">10x</span>
|
|
906
935
|
<span class="cline-any cline-no"> </span>
|
|
907
936
|
<span class="cline-any cline-neutral"> </span>
|
|
908
937
|
<span class="cline-any cline-no"> </span>
|
|
909
938
|
<span class="cline-any cline-no"> </span>
|
|
910
939
|
<span class="cline-any cline-neutral"> </span>
|
|
911
940
|
<span class="cline-any cline-neutral"> </span>
|
|
941
|
+
<span class="cline-any cline-no"> </span>
|
|
942
|
+
<span class="cline-any cline-no"> </span>
|
|
912
943
|
<span class="cline-any cline-neutral"> </span>
|
|
913
|
-
<span class="cline-any cline-yes">2x</span>
|
|
914
|
-
<span class="cline-any cline-yes">2x</span>
|
|
915
|
-
<span class="cline-any cline-yes">2x</span>
|
|
916
944
|
<span class="cline-any cline-neutral"> </span>
|
|
917
|
-
<span class="cline-any cline-yes">2x</span>
|
|
918
|
-
<span class="cline-any cline-yes">2x</span>
|
|
919
|
-
<span class="cline-any cline-yes">4x</span>
|
|
920
|
-
<span class="cline-any cline-yes">8x</span>
|
|
921
|
-
<span class="cline-any cline-yes">6x</span>
|
|
922
945
|
<span class="cline-any cline-neutral"> </span>
|
|
946
|
+
<span class="cline-any cline-yes">10x</span>
|
|
947
|
+
<span class="cline-any cline-yes">12x</span>
|
|
948
|
+
<span class="cline-any cline-yes">14x</span>
|
|
923
949
|
<span class="cline-any cline-neutral"> </span>
|
|
924
|
-
<span class="cline-any cline-yes">
|
|
925
|
-
<span class="cline-any cline-yes">
|
|
950
|
+
<span class="cline-any cline-yes">12x</span>
|
|
951
|
+
<span class="cline-any cline-yes">7x</span>
|
|
952
|
+
<span class="cline-any cline-yes">14x</span>
|
|
953
|
+
<span class="cline-any cline-yes">28x</span>
|
|
954
|
+
<span class="cline-any cline-yes">21x</span>
|
|
926
955
|
<span class="cline-any cline-neutral"> </span>
|
|
927
956
|
<span class="cline-any cline-neutral"> </span>
|
|
957
|
+
<span class="cline-any cline-yes">21x</span>
|
|
958
|
+
<span class="cline-any cline-yes">21x</span>
|
|
928
959
|
<span class="cline-any cline-neutral"> </span>
|
|
929
|
-
<span class="cline-any cline-yes">8x</span>
|
|
930
|
-
<span class="cline-any cline-yes">2x</span>
|
|
931
960
|
<span class="cline-any cline-neutral"> </span>
|
|
932
961
|
<span class="cline-any cline-neutral"> </span>
|
|
933
|
-
<span class="cline-any cline-yes">
|
|
934
|
-
<span class="cline-any cline-yes">
|
|
962
|
+
<span class="cline-any cline-yes">28x</span>
|
|
963
|
+
<span class="cline-any cline-yes">7x</span>
|
|
935
964
|
<span class="cline-any cline-neutral"> </span>
|
|
936
965
|
<span class="cline-any cline-neutral"> </span>
|
|
966
|
+
<span class="cline-any cline-yes">7x</span>
|
|
967
|
+
<span class="cline-any cline-yes">14x</span>
|
|
937
968
|
<span class="cline-any cline-neutral"> </span>
|
|
938
969
|
<span class="cline-any cline-neutral"> </span>
|
|
939
970
|
<span class="cline-any cline-neutral"> </span>
|
|
940
971
|
<span class="cline-any cline-neutral"> </span>
|
|
941
972
|
<span class="cline-any cline-neutral"> </span>
|
|
942
|
-
<span class="cline-any cline-yes">2x</span>
|
|
943
973
|
<span class="cline-any cline-neutral"> </span>
|
|
944
974
|
<span class="cline-any cline-neutral"> </span>
|
|
975
|
+
<span class="cline-any cline-yes">10x</span>
|
|
945
976
|
<span class="cline-any cline-neutral"> </span>
|
|
946
977
|
<span class="cline-any cline-neutral"> </span>
|
|
947
978
|
<span class="cline-any cline-neutral"> </span>
|
|
948
979
|
<span class="cline-any cline-neutral"> </span>
|
|
949
980
|
<span class="cline-any cline-neutral"> </span>
|
|
950
|
-
<span class="cline-any cline-yes">2x</span>
|
|
951
981
|
<span class="cline-any cline-neutral"> </span>
|
|
952
982
|
<span class="cline-any cline-neutral"> </span>
|
|
983
|
+
<span class="cline-any cline-yes">7x</span>
|
|
953
984
|
<span class="cline-any cline-neutral"> </span>
|
|
954
985
|
<span class="cline-any cline-neutral"> </span>
|
|
955
986
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -957,7 +988,9 @@
|
|
|
957
988
|
<span class="cline-any cline-neutral"> </span>
|
|
958
989
|
<span class="cline-any cline-neutral"> </span>
|
|
959
990
|
<span class="cline-any cline-neutral"> </span>
|
|
960
|
-
<span class="cline-any cline-
|
|
991
|
+
<span class="cline-any cline-neutral"> </span>
|
|
992
|
+
<span class="cline-any cline-neutral"> </span>
|
|
993
|
+
<span class="cline-any cline-yes">7x</span>
|
|
961
994
|
<span class="cline-any cline-no"> </span>
|
|
962
995
|
<span class="cline-any cline-no"> </span>
|
|
963
996
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -1018,7 +1051,7 @@
|
|
|
1018
1051
|
<span class="cline-any cline-neutral"> </span>
|
|
1019
1052
|
<span class="cline-any cline-neutral"> </span>
|
|
1020
1053
|
<span class="cline-any cline-neutral"> </span>
|
|
1021
|
-
<span class="cline-any cline-yes">
|
|
1054
|
+
<span class="cline-any cline-yes">7x</span>
|
|
1022
1055
|
<span class="cline-any cline-neutral"> </span>
|
|
1023
1056
|
<span class="cline-any cline-neutral"> </span>
|
|
1024
1057
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -1027,25 +1060,25 @@
|
|
|
1027
1060
|
<span class="cline-any cline-neutral"> </span>
|
|
1028
1061
|
<span class="cline-any cline-neutral"> </span>
|
|
1029
1062
|
<span class="cline-any cline-neutral"> </span>
|
|
1030
|
-
<span class="cline-any cline-yes">
|
|
1063
|
+
<span class="cline-any cline-yes">12x</span>
|
|
1031
1064
|
<span class="cline-any cline-neutral"> </span>
|
|
1032
1065
|
<span class="cline-any cline-neutral"> </span>
|
|
1033
1066
|
<span class="cline-any cline-neutral"> </span>
|
|
1034
1067
|
<span class="cline-any cline-neutral"> </span>
|
|
1035
|
-
<span class="cline-any cline-yes">
|
|
1068
|
+
<span class="cline-any cline-yes">12x</span>
|
|
1036
1069
|
<span class="cline-any cline-neutral"> </span>
|
|
1037
|
-
<span class="cline-any cline-yes">
|
|
1038
|
-
<span class="cline-any cline-yes">
|
|
1039
|
-
<span class="cline-any cline-yes">
|
|
1070
|
+
<span class="cline-any cline-yes">12x</span>
|
|
1071
|
+
<span class="cline-any cline-yes">7x</span>
|
|
1072
|
+
<span class="cline-any cline-yes">7x</span>
|
|
1040
1073
|
<span class="cline-any cline-neutral"> </span>
|
|
1041
|
-
<span class="cline-any cline-yes">
|
|
1042
|
-
<span class="cline-any cline-yes">
|
|
1043
|
-
<span class="cline-any cline-yes">
|
|
1074
|
+
<span class="cline-any cline-yes">7x</span>
|
|
1075
|
+
<span class="cline-any cline-yes">14x</span>
|
|
1076
|
+
<span class="cline-any cline-yes">14x</span>
|
|
1044
1077
|
<span class="cline-any cline-neutral"> </span>
|
|
1045
|
-
<span class="cline-any cline-yes">
|
|
1078
|
+
<span class="cline-any cline-yes">14x</span>
|
|
1046
1079
|
<span class="cline-any cline-neutral"> </span>
|
|
1047
|
-
<span class="cline-any cline-yes">
|
|
1048
|
-
<span class="cline-any cline-yes">
|
|
1080
|
+
<span class="cline-any cline-yes">28x</span>
|
|
1081
|
+
<span class="cline-any cline-yes">21x</span>
|
|
1049
1082
|
<span class="cline-any cline-neutral"> </span>
|
|
1050
1083
|
<span class="cline-any cline-neutral"> </span>
|
|
1051
1084
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -1059,8 +1092,8 @@
|
|
|
1059
1092
|
<span class="cline-any cline-neutral"> </span>
|
|
1060
1093
|
<span class="cline-any cline-neutral"> </span>
|
|
1061
1094
|
<span class="cline-any cline-neutral"> </span>
|
|
1062
|
-
<span class="cline-any cline-yes">
|
|
1063
|
-
<span class="cline-any cline-yes">
|
|
1095
|
+
<span class="cline-any cline-yes">7x</span>
|
|
1096
|
+
<span class="cline-any cline-yes">7x</span>
|
|
1064
1097
|
<span class="cline-any cline-neutral"> </span>
|
|
1065
1098
|
<span class="cline-any cline-neutral"> </span>
|
|
1066
1099
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -1080,7 +1113,7 @@
|
|
|
1080
1113
|
<span class="cline-any cline-neutral"> </span>
|
|
1081
1114
|
<span class="cline-any cline-neutral"> </span>
|
|
1082
1115
|
<span class="cline-any cline-neutral"> </span>
|
|
1083
|
-
<span class="cline-any cline-yes">
|
|
1116
|
+
<span class="cline-any cline-yes">12x</span>
|
|
1084
1117
|
<span class="cline-any cline-neutral"> </span>
|
|
1085
1118
|
<span class="cline-any cline-neutral"> </span>
|
|
1086
1119
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -1094,23 +1127,23 @@
|
|
|
1094
1127
|
<span class="cline-any cline-neutral"> </span>
|
|
1095
1128
|
<span class="cline-any cline-neutral"> </span>
|
|
1096
1129
|
<span class="cline-any cline-neutral"> </span>
|
|
1097
|
-
<span class="cline-any cline-yes">
|
|
1130
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1098
1131
|
<span class="cline-any cline-neutral"> </span>
|
|
1099
1132
|
<span class="cline-any cline-neutral"> </span>
|
|
1100
|
-
<span class="cline-any cline-yes">
|
|
1133
|
+
<span class="cline-any cline-yes">7x</span>
|
|
1101
1134
|
<span class="cline-any cline-neutral"> </span>
|
|
1102
1135
|
<span class="cline-any cline-neutral"> </span>
|
|
1103
1136
|
<span class="cline-any cline-neutral"> </span>
|
|
1104
1137
|
<span class="cline-any cline-neutral"> </span>
|
|
1105
1138
|
<span class="cline-any cline-neutral"> </span>
|
|
1106
1139
|
<span class="cline-any cline-neutral"> </span>
|
|
1107
|
-
<span class="cline-any cline-yes">
|
|
1140
|
+
<span class="cline-any cline-yes">12x</span>
|
|
1108
1141
|
<span class="cline-any cline-neutral"> </span>
|
|
1109
1142
|
<span class="cline-any cline-neutral"> </span>
|
|
1110
1143
|
<span class="cline-any cline-neutral"> </span>
|
|
1111
1144
|
<span class="cline-any cline-neutral"> </span>
|
|
1112
1145
|
<span class="cline-any cline-neutral"> </span>
|
|
1113
|
-
<span class="cline-any cline-yes">
|
|
1146
|
+
<span class="cline-any cline-yes">7x</span>
|
|
1114
1147
|
<span class="cline-any cline-neutral"> </span>
|
|
1115
1148
|
<span class="cline-any cline-neutral"> </span>
|
|
1116
1149
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -1119,22 +1152,22 @@
|
|
|
1119
1152
|
<span class="cline-any cline-neutral"> </span>
|
|
1120
1153
|
<span class="cline-any cline-neutral"> </span>
|
|
1121
1154
|
<span class="cline-any cline-neutral"> </span>
|
|
1122
|
-
<span class="cline-any cline-yes">
|
|
1155
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1123
1156
|
<span class="cline-any cline-no"> </span>
|
|
1124
1157
|
<span class="cline-any cline-neutral"> </span>
|
|
1125
1158
|
<span class="cline-any cline-neutral"> </span>
|
|
1126
|
-
<span class="cline-any cline-yes">
|
|
1127
|
-
<span class="cline-any cline-yes">
|
|
1128
|
-
<span class="cline-any cline-yes">
|
|
1159
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1160
|
+
<span class="cline-any cline-yes">7x</span>
|
|
1161
|
+
<span class="cline-any cline-yes">7x</span>
|
|
1129
1162
|
<span class="cline-any cline-neutral"> </span>
|
|
1130
|
-
<span class="cline-any cline-yes">
|
|
1131
|
-
<span class="cline-any cline-yes">
|
|
1163
|
+
<span class="cline-any cline-yes">7x</span>
|
|
1164
|
+
<span class="cline-any cline-yes">14x</span>
|
|
1132
1165
|
<span class="cline-any cline-neutral"> </span>
|
|
1133
|
-
<span class="cline-any cline-yes">
|
|
1166
|
+
<span class="cline-any cline-yes">14x</span>
|
|
1134
1167
|
<span class="cline-any cline-neutral"> </span>
|
|
1135
1168
|
<span class="cline-any cline-neutral"> </span>
|
|
1136
1169
|
<span class="cline-any cline-neutral"> </span>
|
|
1137
|
-
<span class="cline-any cline-yes">
|
|
1170
|
+
<span class="cline-any cline-yes">14x</span>
|
|
1138
1171
|
<span class="cline-any cline-neutral"> </span>
|
|
1139
1172
|
<span class="cline-any cline-neutral"> </span>
|
|
1140
1173
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -1145,7 +1178,7 @@
|
|
|
1145
1178
|
<span class="cline-any cline-neutral"> </span>
|
|
1146
1179
|
<span class="cline-any cline-neutral"> </span>
|
|
1147
1180
|
<span class="cline-any cline-neutral"> </span>
|
|
1148
|
-
<span class="cline-any cline-yes">
|
|
1181
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1149
1182
|
<span class="cline-any cline-no"> </span>
|
|
1150
1183
|
<span class="cline-any cline-no"> </span>
|
|
1151
1184
|
<span class="cline-any cline-no"> </span>
|
|
@@ -1175,34 +1208,34 @@
|
|
|
1175
1208
|
<span class="cline-any cline-neutral"> </span>
|
|
1176
1209
|
<span class="cline-any cline-neutral"> </span>
|
|
1177
1210
|
<span class="cline-any cline-neutral"> </span>
|
|
1178
|
-
<span class="cline-any cline-yes">
|
|
1211
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1179
1212
|
<span class="cline-any cline-neutral"> </span>
|
|
1180
1213
|
<span class="cline-any cline-neutral"> </span>
|
|
1181
1214
|
<span class="cline-any cline-neutral"> </span>
|
|
1182
1215
|
<span class="cline-any cline-neutral"> </span>
|
|
1183
|
-
<span class="cline-any cline-yes">
|
|
1184
|
-
<span class="cline-any cline-yes">
|
|
1216
|
+
<span class="cline-any cline-yes">9x</span>
|
|
1217
|
+
<span class="cline-any cline-yes">9x</span>
|
|
1185
1218
|
<span class="cline-any cline-neutral"> </span>
|
|
1186
|
-
<span class="cline-any cline-yes">
|
|
1187
|
-
<span class="cline-any cline-
|
|
1219
|
+
<span class="cline-any cline-yes">9x</span>
|
|
1220
|
+
<span class="cline-any cline-yes">9x</span>
|
|
1188
1221
|
<span class="cline-any cline-neutral"> </span>
|
|
1189
|
-
<span class="cline-any cline-
|
|
1190
|
-
<span class="cline-any cline-
|
|
1222
|
+
<span class="cline-any cline-yes">9x</span>
|
|
1223
|
+
<span class="cline-any cline-yes">5x</span>
|
|
1191
1224
|
<span class="cline-any cline-neutral"> </span>
|
|
1192
|
-
<span class="cline-any cline-
|
|
1225
|
+
<span class="cline-any cline-yes">5x</span>
|
|
1193
1226
|
<span class="cline-any cline-no"> </span>
|
|
1194
1227
|
<span class="cline-any cline-neutral"> </span>
|
|
1195
1228
|
<span class="cline-any cline-neutral"> </span>
|
|
1196
|
-
<span class="cline-any cline-
|
|
1229
|
+
<span class="cline-any cline-yes">5x</span>
|
|
1197
1230
|
<span class="cline-any cline-no"> </span>
|
|
1198
1231
|
<span class="cline-any cline-neutral"> </span>
|
|
1199
1232
|
<span class="cline-any cline-neutral"> </span>
|
|
1200
|
-
<span class="cline-any cline-
|
|
1233
|
+
<span class="cline-any cline-yes">5x</span>
|
|
1201
1234
|
<span class="cline-any cline-neutral"> </span>
|
|
1202
1235
|
<span class="cline-any cline-neutral"> </span>
|
|
1203
|
-
<span class="cline-any cline-
|
|
1236
|
+
<span class="cline-any cline-yes">5x</span>
|
|
1204
1237
|
<span class="cline-any cline-neutral"> </span>
|
|
1205
|
-
<span class="cline-any cline-
|
|
1238
|
+
<span class="cline-any cline-yes">5x</span>
|
|
1206
1239
|
<span class="cline-any cline-neutral"> </span>
|
|
1207
1240
|
<span class="cline-any cline-neutral"> </span>
|
|
1208
1241
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -1210,39 +1243,39 @@
|
|
|
1210
1243
|
<span class="cline-any cline-neutral"> </span>
|
|
1211
1244
|
<span class="cline-any cline-neutral"> </span>
|
|
1212
1245
|
<span class="cline-any cline-neutral"> </span>
|
|
1213
|
-
<span class="cline-any cline-
|
|
1246
|
+
<span class="cline-any cline-yes">5x</span>
|
|
1214
1247
|
<span class="cline-any cline-neutral"> </span>
|
|
1215
1248
|
<span class="cline-any cline-neutral"> </span>
|
|
1216
1249
|
<span class="cline-any cline-neutral"> </span>
|
|
1217
1250
|
<span class="cline-any cline-neutral"> </span>
|
|
1218
|
-
<span class="cline-any cline-yes">
|
|
1219
|
-
<span class="cline-any cline-yes">
|
|
1251
|
+
<span class="cline-any cline-yes">9x</span>
|
|
1252
|
+
<span class="cline-any cline-yes">9x</span>
|
|
1220
1253
|
<span class="cline-any cline-neutral"> </span>
|
|
1221
|
-
<span class="cline-any cline-yes">
|
|
1222
|
-
<span class="cline-any cline-
|
|
1254
|
+
<span class="cline-any cline-yes">9x</span>
|
|
1255
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1223
1256
|
<span class="cline-any cline-neutral"> </span>
|
|
1224
|
-
<span class="cline-any cline-
|
|
1225
|
-
<span class="cline-any cline-
|
|
1257
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1258
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1226
1259
|
<span class="cline-any cline-neutral"> </span>
|
|
1227
|
-
<span class="cline-any cline-
|
|
1260
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1228
1261
|
<span class="cline-any cline-no"> </span>
|
|
1229
1262
|
<span class="cline-any cline-neutral"> </span>
|
|
1230
1263
|
<span class="cline-any cline-neutral"> </span>
|
|
1231
|
-
<span class="cline-any cline-
|
|
1232
|
-
<span class="cline-any cline-
|
|
1264
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1265
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1233
1266
|
<span class="cline-any cline-neutral"> </span>
|
|
1234
1267
|
<span class="cline-any cline-neutral"> </span>
|
|
1235
|
-
<span class="cline-any cline-
|
|
1268
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1236
1269
|
<span class="cline-any cline-neutral"> </span>
|
|
1237
1270
|
<span class="cline-any cline-neutral"> </span>
|
|
1238
1271
|
<span class="cline-any cline-neutral"> </span>
|
|
1239
1272
|
<span class="cline-any cline-neutral"> </span>
|
|
1240
|
-
<span class="cline-any cline-
|
|
1273
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1241
1274
|
<span class="cline-any cline-neutral"> </span>
|
|
1242
1275
|
<span class="cline-any cline-neutral"> </span>
|
|
1243
1276
|
<span class="cline-any cline-neutral"> </span>
|
|
1244
1277
|
<span class="cline-any cline-neutral"> </span>
|
|
1245
|
-
<span class="cline-any cline-yes">
|
|
1278
|
+
<span class="cline-any cline-yes">9x</span>
|
|
1246
1279
|
<span class="cline-any cline-no"> </span>
|
|
1247
1280
|
<span class="cline-any cline-no"> </span>
|
|
1248
1281
|
<span class="cline-any cline-no"> </span>
|
|
@@ -1280,80 +1313,67 @@
|
|
|
1280
1313
|
<span class="cline-any cline-neutral"> </span>
|
|
1281
1314
|
<span class="cline-any cline-neutral"> </span>
|
|
1282
1315
|
<span class="cline-any cline-neutral"> </span>
|
|
1283
|
-
<span class="cline-any cline-
|
|
1284
|
-
<span class="cline-any cline-yes">2x</span>
|
|
1285
|
-
<span class="cline-any cline-no"> </span>
|
|
1286
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1287
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1288
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1289
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1290
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1316
|
+
<span class="cline-any cline-yes">9x</span>
|
|
1291
1317
|
<span class="cline-any cline-neutral"> </span>
|
|
1292
1318
|
<span class="cline-any cline-neutral"> </span>
|
|
1293
1319
|
<span class="cline-any cline-neutral"> </span>
|
|
1294
1320
|
<span class="cline-any cline-neutral"> </span>
|
|
1295
|
-
<span class="cline-any cline-yes">2x</span>
|
|
1296
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1297
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1298
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1299
1321
|
<span class="cline-any cline-neutral"> </span>
|
|
1300
1322
|
<span class="cline-any cline-neutral"> </span>
|
|
1301
1323
|
<span class="cline-any cline-neutral"> </span>
|
|
1302
|
-
<span class="cline-any cline-
|
|
1303
|
-
<span class="cline-any cline-yes">
|
|
1304
|
-
<span class="cline-any cline-
|
|
1305
|
-
<span class="cline-any cline-
|
|
1306
|
-
<span class="cline-any cline-no"> </span>
|
|
1307
|
-
<span class="cline-any cline-no"> </span>
|
|
1324
|
+
<span class="cline-any cline-yes">9x</span>
|
|
1325
|
+
<span class="cline-any cline-yes">5x</span>
|
|
1326
|
+
<span class="cline-any cline-yes">5x</span>
|
|
1327
|
+
<span class="cline-any cline-yes">5x</span>
|
|
1308
1328
|
<span class="cline-any cline-neutral"> </span>
|
|
1309
1329
|
<span class="cline-any cline-neutral"> </span>
|
|
1310
|
-
<span class="cline-any cline-
|
|
1330
|
+
<span class="cline-any cline-yes">5x</span>
|
|
1311
1331
|
<span class="cline-any cline-neutral"> </span>
|
|
1312
1332
|
<span class="cline-any cline-neutral"> </span>
|
|
1313
|
-
<span class="cline-any cline-yes">
|
|
1314
|
-
<span class="cline-any cline-yes">
|
|
1333
|
+
<span class="cline-any cline-yes">9x</span>
|
|
1334
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1315
1335
|
<span class="cline-any cline-no"> </span>
|
|
1316
1336
|
<span class="cline-any cline-neutral"> </span>
|
|
1317
1337
|
<span class="cline-any cline-neutral"> </span>
|
|
1318
|
-
<span class="cline-any cline-yes">
|
|
1319
|
-
<span class="cline-any cline-yes">
|
|
1338
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1339
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1320
1340
|
<span class="cline-any cline-neutral"> </span>
|
|
1321
1341
|
<span class="cline-any cline-neutral"> </span>
|
|
1322
|
-
<span class="cline-any cline-yes">
|
|
1342
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1323
1343
|
<span class="cline-any cline-neutral"> </span>
|
|
1324
1344
|
<span class="cline-any cline-neutral"> </span>
|
|
1325
|
-
<span class="cline-any cline-yes">
|
|
1326
|
-
<span class="cline-any cline-yes">
|
|
1327
|
-
<span class="cline-any cline-yes">
|
|
1328
|
-
<span class="cline-any cline-yes">
|
|
1345
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1346
|
+
<span class="cline-any cline-yes">7x</span>
|
|
1347
|
+
<span class="cline-any cline-yes">14x</span>
|
|
1348
|
+
<span class="cline-any cline-yes">14x</span>
|
|
1329
1349
|
<span class="cline-any cline-neutral"> </span>
|
|
1330
1350
|
<span class="cline-any cline-neutral"> </span>
|
|
1331
1351
|
<span class="cline-any cline-neutral"> </span>
|
|
1332
1352
|
<span class="cline-any cline-neutral"> </span>
|
|
1333
|
-
<span class="cline-any cline-yes">
|
|
1353
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1334
1354
|
<span class="cline-any cline-neutral"> </span>
|
|
1335
|
-
<span class="cline-any cline-yes">
|
|
1355
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1336
1356
|
<span class="cline-any cline-neutral"> </span>
|
|
1337
1357
|
<span class="cline-any cline-neutral"> </span>
|
|
1338
1358
|
<span class="cline-any cline-neutral"> </span>
|
|
1339
|
-
<span class="cline-any cline-yes">
|
|
1340
|
-
<span class="cline-any cline-yes">
|
|
1341
|
-
<span class="cline-any cline-yes">
|
|
1359
|
+
<span class="cline-any cline-yes">9x</span>
|
|
1360
|
+
<span class="cline-any cline-yes">9x</span>
|
|
1361
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1342
1362
|
<span class="cline-any cline-neutral"> </span>
|
|
1343
|
-
<span class="cline-any cline-yes">
|
|
1363
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1344
1364
|
<span class="cline-any cline-neutral"> </span>
|
|
1345
1365
|
<span class="cline-any cline-neutral"> </span>
|
|
1346
|
-
<span class="cline-any cline-yes">
|
|
1347
|
-
<span class="cline-any cline-yes">
|
|
1366
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1367
|
+
<span class="cline-any cline-yes">10x</span>
|
|
1348
1368
|
<span class="cline-any cline-neutral"> </span>
|
|
1349
1369
|
<span class="cline-any cline-neutral"> </span>
|
|
1350
1370
|
<span class="cline-any cline-neutral"> </span>
|
|
1351
|
-
<span class="cline-any cline-yes">
|
|
1371
|
+
<span class="cline-any cline-yes">9x</span>
|
|
1352
1372
|
<span class="cline-any cline-no"> </span>
|
|
1353
1373
|
<span class="cline-any cline-no"> </span>
|
|
1354
1374
|
<span class="cline-any cline-neutral"> </span>
|
|
1355
1375
|
<span class="cline-any cline-neutral"> </span>
|
|
1356
|
-
<span class="cline-any cline-yes">
|
|
1376
|
+
<span class="cline-any cline-yes">9x</span>
|
|
1357
1377
|
<span class="cline-any cline-neutral"> </span>
|
|
1358
1378
|
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import * as fs from "fs";
|
|
1359
1379
|
|
|
@@ -1362,7 +1382,6 @@ import {
|
|
|
1362
1382
|
Segment,
|
|
1363
1383
|
Feature,
|
|
1364
1384
|
DatafileContent,
|
|
1365
|
-
DatafileContentV1,
|
|
1366
1385
|
Variation,
|
|
1367
1386
|
VariableOverride,
|
|
1368
1387
|
Traffic,
|
|
@@ -1379,14 +1398,13 @@ import {
|
|
|
1379
1398
|
Force,
|
|
1380
1399
|
} from "@featurevisor/types";
|
|
1381
1400
|
|
|
1382
|
-
import { ProjectConfig
|
|
1401
|
+
import { ProjectConfig } from "../config";
|
|
1383
1402
|
import { Datasource } from "../datasource";
|
|
1384
1403
|
import { extractAttributeKeysFromConditions, extractSegmentKeysFromGroupSegments } from "../utils";
|
|
1385
1404
|
import { generateHashForDatafile, generateHashForFeature, getSegmentHashes } from "./hashes";
|
|
1386
1405
|
|
|
1387
1406
|
import { getTraffic } from "./traffic";
|
|
1388
1407
|
import { getFeatureRanges } from "./getFeatureRanges";
|
|
1389
|
-
import { convertToV1 } from "./convertToV1";
|
|
1390
1408
|
import {
|
|
1391
1409
|
resolveMutationsForMultipleVariables,
|
|
1392
1410
|
resolveMutationsForSingleVariable,
|
|
@@ -1394,43 +1412,45 @@ import {
|
|
|
1394
1412
|
|
|
1395
1413
|
export interface CustomDatafileOptions {
|
|
1396
1414
|
featureKey?: string;
|
|
1397
|
-
environment: string;
|
|
1415
|
+
environment: string | false;
|
|
1398
1416
|
projectConfig: ProjectConfig;
|
|
1399
1417
|
datasource: Datasource;
|
|
1400
1418
|
revision?: string;
|
|
1401
|
-
schemaVersion?: string;
|
|
1402
1419
|
inflate?: number;
|
|
1403
1420
|
tag?: string;
|
|
1404
1421
|
tags?: BuildTags;
|
|
1422
|
+
includeFeatures?: "*" | FeatureKey[];
|
|
1423
|
+
excludeFeatures?: "*" | FeatureKey[];
|
|
1424
|
+
featurevisorVersion?: string;
|
|
1405
1425
|
}
|
|
1406
1426
|
|
|
1407
|
-
export async function
|
|
1408
|
-
options: CustomDatafileOptions,
|
|
1409
|
-
): Promise<DatafileContent | DatafileContentV1> {
|
|
1427
|
+
export async function getCustomDatafile(options: CustomDatafileOptions): Promise<DatafileContent> {
|
|
1410
1428
|
let featuresToInclude;
|
|
1411
1429
|
|
|
1412
|
-
|
|
1430
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (options.featureKey) {
|
|
1413
1431
|
const requiredChain = <span class="cstat-no" title="statement not covered" >await options.datasource.getRequiredFeaturesChain(options.featureKey);</span>
|
|
1414
1432
|
<span class="cstat-no" title="statement not covered" > featuresToInclude = Array.from(requiredChain);</span>
|
|
1415
1433
|
}
|
|
1416
1434
|
|
|
1417
|
-
const existingState =
|
|
1418
|
-
const datafileContent =
|
|
1435
|
+
const existingState = await options.datasource.readState(options.environment);
|
|
1436
|
+
const datafileContent = await buildDatafile(
|
|
1419
1437
|
options.projectConfig,
|
|
1420
1438
|
options.datasource,
|
|
1421
1439
|
{
|
|
1422
|
-
|
|
1423
|
-
revision: options.revision || "tester",
|
|
1440
|
+
revision: options.revision || <span class="branch-1 cbranch-no" title="branch not covered" >"tester",</span>
|
|
1424
1441
|
environment: options.environment,
|
|
1425
1442
|
features: featuresToInclude,
|
|
1426
1443
|
inflate: options.inflate,
|
|
1427
1444
|
tag: options.tag,
|
|
1428
1445
|
tags: options.tags,
|
|
1446
|
+
includeFeatures: options.includeFeatures,
|
|
1447
|
+
excludeFeatures: options.excludeFeatures,
|
|
1448
|
+
featurevisorVersion: options.featurevisorVersion,
|
|
1429
1449
|
},
|
|
1430
1450
|
existingState,
|
|
1431
1451
|
);
|
|
1432
1452
|
|
|
1433
|
-
|
|
1453
|
+
return datafileContent;
|
|
1434
1454
|
}
|
|
1435
1455
|
|
|
1436
1456
|
export interface BuildOrTags {
|
|
@@ -1443,14 +1463,48 @@ export interface BuildAndTags {
|
|
|
1443
1463
|
|
|
1444
1464
|
export type BuildTags = BuildOrTags | BuildAndTags | string[];
|
|
1445
1465
|
|
|
1466
|
+
function matchesBuildTags(candidateTags: string[], buildTags?: BuildTags): boolean {
|
|
1467
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (!buildTags) {
|
|
1468
|
+
<span class="cstat-no" title="statement not covered" > return true;</span>
|
|
1469
|
+
}
|
|
1470
|
+
|
|
1471
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (Array.isArray(buildTags)) {
|
|
1472
|
+
<span class="cstat-no" title="statement not covered" > return buildTags.some(<span class="fstat-no" title="function not covered" >(s</span>earchTag) => <span class="cstat-no" title="statement not covered" >candidateTags.indexOf(searchTag) !== -1);</span></span>
|
|
1473
|
+
}
|
|
1474
|
+
|
|
1475
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if ("or" in buildTags) {
|
|
1476
|
+
<span class="cstat-no" title="statement not covered" > return buildTags.or.some(<span class="fstat-no" title="function not covered" >(s</span>earchTag) => <span class="cstat-no" title="statement not covered" >candidateTags.indexOf(searchTag) !== -1);</span></span>
|
|
1477
|
+
}
|
|
1478
|
+
|
|
1479
|
+
<span class="missing-if-branch" title="else path not taken" >E</span>if ("and" in buildTags) {
|
|
1480
|
+
return buildTags.and.every((searchTag) => candidateTags.indexOf(searchTag) !== -1);
|
|
1481
|
+
}
|
|
1482
|
+
|
|
1483
|
+
<span class="cstat-no" title="statement not covered" > return true;</span>
|
|
1484
|
+
}
|
|
1485
|
+
|
|
1486
|
+
function matchesFeaturePatterns(featureKey: FeatureKey, patterns?: "*" | FeatureKey[]): boolean {
|
|
1487
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (!patterns) {
|
|
1488
|
+
<span class="cstat-no" title="statement not covered" > return false;</span>
|
|
1489
|
+
}
|
|
1490
|
+
|
|
1491
|
+
const normalizedPatterns = patterns === "*" ? [patterns] : patterns;
|
|
1492
|
+
|
|
1493
|
+
return normalizedPatterns.some((pattern) => {
|
|
1494
|
+
const escaped = pattern.replace(/[.+?^${}()|[\]\\]/g, "\\$&").replace(/\*/g, ".*");
|
|
1495
|
+
return new RegExp(`^${escaped}$`).test(featureKey);
|
|
1496
|
+
});
|
|
1497
|
+
}
|
|
1498
|
+
|
|
1446
1499
|
export interface BuildOptions {
|
|
1447
|
-
schemaVersion: string;
|
|
1448
1500
|
revision: string;
|
|
1449
1501
|
featurevisorVersion?: string;
|
|
1450
1502
|
revisionFromHash?: boolean;
|
|
1451
1503
|
environment: string | false;
|
|
1452
1504
|
tag?: string;
|
|
1453
1505
|
tags?: BuildTags;
|
|
1506
|
+
includeFeatures?: "*" | FeatureKey[];
|
|
1507
|
+
excludeFeatures?: "*" | FeatureKey[];
|
|
1454
1508
|
features?: FeatureKey[];
|
|
1455
1509
|
inflate?: number;
|
|
1456
1510
|
}
|
|
@@ -1460,7 +1514,7 @@ export async function buildDatafile(
|
|
|
1460
1514
|
datasource: Datasource,
|
|
1461
1515
|
options: BuildOptions,
|
|
1462
1516
|
existingState: ExistingState,
|
|
1463
|
-
): Promise<DatafileContent
|
|
1517
|
+
): Promise<DatafileContent> {
|
|
1464
1518
|
const segmentKeysUsedByTag = new Set<SegmentKey>();
|
|
1465
1519
|
const attributeKeysUsedByTag = new Set<AttributeKey>();
|
|
1466
1520
|
const { featureRanges, featureIsInGroup } = await getFeatureRanges(projectConfig, datasource);
|
|
@@ -1469,8 +1523,8 @@ export async function buildDatafile(
|
|
|
1469
1523
|
const schemaKeys = await datasource.listSchemas();
|
|
1470
1524
|
const schemasByKey: Record<string, Schema> = {};
|
|
1471
1525
|
for (const key of schemaKeys) {
|
|
1472
|
-
|
|
1473
|
-
|
|
1526
|
+
try {
|
|
1527
|
+
schemasByKey[key] = await datasource.readSchema(key);
|
|
1474
1528
|
} catch {
|
|
1475
1529
|
// Schema file may be invalid; skip for datafile build
|
|
1476
1530
|
}
|
|
@@ -1480,7 +1534,7 @@ export async function buildDatafile(
|
|
|
1480
1534
|
const features: Feature[] = [];
|
|
1481
1535
|
const featuresDirectory = projectConfig.featuresDirectoryPath;
|
|
1482
1536
|
|
|
1483
|
-
if (fs.existsSync(featuresDirectory)) {
|
|
1537
|
+
<span class="missing-if-branch" title="else path not taken" >E</span>if (fs.existsSync(featuresDirectory)) {
|
|
1484
1538
|
const featureFiles = await datasource.listFeatures();
|
|
1485
1539
|
|
|
1486
1540
|
for (const featureKey of featureFiles) {
|
|
@@ -1490,43 +1544,28 @@ export async function buildDatafile(
|
|
|
1490
1544
|
<span class="cstat-no" title="statement not covered" > continue;</span>
|
|
1491
1545
|
}
|
|
1492
1546
|
|
|
1493
|
-
|
|
1494
|
-
|
|
1547
|
+
const featureTags = parsedFeature.tags || [];
|
|
1548
|
+
|
|
1549
|
+
if (options.tag && featureTags.indexOf(options.tag) === -1) {
|
|
1550
|
+
continue;
|
|
1495
1551
|
}
|
|
1496
1552
|
|
|
1497
|
-
|
|
1498
|
-
|
|
1499
|
-
|
|
1500
|
-
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (</span>
|
|
1501
|
-
options.tags.some(<span class="fstat-no" title="function not covered" >(s</span>earchTag) => <span class="cstat-no" title="statement not covered" >parsedFeature.tags.indexOf(searchTag) !== -1)</span> === false
|
|
1502
|
-
) {
|
|
1503
|
-
<span class="cstat-no" title="statement not covered" > continue;</span>
|
|
1504
|
-
}
|
|
1505
|
-
} else {
|
|
1506
|
-
// OR tags
|
|
1507
|
-
const orTags = <span class="cstat-no" title="statement not covered" >options.tags as BuildOrTags;</span>
|
|
1508
|
-
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (orTags.or) {</span>
|
|
1509
|
-
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (</span>
|
|
1510
|
-
orTags.or.some(<span class="fstat-no" title="function not covered" >(s</span>earchTag) => <span class="cstat-no" title="statement not covered" >parsedFeature.tags.indexOf(searchTag) !== -1)</span> === false
|
|
1511
|
-
) {
|
|
1512
|
-
<span class="cstat-no" title="statement not covered" > continue;</span>
|
|
1513
|
-
}
|
|
1514
|
-
}
|
|
1553
|
+
if (options.tags && matchesBuildTags(featureTags, options.tags) === false) {
|
|
1554
|
+
continue;
|
|
1555
|
+
}
|
|
1515
1556
|
|
|
1516
|
-
|
|
1517
|
-
|
|
1518
|
-
|
|
1519
|
-
|
|
1520
|
-
|
|
1521
|
-
|
|
1522
|
-
|
|
1523
|
-
|
|
1524
|
-
|
|
1525
|
-
}
|
|
1526
|
-
}
|
|
1557
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (
|
|
1558
|
+
options.includeFeatures &&
|
|
1559
|
+
matchesFeaturePatterns(featureKey, options.includeFeatures) === false
|
|
1560
|
+
) {
|
|
1561
|
+
<span class="cstat-no" title="statement not covered" > continue;</span>
|
|
1562
|
+
}
|
|
1563
|
+
|
|
1564
|
+
if (options.excludeFeatures && matchesFeaturePatterns(featureKey, options.excludeFeatures)) {
|
|
1565
|
+
continue;
|
|
1527
1566
|
}
|
|
1528
1567
|
|
|
1529
|
-
<span class="missing-if-branch" title="if path not taken" >I</span>if (options.features && <span class="branch-1 cbranch-no" title="branch not covered" >options.features.indexOf(featureKey) === -1)</span>
|
|
1568
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (options.features && <span class="branch-1 cbranch-no" title="branch not covered" >options.features.indexOf(featureKey) === -1) {</span>
|
|
1530
1569
|
<span class="cstat-no" title="statement not covered" > continue;</span>
|
|
1531
1570
|
}
|
|
1532
1571
|
|
|
@@ -1538,10 +1577,10 @@ export async function buildDatafile(
|
|
|
1538
1577
|
expose = parsedFeature.expose?.[options.environment] as Expose | undefined;
|
|
1539
1578
|
rules = parsedFeature.rules?.[options.environment] as Rule[];
|
|
1540
1579
|
force = parsedFeature.force?.[options.environment] as Force[] | undefined;
|
|
1541
|
-
} else
|
|
1542
|
-
|
|
1543
|
-
|
|
1544
|
-
|
|
1580
|
+
} else {
|
|
1581
|
+
expose = parsedFeature.expose as Expose | undefined;
|
|
1582
|
+
rules = parsedFeature.rules as Rule[];
|
|
1583
|
+
force = parsedFeature.force as Force[] | undefined;
|
|
1545
1584
|
}
|
|
1546
1585
|
|
|
1547
1586
|
<span class="missing-if-branch" title="if path not taken" >I</span>if (expose === false) {
|
|
@@ -1551,7 +1590,11 @@ export async function buildDatafile(
|
|
|
1551
1590
|
<span class="missing-if-branch" title="if path not taken" >I</span>if (Array.isArray(expose)) {
|
|
1552
1591
|
const exposeTags = <span class="cstat-no" title="statement not covered" >expose;</span>
|
|
1553
1592
|
|
|
1554
|
-
<span class="cstat-no" title="statement not covered" >
|
|
1593
|
+
<span class="cstat-no" title="statement not covered" > if (options.tag && exposeTags.indexOf(options.tag) === -1) {</span>
|
|
1594
|
+
<span class="cstat-no" title="statement not covered" > continue;</span>
|
|
1595
|
+
}
|
|
1596
|
+
|
|
1597
|
+
<span class="cstat-no" title="statement not covered" > if (options.tags && matchesBuildTags(exposeTags, options.tags) === false) {</span>
|
|
1555
1598
|
<span class="cstat-no" title="statement not covered" > continue;</span>
|
|
1556
1599
|
}
|
|
1557
1600
|
}
|
|
@@ -1587,7 +1630,7 @@ export async function buildDatafile(
|
|
|
1587
1630
|
|
|
1588
1631
|
const feature: Feature = {
|
|
1589
1632
|
key: featureKey,
|
|
1590
|
-
deprecated: parsedFeature.deprecated === true ? <span class="branch-0 cbranch-no" title="branch not covered" >true </span
|
|
1633
|
+
deprecated: parsedFeature.deprecated === true ? <span class="branch-0 cbranch-no" title="branch not covered" >true : u</span>ndefined,
|
|
1591
1634
|
bucketBy: parsedFeature.bucketBy || <span class="branch-1 cbranch-no" title="branch not covered" >projectConfig.defaultBucketBy,</span>
|
|
1592
1635
|
required: parsedFeature.required,
|
|
1593
1636
|
disabledVariationValue: parsedFeature.disabledVariationValue,
|
|
@@ -1615,7 +1658,7 @@ export async function buildDatafile(
|
|
|
1615
1658
|
<span class="cstat-no" title="statement not covered" > mappedVariation.variableOverrides[variableKey] = variableOverrides[</span>
|
|
1616
1659
|
variableKey
|
|
1617
1660
|
].map(<span class="fstat-no" title="function not covered" >(o</span>verride: VariableOverride) => {
|
|
1618
|
-
<span class="cstat-no" title="statement not covered" >
|
|
1661
|
+
<span class="cstat-no" title="statement not covered" > if (typeof override.conditions !== "undefined") {</span>
|
|
1619
1662
|
const extractedAttributeKeys = <span class="cstat-no" title="statement not covered" >extractAttributeKeysFromConditions(</span>
|
|
1620
1663
|
override.conditions,
|
|
1621
1664
|
);
|
|
@@ -1637,7 +1680,7 @@ export async function buildDatafile(
|
|
|
1637
1680
|
};
|
|
1638
1681
|
}
|
|
1639
1682
|
|
|
1640
|
-
<span class="cstat-no" title="statement not covered" >
|
|
1683
|
+
<span class="cstat-no" title="statement not covered" > if (typeof override.segments !== "undefined") {</span>
|
|
1641
1684
|
const extractedSegmentKeys = <span class="cstat-no" title="statement not covered" >extractSegmentKeysFromGroupSegments(</span>
|
|
1642
1685
|
override.segments as GroupSegment | GroupSegment[],
|
|
1643
1686
|
);
|
|
@@ -1666,7 +1709,7 @@ export async function buildDatafile(
|
|
|
1666
1709
|
|
|
1667
1710
|
return mappedVariation;
|
|
1668
1711
|
})
|
|
1669
|
-
:
|
|
1712
|
+
: undefined,
|
|
1670
1713
|
traffic: getTraffic(
|
|
1671
1714
|
parsedFeature.variations,
|
|
1672
1715
|
rules,
|
|
@@ -1705,7 +1748,7 @@ export async function buildDatafile(
|
|
|
1705
1748
|
};
|
|
1706
1749
|
}
|
|
1707
1750
|
|
|
1708
|
-
if (typeof override.segments !== "undefined") {
|
|
1751
|
+
<span class="missing-if-branch" title="else path not taken" >E</span>if (typeof override.segments !== "undefined") {
|
|
1709
1752
|
return {
|
|
1710
1753
|
segments:
|
|
1711
1754
|
projectConfig.stringify && typeof override.segments !== "string"
|
|
@@ -1731,7 +1774,7 @@ export async function buildDatafile(
|
|
|
1731
1774
|
variables: resolvedVariables,
|
|
1732
1775
|
variableOverrides: resolvedVariableOverrides,
|
|
1733
1776
|
segments:
|
|
1734
|
-
typeof t.segments !== "string" &&
|
|
1777
|
+
typeof t.segments !== "string" && projectConfig.stringify
|
|
1735
1778
|
? <span class="branch-0 cbranch-no" title="branch not covered" >JSON.stringify(t.segments)</span>
|
|
1736
1779
|
: t.segments,
|
|
1737
1780
|
};
|
|
@@ -1748,7 +1791,7 @@ export async function buildDatafile(
|
|
|
1748
1791
|
weight: v.weight || <span class="branch-1 cbranch-no" title="branch not covered" >0,</span>
|
|
1749
1792
|
};
|
|
1750
1793
|
})
|
|
1751
|
-
:
|
|
1794
|
+
: undefined,
|
|
1752
1795
|
traffic: feature.traffic.map((t: Traffic) => {
|
|
1753
1796
|
return {
|
|
1754
1797
|
key: t.key,
|
|
@@ -1782,10 +1825,10 @@ export async function buildDatafile(
|
|
|
1782
1825
|
|
|
1783
1826
|
feature.variablesSchema[variableKey] = {
|
|
1784
1827
|
key: variableKey,
|
|
1785
|
-
type: (resolved?.type ?? <span class="branch-1 cbranch-no" title="branch not covered" >"string")
|
|
1828
|
+
type: (resolved?.type ?? <span class="branch-1 cbranch-no" title="branch not covered" >"string") as VariableType,</span>
|
|
1786
1829
|
defaultValue: v.defaultValue,
|
|
1787
|
-
deprecated: v.deprecated === true ? <span class="branch-0 cbranch-no" title="branch not covered" >true </span
|
|
1788
|
-
useDefaultWhenDisabled: v.useDefaultWhenDisabled === true ? <span class="branch-0 cbranch-no" title="branch not covered" >true </span
|
|
1830
|
+
deprecated: v.deprecated === true ? <span class="branch-0 cbranch-no" title="branch not covered" >true : u</span>ndefined,
|
|
1831
|
+
useDefaultWhenDisabled: v.useDefaultWhenDisabled === true ? <span class="branch-0 cbranch-no" title="branch not covered" >true : u</span>ndefined,
|
|
1789
1832
|
disabledValue: typeof v.disabledValue !== "undefined" ? <span class="branch-0 cbranch-no" title="branch not covered" >v.disabledValue </span>: undefined,
|
|
1790
1833
|
};
|
|
1791
1834
|
}
|
|
@@ -1793,9 +1836,9 @@ export async function buildDatafile(
|
|
|
1793
1836
|
|
|
1794
1837
|
<span class="missing-if-branch" title="if path not taken" >I</span>if (force) {
|
|
1795
1838
|
<span class="cstat-no" title="statement not covered" > feature.force = force.map(<span class="fstat-no" title="function not covered" >(f</span>) => {</span>
|
|
1796
|
-
<span class="cstat-no" title="statement not covered" >
|
|
1839
|
+
<span class="cstat-no" title="statement not covered" > if (f.segments) {</span>
|
|
1797
1840
|
const extractedSegmentKeys = <span class="cstat-no" title="statement not covered" >extractSegmentKeysFromGroupSegments(f.segments);</span>
|
|
1798
|
-
<span class="cstat-no" title="statement not covered" > extractedSegmentKeys.forEach(<span class="fstat-no" title="function not covered" >(s</span>egmentKey) => <span class="cstat-no" title="statement not covered" >segmentKeysUsedByTag.add(segmentKey))
|
|
1841
|
+
<span class="cstat-no" title="statement not covered" > extractedSegmentKeys.forEach(<span class="fstat-no" title="function not covered" >(s</span>egmentKey) => <span class="cstat-no" title="statement not covered" >segmentKeysUsedByTag.add(segmentKey));</span></span>
|
|
1799
1842
|
|
|
1800
1843
|
<span class="cstat-no" title="statement not covered" > f.segments =</span>
|
|
1801
1844
|
typeof f.segments !== "string" && projectConfig.stringify
|
|
@@ -1803,14 +1846,14 @@ export async function buildDatafile(
|
|
|
1803
1846
|
: f.segments;
|
|
1804
1847
|
}
|
|
1805
1848
|
|
|
1806
|
-
<span class="cstat-no" title="statement not covered" >
|
|
1849
|
+
<span class="cstat-no" title="statement not covered" > if (f.conditions) {</span>
|
|
1807
1850
|
<span class="cstat-no" title="statement not covered" > f.conditions =</span>
|
|
1808
1851
|
typeof f.conditions !== "string" && projectConfig.stringify
|
|
1809
1852
|
? JSON.stringify(f.conditions)
|
|
1810
1853
|
: f.conditions;
|
|
1811
1854
|
}
|
|
1812
1855
|
|
|
1813
|
-
<span class="cstat-no" title="statement not covered" >
|
|
1856
|
+
<span class="cstat-no" title="statement not covered" > if (f.variables) {</span>
|
|
1814
1857
|
<span class="cstat-no" title="statement not covered" > f.variables = resolveMutationsForMultipleVariables(</span>
|
|
1815
1858
|
parsedFeature.variablesSchema,
|
|
1816
1859
|
f.variables,
|
|
@@ -1829,26 +1872,26 @@ export async function buildDatafile(
|
|
|
1829
1872
|
const segments: Segment[] = [];
|
|
1830
1873
|
const segmentsDirectory = projectConfig.segmentsDirectoryPath;
|
|
1831
1874
|
|
|
1832
|
-
<span class="missing-if-branch" title="
|
|
1833
|
-
const segmentFiles =
|
|
1875
|
+
<span class="missing-if-branch" title="else path not taken" >E</span>if (fs.existsSync(segmentsDirectory)) {
|
|
1876
|
+
const segmentFiles = await datasource.listSegments();
|
|
1834
1877
|
|
|
1835
|
-
|
|
1836
|
-
const parsedSegment =
|
|
1878
|
+
for (const segmentKey of segmentFiles) {
|
|
1879
|
+
const parsedSegment = await datasource.readSegment(segmentKey);
|
|
1837
1880
|
|
|
1838
|
-
|
|
1881
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (parsedSegment.archived === true) {
|
|
1839
1882
|
<span class="cstat-no" title="statement not covered" > continue;</span>
|
|
1840
1883
|
}
|
|
1841
1884
|
|
|
1842
|
-
|
|
1885
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (segmentKeysUsedByTag.has(segmentKey) === false) {
|
|
1843
1886
|
<span class="cstat-no" title="statement not covered" > continue;</span>
|
|
1844
1887
|
}
|
|
1845
1888
|
|
|
1846
|
-
const extractedAttributeKeys =
|
|
1889
|
+
const extractedAttributeKeys = extractAttributeKeysFromConditions(
|
|
1847
1890
|
parsedSegment.conditions as Condition | Condition[],
|
|
1848
1891
|
);
|
|
1849
|
-
|
|
1892
|
+
extractedAttributeKeys.forEach((attributeKey) => attributeKeysUsedByTag.add(attributeKey));
|
|
1850
1893
|
|
|
1851
|
-
const segment: Segment =
|
|
1894
|
+
const segment: Segment = {
|
|
1852
1895
|
key: segmentKey,
|
|
1853
1896
|
conditions:
|
|
1854
1897
|
typeof parsedSegment.conditions !== "string" && projectConfig.stringify === true
|
|
@@ -1856,7 +1899,7 @@ export async function buildDatafile(
|
|
|
1856
1899
|
: parsedSegment.conditions,
|
|
1857
1900
|
};
|
|
1858
1901
|
|
|
1859
|
-
|
|
1902
|
+
segments.push(segment);
|
|
1860
1903
|
}
|
|
1861
1904
|
}
|
|
1862
1905
|
|
|
@@ -1864,39 +1907,39 @@ export async function buildDatafile(
|
|
|
1864
1907
|
const attributes: Attribute[] = [];
|
|
1865
1908
|
const attributesDirectory = projectConfig.attributesDirectoryPath;
|
|
1866
1909
|
|
|
1867
|
-
|
|
1868
|
-
const attributeFiles =
|
|
1910
|
+
if (fs.existsSync(attributesDirectory)) {
|
|
1911
|
+
const attributeFiles = await datasource.listAttributes();
|
|
1869
1912
|
|
|
1870
|
-
|
|
1871
|
-
const parsedAttribute =
|
|
1913
|
+
for (const attributeKey of attributeFiles) {
|
|
1914
|
+
const parsedAttribute = await datasource.readAttribute(attributeKey);
|
|
1872
1915
|
|
|
1873
|
-
|
|
1916
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (parsedAttribute.archived === true) {
|
|
1874
1917
|
<span class="cstat-no" title="statement not covered" > continue;</span>
|
|
1875
1918
|
}
|
|
1876
1919
|
|
|
1877
|
-
|
|
1878
|
-
|
|
1920
|
+
if (attributeKeysUsedByTag.has(attributeKey) === false) {
|
|
1921
|
+
continue;
|
|
1879
1922
|
}
|
|
1880
1923
|
|
|
1881
|
-
const attribute: Attribute =
|
|
1924
|
+
const attribute: Attribute = {
|
|
1882
1925
|
key: attributeKey,
|
|
1883
1926
|
type: parsedAttribute.type,
|
|
1884
1927
|
};
|
|
1885
1928
|
|
|
1886
|
-
|
|
1929
|
+
attributes.push(attribute);
|
|
1887
1930
|
}
|
|
1888
1931
|
}
|
|
1889
1932
|
|
|
1890
1933
|
// inflate
|
|
1891
|
-
<span class="missing-if-branch" title="if path not taken" >I</span>if (options.inflate && <span class="branch-1 cbranch-no" title="branch not covered" >options.inflate >= 2)</span>
|
|
1934
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (options.inflate && <span class="branch-1 cbranch-no" title="branch not covered" >options.inflate >= 2) {</span>
|
|
1892
1935
|
const allFeatureKeys = <span class="cstat-no" title="statement not covered" >features.map(<span class="fstat-no" title="function not covered" >(f</span>) => <span class="cstat-no" title="statement not covered" >f.key)</span>;</span>
|
|
1893
1936
|
const allSegmentKeys = <span class="cstat-no" title="statement not covered" >segments.map(<span class="fstat-no" title="function not covered" >(s</span>) => <span class="cstat-no" title="statement not covered" >s.key)</span>;</span>
|
|
1894
1937
|
const allAttributeKeys = <span class="cstat-no" title="statement not covered" >attributes.map(<span class="fstat-no" title="function not covered" >(a</span>) => <span class="cstat-no" title="statement not covered" >a.key)</span>;</span>
|
|
1895
1938
|
|
|
1896
|
-
<span class="cstat-no" title="statement not covered" > for (let i = <span class="cstat-no" title="statement not covered" >0
|
|
1939
|
+
<span class="cstat-no" title="statement not covered" > for (let i = <span class="cstat-no" title="statement not covered" >0; i</span> < options.inflate - 1; i++) {</span>
|
|
1897
1940
|
// feature
|
|
1898
1941
|
<span class="cstat-no" title="statement not covered" > for (const featureKey of allFeatureKeys) {</span>
|
|
1899
|
-
const originalFeature = <span class="cstat-no" title="statement not covered" >features.find(<span class="fstat-no" title="function not covered" >(f</span>) => <span class="cstat-no" title="statement not covered" >f.key === featureKey)
|
|
1942
|
+
const originalFeature = <span class="cstat-no" title="statement not covered" >features.find(<span class="fstat-no" title="function not covered" >(f</span>) => <span class="cstat-no" title="statement not covered" >f.key === featureKey) as Feature;</span></span>
|
|
1900
1943
|
|
|
1901
1944
|
<span class="cstat-no" title="statement not covered" > features.unshift({</span>
|
|
1902
1945
|
...originalFeature,
|
|
@@ -1906,7 +1949,7 @@ export async function buildDatafile(
|
|
|
1906
1949
|
|
|
1907
1950
|
// segment
|
|
1908
1951
|
<span class="cstat-no" title="statement not covered" > for (const segmentKey of allSegmentKeys) {</span>
|
|
1909
|
-
const originalSegment = <span class="cstat-no" title="statement not covered" >segments.find(<span class="fstat-no" title="function not covered" >(s</span>) => <span class="cstat-no" title="statement not covered" >s.key === segmentKey)
|
|
1952
|
+
const originalSegment = <span class="cstat-no" title="statement not covered" >segments.find(<span class="fstat-no" title="function not covered" >(s</span>) => <span class="cstat-no" title="statement not covered" >s.key === segmentKey) as Segment;</span></span>
|
|
1910
1953
|
|
|
1911
1954
|
<span class="cstat-no" title="statement not covered" > segments.unshift({</span>
|
|
1912
1955
|
...originalSegment,
|
|
@@ -1916,7 +1959,7 @@ export async function buildDatafile(
|
|
|
1916
1959
|
|
|
1917
1960
|
// attribute
|
|
1918
1961
|
<span class="cstat-no" title="statement not covered" > for (const attributeKey of allAttributeKeys) {</span>
|
|
1919
|
-
const originalAttribute = <span class="cstat-no" title="statement not covered" >attributes.find(<span class="fstat-no" title="function not covered" >(a</span>) => <span class="cstat-no" title="statement not covered" >a.key === attributeKey)
|
|
1962
|
+
const originalAttribute = <span class="cstat-no" title="statement not covered" >attributes.find(<span class="fstat-no" title="function not covered" >(a</span>) => <span class="cstat-no" title="statement not covered" >a.key === attributeKey) as Attribute;</span></span>
|
|
1920
1963
|
|
|
1921
1964
|
<span class="cstat-no" title="statement not covered" > attributes.unshift({</span>
|
|
1922
1965
|
...originalAttribute,
|
|
@@ -1926,19 +1969,7 @@ export async function buildDatafile(
|
|
|
1926
1969
|
}
|
|
1927
1970
|
}
|
|
1928
1971
|
|
|
1929
|
-
|
|
1930
|
-
<span class="missing-if-branch" title="if path not taken" >I</span>if (options.schemaVersion === "1") {
|
|
1931
|
-
<span class="cstat-no" title="statement not covered" > return convertToV1({</span>
|
|
1932
|
-
revision: options.revision,
|
|
1933
|
-
projectConfig,
|
|
1934
|
-
attributes,
|
|
1935
|
-
features,
|
|
1936
|
-
segments,
|
|
1937
|
-
});
|
|
1938
|
-
}
|
|
1939
|
-
|
|
1940
|
-
// schema v2
|
|
1941
|
-
const datafileContentV2: DatafileContent = {
|
|
1972
|
+
const datafileContent: DatafileContent = {
|
|
1942
1973
|
schemaVersion: "2",
|
|
1943
1974
|
featurevisorVersion: options.featurevisorVersion,
|
|
1944
1975
|
revision: options.revision,
|
|
@@ -1946,17 +1977,16 @@ export async function buildDatafile(
|
|
|
1946
1977
|
features: {},
|
|
1947
1978
|
};
|
|
1948
1979
|
|
|
1949
|
-
|
|
1950
|
-
|
|
1951
|
-
|
|
1952
|
-
|
|
1953
|
-
<span class="cstat-no" title="statement not covered" > delete acc[segment.key].key; </span>// remove key from segment, as it is not needed in v2 datafile
|
|
1980
|
+
datafileContent.segments = segments.reduce((acc, segment) => {
|
|
1981
|
+
<span class="missing-if-branch" title="else path not taken" >E</span>if (segment.key) {
|
|
1982
|
+
acc[segment.key] = segment;
|
|
1983
|
+
delete acc[segment.key].key; // remove key from segment, as it is not needed in v2 datafile
|
|
1954
1984
|
}
|
|
1955
1985
|
|
|
1956
|
-
|
|
1986
|
+
return acc;
|
|
1957
1987
|
}, {});
|
|
1958
1988
|
|
|
1959
|
-
|
|
1989
|
+
datafileContent.features = features.reduce((acc, feature) => {
|
|
1960
1990
|
<span class="missing-if-branch" title="if path not taken" >I</span>if (!feature.key) {
|
|
1961
1991
|
<span class="cstat-no" title="statement not covered" > return acc;</span>
|
|
1962
1992
|
}
|
|
@@ -1970,7 +2000,7 @@ export async function buildDatafile(
|
|
|
1970
2000
|
// remove variablesSchema[key].key
|
|
1971
2001
|
if (featureV2.variablesSchema) {
|
|
1972
2002
|
for (const [variableKey, variable] of Object.entries(featureV2.variablesSchema)) {
|
|
1973
|
-
if (variable.key) {
|
|
2003
|
+
<span class="missing-if-branch" title="else path not taken" >E</span>if (variable.key) {
|
|
1974
2004
|
delete featureV2.variablesSchema[variableKey].key;
|
|
1975
2005
|
}
|
|
1976
2006
|
}
|
|
@@ -1982,24 +2012,24 @@ export async function buildDatafile(
|
|
|
1982
2012
|
}, {});
|
|
1983
2013
|
|
|
1984
2014
|
// add feature hashes for change detection
|
|
1985
|
-
const segmentHashes = getSegmentHashes(
|
|
1986
|
-
Object.keys(
|
|
1987
|
-
const hash = generateHashForFeature(featureKey,
|
|
2015
|
+
const segmentHashes = getSegmentHashes(datafileContent.segments);
|
|
2016
|
+
Object.keys(datafileContent.features).forEach((featureKey) => {
|
|
2017
|
+
const hash = generateHashForFeature(featureKey, datafileContent.features, segmentHashes);
|
|
1988
2018
|
|
|
1989
|
-
|
|
2019
|
+
datafileContent.features[featureKey].hash = hash;
|
|
1990
2020
|
|
|
1991
2021
|
// check needed to support --inflate option
|
|
1992
|
-
if (existingState.features[featureKey]) {
|
|
2022
|
+
<span class="missing-if-branch" title="else path not taken" >E</span>if (existingState.features[featureKey]) {
|
|
1993
2023
|
existingState.features[featureKey].hash = hash;
|
|
1994
2024
|
}
|
|
1995
2025
|
});
|
|
1996
2026
|
|
|
1997
2027
|
<span class="missing-if-branch" title="if path not taken" >I</span>if (options.revisionFromHash) {
|
|
1998
|
-
const datafileHash = <span class="cstat-no" title="statement not covered" >generateHashForDatafile(
|
|
1999
|
-
<span class="cstat-no" title="statement not covered" >
|
|
2028
|
+
const datafileHash = <span class="cstat-no" title="statement not covered" >generateHashForDatafile(datafileContent);</span>
|
|
2029
|
+
<span class="cstat-no" title="statement not covered" > datafileContent.revision = `${datafileHash}`;</span>
|
|
2000
2030
|
}
|
|
2001
2031
|
|
|
2002
|
-
return
|
|
2032
|
+
return datafileContent;
|
|
2003
2033
|
}
|
|
2004
2034
|
</pre></td></tr></table></pre>
|
|
2005
2035
|
|
|
@@ -2008,16 +2038,16 @@ export async function buildDatafile(
|
|
|
2008
2038
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
2009
2039
|
Code coverage generated by
|
|
2010
2040
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
2011
|
-
at 2026-
|
|
2041
|
+
at 2026-07-12T20:35:50.655Z
|
|
2012
2042
|
</div>
|
|
2013
|
-
<script src="
|
|
2043
|
+
<script src="../../prettify.js"></script>
|
|
2014
2044
|
<script>
|
|
2015
2045
|
window.onload = function () {
|
|
2016
2046
|
prettyPrint();
|
|
2017
2047
|
};
|
|
2018
2048
|
</script>
|
|
2019
|
-
<script src="
|
|
2020
|
-
<script src="
|
|
2049
|
+
<script src="../../sorter.js"></script>
|
|
2050
|
+
<script src="../../block-navigation.js"></script>
|
|
2021
2051
|
</body>
|
|
2022
2052
|
</html>
|
|
2023
2053
|
|