@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 datasource/filesystemAdapter.ts</title>
|
|
6
|
+
<title>Code coverage report for src/datasource/filesystemAdapter.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/datasource</a> filesystemAdapter.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">40.46% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>87/215</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">
|
|
33
|
+
<span class="strong">32.43% </span>
|
|
34
34
|
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>
|
|
35
|
+
<span class='fraction'>36/111</span>
|
|
36
36
|
</div>
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
<div class='fl pad1y space-right2'>
|
|
40
|
-
<span class="strong">
|
|
40
|
+
<span class="strong">60.97% </span>
|
|
41
41
|
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>
|
|
42
|
+
<span class='fraction'>25/41</span>
|
|
43
43
|
</div>
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
|
-
<span class="strong">
|
|
47
|
+
<span class="strong">40.75% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>86/211</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -57,7 +57,7 @@
|
|
|
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>
|
|
@@ -560,147 +560,10 @@
|
|
|
560
560
|
<a name='L495'></a><a href='#L495'>495</a>
|
|
561
561
|
<a name='L496'></a><a href='#L496'>496</a>
|
|
562
562
|
<a name='L497'></a><a href='#L497'>497</a>
|
|
563
|
-
<a name='L498'></a><a href='#L498'>498</a>
|
|
564
|
-
<
|
|
565
|
-
<a name='L500'></a><a href='#L500'>500</a>
|
|
566
|
-
<a name='L501'></a><a href='#L501'>501</a>
|
|
567
|
-
<a name='L502'></a><a href='#L502'>502</a>
|
|
568
|
-
<a name='L503'></a><a href='#L503'>503</a>
|
|
569
|
-
<a name='L504'></a><a href='#L504'>504</a>
|
|
570
|
-
<a name='L505'></a><a href='#L505'>505</a>
|
|
571
|
-
<a name='L506'></a><a href='#L506'>506</a>
|
|
572
|
-
<a name='L507'></a><a href='#L507'>507</a>
|
|
573
|
-
<a name='L508'></a><a href='#L508'>508</a>
|
|
574
|
-
<a name='L509'></a><a href='#L509'>509</a>
|
|
575
|
-
<a name='L510'></a><a href='#L510'>510</a>
|
|
576
|
-
<a name='L511'></a><a href='#L511'>511</a>
|
|
577
|
-
<a name='L512'></a><a href='#L512'>512</a>
|
|
578
|
-
<a name='L513'></a><a href='#L513'>513</a>
|
|
579
|
-
<a name='L514'></a><a href='#L514'>514</a>
|
|
580
|
-
<a name='L515'></a><a href='#L515'>515</a>
|
|
581
|
-
<a name='L516'></a><a href='#L516'>516</a>
|
|
582
|
-
<a name='L517'></a><a href='#L517'>517</a>
|
|
583
|
-
<a name='L518'></a><a href='#L518'>518</a>
|
|
584
|
-
<a name='L519'></a><a href='#L519'>519</a>
|
|
585
|
-
<a name='L520'></a><a href='#L520'>520</a>
|
|
586
|
-
<a name='L521'></a><a href='#L521'>521</a>
|
|
587
|
-
<a name='L522'></a><a href='#L522'>522</a>
|
|
588
|
-
<a name='L523'></a><a href='#L523'>523</a>
|
|
589
|
-
<a name='L524'></a><a href='#L524'>524</a>
|
|
590
|
-
<a name='L525'></a><a href='#L525'>525</a>
|
|
591
|
-
<a name='L526'></a><a href='#L526'>526</a>
|
|
592
|
-
<a name='L527'></a><a href='#L527'>527</a>
|
|
593
|
-
<a name='L528'></a><a href='#L528'>528</a>
|
|
594
|
-
<a name='L529'></a><a href='#L529'>529</a>
|
|
595
|
-
<a name='L530'></a><a href='#L530'>530</a>
|
|
596
|
-
<a name='L531'></a><a href='#L531'>531</a>
|
|
597
|
-
<a name='L532'></a><a href='#L532'>532</a>
|
|
598
|
-
<a name='L533'></a><a href='#L533'>533</a>
|
|
599
|
-
<a name='L534'></a><a href='#L534'>534</a>
|
|
600
|
-
<a name='L535'></a><a href='#L535'>535</a>
|
|
601
|
-
<a name='L536'></a><a href='#L536'>536</a>
|
|
602
|
-
<a name='L537'></a><a href='#L537'>537</a>
|
|
603
|
-
<a name='L538'></a><a href='#L538'>538</a>
|
|
604
|
-
<a name='L539'></a><a href='#L539'>539</a>
|
|
605
|
-
<a name='L540'></a><a href='#L540'>540</a>
|
|
606
|
-
<a name='L541'></a><a href='#L541'>541</a>
|
|
607
|
-
<a name='L542'></a><a href='#L542'>542</a>
|
|
608
|
-
<a name='L543'></a><a href='#L543'>543</a>
|
|
609
|
-
<a name='L544'></a><a href='#L544'>544</a>
|
|
610
|
-
<a name='L545'></a><a href='#L545'>545</a>
|
|
611
|
-
<a name='L546'></a><a href='#L546'>546</a>
|
|
612
|
-
<a name='L547'></a><a href='#L547'>547</a>
|
|
613
|
-
<a name='L548'></a><a href='#L548'>548</a>
|
|
614
|
-
<a name='L549'></a><a href='#L549'>549</a>
|
|
615
|
-
<a name='L550'></a><a href='#L550'>550</a>
|
|
616
|
-
<a name='L551'></a><a href='#L551'>551</a>
|
|
617
|
-
<a name='L552'></a><a href='#L552'>552</a>
|
|
618
|
-
<a name='L553'></a><a href='#L553'>553</a>
|
|
619
|
-
<a name='L554'></a><a href='#L554'>554</a>
|
|
620
|
-
<a name='L555'></a><a href='#L555'>555</a>
|
|
621
|
-
<a name='L556'></a><a href='#L556'>556</a>
|
|
622
|
-
<a name='L557'></a><a href='#L557'>557</a>
|
|
623
|
-
<a name='L558'></a><a href='#L558'>558</a>
|
|
624
|
-
<a name='L559'></a><a href='#L559'>559</a>
|
|
625
|
-
<a name='L560'></a><a href='#L560'>560</a>
|
|
626
|
-
<a name='L561'></a><a href='#L561'>561</a>
|
|
627
|
-
<a name='L562'></a><a href='#L562'>562</a>
|
|
628
|
-
<a name='L563'></a><a href='#L563'>563</a>
|
|
629
|
-
<a name='L564'></a><a href='#L564'>564</a>
|
|
630
|
-
<a name='L565'></a><a href='#L565'>565</a>
|
|
631
|
-
<a name='L566'></a><a href='#L566'>566</a>
|
|
632
|
-
<a name='L567'></a><a href='#L567'>567</a>
|
|
633
|
-
<a name='L568'></a><a href='#L568'>568</a>
|
|
634
|
-
<a name='L569'></a><a href='#L569'>569</a>
|
|
635
|
-
<a name='L570'></a><a href='#L570'>570</a>
|
|
636
|
-
<a name='L571'></a><a href='#L571'>571</a>
|
|
637
|
-
<a name='L572'></a><a href='#L572'>572</a>
|
|
638
|
-
<a name='L573'></a><a href='#L573'>573</a>
|
|
639
|
-
<a name='L574'></a><a href='#L574'>574</a>
|
|
640
|
-
<a name='L575'></a><a href='#L575'>575</a>
|
|
641
|
-
<a name='L576'></a><a href='#L576'>576</a>
|
|
642
|
-
<a name='L577'></a><a href='#L577'>577</a>
|
|
643
|
-
<a name='L578'></a><a href='#L578'>578</a>
|
|
644
|
-
<a name='L579'></a><a href='#L579'>579</a>
|
|
645
|
-
<a name='L580'></a><a href='#L580'>580</a>
|
|
646
|
-
<a name='L581'></a><a href='#L581'>581</a>
|
|
647
|
-
<a name='L582'></a><a href='#L582'>582</a>
|
|
648
|
-
<a name='L583'></a><a href='#L583'>583</a>
|
|
649
|
-
<a name='L584'></a><a href='#L584'>584</a>
|
|
650
|
-
<a name='L585'></a><a href='#L585'>585</a>
|
|
651
|
-
<a name='L586'></a><a href='#L586'>586</a>
|
|
652
|
-
<a name='L587'></a><a href='#L587'>587</a>
|
|
653
|
-
<a name='L588'></a><a href='#L588'>588</a>
|
|
654
|
-
<a name='L589'></a><a href='#L589'>589</a>
|
|
655
|
-
<a name='L590'></a><a href='#L590'>590</a>
|
|
656
|
-
<a name='L591'></a><a href='#L591'>591</a>
|
|
657
|
-
<a name='L592'></a><a href='#L592'>592</a>
|
|
658
|
-
<a name='L593'></a><a href='#L593'>593</a>
|
|
659
|
-
<a name='L594'></a><a href='#L594'>594</a>
|
|
660
|
-
<a name='L595'></a><a href='#L595'>595</a>
|
|
661
|
-
<a name='L596'></a><a href='#L596'>596</a>
|
|
662
|
-
<a name='L597'></a><a href='#L597'>597</a>
|
|
663
|
-
<a name='L598'></a><a href='#L598'>598</a>
|
|
664
|
-
<a name='L599'></a><a href='#L599'>599</a>
|
|
665
|
-
<a name='L600'></a><a href='#L600'>600</a>
|
|
666
|
-
<a name='L601'></a><a href='#L601'>601</a>
|
|
667
|
-
<a name='L602'></a><a href='#L602'>602</a>
|
|
668
|
-
<a name='L603'></a><a href='#L603'>603</a>
|
|
669
|
-
<a name='L604'></a><a href='#L604'>604</a>
|
|
670
|
-
<a name='L605'></a><a href='#L605'>605</a>
|
|
671
|
-
<a name='L606'></a><a href='#L606'>606</a>
|
|
672
|
-
<a name='L607'></a><a href='#L607'>607</a>
|
|
673
|
-
<a name='L608'></a><a href='#L608'>608</a>
|
|
674
|
-
<a name='L609'></a><a href='#L609'>609</a>
|
|
675
|
-
<a name='L610'></a><a href='#L610'>610</a>
|
|
676
|
-
<a name='L611'></a><a href='#L611'>611</a>
|
|
677
|
-
<a name='L612'></a><a href='#L612'>612</a>
|
|
678
|
-
<a name='L613'></a><a href='#L613'>613</a>
|
|
679
|
-
<a name='L614'></a><a href='#L614'>614</a>
|
|
680
|
-
<a name='L615'></a><a href='#L615'>615</a>
|
|
681
|
-
<a name='L616'></a><a href='#L616'>616</a>
|
|
682
|
-
<a name='L617'></a><a href='#L617'>617</a>
|
|
683
|
-
<a name='L618'></a><a href='#L618'>618</a>
|
|
684
|
-
<a name='L619'></a><a href='#L619'>619</a>
|
|
685
|
-
<a name='L620'></a><a href='#L620'>620</a>
|
|
686
|
-
<a name='L621'></a><a href='#L621'>621</a>
|
|
687
|
-
<a name='L622'></a><a href='#L622'>622</a>
|
|
688
|
-
<a name='L623'></a><a href='#L623'>623</a>
|
|
689
|
-
<a name='L624'></a><a href='#L624'>624</a>
|
|
690
|
-
<a name='L625'></a><a href='#L625'>625</a>
|
|
691
|
-
<a name='L626'></a><a href='#L626'>626</a>
|
|
692
|
-
<a name='L627'></a><a href='#L627'>627</a>
|
|
693
|
-
<a name='L628'></a><a href='#L628'>628</a>
|
|
694
|
-
<a name='L629'></a><a href='#L629'>629</a>
|
|
695
|
-
<a name='L630'></a><a href='#L630'>630</a>
|
|
696
|
-
<a name='L631'></a><a href='#L631'>631</a>
|
|
697
|
-
<a name='L632'></a><a href='#L632'>632</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">5x</span>
|
|
563
|
+
<a name='L498'></a><a href='#L498'>498</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">5x</span>
|
|
564
|
+
<span class="cline-any cline-yes">5x</span>
|
|
698
565
|
<span class="cline-any cline-yes">5x</span>
|
|
699
566
|
<span class="cline-any cline-yes">5x</span>
|
|
700
|
-
<span class="cline-any cline-neutral"> </span>
|
|
701
|
-
<span class="cline-any cline-neutral"> </span>
|
|
702
|
-
<span class="cline-any cline-neutral"> </span>
|
|
703
|
-
<span class="cline-any cline-neutral"> </span>
|
|
704
567
|
<span class="cline-any cline-neutral"> </span>
|
|
705
568
|
<span class="cline-any cline-neutral"> </span>
|
|
706
569
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -717,53 +580,42 @@
|
|
|
717
580
|
<span class="cline-any cline-yes">5x</span>
|
|
718
581
|
<span class="cline-any cline-neutral"> </span>
|
|
719
582
|
<span class="cline-any cline-yes">5x</span>
|
|
720
|
-
<span class="cline-any cline-neutral"> </span>
|
|
721
583
|
<span class="cline-any cline-yes">5x</span>
|
|
722
584
|
<span class="cline-any cline-neutral"> </span>
|
|
723
|
-
<span class="cline-any cline-
|
|
724
|
-
<span class="cline-any cline-neutral"> </span>
|
|
725
|
-
<span class="cline-any cline-neutral"> </span>
|
|
726
|
-
<span class="cline-any cline-neutral"> </span>
|
|
727
|
-
<span class="cline-any cline-yes">4x</span>
|
|
728
|
-
<span class="cline-any cline-yes">4x</span>
|
|
729
|
-
<span class="cline-any cline-yes">4x</span>
|
|
585
|
+
<span class="cline-any cline-yes">2x</span>
|
|
730
586
|
<span class="cline-any cline-neutral"> </span>
|
|
731
587
|
<span class="cline-any cline-neutral"> </span>
|
|
732
588
|
<span class="cline-any cline-neutral"> </span>
|
|
733
589
|
<span class="cline-any cline-yes">5x</span>
|
|
734
590
|
<span class="cline-any cline-neutral"> </span>
|
|
591
|
+
<span class="cline-any cline-yes">5x</span>
|
|
735
592
|
<span class="cline-any cline-neutral"> </span>
|
|
736
593
|
<span class="cline-any cline-neutral"> </span>
|
|
737
594
|
<span class="cline-any cline-no"> </span>
|
|
738
|
-
<span class="cline-any cline-neutral"> </span>
|
|
739
595
|
<span class="cline-any cline-no"> </span>
|
|
740
596
|
<span class="cline-any cline-neutral"> </span>
|
|
741
597
|
<span class="cline-any cline-neutral"> </span>
|
|
742
|
-
<span class="cline-any cline-yes">5x</span>
|
|
743
598
|
<span class="cline-any cline-no"> </span>
|
|
599
|
+
<span class="cline-any cline-yes">635x</span>
|
|
744
600
|
<span class="cline-any cline-neutral"> </span>
|
|
745
|
-
<span class="cline-any cline-
|
|
746
|
-
<span class="cline-any cline-yes">
|
|
747
|
-
<span class="cline-any cline-yes">76x</span>
|
|
748
|
-
<span class="cline-any cline-neutral"> </span>
|
|
749
|
-
<span class="cline-any cline-yes">76x</span>
|
|
750
|
-
<span class="cline-any cline-yes">10x</span>
|
|
601
|
+
<span class="cline-any cline-yes">635x</span>
|
|
602
|
+
<span class="cline-any cline-yes">108x</span>
|
|
751
603
|
<span class="cline-any cline-neutral"> </span>
|
|
752
604
|
<span class="cline-any cline-neutral"> </span>
|
|
753
|
-
<span class="cline-any cline-yes">
|
|
605
|
+
<span class="cline-any cline-yes">527x</span>
|
|
754
606
|
<span class="cline-any cline-neutral"> </span>
|
|
755
|
-
<span class="cline-any cline-yes">
|
|
756
|
-
<span class="cline-any cline-yes">
|
|
757
|
-
<span class="cline-any cline-yes">
|
|
607
|
+
<span class="cline-any cline-yes">527x</span>
|
|
608
|
+
<span class="cline-any cline-yes">2012x</span>
|
|
609
|
+
<span class="cline-any cline-yes">2012x</span>
|
|
758
610
|
<span class="cline-any cline-neutral"> </span>
|
|
759
|
-
<span class="cline-any cline-yes">
|
|
760
|
-
<span class="cline-any cline-yes">
|
|
761
|
-
<span class="cline-any cline-yes">
|
|
762
|
-
<span class="cline-any cline-yes">
|
|
611
|
+
<span class="cline-any cline-yes">2012x</span>
|
|
612
|
+
<span class="cline-any cline-yes">180x</span>
|
|
613
|
+
<span class="cline-any cline-yes">1832x</span>
|
|
614
|
+
<span class="cline-any cline-yes">1832x</span>
|
|
763
615
|
<span class="cline-any cline-neutral"> </span>
|
|
764
616
|
<span class="cline-any cline-neutral"> </span>
|
|
765
617
|
<span class="cline-any cline-neutral"> </span>
|
|
766
|
-
<span class="cline-any cline-yes">
|
|
618
|
+
<span class="cline-any cline-yes">527x</span>
|
|
767
619
|
<span class="cline-any cline-neutral"> </span>
|
|
768
620
|
<span class="cline-any cline-neutral"> </span>
|
|
769
621
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -772,181 +624,166 @@
|
|
|
772
624
|
<span class="cline-any cline-neutral"> </span>
|
|
773
625
|
<span class="cline-any cline-neutral"> </span>
|
|
774
626
|
<span class="cline-any cline-neutral"> </span>
|
|
775
|
-
<span class="cline-any cline-yes">5x</span>
|
|
776
627
|
<span class="cline-any cline-neutral"> </span>
|
|
777
628
|
<span class="cline-any cline-neutral"> </span>
|
|
778
629
|
<span class="cline-any cline-neutral"> </span>
|
|
779
|
-
<span class="cline-any cline-yes">12x</span>
|
|
780
|
-
<span class="cline-any cline-yes">12x</span>
|
|
781
|
-
<span class="cline-any cline-neutral"> </span>
|
|
782
|
-
<span class="cline-any cline-yes">12x</span>
|
|
783
630
|
<span class="cline-any cline-neutral"> </span>
|
|
784
|
-
<span class="cline-any cline-yes">12x</span>
|
|
785
631
|
<span class="cline-any cline-neutral"> </span>
|
|
632
|
+
<span class="cline-any cline-yes">1981x</span>
|
|
786
633
|
<span class="cline-any cline-neutral"> </span>
|
|
634
|
+
<span class="cline-any cline-yes">1981x</span>
|
|
787
635
|
<span class="cline-any cline-neutral"> </span>
|
|
788
|
-
<span class="cline-any cline-yes">664x</span>
|
|
789
|
-
<span class="cline-any cline-yes">134x</span>
|
|
790
|
-
<span class="cline-any cline-yes">530x</span>
|
|
791
|
-
<span class="cline-any cline-yes">10x</span>
|
|
792
|
-
<span class="cline-any cline-yes">520x</span>
|
|
793
|
-
<span class="cline-any cline-yes">73x</span>
|
|
794
|
-
<span class="cline-any cline-yes">447x</span>
|
|
795
|
-
<span class="cline-any cline-yes">188x</span>
|
|
796
|
-
<span class="cline-any cline-yes">259x</span>
|
|
797
|
-
<span class="cline-any cline-yes">148x</span>
|
|
798
636
|
<span class="cline-any cline-neutral"> </span>
|
|
799
637
|
<span class="cline-any cline-neutral"> </span>
|
|
800
|
-
<span class="cline-any cline-yes">111x</span>
|
|
801
638
|
<span class="cline-any cline-neutral"> </span>
|
|
639
|
+
<span class="cline-any cline-yes">410x</span>
|
|
640
|
+
<span class="cline-any cline-yes">410x</span>
|
|
641
|
+
<span class="cline-any cline-yes">410x</span>
|
|
802
642
|
<span class="cline-any cline-neutral"> </span>
|
|
803
643
|
<span class="cline-any cline-neutral"> </span>
|
|
804
|
-
<span class="cline-any cline-yes">
|
|
644
|
+
<span class="cline-any cline-yes">1981x</span>
|
|
805
645
|
<span class="cline-any cline-neutral"> </span>
|
|
806
646
|
<span class="cline-any cline-neutral"> </span>
|
|
807
|
-
<span class="cline-any cline-yes">
|
|
647
|
+
<span class="cline-any cline-yes">52x</span>
|
|
808
648
|
<span class="cline-any cline-neutral"> </span>
|
|
809
|
-
<span class="cline-any cline-yes">619x</span>
|
|
810
649
|
<span class="cline-any cline-neutral"> </span>
|
|
811
650
|
<span class="cline-any cline-neutral"> </span>
|
|
812
651
|
<span class="cline-any cline-neutral"> </span>
|
|
813
|
-
<span class="cline-any cline-yes">10x</span>
|
|
814
652
|
<span class="cline-any cline-neutral"> </span>
|
|
815
|
-
<span class="cline-any cline-yes">10x</span>
|
|
816
653
|
<span class="cline-any cline-neutral"> </span>
|
|
654
|
+
<span class="cline-any cline-yes">75x</span>
|
|
817
655
|
<span class="cline-any cline-neutral"> </span>
|
|
656
|
+
<span class="cline-any cline-yes">75x</span>
|
|
818
657
|
<span class="cline-any cline-neutral"> </span>
|
|
819
658
|
<span class="cline-any cline-neutral"> </span>
|
|
820
659
|
<span class="cline-any cline-neutral"> </span>
|
|
660
|
+
<span class="cline-any cline-yes">2435x</span>
|
|
661
|
+
<span class="cline-any cline-yes">541x</span>
|
|
662
|
+
<span class="cline-any cline-yes">1894x</span>
|
|
663
|
+
<span class="cline-any cline-yes">71x</span>
|
|
664
|
+
<span class="cline-any cline-yes">1823x</span>
|
|
665
|
+
<span class="cline-any cline-yes">281x</span>
|
|
666
|
+
<span class="cline-any cline-yes">1542x</span>
|
|
667
|
+
<span class="cline-any cline-yes">561x</span>
|
|
668
|
+
<span class="cline-any cline-yes">981x</span>
|
|
669
|
+
<span class="cline-any cline-yes">95x</span>
|
|
670
|
+
<span class="cline-any cline-yes">886x</span>
|
|
671
|
+
<span class="cline-any cline-yes">471x</span>
|
|
821
672
|
<span class="cline-any cline-neutral"> </span>
|
|
822
673
|
<span class="cline-any cline-neutral"> </span>
|
|
674
|
+
<span class="cline-any cline-yes">415x</span>
|
|
823
675
|
<span class="cline-any cline-neutral"> </span>
|
|
824
676
|
<span class="cline-any cline-neutral"> </span>
|
|
825
677
|
<span class="cline-any cline-neutral"> </span>
|
|
826
|
-
<span class="cline-any cline-yes">
|
|
827
|
-
<span class="cline-any cline-
|
|
828
|
-
<span class="cline-any cline-neutral"> </span>
|
|
678
|
+
<span class="cline-any cline-yes">21x</span>
|
|
679
|
+
<span class="cline-any cline-no"> </span>
|
|
829
680
|
<span class="cline-any cline-neutral"> </span>
|
|
830
681
|
<span class="cline-any cline-neutral"> </span>
|
|
831
|
-
<span class="cline-any cline-yes">
|
|
682
|
+
<span class="cline-any cline-yes">21x</span>
|
|
832
683
|
<span class="cline-any cline-neutral"> </span>
|
|
833
684
|
<span class="cline-any cline-neutral"> </span>
|
|
834
685
|
<span class="cline-any cline-neutral"> </span>
|
|
686
|
+
<span class="cline-any cline-yes">21x</span>
|
|
687
|
+
<span class="cline-any cline-yes">45x</span>
|
|
688
|
+
<span class="cline-any cline-yes">45x</span>
|
|
835
689
|
<span class="cline-any cline-neutral"> </span>
|
|
836
690
|
<span class="cline-any cline-neutral"> </span>
|
|
837
691
|
<span class="cline-any cline-neutral"> </span>
|
|
838
692
|
<span class="cline-any cline-neutral"> </span>
|
|
839
|
-
<span class="cline-any cline-yes">
|
|
693
|
+
<span class="cline-any cline-yes">1981x</span>
|
|
694
|
+
<span class="cline-any cline-yes">1981x</span>
|
|
840
695
|
<span class="cline-any cline-neutral"> </span>
|
|
841
|
-
<span class="cline-any cline-yes">9x</span>
|
|
842
|
-
<span class="cline-any cline-yes">2x</span>
|
|
843
696
|
<span class="cline-any cline-neutral"> </span>
|
|
844
697
|
<span class="cline-any cline-neutral"> </span>
|
|
845
698
|
<span class="cline-any cline-neutral"> </span>
|
|
699
|
+
<span class="cline-any cline-yes">1981x</span>
|
|
846
700
|
<span class="cline-any cline-neutral"> </span>
|
|
847
701
|
<span class="cline-any cline-neutral"> </span>
|
|
848
|
-
<span class="cline-any cline-yes">7x</span>
|
|
849
|
-
<span class="cline-any cline-yes">7x</span>
|
|
850
|
-
<span class="cline-any cline-yes">7x</span>
|
|
851
|
-
<span class="cline-any cline-yes">9x</span>
|
|
852
702
|
<span class="cline-any cline-neutral"> </span>
|
|
853
|
-
<span class="cline-any cline-yes">
|
|
854
|
-
<span class="cline-any cline-yes">
|
|
703
|
+
<span class="cline-any cline-yes">454x</span>
|
|
704
|
+
<span class="cline-any cline-yes">454x</span>
|
|
855
705
|
<span class="cline-any cline-neutral"> </span>
|
|
706
|
+
<span class="cline-any cline-yes">454x</span>
|
|
856
707
|
<span class="cline-any cline-neutral"> </span>
|
|
857
708
|
<span class="cline-any cline-neutral"> </span>
|
|
709
|
+
<span class="cline-any cline-yes">1827x</span>
|
|
858
710
|
<span class="cline-any cline-neutral"> </span>
|
|
859
711
|
<span class="cline-any cline-neutral"> </span>
|
|
860
|
-
<span class="cline-any cline-yes">
|
|
712
|
+
<span class="cline-any cline-yes">1827x</span>
|
|
861
713
|
<span class="cline-any cline-neutral"> </span>
|
|
862
714
|
<span class="cline-any cline-neutral"> </span>
|
|
715
|
+
<span class="cline-any cline-yes">1827x</span>
|
|
863
716
|
<span class="cline-any cline-neutral"> </span>
|
|
864
|
-
<span class="cline-any cline-yes">45x</span>
|
|
865
|
-
<span class="cline-any cline-yes">45x</span>
|
|
866
717
|
<span class="cline-any cline-neutral"> </span>
|
|
867
|
-
<span class="cline-any cline-yes">
|
|
718
|
+
<span class="cline-any cline-yes">1827x</span>
|
|
868
719
|
<span class="cline-any cline-neutral"> </span>
|
|
869
720
|
<span class="cline-any cline-neutral"> </span>
|
|
870
|
-
<span class="cline-any cline-yes">678x</span>
|
|
871
721
|
<span class="cline-any cline-neutral"> </span>
|
|
872
722
|
<span class="cline-any cline-neutral"> </span>
|
|
873
|
-
<span class="cline-any cline-yes">
|
|
723
|
+
<span class="cline-any cline-yes">7x</span>
|
|
874
724
|
<span class="cline-any cline-neutral"> </span>
|
|
725
|
+
<span class="cline-any cline-yes">7x</span>
|
|
875
726
|
<span class="cline-any cline-neutral"> </span>
|
|
876
|
-
<span class="cline-any cline-yes">678x</span>
|
|
877
727
|
<span class="cline-any cline-neutral"> </span>
|
|
878
728
|
<span class="cline-any cline-neutral"> </span>
|
|
879
|
-
<span class="cline-any cline-yes">
|
|
729
|
+
<span class="cline-any cline-yes">1961x</span>
|
|
730
|
+
<span class="cline-any cline-yes">1961x</span>
|
|
880
731
|
<span class="cline-any cline-neutral"> </span>
|
|
732
|
+
<span class="cline-any cline-yes">1955x</span>
|
|
881
733
|
<span class="cline-any cline-neutral"> </span>
|
|
882
734
|
<span class="cline-any cline-neutral"> </span>
|
|
883
735
|
<span class="cline-any cline-neutral"> </span>
|
|
884
|
-
<span class="cline-any cline-yes">
|
|
736
|
+
<span class="cline-any cline-yes">12x</span>
|
|
885
737
|
<span class="cline-any cline-neutral"> </span>
|
|
738
|
+
<span class="cline-any cline-yes">12x</span>
|
|
886
739
|
<span class="cline-any cline-yes">3x</span>
|
|
887
740
|
<span class="cline-any cline-neutral"> </span>
|
|
888
741
|
<span class="cline-any cline-neutral"> </span>
|
|
742
|
+
<span class="cline-any cline-yes">12x</span>
|
|
889
743
|
<span class="cline-any cline-neutral"> </span>
|
|
890
|
-
<span class="cline-any cline-yes">
|
|
891
|
-
<span class="cline-any cline-yes">6x</span>
|
|
892
|
-
<span class="cline-any cline-yes">6x</span>
|
|
893
|
-
<span class="cline-any cline-yes">6x</span>
|
|
744
|
+
<span class="cline-any cline-yes">12x</span>
|
|
894
745
|
<span class="cline-any cline-neutral"> </span>
|
|
895
|
-
<span class="cline-any cline-yes">6x</span>
|
|
896
746
|
<span class="cline-any cline-neutral"> </span>
|
|
897
|
-
<span class="cline-any cline-yes">5x</span>
|
|
898
|
-
<span class="cline-any cline-no"> </span>
|
|
899
747
|
<span class="cline-any cline-neutral"> </span>
|
|
748
|
+
<span class="cline-any cline-yes">1x</span>
|
|
900
749
|
<span class="cline-any cline-neutral"> </span>
|
|
750
|
+
<span class="cline-any cline-yes">1x</span>
|
|
751
|
+
<span class="cline-any cline-no"> </span>
|
|
901
752
|
<span class="cline-any cline-neutral"> </span>
|
|
902
753
|
<span class="cline-any cline-neutral"> </span>
|
|
754
|
+
<span class="cline-any cline-yes">1x</span>
|
|
903
755
|
<span class="cline-any cline-neutral"> </span>
|
|
904
|
-
<span class="cline-any cline-yes">5x</span>
|
|
905
|
-
<span class="cline-any cline-yes">5x</span>
|
|
906
|
-
<span class="cline-any cline-yes">5x</span>
|
|
907
756
|
<span class="cline-any cline-neutral"> </span>
|
|
908
|
-
<span class="cline-any cline-yes">5x</span>
|
|
909
|
-
<span class="cline-any cline-yes">9x</span>
|
|
910
757
|
<span class="cline-any cline-neutral"> </span>
|
|
911
|
-
<span class="cline-any cline-yes">6x</span>
|
|
912
|
-
<span class="cline-any cline-yes">6x</span>
|
|
913
758
|
<span class="cline-any cline-neutral"> </span>
|
|
914
759
|
<span class="cline-any cline-neutral"> </span>
|
|
915
|
-
<span class="cline-any cline-yes">6x</span>
|
|
916
|
-
<span class="cline-any cline-no"> </span>
|
|
917
760
|
<span class="cline-any cline-neutral"> </span>
|
|
761
|
+
<span class="cline-any cline-yes">1x</span>
|
|
918
762
|
<span class="cline-any cline-neutral"> </span>
|
|
919
|
-
<span class="cline-any cline-yes">
|
|
763
|
+
<span class="cline-any cline-yes">1x</span>
|
|
920
764
|
<span class="cline-any cline-yes">1x</span>
|
|
921
765
|
<span class="cline-any cline-neutral"> </span>
|
|
922
766
|
<span class="cline-any cline-neutral"> </span>
|
|
923
767
|
<span class="cline-any cline-neutral"> </span>
|
|
924
|
-
<span class="cline-any cline-yes">2x</span>
|
|
925
768
|
<span class="cline-any cline-neutral"> </span>
|
|
769
|
+
<span class="cline-any cline-no"> </span>
|
|
926
770
|
<span class="cline-any cline-neutral"> </span>
|
|
927
771
|
<span class="cline-any cline-neutral"> </span>
|
|
928
772
|
<span class="cline-any cline-neutral"> </span>
|
|
773
|
+
<span class="cline-any cline-yes">2x</span>
|
|
929
774
|
<span class="cline-any cline-neutral"> </span>
|
|
775
|
+
<span class="cline-any cline-yes">2x</span>
|
|
776
|
+
<span class="cline-any cline-yes">2x</span>
|
|
930
777
|
<span class="cline-any cline-neutral"> </span>
|
|
931
778
|
<span class="cline-any cline-yes">2x</span>
|
|
932
779
|
<span class="cline-any cline-neutral"> </span>
|
|
933
780
|
<span class="cline-any cline-neutral"> </span>
|
|
934
|
-
<span class="cline-any cline-yes">610x</span>
|
|
935
|
-
<span class="cline-any cline-yes">610x</span>
|
|
936
781
|
<span class="cline-any cline-neutral"> </span>
|
|
937
|
-
<span class="cline-any cline-yes">610x</span>
|
|
938
782
|
<span class="cline-any cline-neutral"> </span>
|
|
939
783
|
<span class="cline-any cline-neutral"> </span>
|
|
940
784
|
<span class="cline-any cline-neutral"> </span>
|
|
941
|
-
<span class="cline-any cline-no"> </span>
|
|
942
|
-
<span class="cline-any cline-neutral"> </span>
|
|
943
|
-
<span class="cline-any cline-no"> </span>
|
|
944
|
-
<span class="cline-any cline-no"> </span>
|
|
945
785
|
<span class="cline-any cline-neutral"> </span>
|
|
946
786
|
<span class="cline-any cline-neutral"> </span>
|
|
947
|
-
<span class="cline-any cline-no"> </span>
|
|
948
|
-
<span class="cline-any cline-neutral"> </span>
|
|
949
|
-
<span class="cline-any cline-no"> </span>
|
|
950
787
|
<span class="cline-any cline-neutral"> </span>
|
|
951
788
|
<span class="cline-any cline-neutral"> </span>
|
|
952
789
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -960,33 +797,16 @@
|
|
|
960
797
|
<span class="cline-any cline-neutral"> </span>
|
|
961
798
|
<span class="cline-any cline-neutral"> </span>
|
|
962
799
|
<span class="cline-any cline-neutral"> </span>
|
|
963
|
-
<span class="cline-any cline-neutral"> </span>
|
|
964
|
-
<span class="cline-any cline-neutral"> </span>
|
|
965
|
-
<span class="cline-any cline-neutral"> </span>
|
|
966
800
|
<span class="cline-any cline-no"> </span>
|
|
967
801
|
<span class="cline-any cline-neutral"> </span>
|
|
968
|
-
<span class="cline-any cline-no"> </span>
|
|
969
|
-
<span class="cline-any cline-no"> </span>
|
|
970
|
-
<span class="cline-any cline-neutral"> </span>
|
|
971
|
-
<span class="cline-any cline-neutral"> </span>
|
|
972
|
-
<span class="cline-any cline-neutral"> </span>
|
|
973
802
|
<span class="cline-any cline-neutral"> </span>
|
|
974
803
|
<span class="cline-any cline-no"> </span>
|
|
975
|
-
<span class="cline-any cline-neutral"> </span>
|
|
976
|
-
<span class="cline-any cline-neutral"> </span>
|
|
977
|
-
<span class="cline-any cline-neutral"> </span>
|
|
978
804
|
<span class="cline-any cline-no"> </span>
|
|
979
805
|
<span class="cline-any cline-neutral"> </span>
|
|
980
|
-
<span class="cline-any cline-no"> </span>
|
|
981
|
-
<span class="cline-any cline-no"> </span>
|
|
982
806
|
<span class="cline-any cline-neutral"> </span>
|
|
983
807
|
<span class="cline-any cline-no"> </span>
|
|
984
808
|
<span class="cline-any cline-neutral"> </span>
|
|
985
809
|
<span class="cline-any cline-neutral"> </span>
|
|
986
|
-
<span class="cline-any cline-neutral"> </span>
|
|
987
|
-
<span class="cline-any cline-neutral"> </span>
|
|
988
|
-
<span class="cline-any cline-neutral"> </span>
|
|
989
|
-
<span class="cline-any cline-neutral"> </span>
|
|
990
810
|
<span class="cline-any cline-no"> </span>
|
|
991
811
|
<span class="cline-any cline-neutral"> </span>
|
|
992
812
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -994,55 +814,38 @@
|
|
|
994
814
|
<span class="cline-any cline-neutral"> </span>
|
|
995
815
|
<span class="cline-any cline-neutral"> </span>
|
|
996
816
|
<span class="cline-any cline-neutral"> </span>
|
|
997
|
-
<span class="cline-any cline-no"> </span>
|
|
998
817
|
<span class="cline-any cline-neutral"> </span>
|
|
999
|
-
<span class="cline-any cline-no"> </span>
|
|
1000
|
-
<span class="cline-any cline-no"> </span>
|
|
1001
818
|
<span class="cline-any cline-neutral"> </span>
|
|
1002
819
|
<span class="cline-any cline-neutral"> </span>
|
|
820
|
+
<span class="cline-any cline-yes">1x</span>
|
|
1003
821
|
<span class="cline-any cline-neutral"> </span>
|
|
1004
|
-
<span class="cline-any cline-
|
|
1005
|
-
<span class="cline-any cline-
|
|
1006
|
-
<span class="cline-any cline-
|
|
822
|
+
<span class="cline-any cline-yes">1x</span>
|
|
823
|
+
<span class="cline-any cline-yes">5x</span>
|
|
824
|
+
<span class="cline-any cline-yes">4x</span>
|
|
1007
825
|
<span class="cline-any cline-neutral"> </span>
|
|
1008
|
-
<span class="cline-any cline-
|
|
1009
|
-
<span class="cline-any cline-no"> </span>
|
|
826
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1010
827
|
<span class="cline-any cline-neutral"> </span>
|
|
828
|
+
<span class="cline-any cline-yes">3x</span>
|
|
1011
829
|
<span class="cline-any cline-neutral"> </span>
|
|
1012
|
-
<span class="cline-any cline-no"> </span>
|
|
1013
830
|
<span class="cline-any cline-neutral"> </span>
|
|
1014
831
|
<span class="cline-any cline-neutral"> </span>
|
|
1015
|
-
<span class="cline-any cline-no"> </span>
|
|
1016
832
|
<span class="cline-any cline-neutral"> </span>
|
|
1017
833
|
<span class="cline-any cline-neutral"> </span>
|
|
834
|
+
<span class="cline-any cline-yes">2x</span>
|
|
1018
835
|
<span class="cline-any cline-neutral"> </span>
|
|
1019
836
|
<span class="cline-any cline-neutral"> </span>
|
|
1020
|
-
<span class="cline-any cline-no"> </span>
|
|
1021
837
|
<span class="cline-any cline-neutral"> </span>
|
|
838
|
+
<span class="cline-any cline-no"> </span>
|
|
1022
839
|
<span class="cline-any cline-neutral"> </span>
|
|
1023
840
|
<span class="cline-any cline-no"> </span>
|
|
1024
841
|
<span class="cline-any cline-no"> </span>
|
|
1025
842
|
<span class="cline-any cline-neutral"> </span>
|
|
1026
843
|
<span class="cline-any cline-neutral"> </span>
|
|
1027
844
|
<span class="cline-any cline-no"> </span>
|
|
1028
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1029
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1030
845
|
<span class="cline-any cline-no"> </span>
|
|
1031
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1032
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1033
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1034
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1035
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1036
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1037
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1038
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1039
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1040
846
|
<span class="cline-any cline-no"> </span>
|
|
1041
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1042
847
|
<span class="cline-any cline-no"> </span>
|
|
1043
848
|
<span class="cline-any cline-neutral"> </span>
|
|
1044
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1045
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1046
849
|
<span class="cline-any cline-no"> </span>
|
|
1047
850
|
<span class="cline-any cline-neutral"> </span>
|
|
1048
851
|
<span class="cline-any cline-no"> </span>
|
|
@@ -1064,10 +867,6 @@
|
|
|
1064
867
|
<span class="cline-any cline-no"> </span>
|
|
1065
868
|
<span class="cline-any cline-neutral"> </span>
|
|
1066
869
|
<span class="cline-any cline-no"> </span>
|
|
1067
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1068
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1069
|
-
<span class="cline-any cline-no"> </span>
|
|
1070
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1071
870
|
<span class="cline-any cline-no"> </span>
|
|
1072
871
|
<span class="cline-any cline-neutral"> </span>
|
|
1073
872
|
<span class="cline-any cline-no"> </span>
|
|
@@ -1119,16 +918,9 @@
|
|
|
1119
918
|
<span class="cline-any cline-neutral"> </span>
|
|
1120
919
|
<span class="cline-any cline-no"> </span>
|
|
1121
920
|
<span class="cline-any cline-no"> </span>
|
|
1122
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1123
921
|
<span class="cline-any cline-no"> </span>
|
|
1124
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1125
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1126
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1127
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1128
922
|
<span class="cline-any cline-no"> </span>
|
|
1129
923
|
<span class="cline-any cline-no"> </span>
|
|
1130
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1131
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1132
924
|
<span class="cline-any cline-no"> </span>
|
|
1133
925
|
<span class="cline-any cline-no"> </span>
|
|
1134
926
|
<span class="cline-any cline-no"> </span>
|
|
@@ -1138,40 +930,13 @@
|
|
|
1138
930
|
<span class="cline-any cline-no"> </span>
|
|
1139
931
|
<span class="cline-any cline-no"> </span>
|
|
1140
932
|
<span class="cline-any cline-no"> </span>
|
|
1141
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1142
933
|
<span class="cline-any cline-no"> </span>
|
|
1143
934
|
<span class="cline-any cline-no"> </span>
|
|
1144
935
|
<span class="cline-any cline-no"> </span>
|
|
1145
|
-
<span class="cline-any cline-no"> </span>
|
|
1146
|
-
<span class="cline-any cline-no"> </span>
|
|
1147
|
-
<span class="cline-any cline-no"> </span>
|
|
1148
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1149
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1150
|
-
<span class="cline-any cline-no"> </span>
|
|
1151
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1152
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1153
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1154
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1155
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1156
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1157
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1158
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1159
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1160
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1161
|
-
<span class="cline-any cline-no"> </span>
|
|
1162
936
|
<span class="cline-any cline-neutral"> </span>
|
|
1163
937
|
<span class="cline-any cline-neutral"> </span>
|
|
1164
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1165
|
-
<span class="cline-any cline-no"> </span>
|
|
1166
938
|
<span class="cline-any cline-no"> </span>
|
|
1167
939
|
<span class="cline-any cline-neutral"> </span>
|
|
1168
|
-
<span class="cline-any cline-no"> </span>
|
|
1169
|
-
<span class="cline-any cline-no"> </span>
|
|
1170
|
-
<span class="cline-any cline-no"> </span>
|
|
1171
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1172
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1173
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1174
|
-
<span class="cline-any cline-no"> </span>
|
|
1175
940
|
<span class="cline-any cline-neutral"> </span>
|
|
1176
941
|
<span class="cline-any cline-neutral"> </span>
|
|
1177
942
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -1181,11 +946,6 @@
|
|
|
1181
946
|
<span class="cline-any cline-neutral"> </span>
|
|
1182
947
|
<span class="cline-any cline-neutral"> </span>
|
|
1183
948
|
<span class="cline-any cline-neutral"> </span>
|
|
1184
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1185
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1186
|
-
<span class="cline-any cline-yes">1x</span>
|
|
1187
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1188
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1189
949
|
<span class="cline-any cline-no"> </span>
|
|
1190
950
|
<span class="cline-any cline-neutral"> </span>
|
|
1191
951
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -1227,9 +987,6 @@
|
|
|
1227
987
|
<span class="cline-any cline-no"> </span>
|
|
1228
988
|
<span class="cline-any cline-no"> </span>
|
|
1229
989
|
<span class="cline-any cline-no"> </span>
|
|
1230
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1231
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1232
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1233
990
|
<span class="cline-any cline-no"> </span>
|
|
1234
991
|
<span class="cline-any cline-no"> </span>
|
|
1235
992
|
<span class="cline-any cline-no"> </span>
|
|
@@ -1242,38 +999,13 @@
|
|
|
1242
999
|
<span class="cline-any cline-neutral"> </span>
|
|
1243
1000
|
<span class="cline-any cline-neutral"> </span>
|
|
1244
1001
|
<span class="cline-any cline-no"> </span>
|
|
1245
|
-
<span class="cline-any cline-no"> </span>
|
|
1246
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1247
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1248
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1249
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1250
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1251
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1252
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1253
1002
|
<span class="cline-any cline-neutral"> </span>
|
|
1254
1003
|
<span class="cline-any cline-no"> </span>
|
|
1255
1004
|
<span class="cline-any cline-neutral"> </span>
|
|
1256
1005
|
<span class="cline-any cline-neutral"> </span>
|
|
1257
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1258
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1259
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1260
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1261
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1262
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1263
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1264
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1265
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1266
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1267
|
-
<span class="cline-any cline-no"> </span>
|
|
1268
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1269
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1270
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1271
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1272
1006
|
<span class="cline-any cline-no"> </span>
|
|
1273
1007
|
<span class="cline-any cline-neutral"> </span>
|
|
1274
1008
|
<span class="cline-any cline-neutral"> </span>
|
|
1275
|
-
<span class="cline-any cline-no"> </span>
|
|
1276
|
-
<span class="cline-any cline-neutral"> </span>
|
|
1277
1009
|
<span class="cline-any cline-neutral"> </span>
|
|
1278
1010
|
<span class="cline-any cline-neutral"> </span>
|
|
1279
1011
|
<span class="cline-any cline-neutral"> </span>
|
|
@@ -1328,6 +1060,7 @@
|
|
|
1328
1060
|
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import * as fs from "fs";
|
|
1329
1061
|
import * as path from "path";
|
|
1330
1062
|
import { execSync, spawn } from "child_process";
|
|
1063
|
+
import { gzipSync } from "zlib";
|
|
1331
1064
|
|
|
1332
1065
|
import type {
|
|
1333
1066
|
ExistingState,
|
|
@@ -1338,43 +1071,28 @@ import type {
|
|
|
1338
1071
|
Commit,
|
|
1339
1072
|
CommitHash,
|
|
1340
1073
|
HistoryEntity,
|
|
1341
|
-
ParsedFeature,
|
|
1342
|
-
Expose,
|
|
1343
|
-
Force,
|
|
1344
|
-
Rule,
|
|
1345
1074
|
} from "@featurevisor/types";
|
|
1346
1075
|
import type { CustomParser } from "@featurevisor/parsers";
|
|
1347
1076
|
|
|
1348
|
-
import { Adapter, DatafileOptions } from "./adapter";
|
|
1077
|
+
import { Adapter, DatafileFile, DatafileOptions } from "./adapter";
|
|
1349
1078
|
import { ProjectConfig } from "../config";
|
|
1350
1079
|
import { getCommit } from "../utils/git";
|
|
1080
|
+
import { CLI_COLOR_CYAN, CLI_COLOR_GREEN, colorize } from "../tester/cliFormat";
|
|
1351
1081
|
|
|
1352
|
-
|
|
1353
|
-
|
|
1354
|
-
class FeatureSplitConfigError extends Error {
|
|
1355
|
-
featurevisorFilePath: string;
|
|
1356
|
-
|
|
1357
|
-
constructor(filePath: string, message: string) {
|
|
1358
|
-
super(message);
|
|
1359
|
-
this.featurevisorFilePath = filePath;
|
|
1360
|
-
this.name = "FeatureSplitConfigError";
|
|
1361
|
-
}
|
|
1362
|
-
}
|
|
1363
|
-
|
|
1364
|
-
export function <span class="fstat-no" title="function not covered" >getExistingStateFilePath(</span>
|
|
1082
|
+
export function getExistingStateFilePath(
|
|
1365
1083
|
projectConfig: ProjectConfig,
|
|
1366
1084
|
environment: EnvironmentKey | false,
|
|
1367
1085
|
): string {
|
|
1368
|
-
const fileName = <span class="
|
|
1086
|
+
const fileName = environment ? <span class="branch-0 cbranch-no" title="branch not covered" >`existing-state-${environment}.json` </span>: `existing-state.json`;
|
|
1369
1087
|
|
|
1370
|
-
|
|
1088
|
+
return path.join(projectConfig.stateDirectoryPath, fileName);
|
|
1371
1089
|
}
|
|
1372
1090
|
|
|
1373
|
-
export function <span class="fstat-no" title="function not covered" >getRevisionFilePath(</span>
|
|
1091
|
+
export function <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >getRevisionFilePath(p</span></span>rojectConfig: ProjectConfig): string {
|
|
1374
1092
|
<span class="cstat-no" title="statement not covered" > return path.join(projectConfig.stateDirectoryPath, projectConfig.revisionFileName);</span>
|
|
1375
1093
|
}
|
|
1376
1094
|
|
|
1377
|
-
export function getAllEntityFilePathsRecursively(
|
|
1095
|
+
export function <span class="cstat-no" title="statement not covered" >getAllEntityFilePathsRecursively(d</span>irectoryPath, extension?: string) {
|
|
1378
1096
|
let entities: string[] = [];
|
|
1379
1097
|
|
|
1380
1098
|
if (!fs.existsSync(directoryPath)) {
|
|
@@ -1389,7 +1107,7 @@ export function getAllEntityFilePathsRecursively(directoryPath, extension) {
|
|
|
1389
1107
|
|
|
1390
1108
|
if (fs.statSync(filePath).isDirectory()) {
|
|
1391
1109
|
entities = entities.concat(getAllEntityFilePathsRecursively(filePath, extension));
|
|
1392
|
-
} else if (file.endsWith(`.${extension}`)) {
|
|
1110
|
+
} else <span class="missing-if-branch" title="else path not taken" >E</span>if (!extension || file.endsWith(`.${extension}`)) {
|
|
1393
1111
|
entities.push(filePath);
|
|
1394
1112
|
}
|
|
1395
1113
|
}
|
|
@@ -1397,12 +1115,32 @@ export function getAllEntityFilePathsRecursively(directoryPath, extension) {
|
|
|
1397
1115
|
return entities;
|
|
1398
1116
|
}
|
|
1399
1117
|
|
|
1400
|
-
function <span class="fstat-no" title="function not covered" >isWithinDirectory(</span>
|
|
1118
|
+
function <span class="fstat-no" title="function not covered" >isWithinDirectory(d</span>irectoryPath: string, fileDirectoryPath: string): boolean {
|
|
1401
1119
|
<span class="cstat-no" title="statement not covered" > return (</span>
|
|
1402
1120
|
fileDirectoryPath === directoryPath || fileDirectoryPath.startsWith(directoryPath + path.sep)
|
|
1403
1121
|
);
|
|
1404
1122
|
}
|
|
1405
1123
|
|
|
1124
|
+
function getPathSegmentsFromKey(
|
|
1125
|
+
namespaceCharacter: string,
|
|
1126
|
+
key: string,
|
|
1127
|
+
entityType?: EntityType,
|
|
1128
|
+
): string[] {
|
|
1129
|
+
const pathSegments = namespaceCharacter ? key.split(namespaceCharacter) : <span class="branch-1 cbranch-no" title="branch not covered" >[key];</span>
|
|
1130
|
+
|
|
1131
|
+
if (
|
|
1132
|
+
entityType === "test" &&
|
|
1133
|
+
pathSegments.length > 1 &&
|
|
1134
|
+
["spec", "feature", "segment"].includes(pathSegments[pathSegments.length - 1])
|
|
1135
|
+
) {
|
|
1136
|
+
const suffix = pathSegments[pathSegments.length - 1];
|
|
1137
|
+
pathSegments[pathSegments.length - 2] = `${pathSegments[pathSegments.length - 2]}.${suffix}`;
|
|
1138
|
+
pathSegments.pop();
|
|
1139
|
+
}
|
|
1140
|
+
|
|
1141
|
+
return pathSegments;
|
|
1142
|
+
}
|
|
1143
|
+
|
|
1406
1144
|
export class FilesystemAdapter extends Adapter {
|
|
1407
1145
|
private parser: CustomParser;
|
|
1408
1146
|
|
|
@@ -1424,6 +1162,8 @@ export class FilesystemAdapter extends Adapter {
|
|
|
1424
1162
|
return this.config.segmentsDirectoryPath;
|
|
1425
1163
|
} else if (entityType === "schema") {
|
|
1426
1164
|
return this.config.schemasDirectoryPath;
|
|
1165
|
+
} else if (entityType === "target") {
|
|
1166
|
+
return this.config.targetsDirectoryPath;
|
|
1427
1167
|
} else if (entityType === "test") {
|
|
1428
1168
|
return this.config.testsDirectoryPath;
|
|
1429
1169
|
}
|
|
@@ -1431,64 +1171,29 @@ export class FilesystemAdapter extends Adapter {
|
|
|
1431
1171
|
return this.config.attributesDirectoryPath;
|
|
1432
1172
|
}
|
|
1433
1173
|
|
|
1434
|
-
|
|
1435
|
-
|
|
1174
|
+
async listSets(): Promise<string[]> {
|
|
1175
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (!this.config.sets || !fs.existsSync(this.config.setsDirectoryPath)) {
|
|
1176
|
+
<span class="cstat-no" title="statement not covered" > return [];</span>
|
|
1177
|
+
}
|
|
1436
1178
|
|
|
1437
|
-
|
|
1438
|
-
|
|
1179
|
+
const entries = await fs.promises.readdir(this.config.setsDirectoryPath, {
|
|
1180
|
+
withFileTypes: true,
|
|
1181
|
+
});
|
|
1439
1182
|
|
|
1440
|
-
return
|
|
1183
|
+
return entries
|
|
1184
|
+
.filter((entry) => entry.isDirectory())
|
|
1185
|
+
.map((entry) => entry.name)
|
|
1186
|
+
.sort();
|
|
1441
1187
|
}
|
|
1442
1188
|
|
|
1443
|
-
|
|
1444
|
-
const
|
|
1445
|
-
|
|
1446
|
-
|
|
1447
|
-
|
|
1448
|
-
|
|
1449
|
-
`${relativeEntityPath}.${this.parser.extension}`,
|
|
1189
|
+
getEntityPath(entityType: EntityType, entityKey: string): string {
|
|
1190
|
+
const basePath = this.getEntityDirectoryPath(entityType);
|
|
1191
|
+
const pathSegments = getPathSegmentsFromKey(
|
|
1192
|
+
this.config.namespaceCharacter,
|
|
1193
|
+
entityKey,
|
|
1194
|
+
entityType,
|
|
1450
1195
|
);
|
|
1451
|
-
|
|
1452
|
-
|
|
1453
|
-
private assertSplitByEnvironmentIsValidFeatureBase(
|
|
1454
|
-
baseFeature: ParsedFeature,
|
|
1455
|
-
featurePath: string,
|
|
1456
|
-
) {
|
|
1457
|
-
if (
|
|
1458
|
-
typeof baseFeature.rules !== "undefined" ||
|
|
1459
|
-
typeof baseFeature.force !== "undefined" ||
|
|
1460
|
-
typeof baseFeature.expose !== "undefined"
|
|
1461
|
-
) {
|
|
1462
|
-
throw new FeatureSplitConfigError(
|
|
1463
|
-
featurePath,
|
|
1464
|
-
`Feature "${baseFeature.key}" base file must not define rules, force, or expose when splitByEnvironment=true`,
|
|
1465
|
-
);
|
|
1466
|
-
}
|
|
1467
|
-
}
|
|
1468
|
-
|
|
1469
|
-
private readFeatureEnvironmentEntity(featureKey: string, environment: string) {
|
|
1470
|
-
const featureEnvironmentPath = this.getFeatureEnvironmentPath(featureKey, environment);
|
|
1471
|
-
|
|
1472
|
-
if (!fs.existsSync(featureEnvironmentPath)) {
|
|
1473
|
-
throw new FeatureSplitConfigError(
|
|
1474
|
-
featureEnvironmentPath,
|
|
1475
|
-
`Missing environment feature file: environments/${environment}/${featureKey}.${this.parser.extension}`,
|
|
1476
|
-
);
|
|
1477
|
-
}
|
|
1478
|
-
|
|
1479
|
-
const content = fs.readFileSync(featureEnvironmentPath, "utf8");
|
|
1480
|
-
const parsed = this.parser.parse<Record<string, unknown>>(content, featureEnvironmentPath);
|
|
1481
|
-
const keys = Object.keys(parsed);
|
|
1482
|
-
const unknownKeys = keys.filter((key) => FEATURE_ENVIRONMENT_ALLOWED_KEYS.indexOf(key) === -1);
|
|
1483
|
-
|
|
1484
|
-
if (unknownKeys.length > 0) {
|
|
1485
|
-
throw new FeatureSplitConfigError(
|
|
1486
|
-
featureEnvironmentPath,
|
|
1487
|
-
`Unknown key(s) in environment feature file: ${unknownKeys.join(", ")}`,
|
|
1488
|
-
);
|
|
1489
|
-
}
|
|
1490
|
-
|
|
1491
|
-
return parsed;
|
|
1196
|
+
return path.join(basePath, ...pathSegments) + `.${this.parser.extension}`;
|
|
1492
1197
|
}
|
|
1493
1198
|
|
|
1494
1199
|
async listEntities(entityType: EntityType): Promise<string[]> {
|
|
@@ -1506,8 +1211,8 @@ export class FilesystemAdapter extends Adapter {
|
|
|
1506
1211
|
// remove the extension from the end
|
|
1507
1212
|
.map((filterPath) => filterPath.replace(`.${this.parser.extension}`, ""))
|
|
1508
1213
|
|
|
1509
|
-
// take care of windows paths
|
|
1510
|
-
.map((filterPath) => filterPath.
|
|
1214
|
+
// take care of windows paths and apply namespace character
|
|
1215
|
+
.map((filterPath) => filterPath.split(path.sep).join(this.config.namespaceCharacter))
|
|
1511
1216
|
);
|
|
1512
1217
|
}
|
|
1513
1218
|
|
|
@@ -1518,86 +1223,42 @@ export class FilesystemAdapter extends Adapter {
|
|
|
1518
1223
|
}
|
|
1519
1224
|
|
|
1520
1225
|
async readEntity<T>(entityType: EntityType, entityKey: string): Promise<T> {
|
|
1521
|
-
if (entityType === "feature" && this.config.splitByEnvironment) {
|
|
1522
|
-
const featurePath = this.getEntityPath(entityType, entityKey);
|
|
1523
|
-
const featureContent = fs.readFileSync(featurePath, "utf8");
|
|
1524
|
-
const baseFeature = this.parser.parse<ParsedFeature>(featureContent, featurePath);
|
|
1525
|
-
|
|
1526
|
-
this.assertSplitByEnvironmentIsValidFeatureBase(baseFeature, featurePath);
|
|
1527
|
-
|
|
1528
|
-
<span class="missing-if-branch" title="if path not taken" >I</span>if (!Array.isArray(this.config.environments)) {
|
|
1529
|
-
<span class="cstat-no" title="statement not covered" > throw new FeatureSplitConfigError(</span>
|
|
1530
|
-
featurePath,
|
|
1531
|
-
"splitByEnvironment=true requires environments to be configured as an array",
|
|
1532
|
-
);
|
|
1533
|
-
}
|
|
1534
|
-
|
|
1535
|
-
const rulesByEnvironment: Record<string, Rule[]> = {};
|
|
1536
|
-
const forceByEnvironment: Record<string, Force[]> = {};
|
|
1537
|
-
const exposeByEnvironment: Record<string, Expose> = {};
|
|
1538
|
-
|
|
1539
|
-
for (const environment of this.config.environments) {
|
|
1540
|
-
const envFeature = this.readFeatureEnvironmentEntity(entityKey, environment);
|
|
1541
|
-
|
|
1542
|
-
if (typeof envFeature.rules !== "undefined") {
|
|
1543
|
-
rulesByEnvironment[environment] = envFeature.rules as Rule[];
|
|
1544
|
-
}
|
|
1545
|
-
|
|
1546
|
-
<span class="missing-if-branch" title="if path not taken" >I</span>if (typeof envFeature.force !== "undefined") {
|
|
1547
|
-
<span class="cstat-no" title="statement not covered" > forceByEnvironment[environment] = envFeature.force as Force[];</span>
|
|
1548
|
-
}
|
|
1549
|
-
|
|
1550
|
-
if (typeof envFeature.expose !== "undefined") {
|
|
1551
|
-
exposeByEnvironment[environment] = envFeature.expose as Expose;
|
|
1552
|
-
}
|
|
1553
|
-
}
|
|
1554
|
-
|
|
1555
|
-
const mergedFeature: ParsedFeature = {
|
|
1556
|
-
...baseFeature,
|
|
1557
|
-
rules: Object.keys(rulesByEnvironment).length > 0 ? rulesByEnvironment : <span class="branch-1 cbranch-no" title="branch not covered" >undefined,</span>
|
|
1558
|
-
force: Object.keys(forceByEnvironment).length > 0 ? <span class="branch-0 cbranch-no" title="branch not covered" >forceByEnvironment </span>: undefined,
|
|
1559
|
-
expose: Object.keys(exposeByEnvironment).length > 0 ? exposeByEnvironment : undefined,
|
|
1560
|
-
};
|
|
1561
|
-
|
|
1562
|
-
return mergedFeature as T;
|
|
1563
|
-
}
|
|
1564
|
-
|
|
1565
1226
|
const filePath = this.getEntityPath(entityType, entityKey);
|
|
1566
1227
|
const entityContent = fs.readFileSync(filePath, "utf8");
|
|
1567
1228
|
|
|
1568
1229
|
return this.parser.parse<T>(entityContent, filePath);
|
|
1569
1230
|
}
|
|
1570
1231
|
|
|
1571
|
-
|
|
1572
|
-
const filePath =
|
|
1232
|
+
async writeEntity<T>(entityType: EntityType, entityKey: string, entity: T): Promise<T> {
|
|
1233
|
+
const filePath = this.getEntityPath(entityType, entityKey);
|
|
1573
1234
|
|
|
1574
|
-
|
|
1575
|
-
|
|
1235
|
+
if (!fs.existsSync(path.dirname(filePath))) {
|
|
1236
|
+
fs.mkdirSync(path.dirname(filePath), { recursive: true });
|
|
1576
1237
|
}
|
|
1577
1238
|
|
|
1578
|
-
|
|
1239
|
+
fs.writeFileSync(filePath, this.parser.stringify(entity, filePath));
|
|
1579
1240
|
|
|
1580
|
-
|
|
1241
|
+
return entity;
|
|
1581
1242
|
}
|
|
1582
1243
|
|
|
1583
|
-
|
|
1584
|
-
const filePath =
|
|
1244
|
+
async deleteEntity(entityType: EntityType, entityKey: string): Promise<void> {
|
|
1245
|
+
const filePath = this.getEntityPath(entityType, entityKey);
|
|
1585
1246
|
|
|
1586
|
-
|
|
1247
|
+
<span class="missing-if-branch" title="if path not taken" >I</span>if (!fs.existsSync(filePath)) {
|
|
1587
1248
|
<span class="cstat-no" title="statement not covered" > return;</span>
|
|
1588
1249
|
}
|
|
1589
1250
|
|
|
1590
|
-
|
|
1251
|
+
fs.unlinkSync(filePath);
|
|
1591
1252
|
}
|
|
1592
1253
|
|
|
1593
1254
|
/**
|
|
1594
1255
|
* State
|
|
1595
1256
|
*/
|
|
1596
|
-
|
|
1597
|
-
const filePath =
|
|
1257
|
+
async readState(environment: EnvironmentKey): Promise<ExistingState> {
|
|
1258
|
+
const filePath = getExistingStateFilePath(this.config, environment);
|
|
1598
1259
|
|
|
1599
|
-
|
|
1600
|
-
|
|
1260
|
+
<span class="missing-if-branch" title="else path not taken" >E</span>if (!fs.existsSync(filePath)) {
|
|
1261
|
+
return {
|
|
1601
1262
|
features: {},
|
|
1602
1263
|
};
|
|
1603
1264
|
}
|
|
@@ -1605,53 +1266,38 @@ export class FilesystemAdapter extends Adapter {
|
|
|
1605
1266
|
<span class="cstat-no" title="statement not covered" > return require(filePath);</span>
|
|
1606
1267
|
}
|
|
1607
1268
|
|
|
1608
|
-
|
|
1609
|
-
const filePath =
|
|
1269
|
+
async writeState(environment: EnvironmentKey, existingState: ExistingState) {
|
|
1270
|
+
const filePath = getExistingStateFilePath(this.config, environment);
|
|
1610
1271
|
|
|
1611
|
-
|
|
1612
|
-
|
|
1272
|
+
<span class="missing-if-branch" title="else path not taken" >E</span>if (!fs.existsSync(this.config.stateDirectoryPath)) {
|
|
1273
|
+
fs.mkdirSync(this.config.stateDirectoryPath, { recursive: true });
|
|
1613
1274
|
}
|
|
1614
|
-
|
|
1275
|
+
fs.writeFileSync(
|
|
1615
1276
|
filePath,
|
|
1616
1277
|
this.config.prettyState
|
|
1617
1278
|
? JSON.stringify(existingState, null, 2)
|
|
1618
1279
|
: JSON.stringify(existingState),
|
|
1619
1280
|
);
|
|
1620
|
-
|
|
1621
|
-
<span class="cstat-no" title="statement not covered" > fs.writeFileSync(filePath, JSON.stringify(existingState, null, 2));</span>
|
|
1622
1281
|
}
|
|
1623
1282
|
|
|
1624
1283
|
/**
|
|
1625
1284
|
* Revision
|
|
1626
1285
|
*/
|
|
1627
|
-
<span class="fstat-no" title="function not covered" > async </span>
|
|
1286
|
+
<span class="fstat-no" title="function not covered" > async r</span>eadRevision(): Promise<string> {
|
|
1628
1287
|
const filePath = <span class="cstat-no" title="statement not covered" >getRevisionFilePath(this.config);</span>
|
|
1629
1288
|
|
|
1630
|
-
<span class="cstat-no" title="statement not covered" >
|
|
1289
|
+
<span class="cstat-no" title="statement not covered" > if (fs.existsSync(filePath)) {</span>
|
|
1631
1290
|
<span class="cstat-no" title="statement not covered" > return fs.readFileSync(filePath, "utf8");</span>
|
|
1632
1291
|
}
|
|
1633
1292
|
|
|
1634
|
-
|
|
1635
|
-
<span class="cstat-no" title="statement not covered" > try {</span>
|
|
1636
|
-
const pkg = <span class="cstat-no" title="statement not covered" >require(path.join(this.rootDirectoryPath as string, "package.json"));</span>
|
|
1637
|
-
const pkgVersion = <span class="cstat-no" title="statement not covered" >pkg.version;</span>
|
|
1638
|
-
|
|
1639
|
-
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (pkgVersion) {</span>
|
|
1640
|
-
<span class="cstat-no" title="statement not covered" > return pkgVersion;</span>
|
|
1641
|
-
}
|
|
1642
|
-
|
|
1643
|
-
<span class="cstat-no" title="statement not covered" > return "0";</span>
|
|
1644
|
-
// eslint-disable-next-line
|
|
1645
|
-
} catch (e) {
|
|
1646
|
-
<span class="cstat-no" title="statement not covered" > return "0";</span>
|
|
1647
|
-
}
|
|
1293
|
+
<span class="cstat-no" title="statement not covered" > return "0";</span>
|
|
1648
1294
|
}
|
|
1649
1295
|
|
|
1650
|
-
<span class="fstat-no" title="function not covered" > async </span>
|
|
1296
|
+
<span class="fstat-no" title="function not covered" > async w</span>riteRevision(revision: string): Promise<void> {
|
|
1651
1297
|
const filePath = <span class="cstat-no" title="statement not covered" >getRevisionFilePath(this.config);</span>
|
|
1652
1298
|
|
|
1653
1299
|
// write to state directory
|
|
1654
|
-
<span class="cstat-no" title="statement not covered" >
|
|
1300
|
+
<span class="cstat-no" title="statement not covered" > if (!fs.existsSync(this.config.stateDirectoryPath)) {</span>
|
|
1655
1301
|
<span class="cstat-no" title="statement not covered" > fs.mkdirSync(this.config.stateDirectoryPath, { recursive: true });</span>
|
|
1656
1302
|
}
|
|
1657
1303
|
|
|
@@ -1667,23 +1313,46 @@ export class FilesystemAdapter extends Adapter {
|
|
|
1667
1313
|
/**
|
|
1668
1314
|
* Datafile
|
|
1669
1315
|
*/
|
|
1670
|
-
|
|
1316
|
+
async listDatafiles(): Promise<DatafileFile[]> {
|
|
1317
|
+
const directoryPath = this.config.datafilesDirectoryPath;
|
|
1318
|
+
|
|
1319
|
+
return getAllEntityFilePathsRecursively(directoryPath)
|
|
1320
|
+
.filter((filePath) => path.basename(filePath) !== this.config.revisionFileName)
|
|
1321
|
+
.filter((filePath) => !path.basename(filePath).startsWith("."))
|
|
1322
|
+
.map((filePath) => {
|
|
1323
|
+
const content = fs.readFileSync(filePath);
|
|
1324
|
+
|
|
1325
|
+
return {
|
|
1326
|
+
path: path.relative(directoryPath, filePath).split(path.sep).join("/"),
|
|
1327
|
+
size: content.length,
|
|
1328
|
+
gzipSize: gzipSync(content).length,
|
|
1329
|
+
};
|
|
1330
|
+
})
|
|
1331
|
+
.sort((a, b) => a.path.localeCompare(b.path));
|
|
1332
|
+
}
|
|
1333
|
+
|
|
1334
|
+
<span class="fstat-no" title="function not covered" > getDatafilePath(o</span>ptions: DatafileOptions): string {
|
|
1671
1335
|
const pattern = <span class="cstat-no" title="statement not covered" >this.config.datafileNamePattern || "featurevisor-%s.json";</span>
|
|
1672
1336
|
|
|
1673
|
-
|
|
1674
|
-
|
|
1675
|
-
|
|
1337
|
+
<span class="cstat-no" title="statement not covered" > if (!options.target) {</span>
|
|
1338
|
+
<span class="cstat-no" title="statement not covered" > throw new Error("Datafile target is required.");</span>
|
|
1339
|
+
}
|
|
1340
|
+
|
|
1341
|
+
const targetPathSegments = <span class="cstat-no" title="statement not covered" >options.target.split(this.config.namespaceCharacter);</span>
|
|
1342
|
+
const targetFileKey = <span class="cstat-no" title="statement not covered" >targetPathSegments.pop() || options.target;</span>
|
|
1343
|
+
const fileName = <span class="cstat-no" title="statement not covered" >pattern.replace("%s", targetFileKey);</span>
|
|
1344
|
+
const targetDirectory = <span class="cstat-no" title="statement not covered" >targetPathSegments.length > 0 ? path.join(...targetPathSegments) : "";</span>
|
|
1676
1345
|
|
|
1677
1346
|
const dir = <span class="cstat-no" title="statement not covered" >options.datafilesDir || this.config.datafilesDirectoryPath;</span>
|
|
1678
1347
|
|
|
1679
|
-
<span class="cstat-no" title="statement not covered" >
|
|
1680
|
-
<span class="cstat-no" title="statement not covered" > return path.join(dir, options.environment, fileName);</span>
|
|
1348
|
+
<span class="cstat-no" title="statement not covered" > if (options.environment) {</span>
|
|
1349
|
+
<span class="cstat-no" title="statement not covered" > return path.join(dir, options.environment, targetDirectory, fileName);</span>
|
|
1681
1350
|
}
|
|
1682
1351
|
|
|
1683
|
-
<span class="cstat-no" title="statement not covered" > return path.join(dir, fileName);</span>
|
|
1352
|
+
<span class="cstat-no" title="statement not covered" > return path.join(dir, targetDirectory, fileName);</span>
|
|
1684
1353
|
}
|
|
1685
1354
|
|
|
1686
|
-
<span class="fstat-no" title="function not covered" > async </span>
|
|
1355
|
+
<span class="fstat-no" title="function not covered" > async r</span>eadDatafile(options: DatafileOptions): Promise<DatafileContent> {
|
|
1687
1356
|
const filePath = <span class="cstat-no" title="statement not covered" >this.getDatafilePath(options);</span>
|
|
1688
1357
|
const content = <span class="cstat-no" title="statement not covered" >fs.readFileSync(filePath, "utf8");</span>
|
|
1689
1358
|
const datafileContent = <span class="cstat-no" title="statement not covered" >JSON.parse(content);</span>
|
|
@@ -1691,15 +1360,11 @@ export class FilesystemAdapter extends Adapter {
|
|
|
1691
1360
|
<span class="cstat-no" title="statement not covered" > return datafileContent;</span>
|
|
1692
1361
|
}
|
|
1693
1362
|
|
|
1694
|
-
<span class="fstat-no" title="function not covered" > async </span>
|
|
1363
|
+
<span class="fstat-no" title="function not covered" > async w</span>riteDatafile(datafileContent: DatafileContent, options: DatafileOptions): Promise<void> {
|
|
1695
1364
|
const dir = <span class="cstat-no" title="statement not covered" >options.datafilesDir || this.config.datafilesDirectoryPath;</span>
|
|
1696
|
-
|
|
1697
|
-
const outputEnvironmentDirPath = <span class="cstat-no" title="statement not covered" >options.environment</span>
|
|
1698
|
-
? path.join(dir, options.environment)
|
|
1699
|
-
: dir;
|
|
1700
|
-
<span class="cstat-no" title="statement not covered" > fs.mkdirSync(outputEnvironmentDirPath, { recursive: true });</span>
|
|
1701
1365
|
|
|
1702
1366
|
const outputFilePath = <span class="cstat-no" title="statement not covered" >this.getDatafilePath(options);</span>
|
|
1367
|
+
<span class="cstat-no" title="statement not covered" > fs.mkdirSync(path.dirname(outputFilePath), { recursive: true });</span>
|
|
1703
1368
|
|
|
1704
1369
|
<span class="cstat-no" title="statement not covered" > fs.writeFileSync(</span>
|
|
1705
1370
|
outputFilePath,
|
|
@@ -1711,13 +1376,13 @@ export class FilesystemAdapter extends Adapter {
|
|
|
1711
1376
|
const root = <span class="cstat-no" title="statement not covered" >path.resolve(dir, "..");</span>
|
|
1712
1377
|
|
|
1713
1378
|
const shortPath = <span class="cstat-no" title="statement not covered" >outputFilePath.replace(root + path.sep, "");</span>
|
|
1714
|
-
<span class="cstat-no" title="statement not covered" > console.log(`
|
|
1379
|
+
<span class="cstat-no" title="statement not covered" > console.log(` ${colorize("✔", CLI_COLOR_GREEN)} ${colorize(shortPath, CLI_COLOR_CYAN)}`);</span>
|
|
1715
1380
|
}
|
|
1716
1381
|
|
|
1717
1382
|
/**
|
|
1718
1383
|
* History
|
|
1719
1384
|
*/
|
|
1720
|
-
<span class="fstat-no" title="function not covered" > async </span>
|
|
1385
|
+
<span class="fstat-no" title="function not covered" > async g</span>etRawHistory(pathPatterns: string[]): Promise<string> {
|
|
1721
1386
|
const gitPaths = <span class="cstat-no" title="statement not covered" >pathPatterns.join(" ");</span>
|
|
1722
1387
|
|
|
1723
1388
|
const logCommand = <span class="cstat-no" title="statement not covered" >`git log --name-only --pretty=format:"%h|%an|%aI" --relative --no-merges -- ${gitPaths}`;</span>
|
|
@@ -1745,21 +1410,11 @@ export class FilesystemAdapter extends Adapter {
|
|
|
1745
1410
|
});
|
|
1746
1411
|
}
|
|
1747
1412
|
|
|
1748
|
-
<span class="fstat-no" title="function not covered" > getPathPatterns(</span>
|
|
1413
|
+
<span class="fstat-no" title="function not covered" > getPathPatterns(e</span>ntityType?: EntityType, entityKey?: string): string[] {
|
|
1749
1414
|
let pathPatterns: string[] = <span class="cstat-no" title="statement not covered" >[];</span>
|
|
1750
1415
|
|
|
1751
1416
|
<span class="cstat-no" title="statement not covered" > if (entityType && entityKey) {</span>
|
|
1752
1417
|
<span class="cstat-no" title="statement not covered" > pathPatterns = [this.getEntityPath(entityType, entityKey)];</span>
|
|
1753
|
-
|
|
1754
|
-
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (</span>
|
|
1755
|
-
entityType === "feature" &&
|
|
1756
|
-
this.config.splitByEnvironment &&
|
|
1757
|
-
Array.isArray(this.config.environments)
|
|
1758
|
-
) {
|
|
1759
|
-
<span class="cstat-no" title="statement not covered" > for (const environment of this.config.environments) {</span>
|
|
1760
|
-
<span class="cstat-no" title="statement not covered" > pathPatterns.push(this.getFeatureEnvironmentPath(entityKey, environment));</span>
|
|
1761
|
-
}
|
|
1762
|
-
}
|
|
1763
1418
|
} else <span class="cstat-no" title="statement not covered" >if (entityType) {</span>
|
|
1764
1419
|
<span class="cstat-no" title="statement not covered" > if (entityType === "attribute") {</span>
|
|
1765
1420
|
<span class="cstat-no" title="statement not covered" > pathPatterns = [this.config.attributesDirectoryPath];</span>
|
|
@@ -1767,70 +1422,41 @@ export class FilesystemAdapter extends Adapter {
|
|
|
1767
1422
|
<span class="cstat-no" title="statement not covered" > pathPatterns = [this.config.segmentsDirectoryPath];</span>
|
|
1768
1423
|
} else <span class="cstat-no" title="statement not covered" >if (entityType === "feature") {</span>
|
|
1769
1424
|
<span class="cstat-no" title="statement not covered" > pathPatterns = [this.config.featuresDirectoryPath];</span>
|
|
1770
|
-
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this.config.splitByEnvironment) {</span>
|
|
1771
|
-
<span class="cstat-no" title="statement not covered" > pathPatterns.push(this.config.environmentsDirectoryPath);</span>
|
|
1772
|
-
}
|
|
1773
1425
|
} else <span class="cstat-no" title="statement not covered" >if (entityType === "group") {</span>
|
|
1774
1426
|
<span class="cstat-no" title="statement not covered" > pathPatterns = [this.config.groupsDirectoryPath];</span>
|
|
1775
1427
|
} else <span class="cstat-no" title="statement not covered" >if (entityType === "schema") {</span>
|
|
1776
1428
|
<span class="cstat-no" title="statement not covered" > pathPatterns = [this.config.schemasDirectoryPath];</span>
|
|
1777
|
-
} else <span class="cstat-no" title="statement not covered"
|
|
1429
|
+
} else <span class="cstat-no" title="statement not covered" >if (entityType === "target") {</span>
|
|
1430
|
+
<span class="cstat-no" title="statement not covered" > pathPatterns = [this.config.targetsDirectoryPath];</span>
|
|
1431
|
+
} else <span class="cstat-no" title="statement not covered" >if (entityType === "test") {</span>
|
|
1778
1432
|
<span class="cstat-no" title="statement not covered" > pathPatterns = [this.config.testsDirectoryPath];</span>
|
|
1779
1433
|
}
|
|
1780
1434
|
} else {
|
|
1781
1435
|
<span class="cstat-no" title="statement not covered" > pathPatterns = [</span>
|
|
1782
1436
|
this.config.featuresDirectoryPath,
|
|
1783
|
-
...(this.config.splitByEnvironment ? [this.config.environmentsDirectoryPath] : []),
|
|
1784
1437
|
this.config.attributesDirectoryPath,
|
|
1785
1438
|
this.config.segmentsDirectoryPath,
|
|
1786
1439
|
this.config.groupsDirectoryPath,
|
|
1787
1440
|
this.config.schemasDirectoryPath,
|
|
1441
|
+
this.config.targetsDirectoryPath,
|
|
1788
1442
|
this.config.testsDirectoryPath,
|
|
1789
1443
|
];
|
|
1790
1444
|
}
|
|
1791
1445
|
|
|
1792
|
-
<span class="cstat-no" title="statement not covered" > return pathPatterns.map(<span class="fstat-no" title="function not covered" >(p</span>) => <span class="cstat-no" title="statement not covered" >p.replace((this.rootDirectoryPath as string) + path.sep, ""))
|
|
1793
|
-
}
|
|
1794
|
-
|
|
1795
|
-
<span class="fstat-no" title="function not covered" > async </span>getFeatureSourcePaths(featureKey: string) {
|
|
1796
|
-
const baseFilePath = <span class="cstat-no" title="statement not covered" >this.getEntityPath("feature", featureKey);</span>
|
|
1797
|
-
const environmentFilePaths: Record<string, string> = <span class="cstat-no" title="statement not covered" >{};</span>
|
|
1798
|
-
|
|
1799
|
-
<span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this.config.splitByEnvironment && Array.isArray(this.config.environments)) {</span>
|
|
1800
|
-
<span class="cstat-no" title="statement not covered" > for (const environment of this.config.environments) {</span>
|
|
1801
|
-
<span class="cstat-no" title="statement not covered" > environmentFilePaths[environment] = this.getFeatureEnvironmentPath(featureKey, environment);</span>
|
|
1802
|
-
}
|
|
1803
|
-
}
|
|
1804
|
-
|
|
1805
|
-
<span class="cstat-no" title="statement not covered" > return {</span>
|
|
1806
|
-
baseFilePath,
|
|
1807
|
-
environmentFilePaths,
|
|
1808
|
-
};
|
|
1809
|
-
}
|
|
1810
|
-
|
|
1811
|
-
async getFeaturePropertySourcePath(
|
|
1812
|
-
featureKey: string,
|
|
1813
|
-
_property: "rules" | "force" | "expose",
|
|
1814
|
-
environment?: string,
|
|
1815
|
-
) {
|
|
1816
|
-
if (this.config.splitByEnvironment && environment) {
|
|
1817
|
-
return this.getFeatureEnvironmentPath(featureKey, environment);
|
|
1818
|
-
}
|
|
1819
|
-
|
|
1820
|
-
<span class="cstat-no" title="statement not covered" > return this.getEntityPath("feature", featureKey);</span>
|
|
1446
|
+
<span class="cstat-no" title="statement not covered" > return pathPatterns.map(<span class="fstat-no" title="function not covered" >(p</span>) => <span class="cstat-no" title="statement not covered" >p.replace((this.rootDirectoryPath as string) + path.sep, ""));</span></span>
|
|
1821
1447
|
}
|
|
1822
1448
|
|
|
1823
|
-
<span class="fstat-no" title="function not covered" > async </span>
|
|
1449
|
+
<span class="fstat-no" title="function not covered" > async l</span>istHistoryEntries(entityType?: EntityType, entityKey?: string): Promise<HistoryEntry[]> {
|
|
1824
1450
|
const pathPatterns = <span class="cstat-no" title="statement not covered" >this.getPathPatterns(entityType, entityKey);</span>
|
|
1825
1451
|
const rawHistory = <span class="cstat-no" title="statement not covered" >await this.getRawHistory(pathPatterns);</span>
|
|
1826
1452
|
|
|
1827
1453
|
const fullHistory: HistoryEntry[] = <span class="cstat-no" title="statement not covered" >[];</span>
|
|
1828
1454
|
const blocks = <span class="cstat-no" title="statement not covered" >rawHistory.split("\n\n");</span>
|
|
1829
1455
|
|
|
1830
|
-
<span class="cstat-no" title="statement not covered" > for (let i = <span class="cstat-no" title="statement not covered" >0
|
|
1456
|
+
<span class="cstat-no" title="statement not covered" > for (let i = <span class="cstat-no" title="statement not covered" >0; i</span> < blocks.length; i++) {</span>
|
|
1831
1457
|
const block = <span class="cstat-no" title="statement not covered" >blocks[i];</span>
|
|
1832
1458
|
|
|
1833
|
-
<span class="cstat-no" title="statement not covered" >
|
|
1459
|
+
<span class="cstat-no" title="statement not covered" > if (block.length === 0) {</span>
|
|
1834
1460
|
<span class="cstat-no" title="statement not covered" > continue;</span>
|
|
1835
1461
|
}
|
|
1836
1462
|
|
|
@@ -1842,7 +1468,7 @@ export class FilesystemAdapter extends Adapter {
|
|
|
1842
1468
|
const entities: HistoryEntity[] = <span class="cstat-no" title="statement not covered" >[];</span>
|
|
1843
1469
|
|
|
1844
1470
|
const filePathLines = <span class="cstat-no" title="statement not covered" >lines.slice(1);</span>
|
|
1845
|
-
<span class="cstat-no" title="statement not covered" > for (let j = <span class="cstat-no" title="statement not covered" >0
|
|
1471
|
+
<span class="cstat-no" title="statement not covered" > for (let j = <span class="cstat-no" title="statement not covered" >0; j</span> < filePathLines.length; j++) {</span>
|
|
1846
1472
|
const relativePath = <span class="cstat-no" title="statement not covered" >filePathLines[j];</span>
|
|
1847
1473
|
const absolutePath = <span class="cstat-no" title="statement not covered" >path.join(this.rootDirectoryPath as string, relativePath);</span>
|
|
1848
1474
|
const fileName = <span class="cstat-no" title="statement not covered" >absolutePath.split(path.sep).pop() as string;</span>
|
|
@@ -1856,57 +1482,29 @@ export class FilesystemAdapter extends Adapter {
|
|
|
1856
1482
|
} else <span class="cstat-no" title="statement not covered" >if (isWithinDirectory(this.config.segmentsDirectoryPath, relativeDir)) {</span>
|
|
1857
1483
|
<span class="cstat-no" title="statement not covered" > type = "segment";</span>
|
|
1858
1484
|
} else <span class="cstat-no" title="statement not covered" >if (isWithinDirectory(this.config.featuresDirectoryPath, relativeDir)) {</span>
|
|
1859
|
-
<span class="cstat-no" title="statement not covered" > type = "feature";</span>
|
|
1860
|
-
} else <span class="cstat-no" title="statement not covered" >if (</span>
|
|
1861
|
-
this.config.splitByEnvironment &&
|
|
1862
|
-
isWithinDirectory(this.config.environmentsDirectoryPath, relativeDir)
|
|
1863
|
-
) {
|
|
1864
1485
|
<span class="cstat-no" title="statement not covered" > type = "feature";</span>
|
|
1865
1486
|
} else <span class="cstat-no" title="statement not covered" >if (isWithinDirectory(this.config.groupsDirectoryPath, relativeDir)) {</span>
|
|
1866
1487
|
<span class="cstat-no" title="statement not covered" > type = "group";</span>
|
|
1867
1488
|
} else <span class="cstat-no" title="statement not covered" >if (isWithinDirectory(this.config.schemasDirectoryPath, relativeDir)) {</span>
|
|
1868
1489
|
<span class="cstat-no" title="statement not covered" > type = "schema";</span>
|
|
1490
|
+
} else <span class="cstat-no" title="statement not covered" >if (isWithinDirectory(this.config.targetsDirectoryPath, relativeDir)) {</span>
|
|
1491
|
+
<span class="cstat-no" title="statement not covered" > type = "target";</span>
|
|
1869
1492
|
} else <span class="cstat-no" title="statement not covered" >if (isWithinDirectory(this.config.testsDirectoryPath, relativeDir)) {</span>
|
|
1870
1493
|
<span class="cstat-no" title="statement not covered" > type = "test";</span>
|
|
1871
1494
|
} else {
|
|
1872
1495
|
<span class="cstat-no" title="statement not covered" > continue;</span>
|
|
1873
1496
|
}
|
|
1874
1497
|
|
|
1875
|
-
<span class="cstat-no" title="statement not covered" >
|
|
1876
|
-
|
|
1877
|
-
|
|
1878
|
-
|
|
1879
|
-
this.config.
|
|
1880
|
-
(this.rootDirectoryPath as string) + path.sep,
|
|
1881
|
-
"",
|
|
1882
|
-
) + path.sep,
|
|
1883
|
-
)
|
|
1884
|
-
) {
|
|
1885
|
-
const featureRelativePath = <span class="cstat-no" title="statement not covered" >relativePath</span>
|
|
1886
|
-
.replace(
|
|
1887
|
-
this.config.environmentsDirectoryPath.replace(
|
|
1888
|
-
(this.rootDirectoryPath as string) + path.sep,
|
|
1889
|
-
"",
|
|
1890
|
-
) + path.sep,
|
|
1891
|
-
"",
|
|
1892
|
-
)
|
|
1893
|
-
.split(path.sep)
|
|
1894
|
-
.slice(1)
|
|
1895
|
-
.join(path.sep)
|
|
1896
|
-
.replace(extensionWithDot, "");
|
|
1897
|
-
|
|
1898
|
-
<span class="cstat-no" title="statement not covered" > entities.push({</span>
|
|
1899
|
-
type,
|
|
1900
|
-
key: featureRelativePath.replace(/\\/g, "/"),
|
|
1901
|
-
});
|
|
1902
|
-
|
|
1903
|
-
<span class="cstat-no" title="statement not covered" > continue;</span>
|
|
1904
|
-
}
|
|
1905
|
-
|
|
1498
|
+
<span class="cstat-no" title="statement not covered" > if (type === "feature" || type === "target") {</span>
|
|
1499
|
+
const entityDirectoryPath =
|
|
1500
|
+
<span class="cstat-no" title="statement not covered" > type === "feature"</span>
|
|
1501
|
+
? this.config.featuresDirectoryPath
|
|
1502
|
+
: this.config.targetsDirectoryPath;
|
|
1906
1503
|
const baseRelativePath = <span class="cstat-no" title="statement not covered" >absolutePath</span>
|
|
1907
|
-
.replace(
|
|
1504
|
+
.replace(entityDirectoryPath + path.sep, "")
|
|
1908
1505
|
.replace(extensionWithDot, "")
|
|
1909
|
-
.
|
|
1506
|
+
.split(path.sep)
|
|
1507
|
+
.join(this.config.namespaceCharacter);
|
|
1910
1508
|
|
|
1911
1509
|
<span class="cstat-no" title="statement not covered" > entities.push({</span>
|
|
1912
1510
|
type,
|
|
@@ -1922,7 +1520,7 @@ export class FilesystemAdapter extends Adapter {
|
|
|
1922
1520
|
});
|
|
1923
1521
|
}
|
|
1924
1522
|
|
|
1925
|
-
<span class="cstat-no" title="statement not covered" >
|
|
1523
|
+
<span class="cstat-no" title="statement not covered" > if (entities.length === 0) {</span>
|
|
1926
1524
|
<span class="cstat-no" title="statement not covered" > continue;</span>
|
|
1927
1525
|
}
|
|
1928
1526
|
|
|
@@ -1937,7 +1535,7 @@ export class FilesystemAdapter extends Adapter {
|
|
|
1937
1535
|
<span class="cstat-no" title="statement not covered" > return fullHistory;</span>
|
|
1938
1536
|
}
|
|
1939
1537
|
|
|
1940
|
-
<span class="fstat-no" title="function not covered" > async </span>
|
|
1538
|
+
<span class="fstat-no" title="function not covered" > async r</span>eadCommit(
|
|
1941
1539
|
commitHash: CommitHash,
|
|
1942
1540
|
entityType?: EntityType,
|
|
1943
1541
|
entityKey?: string,
|
|
@@ -1963,16 +1561,16 @@ export class FilesystemAdapter extends Adapter {
|
|
|
1963
1561
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
1964
1562
|
Code coverage generated by
|
|
1965
1563
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
1966
|
-
at 2026-
|
|
1564
|
+
at 2026-07-12T20:35:50.655Z
|
|
1967
1565
|
</div>
|
|
1968
|
-
<script src="
|
|
1566
|
+
<script src="../../prettify.js"></script>
|
|
1969
1567
|
<script>
|
|
1970
1568
|
window.onload = function () {
|
|
1971
1569
|
prettyPrint();
|
|
1972
1570
|
};
|
|
1973
1571
|
</script>
|
|
1974
|
-
<script src="
|
|
1975
|
-
<script src="
|
|
1572
|
+
<script src="../../sorter.js"></script>
|
|
1573
|
+
<script src="../../block-navigation.js"></script>
|
|
1976
1574
|
</body>
|
|
1977
1575
|
</html>
|
|
1978
1576
|
|