@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
package/src/list/index.ts
CHANGED
|
@@ -6,11 +6,24 @@ import type {
|
|
|
6
6
|
TestSegment,
|
|
7
7
|
FeatureAssertion,
|
|
8
8
|
SegmentAssertion,
|
|
9
|
+
Target,
|
|
9
10
|
} from "@featurevisor/types";
|
|
10
11
|
|
|
11
12
|
import { Dependencies } from "../dependencies";
|
|
13
|
+
import type { DatafileFile } from "../datasource";
|
|
12
14
|
import { Plugin } from "../cli";
|
|
13
15
|
import { getFeatureAssertionsFromMatrix, getSegmentAssertionsFromMatrix } from "./matrix";
|
|
16
|
+
import { assertProjectSetJsonSelection, getProjectSetExecutions, printSetHeader } from "../sets";
|
|
17
|
+
import { getTargetFeatureKeys, resolveTargets } from "../targeting";
|
|
18
|
+
import {
|
|
19
|
+
CLI_COLOR_CYAN,
|
|
20
|
+
CLI_COLOR_GREEN,
|
|
21
|
+
CLI_COLOR_YELLOW,
|
|
22
|
+
CLI_FORMAT_BOLD,
|
|
23
|
+
CLI_FORMAT_GREEN,
|
|
24
|
+
CLI_FORMAT_YELLOW,
|
|
25
|
+
colorize,
|
|
26
|
+
} from "../tester/cliFormat";
|
|
14
27
|
|
|
15
28
|
async function getEntitiesWithTests(
|
|
16
29
|
deps: Dependencies,
|
|
@@ -53,6 +66,8 @@ export async function listEntities<T>(deps: Dependencies, entityType): Promise<T
|
|
|
53
66
|
entityKeys = await datasource.listAttributes();
|
|
54
67
|
} else if (entityType === "test") {
|
|
55
68
|
entityKeys = await datasource.listTests();
|
|
69
|
+
} else if (entityType === "target") {
|
|
70
|
+
entityKeys = await datasource.listTargets();
|
|
56
71
|
}
|
|
57
72
|
|
|
58
73
|
if (entityKeys.length === 0) {
|
|
@@ -64,6 +79,12 @@ export async function listEntities<T>(deps: Dependencies, entityType): Promise<T
|
|
|
64
79
|
segments: [],
|
|
65
80
|
};
|
|
66
81
|
let entitiesWithTestsInitialized = false;
|
|
82
|
+
let targetFeatureKeys: Set<string> | undefined;
|
|
83
|
+
|
|
84
|
+
if (entityType === "feature" && options.target) {
|
|
85
|
+
const targets = await resolveTargets(datasource, options.target, { defaultToAll: false });
|
|
86
|
+
targetFeatureKeys = await getTargetFeatureKeys(datasource, targets);
|
|
87
|
+
}
|
|
67
88
|
|
|
68
89
|
async function initializeEntitiesWithTests() {
|
|
69
90
|
if (entitiesWithTestsInitialized) {
|
|
@@ -85,12 +106,18 @@ export async function listEntities<T>(deps: Dependencies, entityType): Promise<T
|
|
|
85
106
|
entity = (await datasource.readAttribute(key)) as T;
|
|
86
107
|
} else if (entityType === "test") {
|
|
87
108
|
entity = (await datasource.readTest(key)) as T;
|
|
109
|
+
} else if (entityType === "target") {
|
|
110
|
+
entity = (await datasource.readTarget(key)) as T;
|
|
88
111
|
}
|
|
89
112
|
|
|
90
113
|
// filter
|
|
91
114
|
if (entityType === "feature") {
|
|
92
115
|
const parsedFeature = entity as ParsedFeature;
|
|
93
116
|
|
|
117
|
+
if (targetFeatureKeys && !targetFeatureKeys.has(key)) {
|
|
118
|
+
continue;
|
|
119
|
+
}
|
|
120
|
+
|
|
94
121
|
// --archived=true|false
|
|
95
122
|
if (parsedFeature.archived) {
|
|
96
123
|
const archivedStatus = options.archived === "false";
|
|
@@ -143,7 +170,8 @@ export async function listEntities<T>(deps: Dependencies, entityType): Promise<T
|
|
|
143
170
|
// --tag=<tag>
|
|
144
171
|
if (options.tag) {
|
|
145
172
|
const tags = Array.isArray(options.tag) ? options.tag : [options.tag];
|
|
146
|
-
const
|
|
173
|
+
const featureTags = parsedFeature.tags || [];
|
|
174
|
+
const hasTags = tags.every((tag) => featureTags.includes(tag));
|
|
147
175
|
|
|
148
176
|
if (!hasTags) {
|
|
149
177
|
continue;
|
|
@@ -402,22 +430,146 @@ function printResult({ result, entityType, options }) {
|
|
|
402
430
|
}
|
|
403
431
|
|
|
404
432
|
if (result.length === 0) {
|
|
405
|
-
console.log(`No ${entityType}s found.`);
|
|
433
|
+
console.log(CLI_FORMAT_YELLOW, `No ${entityType}s found.`);
|
|
406
434
|
return;
|
|
407
435
|
}
|
|
408
436
|
|
|
409
|
-
console.log(
|
|
437
|
+
console.log("");
|
|
438
|
+
console.log(CLI_FORMAT_BOLD, `${ucfirst(entityType)}s`);
|
|
439
|
+
console.log("");
|
|
410
440
|
|
|
411
441
|
for (const item of result) {
|
|
412
|
-
console.log(
|
|
442
|
+
console.log(` ${colorize("•", CLI_COLOR_CYAN)} ${item.key}`);
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
console.log("");
|
|
446
|
+
console.log(CLI_FORMAT_GREEN, `Found ${result.length} ${entityType}s.`);
|
|
447
|
+
}
|
|
448
|
+
|
|
449
|
+
function getDatafileSizeParts(size: number): { value: string; unit: string; color: number } {
|
|
450
|
+
if (size < 1024) {
|
|
451
|
+
return { value: size.toFixed(2), unit: "B", color: CLI_COLOR_YELLOW };
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
if (size < 1024 * 1024) {
|
|
455
|
+
return { value: (size / 1024).toFixed(2), unit: "kB", color: CLI_COLOR_CYAN };
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
return { value: (size / (1024 * 1024)).toFixed(2), unit: "mB", color: CLI_COLOR_GREEN };
|
|
459
|
+
}
|
|
460
|
+
|
|
461
|
+
export function formatDatafileSize(size: number): string {
|
|
462
|
+
const { value, unit, color } = getDatafileSizeParts(size);
|
|
463
|
+
|
|
464
|
+
return `${value} ${colorize(unit, color)}`;
|
|
465
|
+
}
|
|
466
|
+
|
|
467
|
+
function formatDatafileSizeColumn(size: number, valueWidth: number): string {
|
|
468
|
+
const { value, unit, color } = getDatafileSizeParts(size);
|
|
469
|
+
|
|
470
|
+
return `${value.padStart(valueWidth)} ${" ".repeat(2 - unit.length)}${colorize(unit, color)}`;
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
function getDatafileDirectory(datafilePath: string): string {
|
|
474
|
+
const lastSlashIndex = datafilePath.lastIndexOf("/");
|
|
475
|
+
|
|
476
|
+
return lastSlashIndex === -1 ? "" : datafilePath.slice(0, lastSlashIndex);
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
function getDatafileDirectoryPriority(datafilePath: string): number {
|
|
480
|
+
const directory = datafilePath.split("/", 1)[0].toLowerCase();
|
|
481
|
+
|
|
482
|
+
if (directory.startsWith("dev")) {
|
|
483
|
+
return 0;
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
if (directory.startsWith("prod")) {
|
|
487
|
+
return 2;
|
|
413
488
|
}
|
|
414
489
|
|
|
415
|
-
|
|
490
|
+
return 1;
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
function sortDatafiles(datafiles: DatafileFile[]): DatafileFile[] {
|
|
494
|
+
return datafiles.slice().sort((a, b) => {
|
|
495
|
+
const priorityDifference =
|
|
496
|
+
getDatafileDirectoryPriority(a.path) - getDatafileDirectoryPriority(b.path);
|
|
497
|
+
|
|
498
|
+
return priorityDifference || a.path.localeCompare(b.path);
|
|
499
|
+
});
|
|
500
|
+
}
|
|
501
|
+
|
|
502
|
+
function printDatafiles({ result, options }: { result: DatafileFile[]; options: any }) {
|
|
503
|
+
const sortedResult = sortDatafiles(result);
|
|
504
|
+
|
|
505
|
+
if (options.json) {
|
|
506
|
+
console.log(
|
|
507
|
+
options.pretty ? JSON.stringify(sortedResult, null, 2) : JSON.stringify(sortedResult),
|
|
508
|
+
);
|
|
509
|
+
return;
|
|
510
|
+
}
|
|
511
|
+
|
|
512
|
+
if (sortedResult.length === 0) {
|
|
513
|
+
console.log(CLI_FORMAT_YELLOW, "No datafiles found.");
|
|
514
|
+
return;
|
|
515
|
+
}
|
|
516
|
+
|
|
517
|
+
console.log("");
|
|
518
|
+
|
|
519
|
+
const pathWidth = Math.max(
|
|
520
|
+
"Datafile".length,
|
|
521
|
+
...sortedResult.map((datafile) => datafile.path.length),
|
|
522
|
+
);
|
|
523
|
+
const sizeValueWidth = Math.max(
|
|
524
|
+
...sortedResult.map((datafile) => {
|
|
525
|
+
const { value } = getDatafileSizeParts(datafile.size);
|
|
526
|
+
return value.length;
|
|
527
|
+
}),
|
|
528
|
+
);
|
|
529
|
+
const gzipSizeValueWidth = Math.max(
|
|
530
|
+
...sortedResult.map((datafile) => {
|
|
531
|
+
const { value } = getDatafileSizeParts(datafile.gzipSize);
|
|
532
|
+
return value.length;
|
|
533
|
+
}),
|
|
534
|
+
);
|
|
535
|
+
const sizeWidth = Math.max("Size".length, sizeValueWidth + 3);
|
|
536
|
+
const gzipSizeWidth = Math.max("Gzip".length, gzipSizeValueWidth + 3);
|
|
537
|
+
|
|
538
|
+
console.log(
|
|
539
|
+
` ${colorize("Datafile".padEnd(pathWidth), CLI_COLOR_CYAN)} ${colorize(
|
|
540
|
+
"Size".padStart(sizeWidth),
|
|
541
|
+
CLI_COLOR_CYAN,
|
|
542
|
+
)} ${colorize("Gzip".padStart(gzipSizeWidth), CLI_COLOR_CYAN)}`,
|
|
543
|
+
);
|
|
544
|
+
console.log(` ${"-".repeat(pathWidth)} ${"-".repeat(sizeWidth)} ${"-".repeat(gzipSizeWidth)}`);
|
|
545
|
+
|
|
546
|
+
let previousDirectory: string | undefined;
|
|
547
|
+
for (const datafile of sortedResult) {
|
|
548
|
+
const directory = getDatafileDirectory(datafile.path);
|
|
549
|
+
if (previousDirectory !== undefined && directory !== previousDirectory) {
|
|
550
|
+
console.log("");
|
|
551
|
+
}
|
|
552
|
+
|
|
553
|
+
const formattedSize = formatDatafileSizeColumn(datafile.size, sizeValueWidth);
|
|
554
|
+
const formattedGzipSize = formatDatafileSizeColumn(datafile.gzipSize, gzipSizeValueWidth);
|
|
555
|
+
console.log(` ${datafile.path.padEnd(pathWidth)} ${formattedSize} ${formattedGzipSize}`);
|
|
556
|
+
previousDirectory = directory;
|
|
557
|
+
}
|
|
558
|
+
|
|
559
|
+
console.log("");
|
|
560
|
+
console.log(CLI_FORMAT_GREEN, `Found ${sortedResult.length} datafiles.`);
|
|
416
561
|
}
|
|
417
562
|
|
|
418
563
|
export async function listProject(deps: Dependencies) {
|
|
419
564
|
const { options } = deps;
|
|
420
565
|
|
|
566
|
+
// datafiles
|
|
567
|
+
if (options.datafiles) {
|
|
568
|
+
const result = await deps.datasource.listDatafiles();
|
|
569
|
+
|
|
570
|
+
return printDatafiles({ result, options });
|
|
571
|
+
}
|
|
572
|
+
|
|
421
573
|
// features
|
|
422
574
|
if (options.features) {
|
|
423
575
|
const result = await listEntities<ParsedFeature>(deps, "feature");
|
|
@@ -462,18 +614,42 @@ export async function listProject(deps: Dependencies) {
|
|
|
462
614
|
});
|
|
463
615
|
}
|
|
464
616
|
|
|
465
|
-
|
|
617
|
+
// targets
|
|
618
|
+
if (options.targets) {
|
|
619
|
+
const result = await listEntities<Target>(deps, "target");
|
|
620
|
+
|
|
621
|
+
return printResult({
|
|
622
|
+
result,
|
|
623
|
+
entityType: "target",
|
|
624
|
+
options,
|
|
625
|
+
});
|
|
626
|
+
}
|
|
627
|
+
|
|
628
|
+
console.log("");
|
|
629
|
+
console.log(CLI_FORMAT_YELLOW, "Nothing to list.");
|
|
630
|
+
console.log("");
|
|
631
|
+
console.log(
|
|
632
|
+
"Please pass `--datafiles`, `--features`, `--segments`, `--attributes`, or `--targets`.",
|
|
633
|
+
);
|
|
466
634
|
}
|
|
467
635
|
|
|
468
636
|
export const listPlugin: Plugin = {
|
|
469
637
|
command: "list",
|
|
470
638
|
handler: async function ({ rootDirectoryPath, projectConfig, datasource, parsed }) {
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
639
|
+
assertProjectSetJsonSelection(projectConfig, parsed.set, parsed.json);
|
|
640
|
+
|
|
641
|
+
const executions = await getProjectSetExecutions(projectConfig, datasource, parsed.set);
|
|
642
|
+
|
|
643
|
+
for (const execution of executions) {
|
|
644
|
+
printSetHeader(projectConfig, execution.set, parsed.json);
|
|
645
|
+
|
|
646
|
+
await listProject({
|
|
647
|
+
rootDirectoryPath,
|
|
648
|
+
projectConfig: execution.projectConfig,
|
|
649
|
+
datasource: execution.datasource,
|
|
650
|
+
options: parsed,
|
|
651
|
+
});
|
|
652
|
+
}
|
|
477
653
|
},
|
|
478
654
|
examples: [
|
|
479
655
|
{
|
package/src/list/matrix.ts
CHANGED
|
@@ -96,14 +96,9 @@ export function applyCombinationToFeatureAssertion(
|
|
|
96
96
|
);
|
|
97
97
|
}
|
|
98
98
|
|
|
99
|
-
//
|
|
100
|
-
if (flattenedAssertion.
|
|
101
|
-
flattenedAssertion.
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
// tag
|
|
105
|
-
if (flattenedAssertion.tag) {
|
|
106
|
-
flattenedAssertion.tag = applyCombinationToValue(flattenedAssertion.tag, combination);
|
|
99
|
+
// target
|
|
100
|
+
if (flattenedAssertion.target) {
|
|
101
|
+
flattenedAssertion.target = applyCombinationToValue(flattenedAssertion.target, combination);
|
|
107
102
|
}
|
|
108
103
|
|
|
109
104
|
return flattenedAssertion;
|