@featurevisor/core 1.13.0 → 1.13.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/.eslintcache CHANGED
@@ -1 +1 @@
1
- [{"/home/runner/work/featurevisor/featurevisor/packages/core/src/builder/allocator.spec.ts":"1","/home/runner/work/featurevisor/featurevisor/packages/core/src/builder/allocator.ts":"2","/home/runner/work/featurevisor/featurevisor/packages/core/src/builder/buildDatafile.ts":"3","/home/runner/work/featurevisor/featurevisor/packages/core/src/builder/buildProject.ts":"4","/home/runner/work/featurevisor/featurevisor/packages/core/src/builder/getFeatureRanges.ts":"5","/home/runner/work/featurevisor/featurevisor/packages/core/src/builder/index.ts":"6","/home/runner/work/featurevisor/featurevisor/packages/core/src/builder/revision.spec.ts":"7","/home/runner/work/featurevisor/featurevisor/packages/core/src/builder/revision.ts":"8","/home/runner/work/featurevisor/featurevisor/packages/core/src/builder/traffic.spec.ts":"9","/home/runner/work/featurevisor/featurevisor/packages/core/src/builder/traffic.ts":"10","/home/runner/work/featurevisor/featurevisor/packages/core/src/config/index.ts":"11","/home/runner/work/featurevisor/featurevisor/packages/core/src/config/parsers.ts":"12","/home/runner/work/featurevisor/featurevisor/packages/core/src/config/projectConfig.ts":"13","/home/runner/work/featurevisor/featurevisor/packages/core/src/datasource/adapter.ts":"14","/home/runner/work/featurevisor/featurevisor/packages/core/src/datasource/datasource.ts":"15","/home/runner/work/featurevisor/featurevisor/packages/core/src/datasource/filesystemAdapter.ts":"16","/home/runner/work/featurevisor/featurevisor/packages/core/src/datasource/index.ts":"17","/home/runner/work/featurevisor/featurevisor/packages/core/src/dependencies.ts":"18","/home/runner/work/featurevisor/featurevisor/packages/core/src/find-duplicate-segments/findDuplicateSegments.ts":"19","/home/runner/work/featurevisor/featurevisor/packages/core/src/find-duplicate-segments/index.ts":"20","/home/runner/work/featurevisor/featurevisor/packages/core/src/find-usage/index.ts":"21","/home/runner/work/featurevisor/featurevisor/packages/core/src/generate-code/index.ts":"22","/home/runner/work/featurevisor/featurevisor/packages/core/src/generate-code/typescript.ts":"23","/home/runner/work/featurevisor/featurevisor/packages/core/src/index.ts":"24","/home/runner/work/featurevisor/featurevisor/packages/core/src/init/index.ts":"25","/home/runner/work/featurevisor/featurevisor/packages/core/src/linter/attributeSchema.ts":"26","/home/runner/work/featurevisor/featurevisor/packages/core/src/linter/checkCircularDependency.ts":"27","/home/runner/work/featurevisor/featurevisor/packages/core/src/linter/checkPercentageExceedingSlot.ts":"28","/home/runner/work/featurevisor/featurevisor/packages/core/src/linter/conditionSchema.ts":"29","/home/runner/work/featurevisor/featurevisor/packages/core/src/linter/featureSchema.ts":"30","/home/runner/work/featurevisor/featurevisor/packages/core/src/linter/groupSchema.ts":"31","/home/runner/work/featurevisor/featurevisor/packages/core/src/linter/index.ts":"32","/home/runner/work/featurevisor/featurevisor/packages/core/src/linter/lintProject.ts":"33","/home/runner/work/featurevisor/featurevisor/packages/core/src/linter/printError.ts":"34","/home/runner/work/featurevisor/featurevisor/packages/core/src/linter/segmentSchema.ts":"35","/home/runner/work/featurevisor/featurevisor/packages/core/src/linter/testSchema.ts":"36","/home/runner/work/featurevisor/featurevisor/packages/core/src/restore/index.ts":"37","/home/runner/work/featurevisor/featurevisor/packages/core/src/site/exportSite.ts":"38","/home/runner/work/featurevisor/featurevisor/packages/core/src/site/generateHistory.ts":"39","/home/runner/work/featurevisor/featurevisor/packages/core/src/site/generateSiteSearchIndex.ts":"40","/home/runner/work/featurevisor/featurevisor/packages/core/src/site/getLastModifiedFromHistory.ts":"41","/home/runner/work/featurevisor/featurevisor/packages/core/src/site/getOwnerAndRepoFromUrl.ts":"42","/home/runner/work/featurevisor/featurevisor/packages/core/src/site/getRelativePaths.ts":"43","/home/runner/work/featurevisor/featurevisor/packages/core/src/site/getRepoDetails.ts":"44","/home/runner/work/featurevisor/featurevisor/packages/core/src/site/index.ts":"45","/home/runner/work/featurevisor/featurevisor/packages/core/src/site/serveSite.ts":"46","/home/runner/work/featurevisor/featurevisor/packages/core/src/tester/checkIfArraysAreEqual.ts":"47","/home/runner/work/featurevisor/featurevisor/packages/core/src/tester/checkIfObjectsAreEqual.spec.ts":"48","/home/runner/work/featurevisor/featurevisor/packages/core/src/tester/checkIfObjectsAreEqual.ts":"49","/home/runner/work/featurevisor/featurevisor/packages/core/src/tester/cliFormat.ts":"50","/home/runner/work/featurevisor/featurevisor/packages/core/src/tester/index.ts":"51","/home/runner/work/featurevisor/featurevisor/packages/core/src/tester/matrix.spec.ts":"52","/home/runner/work/featurevisor/featurevisor/packages/core/src/tester/matrix.ts":"53","/home/runner/work/featurevisor/featurevisor/packages/core/src/tester/prettyDuration.ts":"54","/home/runner/work/featurevisor/featurevisor/packages/core/src/tester/printTestResult.ts":"55","/home/runner/work/featurevisor/featurevisor/packages/core/src/tester/testFeature.ts":"56","/home/runner/work/featurevisor/featurevisor/packages/core/src/tester/testProject.ts":"57","/home/runner/work/featurevisor/featurevisor/packages/core/src/tester/testSegment.ts":"58","/home/runner/work/featurevisor/featurevisor/packages/core/src/utils/extractKeys.ts":"59","/home/runner/work/featurevisor/featurevisor/packages/core/src/utils/git.ts":"60","/home/runner/work/featurevisor/featurevisor/packages/core/src/utils/index.ts":"61"},{"size":3214,"mtime":1711489375467,"results":"62","hashOfConfig":"63"},{"size":1014,"mtime":1711489375467,"results":"64","hashOfConfig":"63"},{"size":10477,"mtime":1711489375467,"results":"65","hashOfConfig":"63"},{"size":2673,"mtime":1711489375467,"results":"66","hashOfConfig":"63"},{"size":1755,"mtime":1711489375467,"results":"67","hashOfConfig":"63"},{"size":65,"mtime":1711489375467,"results":"68","hashOfConfig":"63"},{"size":688,"mtime":1711489375467,"results":"69","hashOfConfig":"63"},{"size":760,"mtime":1711489375467,"results":"70","hashOfConfig":"63"},{"size":12889,"mtime":1711489375467,"results":"71","hashOfConfig":"63"},{"size":4894,"mtime":1711489375467,"results":"72","hashOfConfig":"63"},{"size":60,"mtime":1711489375467,"results":"73","hashOfConfig":"63"},{"size":1035,"mtime":1711489375467,"results":"74","hashOfConfig":"63"},{"size":3555,"mtime":1711489375467,"results":"75","hashOfConfig":"63"},{"size":1423,"mtime":1711489375467,"results":"76","hashOfConfig":"63"},{"size":5208,"mtime":1711489375467,"results":"77","hashOfConfig":"63"},{"size":10198,"mtime":1711489375467,"results":"78","hashOfConfig":"63"},{"size":94,"mtime":1711489375467,"results":"79","hashOfConfig":"63"},{"size":279,"mtime":1711489375467,"results":"80","hashOfConfig":"63"},{"size":1033,"mtime":1711489375467,"results":"81","hashOfConfig":"63"},{"size":540,"mtime":1711489375467,"results":"82","hashOfConfig":"63"},{"size":7734,"mtime":1711489375467,"results":"83","hashOfConfig":"63"},{"size":1476,"mtime":1711489375467,"results":"84","hashOfConfig":"63"},{"size":6250,"mtime":1711489375467,"results":"85","hashOfConfig":"63"},{"size":348,"mtime":1711489375467,"results":"86","hashOfConfig":"63"},{"size":1308,"mtime":1711489375467,"results":"87","hashOfConfig":"63"},{"size":359,"mtime":1711489375467,"results":"88","hashOfConfig":"63"},{"size":1119,"mtime":1711489375467,"results":"89","hashOfConfig":"63"},{"size":1464,"mtime":1711489375467,"results":"90","hashOfConfig":"63"},{"size":4007,"mtime":1711489375467,"results":"91","hashOfConfig":"63"},{"size":7758,"mtime":1711489375467,"results":"92","hashOfConfig":"63"},{"size":1221,"mtime":1711489375467,"results":"93","hashOfConfig":"63"},{"size":31,"mtime":1711489375467,"results":"94","hashOfConfig":"63"},{"size":9986,"mtime":1711489375467,"results":"95","hashOfConfig":"63"},{"size":982,"mtime":1711489375467,"results":"96","hashOfConfig":"63"},{"size":364,"mtime":1711489375467,"results":"97","hashOfConfig":"63"},{"size":2432,"mtime":1711489375467,"results":"98","hashOfConfig":"63"},{"size":641,"mtime":1711489375467,"results":"99","hashOfConfig":"63"},{"size":1481,"mtime":1711489375467,"results":"100","hashOfConfig":"63"},{"size":1178,"mtime":1711489375467,"results":"101","hashOfConfig":"63"},{"size":6187,"mtime":1711489375467,"results":"102","hashOfConfig":"63"},{"size":516,"mtime":1711489375467,"results":"103","hashOfConfig":"63"},{"size":496,"mtime":1711489375467,"results":"104","hashOfConfig":"63"},{"size":607,"mtime":1711489375467,"results":"105","hashOfConfig":"63"},{"size":1560,"mtime":1711489375467,"results":"106","hashOfConfig":"63"},{"size":59,"mtime":1711489375467,"results":"107","hashOfConfig":"63"},{"size":1681,"mtime":1711489375467,"results":"108","hashOfConfig":"63"},{"size":298,"mtime":1711489375467,"results":"109","hashOfConfig":"63"},{"size":932,"mtime":1711489375467,"results":"110","hashOfConfig":"63"},{"size":468,"mtime":1711489375467,"results":"111","hashOfConfig":"63"},{"size":212,"mtime":1711489375467,"results":"112","hashOfConfig":"63"},{"size":62,"mtime":1711489375467,"results":"113","hashOfConfig":"63"},{"size":1188,"mtime":1711489375467,"results":"114","hashOfConfig":"63"},{"size":5021,"mtime":1711489375467,"results":"115","hashOfConfig":"63"},{"size":516,"mtime":1711489375467,"results":"116","hashOfConfig":"63"},{"size":1691,"mtime":1711489375467,"results":"117","hashOfConfig":"63"},{"size":6968,"mtime":1711489375467,"results":"118","hashOfConfig":"63"},{"size":5702,"mtime":1711489375467,"results":"119","hashOfConfig":"63"},{"size":2328,"mtime":1711489375467,"results":"120","hashOfConfig":"63"},{"size":1993,"mtime":1711489375467,"results":"121","hashOfConfig":"63"},{"size":3641,"mtime":1711489375467,"results":"122","hashOfConfig":"63"},{"size":54,"mtime":1711489375467,"results":"123","hashOfConfig":"63"},{"filePath":"124","messages":"125","suppressedMessages":"126","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"2syfed",{"filePath":"127","messages":"128","suppressedMessages":"129","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"130","messages":"131","suppressedMessages":"132","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"133","messages":"134","suppressedMessages":"135","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"136","messages":"137","suppressedMessages":"138","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"139","messages":"140","suppressedMessages":"141","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"142","messages":"143","suppressedMessages":"144","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"145","messages":"146","suppressedMessages":"147","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"148","messages":"149","suppressedMessages":"150","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"151","messages":"152","suppressedMessages":"153","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"154","messages":"155","suppressedMessages":"156","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"157","messages":"158","suppressedMessages":"159","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"160","messages":"161","suppressedMessages":"162","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"163","messages":"164","suppressedMessages":"165","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"166","messages":"167","suppressedMessages":"168","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"169","messages":"170","suppressedMessages":"171","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"172","messages":"173","suppressedMessages":"174","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"175","messages":"176","suppressedMessages":"177","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"178","messages":"179","suppressedMessages":"180","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"181","messages":"182","suppressedMessages":"183","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"184","messages":"185","suppressedMessages":"186","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"187","messages":"188","suppressedMessages":"189","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"190","messages":"191","suppressedMessages":"192","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"193","messages":"194","suppressedMessages":"195","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"196","messages":"197","suppressedMessages":"198","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"199","messages":"200","suppressedMessages":"201","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"202","messages":"203","suppressedMessages":"204","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"205","messages":"206","suppressedMessages":"207","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"208","messages":"209","suppressedMessages":"210","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"211","messages":"212","suppressedMessages":"213","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"214","messages":"215","suppressedMessages":"216","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"217","messages":"218","suppressedMessages":"219","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"220","messages":"221","suppressedMessages":"222","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"223","messages":"224","suppressedMessages":"225","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"226","messages":"227","suppressedMessages":"228","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"229","messages":"230","suppressedMessages":"231","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"232","messages":"233","suppressedMessages":"234","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"235","messages":"236","suppressedMessages":"237","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"238","messages":"239","suppressedMessages":"240","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"241","messages":"242","suppressedMessages":"243","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"244","messages":"245","suppressedMessages":"246","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"247","messages":"248","suppressedMessages":"249","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"250","messages":"251","suppressedMessages":"252","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"253","messages":"254","suppressedMessages":"255","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"256","messages":"257","suppressedMessages":"258","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"259","messages":"260","suppressedMessages":"261","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"262","messages":"263","suppressedMessages":"264","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"265","messages":"266","suppressedMessages":"267","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"268","messages":"269","suppressedMessages":"270","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"271","messages":"272","suppressedMessages":"273","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"274","messages":"275","suppressedMessages":"276","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"277","messages":"278","suppressedMessages":"279","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"280","messages":"281","suppressedMessages":"282","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"283","messages":"284","suppressedMessages":"285","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"286","messages":"287","suppressedMessages":"288","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"289","messages":"290","suppressedMessages":"291","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"292","messages":"293","suppressedMessages":"294","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"295","messages":"296","suppressedMessages":"297","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"298","messages":"299","suppressedMessages":"300","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"301","messages":"302","suppressedMessages":"303","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"304","messages":"305","suppressedMessages":"306","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"/home/runner/work/featurevisor/featurevisor/packages/core/src/builder/allocator.spec.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/builder/allocator.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/builder/buildDatafile.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/builder/buildProject.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/builder/getFeatureRanges.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/builder/index.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/builder/revision.spec.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/builder/revision.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/builder/traffic.spec.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/builder/traffic.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/config/index.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/config/parsers.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/config/projectConfig.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/datasource/adapter.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/datasource/datasource.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/datasource/filesystemAdapter.ts",[],["307","308"],"/home/runner/work/featurevisor/featurevisor/packages/core/src/datasource/index.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/dependencies.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/find-duplicate-segments/findDuplicateSegments.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/find-duplicate-segments/index.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/find-usage/index.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/generate-code/index.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/generate-code/typescript.ts",[],["309"],"/home/runner/work/featurevisor/featurevisor/packages/core/src/index.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/init/index.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/linter/attributeSchema.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/linter/checkCircularDependency.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/linter/checkPercentageExceedingSlot.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/linter/conditionSchema.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/linter/featureSchema.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/linter/groupSchema.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/linter/index.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/linter/lintProject.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/linter/printError.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/linter/segmentSchema.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/linter/testSchema.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/restore/index.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/site/exportSite.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/site/generateHistory.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/site/generateSiteSearchIndex.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/site/getLastModifiedFromHistory.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/site/getOwnerAndRepoFromUrl.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/site/getRelativePaths.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/site/getRepoDetails.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/site/index.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/site/serveSite.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/tester/checkIfArraysAreEqual.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/tester/checkIfObjectsAreEqual.spec.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/tester/checkIfObjectsAreEqual.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/tester/cliFormat.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/tester/index.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/tester/matrix.spec.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/tester/matrix.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/tester/prettyDuration.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/tester/printTestResult.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/tester/testFeature.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/tester/testProject.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/tester/testSegment.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/utils/extractKeys.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/utils/git.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/utils/index.ts",[],[],{"ruleId":"310","severity":2,"message":"311","line":22,"column":7,"nodeType":"312","messageId":"313","endLine":22,"endColumn":18,"suppressions":"314"},{"ruleId":"315","severity":2,"message":"316","line":22,"column":21,"nodeType":"317","messageId":"318","endLine":22,"endColumn":81,"fix":"319","suppressions":"320"},{"ruleId":"310","severity":2,"message":"321","line":51,"column":10,"nodeType":"312","messageId":"313","endLine":51,"endColumn":38,"suppressions":"322"},"@typescript-eslint/no-unused-vars","'commitRegex' is assigned a value but never used.","Identifier","unusedVar",["323"],"no-regex-spaces","Spaces are hard to count. Use {3}.","Literal","multipleSpaces",{"range":"324","text":"325"},["326"],"'getFeaturevisorTypeFromValue' is defined but never used.",["327"],{"kind":"328","justification":"329"},[515,518]," {3}",{"kind":"328","justification":"329"},{"kind":"328","justification":"329"},"directive",""]
1
+ [{"/home/runner/work/featurevisor/featurevisor/packages/core/src/builder/allocator.spec.ts":"1","/home/runner/work/featurevisor/featurevisor/packages/core/src/builder/allocator.ts":"2","/home/runner/work/featurevisor/featurevisor/packages/core/src/builder/buildDatafile.ts":"3","/home/runner/work/featurevisor/featurevisor/packages/core/src/builder/buildProject.ts":"4","/home/runner/work/featurevisor/featurevisor/packages/core/src/builder/getFeatureRanges.ts":"5","/home/runner/work/featurevisor/featurevisor/packages/core/src/builder/index.ts":"6","/home/runner/work/featurevisor/featurevisor/packages/core/src/builder/revision.spec.ts":"7","/home/runner/work/featurevisor/featurevisor/packages/core/src/builder/revision.ts":"8","/home/runner/work/featurevisor/featurevisor/packages/core/src/builder/traffic.spec.ts":"9","/home/runner/work/featurevisor/featurevisor/packages/core/src/builder/traffic.ts":"10","/home/runner/work/featurevisor/featurevisor/packages/core/src/config/index.ts":"11","/home/runner/work/featurevisor/featurevisor/packages/core/src/config/parsers.ts":"12","/home/runner/work/featurevisor/featurevisor/packages/core/src/config/projectConfig.ts":"13","/home/runner/work/featurevisor/featurevisor/packages/core/src/datasource/adapter.ts":"14","/home/runner/work/featurevisor/featurevisor/packages/core/src/datasource/datasource.ts":"15","/home/runner/work/featurevisor/featurevisor/packages/core/src/datasource/filesystemAdapter.ts":"16","/home/runner/work/featurevisor/featurevisor/packages/core/src/datasource/index.ts":"17","/home/runner/work/featurevisor/featurevisor/packages/core/src/dependencies.ts":"18","/home/runner/work/featurevisor/featurevisor/packages/core/src/find-duplicate-segments/findDuplicateSegments.ts":"19","/home/runner/work/featurevisor/featurevisor/packages/core/src/find-duplicate-segments/index.ts":"20","/home/runner/work/featurevisor/featurevisor/packages/core/src/find-usage/index.ts":"21","/home/runner/work/featurevisor/featurevisor/packages/core/src/generate-code/index.ts":"22","/home/runner/work/featurevisor/featurevisor/packages/core/src/generate-code/typescript.ts":"23","/home/runner/work/featurevisor/featurevisor/packages/core/src/index.ts":"24","/home/runner/work/featurevisor/featurevisor/packages/core/src/init/index.ts":"25","/home/runner/work/featurevisor/featurevisor/packages/core/src/linter/attributeSchema.ts":"26","/home/runner/work/featurevisor/featurevisor/packages/core/src/linter/checkCircularDependency.ts":"27","/home/runner/work/featurevisor/featurevisor/packages/core/src/linter/checkPercentageExceedingSlot.ts":"28","/home/runner/work/featurevisor/featurevisor/packages/core/src/linter/conditionSchema.ts":"29","/home/runner/work/featurevisor/featurevisor/packages/core/src/linter/featureSchema.ts":"30","/home/runner/work/featurevisor/featurevisor/packages/core/src/linter/groupSchema.ts":"31","/home/runner/work/featurevisor/featurevisor/packages/core/src/linter/index.ts":"32","/home/runner/work/featurevisor/featurevisor/packages/core/src/linter/lintProject.ts":"33","/home/runner/work/featurevisor/featurevisor/packages/core/src/linter/printError.ts":"34","/home/runner/work/featurevisor/featurevisor/packages/core/src/linter/segmentSchema.ts":"35","/home/runner/work/featurevisor/featurevisor/packages/core/src/linter/testSchema.ts":"36","/home/runner/work/featurevisor/featurevisor/packages/core/src/restore/index.ts":"37","/home/runner/work/featurevisor/featurevisor/packages/core/src/site/exportSite.ts":"38","/home/runner/work/featurevisor/featurevisor/packages/core/src/site/generateHistory.ts":"39","/home/runner/work/featurevisor/featurevisor/packages/core/src/site/generateSiteSearchIndex.ts":"40","/home/runner/work/featurevisor/featurevisor/packages/core/src/site/getLastModifiedFromHistory.ts":"41","/home/runner/work/featurevisor/featurevisor/packages/core/src/site/getOwnerAndRepoFromUrl.ts":"42","/home/runner/work/featurevisor/featurevisor/packages/core/src/site/getRelativePaths.ts":"43","/home/runner/work/featurevisor/featurevisor/packages/core/src/site/getRepoDetails.ts":"44","/home/runner/work/featurevisor/featurevisor/packages/core/src/site/index.ts":"45","/home/runner/work/featurevisor/featurevisor/packages/core/src/site/serveSite.ts":"46","/home/runner/work/featurevisor/featurevisor/packages/core/src/tester/checkIfArraysAreEqual.ts":"47","/home/runner/work/featurevisor/featurevisor/packages/core/src/tester/checkIfObjectsAreEqual.spec.ts":"48","/home/runner/work/featurevisor/featurevisor/packages/core/src/tester/checkIfObjectsAreEqual.ts":"49","/home/runner/work/featurevisor/featurevisor/packages/core/src/tester/cliFormat.ts":"50","/home/runner/work/featurevisor/featurevisor/packages/core/src/tester/index.ts":"51","/home/runner/work/featurevisor/featurevisor/packages/core/src/tester/matrix.spec.ts":"52","/home/runner/work/featurevisor/featurevisor/packages/core/src/tester/matrix.ts":"53","/home/runner/work/featurevisor/featurevisor/packages/core/src/tester/prettyDuration.ts":"54","/home/runner/work/featurevisor/featurevisor/packages/core/src/tester/printTestResult.ts":"55","/home/runner/work/featurevisor/featurevisor/packages/core/src/tester/testFeature.ts":"56","/home/runner/work/featurevisor/featurevisor/packages/core/src/tester/testProject.ts":"57","/home/runner/work/featurevisor/featurevisor/packages/core/src/tester/testSegment.ts":"58","/home/runner/work/featurevisor/featurevisor/packages/core/src/utils/extractKeys.ts":"59","/home/runner/work/featurevisor/featurevisor/packages/core/src/utils/git.ts":"60","/home/runner/work/featurevisor/featurevisor/packages/core/src/utils/index.ts":"61"},{"size":3214,"mtime":1711561830018,"results":"62","hashOfConfig":"63"},{"size":1014,"mtime":1711561830018,"results":"64","hashOfConfig":"63"},{"size":10477,"mtime":1711561830018,"results":"65","hashOfConfig":"63"},{"size":2673,"mtime":1711561830018,"results":"66","hashOfConfig":"63"},{"size":1755,"mtime":1711561830018,"results":"67","hashOfConfig":"63"},{"size":65,"mtime":1711561830018,"results":"68","hashOfConfig":"63"},{"size":688,"mtime":1711561830018,"results":"69","hashOfConfig":"63"},{"size":760,"mtime":1711561830018,"results":"70","hashOfConfig":"63"},{"size":12889,"mtime":1711561830018,"results":"71","hashOfConfig":"63"},{"size":4894,"mtime":1711561830018,"results":"72","hashOfConfig":"63"},{"size":60,"mtime":1711561830018,"results":"73","hashOfConfig":"63"},{"size":1035,"mtime":1711561830018,"results":"74","hashOfConfig":"63"},{"size":3555,"mtime":1711561830018,"results":"75","hashOfConfig":"63"},{"size":1423,"mtime":1711561830018,"results":"76","hashOfConfig":"63"},{"size":5208,"mtime":1711561830018,"results":"77","hashOfConfig":"63"},{"size":10198,"mtime":1711561830018,"results":"78","hashOfConfig":"63"},{"size":94,"mtime":1711561830018,"results":"79","hashOfConfig":"63"},{"size":279,"mtime":1711561830018,"results":"80","hashOfConfig":"63"},{"size":1033,"mtime":1711561830018,"results":"81","hashOfConfig":"63"},{"size":540,"mtime":1711561830018,"results":"82","hashOfConfig":"63"},{"size":9681,"mtime":1711561830018,"results":"83","hashOfConfig":"63"},{"size":1476,"mtime":1711561830018,"results":"84","hashOfConfig":"63"},{"size":6250,"mtime":1711561830018,"results":"85","hashOfConfig":"63"},{"size":348,"mtime":1711561830018,"results":"86","hashOfConfig":"63"},{"size":1308,"mtime":1711561830018,"results":"87","hashOfConfig":"63"},{"size":359,"mtime":1711561830018,"results":"88","hashOfConfig":"63"},{"size":1119,"mtime":1711561830018,"results":"89","hashOfConfig":"63"},{"size":1464,"mtime":1711561830022,"results":"90","hashOfConfig":"63"},{"size":4007,"mtime":1711561830022,"results":"91","hashOfConfig":"63"},{"size":7758,"mtime":1711561830022,"results":"92","hashOfConfig":"63"},{"size":1221,"mtime":1711561830022,"results":"93","hashOfConfig":"63"},{"size":31,"mtime":1711561830022,"results":"94","hashOfConfig":"63"},{"size":9986,"mtime":1711561830022,"results":"95","hashOfConfig":"63"},{"size":982,"mtime":1711561830022,"results":"96","hashOfConfig":"63"},{"size":364,"mtime":1711561830022,"results":"97","hashOfConfig":"63"},{"size":2432,"mtime":1711561830022,"results":"98","hashOfConfig":"63"},{"size":641,"mtime":1711561830022,"results":"99","hashOfConfig":"63"},{"size":1481,"mtime":1711561830022,"results":"100","hashOfConfig":"63"},{"size":1178,"mtime":1711561830022,"results":"101","hashOfConfig":"63"},{"size":6187,"mtime":1711561830022,"results":"102","hashOfConfig":"63"},{"size":516,"mtime":1711561830022,"results":"103","hashOfConfig":"63"},{"size":496,"mtime":1711561830022,"results":"104","hashOfConfig":"63"},{"size":607,"mtime":1711561830022,"results":"105","hashOfConfig":"63"},{"size":1560,"mtime":1711561830022,"results":"106","hashOfConfig":"63"},{"size":59,"mtime":1711561830022,"results":"107","hashOfConfig":"63"},{"size":1681,"mtime":1711561830022,"results":"108","hashOfConfig":"63"},{"size":298,"mtime":1711561830022,"results":"109","hashOfConfig":"63"},{"size":932,"mtime":1711561830022,"results":"110","hashOfConfig":"63"},{"size":468,"mtime":1711561830022,"results":"111","hashOfConfig":"63"},{"size":212,"mtime":1711561830022,"results":"112","hashOfConfig":"63"},{"size":62,"mtime":1711561830022,"results":"113","hashOfConfig":"63"},{"size":1188,"mtime":1711561830022,"results":"114","hashOfConfig":"63"},{"size":5021,"mtime":1711561830022,"results":"115","hashOfConfig":"63"},{"size":516,"mtime":1711561830022,"results":"116","hashOfConfig":"63"},{"size":1691,"mtime":1711561830022,"results":"117","hashOfConfig":"63"},{"size":6968,"mtime":1711561830022,"results":"118","hashOfConfig":"63"},{"size":5702,"mtime":1711561830022,"results":"119","hashOfConfig":"63"},{"size":2328,"mtime":1711561830022,"results":"120","hashOfConfig":"63"},{"size":1993,"mtime":1711561830022,"results":"121","hashOfConfig":"63"},{"size":3641,"mtime":1711561830022,"results":"122","hashOfConfig":"63"},{"size":54,"mtime":1711561830022,"results":"123","hashOfConfig":"63"},{"filePath":"124","messages":"125","suppressedMessages":"126","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"2syfed",{"filePath":"127","messages":"128","suppressedMessages":"129","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"130","messages":"131","suppressedMessages":"132","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"133","messages":"134","suppressedMessages":"135","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"136","messages":"137","suppressedMessages":"138","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"139","messages":"140","suppressedMessages":"141","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"142","messages":"143","suppressedMessages":"144","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"145","messages":"146","suppressedMessages":"147","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"148","messages":"149","suppressedMessages":"150","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"151","messages":"152","suppressedMessages":"153","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"154","messages":"155","suppressedMessages":"156","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"157","messages":"158","suppressedMessages":"159","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"160","messages":"161","suppressedMessages":"162","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"163","messages":"164","suppressedMessages":"165","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"166","messages":"167","suppressedMessages":"168","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"169","messages":"170","suppressedMessages":"171","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"172","messages":"173","suppressedMessages":"174","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"175","messages":"176","suppressedMessages":"177","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"178","messages":"179","suppressedMessages":"180","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"181","messages":"182","suppressedMessages":"183","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"184","messages":"185","suppressedMessages":"186","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"187","messages":"188","suppressedMessages":"189","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"190","messages":"191","suppressedMessages":"192","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"193","messages":"194","suppressedMessages":"195","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"196","messages":"197","suppressedMessages":"198","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"199","messages":"200","suppressedMessages":"201","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"202","messages":"203","suppressedMessages":"204","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"205","messages":"206","suppressedMessages":"207","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"208","messages":"209","suppressedMessages":"210","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"211","messages":"212","suppressedMessages":"213","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"214","messages":"215","suppressedMessages":"216","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"217","messages":"218","suppressedMessages":"219","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"220","messages":"221","suppressedMessages":"222","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"223","messages":"224","suppressedMessages":"225","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"226","messages":"227","suppressedMessages":"228","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"229","messages":"230","suppressedMessages":"231","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"232","messages":"233","suppressedMessages":"234","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"235","messages":"236","suppressedMessages":"237","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"238","messages":"239","suppressedMessages":"240","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"241","messages":"242","suppressedMessages":"243","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"244","messages":"245","suppressedMessages":"246","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"247","messages":"248","suppressedMessages":"249","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"250","messages":"251","suppressedMessages":"252","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"253","messages":"254","suppressedMessages":"255","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"256","messages":"257","suppressedMessages":"258","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"259","messages":"260","suppressedMessages":"261","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"262","messages":"263","suppressedMessages":"264","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"265","messages":"266","suppressedMessages":"267","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"268","messages":"269","suppressedMessages":"270","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"271","messages":"272","suppressedMessages":"273","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"274","messages":"275","suppressedMessages":"276","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"277","messages":"278","suppressedMessages":"279","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"280","messages":"281","suppressedMessages":"282","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"283","messages":"284","suppressedMessages":"285","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"286","messages":"287","suppressedMessages":"288","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"289","messages":"290","suppressedMessages":"291","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"292","messages":"293","suppressedMessages":"294","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"295","messages":"296","suppressedMessages":"297","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"298","messages":"299","suppressedMessages":"300","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"301","messages":"302","suppressedMessages":"303","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"304","messages":"305","suppressedMessages":"306","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"/home/runner/work/featurevisor/featurevisor/packages/core/src/builder/allocator.spec.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/builder/allocator.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/builder/buildDatafile.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/builder/buildProject.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/builder/getFeatureRanges.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/builder/index.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/builder/revision.spec.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/builder/revision.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/builder/traffic.spec.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/builder/traffic.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/config/index.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/config/parsers.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/config/projectConfig.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/datasource/adapter.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/datasource/datasource.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/datasource/filesystemAdapter.ts",[],["307","308"],"/home/runner/work/featurevisor/featurevisor/packages/core/src/datasource/index.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/dependencies.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/find-duplicate-segments/findDuplicateSegments.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/find-duplicate-segments/index.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/find-usage/index.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/generate-code/index.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/generate-code/typescript.ts",[],["309"],"/home/runner/work/featurevisor/featurevisor/packages/core/src/index.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/init/index.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/linter/attributeSchema.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/linter/checkCircularDependency.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/linter/checkPercentageExceedingSlot.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/linter/conditionSchema.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/linter/featureSchema.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/linter/groupSchema.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/linter/index.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/linter/lintProject.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/linter/printError.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/linter/segmentSchema.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/linter/testSchema.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/restore/index.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/site/exportSite.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/site/generateHistory.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/site/generateSiteSearchIndex.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/site/getLastModifiedFromHistory.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/site/getOwnerAndRepoFromUrl.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/site/getRelativePaths.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/site/getRepoDetails.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/site/index.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/site/serveSite.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/tester/checkIfArraysAreEqual.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/tester/checkIfObjectsAreEqual.spec.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/tester/checkIfObjectsAreEqual.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/tester/cliFormat.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/tester/index.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/tester/matrix.spec.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/tester/matrix.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/tester/prettyDuration.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/tester/printTestResult.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/tester/testFeature.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/tester/testProject.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/tester/testSegment.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/utils/extractKeys.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/utils/git.ts",[],[],"/home/runner/work/featurevisor/featurevisor/packages/core/src/utils/index.ts",[],[],{"ruleId":"310","severity":2,"message":"311","line":22,"column":7,"nodeType":"312","messageId":"313","endLine":22,"endColumn":18,"suppressions":"314"},{"ruleId":"315","severity":2,"message":"316","line":22,"column":21,"nodeType":"317","messageId":"318","endLine":22,"endColumn":81,"fix":"319","suppressions":"320"},{"ruleId":"310","severity":2,"message":"321","line":51,"column":10,"nodeType":"312","messageId":"313","endLine":51,"endColumn":38,"suppressions":"322"},"@typescript-eslint/no-unused-vars","'commitRegex' is assigned a value but never used.","Identifier","unusedVar",["323"],"no-regex-spaces","Spaces are hard to count. Use {3}.","Literal","multipleSpaces",{"range":"324","text":"325"},["326"],"'getFeaturevisorTypeFromValue' is defined but never used.",["327"],{"kind":"328","justification":"329"},[515,518]," {3}",{"kind":"328","justification":"329"},{"kind":"328","justification":"329"},"directive",""]
package/CHANGELOG.md CHANGED
@@ -3,6 +3,17 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [1.13.1](https://github.com/featurevisor/featurevisor/compare/v1.13.0...v1.13.1) (2024-03-27)
7
+
8
+
9
+ ### Bug Fixes
10
+
11
+ * internal improvements for finding usage ([#290](https://github.com/featurevisor/featurevisor/issues/290)) ([070d7ec](https://github.com/featurevisor/featurevisor/commit/070d7eced9c20cbfdd4839345234dbafda39c1e3))
12
+
13
+
14
+
15
+
16
+
6
17
  # [1.13.0](https://github.com/featurevisor/featurevisor/compare/v1.12.0...v1.13.0) (2024-03-26)
7
18
 
8
19
 
@@ -1,6 +1,6 @@
1
1
  <?xml version="1.0" encoding="UTF-8"?>
2
- <coverage generated="1711489511257" clover="3.2.0">
3
- <project timestamp="1711489511257" name="All files">
2
+ <coverage generated="1711561969668" clover="3.2.0">
3
+ <project timestamp="1711561969668" name="All files">
4
4
  <metrics statements="377" coveredstatements="256" conditionals="190" coveredconditionals="119" methods="54" coveredmethods="37" elements="621" coveredelements="412" complexity="0" loc="377" ncloc="377" packages="4" files="10" classes="10"/>
5
5
  <package name="lib.builder">
6
6
  <metrics statements="104" coveredstatements="98" conditionals="58" coveredconditionals="48" methods="15" coveredmethods="15"/>
@@ -146,7 +146,7 @@
146
146
  <div class='footer quiet pad2 space-top1 center small'>
147
147
  Code coverage generated by
148
148
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
149
- at 2024-03-26T21:45:11.209Z
149
+ at 2024-03-27T17:52:49.611Z
150
150
  </div>
151
151
  <script src="prettify.js"></script>
152
152
  <script>
@@ -175,7 +175,7 @@ exports.getUpdatedAvailableRangesAfterFilling = getUpdatedAvailableRangesAfterFi
175
175
  <div class='footer quiet pad2 space-top1 center small'>
176
176
  Code coverage generated by
177
177
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
178
- at 2024-03-26T21:45:11.209Z
178
+ at 2024-03-27T17:52:49.611Z
179
179
  </div>
180
180
  <script src="../../prettify.js"></script>
181
181
  <script>
@@ -131,7 +131,7 @@
131
131
  <div class='footer quiet pad2 space-top1 center small'>
132
132
  Code coverage generated by
133
133
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
134
- at 2024-03-26T21:45:11.209Z
134
+ at 2024-03-27T17:52:49.611Z
135
135
  </div>
136
136
  <script src="../../prettify.js"></script>
137
137
  <script>
@@ -136,7 +136,7 @@ exports.getNextRevision = getNextRevision;
136
136
  <div class='footer quiet pad2 space-top1 center small'>
137
137
  Code coverage generated by
138
138
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
139
- at 2024-03-26T21:45:11.209Z
139
+ at 2024-03-27T17:52:49.611Z
140
140
  </div>
141
141
  <script src="../../prettify.js"></script>
142
142
  <script>
@@ -454,7 +454,7 @@ exports.getTraffic = getTraffic;
454
454
  <div class='footer quiet pad2 space-top1 center small'>
455
455
  Code coverage generated by
456
456
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
457
- at 2024-03-26T21:45:11.209Z
457
+ at 2024-03-27T17:52:49.611Z
458
458
  </div>
459
459
  <script src="../../prettify.js"></script>
460
460
  <script>
@@ -139,7 +139,7 @@ exports.checkIfObjectsAreEqual = checkIfObjectsAreEqual;
139
139
  <div class='footer quiet pad2 space-top1 center small'>
140
140
  Code coverage generated by
141
141
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
142
- at 2024-03-26T21:45:11.209Z
142
+ at 2024-03-27T17:52:49.611Z
143
143
  </div>
144
144
  <script src="../../prettify.js"></script>
145
145
  <script>
@@ -116,7 +116,7 @@
116
116
  <div class='footer quiet pad2 space-top1 center small'>
117
117
  Code coverage generated by
118
118
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
119
- at 2024-03-26T21:45:11.209Z
119
+ at 2024-03-27T17:52:49.611Z
120
120
  </div>
121
121
  <script src="../../prettify.js"></script>
122
122
  <script>
@@ -472,7 +472,7 @@ exports.getSegmentAssertionsFromMatrix = getSegmentAssertionsFromMatrix;
472
472
  <div class='footer quiet pad2 space-top1 center small'>
473
473
  Code coverage generated by
474
474
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
475
- at 2024-03-26T21:45:11.209Z
475
+ at 2024-03-27T17:52:49.611Z
476
476
  </div>
477
477
  <script src="../../prettify.js"></script>
478
478
  <script>
@@ -193,7 +193,7 @@ export function getUpdatedAvailableRangesAfterFilling(
193
193
  <div class='footer quiet pad2 space-top1 center small'>
194
194
  Code coverage generated by
195
195
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
196
- at 2024-03-26T21:45:11.209Z
196
+ at 2024-03-27T17:52:49.611Z
197
197
  </div>
198
198
  <script src="../../prettify.js"></script>
199
199
  <script>
@@ -131,7 +131,7 @@
131
131
  <div class='footer quiet pad2 space-top1 center small'>
132
132
  Code coverage generated by
133
133
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
134
- at 2024-03-26T21:45:11.209Z
134
+ at 2024-03-27T17:52:49.611Z
135
135
  </div>
136
136
  <script src="../../prettify.js"></script>
137
137
  <script>
@@ -136,7 +136,7 @@
136
136
  <div class='footer quiet pad2 space-top1 center small'>
137
137
  Code coverage generated by
138
138
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
139
- at 2024-03-26T21:45:11.209Z
139
+ at 2024-03-27T17:52:49.611Z
140
140
  </div>
141
141
  <script src="../../prettify.js"></script>
142
142
  <script>
@@ -565,7 +565,7 @@ export function getTraffic(
565
565
  <div class='footer quiet pad2 space-top1 center small'>
566
566
  Code coverage generated by
567
567
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
568
- at 2024-03-26T21:45:11.209Z
568
+ at 2024-03-27T17:52:49.611Z
569
569
  </div>
570
570
  <script src="../../prettify.js"></script>
571
571
  <script>
@@ -142,7 +142,7 @@
142
142
  <div class='footer quiet pad2 space-top1 center small'>
143
143
  Code coverage generated by
144
144
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
145
- at 2024-03-26T21:45:11.209Z
145
+ at 2024-03-27T17:52:49.611Z
146
146
  </div>
147
147
  <script src="../../prettify.js"></script>
148
148
  <script>
@@ -116,7 +116,7 @@
116
116
  <div class='footer quiet pad2 space-top1 center small'>
117
117
  Code coverage generated by
118
118
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
119
- at 2024-03-26T21:45:11.209Z
119
+ at 2024-03-27T17:52:49.611Z
120
120
  </div>
121
121
  <script src="../../prettify.js"></script>
122
122
  <script>
@@ -625,7 +625,7 @@ export function <span class="fstat-no" title="function not covered" >getSegmentA
625
625
  <div class='footer quiet pad2 space-top1 center small'>
626
626
  Code coverage generated by
627
627
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
628
- at 2024-03-26T21:45:11.209Z
628
+ at 2024-03-27T17:52:49.611Z
629
629
  </div>
630
630
  <script src="../../prettify.js"></script>
631
631
  <script>
@@ -1,5 +1,19 @@
1
1
  import { FeatureKey, SegmentKey, AttributeKey } from "@featurevisor/types";
2
2
  import { Dependencies } from "../dependencies";
3
+ export interface UsageInFeatures {
4
+ [featureKey: string]: {
5
+ features: Set<FeatureKey>;
6
+ segments: Set<SegmentKey>;
7
+ attributes: Set<AttributeKey>;
8
+ };
9
+ }
10
+ export declare function findAllUsageInFeatures(deps: Dependencies): Promise<UsageInFeatures>;
11
+ export interface UsageInSegments {
12
+ [segmentKey: string]: {
13
+ attributes: Set<AttributeKey>;
14
+ };
15
+ }
16
+ export declare function findAllUsageInSegments(deps: Dependencies): Promise<UsageInSegments>;
3
17
  export declare function findSegmentUsage(deps: Dependencies, segmentKey: SegmentKey): Promise<Set<FeatureKey>>;
4
18
  export interface AttributeUsage {
5
19
  features: Set<FeatureKey>;
@@ -36,27 +36,54 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
36
36
  }
37
37
  };
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.findUsageInProject = exports.findUnusedAttributes = exports.findUnusedSegments = exports.findAttributeUsage = exports.findSegmentUsage = void 0;
39
+ exports.findUsageInProject = exports.findUnusedAttributes = exports.findUnusedSegments = exports.findAttributeUsage = exports.findSegmentUsage = exports.findAllUsageInSegments = exports.findAllUsageInFeatures = void 0;
40
40
  var extractKeys_1 = require("../utils/extractKeys");
41
- function findSegmentUsage(deps, segmentKey) {
41
+ function findAllUsageInFeatures(deps) {
42
42
  return __awaiter(this, void 0, void 0, function () {
43
- var datasource, projectConfig, featureKeys, usedInFeatures, _loop_1, _i, featureKeys_1, featureKey;
43
+ var datasource, projectConfig, usageInFeatures, featureKeys, _loop_1, _i, featureKeys_1, featureKey;
44
44
  return __generator(this, function (_a) {
45
45
  switch (_a.label) {
46
46
  case 0:
47
47
  datasource = deps.datasource, projectConfig = deps.projectConfig;
48
+ usageInFeatures = {};
48
49
  return [4 /*yield*/, datasource.listFeatures()];
49
50
  case 1:
50
51
  featureKeys = _a.sent();
51
- usedInFeatures = new Set();
52
52
  _loop_1 = function (featureKey) {
53
- var feature, segmentKeys;
53
+ var feature;
54
54
  return __generator(this, function (_b) {
55
55
  switch (_b.label) {
56
56
  case 0: return [4 /*yield*/, datasource.readFeature(featureKey)];
57
57
  case 1:
58
58
  feature = _b.sent();
59
- segmentKeys = new Set();
59
+ usageInFeatures[featureKey] = {
60
+ features: new Set(),
61
+ segments: new Set(),
62
+ attributes: new Set(),
63
+ };
64
+ // required
65
+ if (feature.required) {
66
+ feature.required.forEach(function (required) {
67
+ if (typeof required === "string") {
68
+ usageInFeatures[featureKey].features.add(required);
69
+ }
70
+ else if (typeof required === "object" && required.key) {
71
+ usageInFeatures[featureKey].features.add(required.key);
72
+ }
73
+ });
74
+ }
75
+ // bucketBy
76
+ if (feature.bucketBy) {
77
+ if (typeof feature.bucketBy === "string") {
78
+ usageInFeatures[featureKey].attributes.add(feature.bucketBy);
79
+ }
80
+ else if (Array.isArray(feature.bucketBy)) {
81
+ feature.bucketBy.forEach(function (b) { return usageInFeatures[featureKey].attributes.add(b); });
82
+ }
83
+ else if (typeof feature.bucketBy === "object" && feature.bucketBy.or) {
84
+ feature.bucketBy.or.forEach(function (b) { return usageInFeatures[featureKey].attributes.add(b); });
85
+ }
86
+ }
60
87
  // variable overrides inside variations
61
88
  projectConfig.environments.forEach(function (environment) {
62
89
  var _a, _b;
@@ -68,9 +95,12 @@ function findSegmentUsage(deps, segmentKey) {
68
95
  variable.overrides.forEach(function (override) {
69
96
  if (override.segments) {
70
97
  (0, extractKeys_1.extractSegmentKeysFromGroupSegments)(override.segments).forEach(function (segmentKey) {
71
- return segmentKeys.add(segmentKey);
98
+ return usageInFeatures[featureKey].segments.add(segmentKey);
72
99
  });
73
100
  }
101
+ if (override.conditions) {
102
+ (0, extractKeys_1.extractAttributeKeysFromConditions)(override.conditions).forEach(function (attributeKey) { return usageInFeatures[featureKey].attributes.add(attributeKey); });
103
+ }
74
104
  });
75
105
  }
76
106
  });
@@ -82,7 +112,12 @@ function findSegmentUsage(deps, segmentKey) {
82
112
  (_a = feature.environments[environment].force) === null || _a === void 0 ? void 0 : _a.forEach(function (force) {
83
113
  if (force.segments) {
84
114
  (0, extractKeys_1.extractSegmentKeysFromGroupSegments)(force.segments).forEach(function (segmentKey) {
85
- return segmentKeys.add(segmentKey);
115
+ return usageInFeatures[featureKey].segments.add(segmentKey);
116
+ });
117
+ }
118
+ if (force.conditions) {
119
+ (0, extractKeys_1.extractAttributeKeysFromConditions)(force.conditions).forEach(function (attributeKey) {
120
+ return usageInFeatures[featureKey].attributes.add(attributeKey);
86
121
  });
87
122
  }
88
123
  });
@@ -91,14 +126,11 @@ function findSegmentUsage(deps, segmentKey) {
91
126
  if (feature.environments[environment].rules) {
92
127
  (_b = feature.environments[environment].rules) === null || _b === void 0 ? void 0 : _b.forEach(function (rule) {
93
128
  (0, extractKeys_1.extractSegmentKeysFromGroupSegments)(rule.segments).forEach(function (segmentKey) {
94
- return segmentKeys.add(segmentKey);
129
+ return usageInFeatures[featureKey].segments.add(segmentKey);
95
130
  });
96
131
  });
97
132
  }
98
133
  });
99
- if (segmentKeys.has(segmentKey)) {
100
- usedInFeatures.add(featureKey);
101
- }
102
134
  return [2 /*return*/];
103
135
  }
104
136
  });
@@ -115,116 +147,106 @@ function findSegmentUsage(deps, segmentKey) {
115
147
  case 4:
116
148
  _i++;
117
149
  return [3 /*break*/, 2];
118
- case 5: return [2 /*return*/, usedInFeatures];
150
+ case 5: return [2 /*return*/, usageInFeatures];
119
151
  }
120
152
  });
121
153
  });
122
154
  }
123
- exports.findSegmentUsage = findSegmentUsage;
124
- function findAttributeUsage(deps, attributeKey) {
155
+ exports.findAllUsageInFeatures = findAllUsageInFeatures;
156
+ function findAllUsageInSegments(deps) {
125
157
  return __awaiter(this, void 0, void 0, function () {
126
- var datasource, projectConfig, usedIn, featureKeys, _loop_2, _i, featureKeys_2, featureKey, segmentKeys, _loop_3, _a, segmentKeys_1, segmentKey;
127
- return __generator(this, function (_b) {
128
- switch (_b.label) {
158
+ var datasource, usageInSegments, segmentKeys, _loop_2, _i, segmentKeys_1, segmentKey;
159
+ return __generator(this, function (_a) {
160
+ switch (_a.label) {
129
161
  case 0:
130
- datasource = deps.datasource, projectConfig = deps.projectConfig;
131
- usedIn = {
132
- features: new Set(),
133
- segments: new Set(),
134
- };
135
- return [4 /*yield*/, datasource.listFeatures()];
162
+ datasource = deps.datasource;
163
+ usageInSegments = {};
164
+ return [4 /*yield*/, datasource.listSegments()];
136
165
  case 1:
137
- featureKeys = _b.sent();
138
- _loop_2 = function (featureKey) {
139
- var feature, attributeKeys;
140
- return __generator(this, function (_c) {
141
- switch (_c.label) {
142
- case 0: return [4 /*yield*/, datasource.readFeature(featureKey)];
166
+ segmentKeys = _a.sent();
167
+ _loop_2 = function (segmentKey) {
168
+ var segment;
169
+ return __generator(this, function (_b) {
170
+ switch (_b.label) {
171
+ case 0: return [4 /*yield*/, datasource.readSegment(segmentKey)];
143
172
  case 1:
144
- feature = _c.sent();
145
- attributeKeys = new Set();
146
- // variable overrides inside variations
147
- projectConfig.environments.forEach(function (environment) {
148
- var _a;
149
- if (feature.variations) {
150
- feature.variations.forEach(function (variation) {
151
- if (variation.variables) {
152
- variation.variables.forEach(function (variable) {
153
- if (variable.overrides) {
154
- variable.overrides.forEach(function (override) {
155
- if (override.conditions) {
156
- (0, extractKeys_1.extractAttributeKeysFromConditions)(override.conditions).forEach(function (attributeKey) { return attributeKeys.add(attributeKey); });
157
- }
158
- });
159
- }
160
- });
161
- }
162
- });
163
- }
164
- // force
165
- if (feature.environments[environment].force) {
166
- (_a = feature.environments[environment].force) === null || _a === void 0 ? void 0 : _a.forEach(function (force) {
167
- if (force.conditions) {
168
- (0, extractKeys_1.extractAttributeKeysFromConditions)(force.conditions).forEach(function (attributeKey) {
169
- return attributeKeys.add(attributeKey);
170
- });
171
- }
172
- });
173
- }
173
+ segment = _b.sent();
174
+ usageInSegments[segmentKey] = {
175
+ attributes: new Set(),
176
+ };
177
+ (0, extractKeys_1.extractAttributeKeysFromConditions)(segment.conditions).forEach(function (attributeKey) {
178
+ usageInSegments[segmentKey].attributes.add(attributeKey);
174
179
  });
175
- if (attributeKeys.has(attributeKey)) {
176
- usedIn.features.add(featureKey);
177
- }
178
180
  return [2 /*return*/];
179
181
  }
180
182
  });
181
183
  };
182
- _i = 0, featureKeys_2 = featureKeys;
183
- _b.label = 2;
184
+ _i = 0, segmentKeys_1 = segmentKeys;
185
+ _a.label = 2;
184
186
  case 2:
185
- if (!(_i < featureKeys_2.length)) return [3 /*break*/, 5];
186
- featureKey = featureKeys_2[_i];
187
- return [5 /*yield**/, _loop_2(featureKey)];
187
+ if (!(_i < segmentKeys_1.length)) return [3 /*break*/, 5];
188
+ segmentKey = segmentKeys_1[_i];
189
+ return [5 /*yield**/, _loop_2(segmentKey)];
188
190
  case 3:
189
- _b.sent();
190
- _b.label = 4;
191
+ _a.sent();
192
+ _a.label = 4;
191
193
  case 4:
192
194
  _i++;
193
195
  return [3 /*break*/, 2];
194
- case 5: return [4 /*yield*/, datasource.listSegments()];
195
- case 6:
196
- segmentKeys = _b.sent();
197
- _loop_3 = function (segmentKey) {
198
- var segment, attributeKeys;
199
- return __generator(this, function (_d) {
200
- switch (_d.label) {
201
- case 0: return [4 /*yield*/, datasource.readSegment(segmentKey)];
202
- case 1:
203
- segment = _d.sent();
204
- attributeKeys = new Set();
205
- (0, extractKeys_1.extractAttributeKeysFromConditions)(segment.conditions).forEach(function (attributeKey) {
206
- attributeKeys.add(attributeKey);
207
- });
208
- if (attributeKeys.has(attributeKey)) {
209
- usedIn.segments.add(segmentKey);
210
- }
211
- return [2 /*return*/];
212
- }
213
- });
196
+ case 5: return [2 /*return*/, usageInSegments];
197
+ }
198
+ });
199
+ });
200
+ }
201
+ exports.findAllUsageInSegments = findAllUsageInSegments;
202
+ function findSegmentUsage(deps, segmentKey) {
203
+ return __awaiter(this, void 0, void 0, function () {
204
+ var usedInFeatures, usageInFeatures, featureKey;
205
+ return __generator(this, function (_a) {
206
+ switch (_a.label) {
207
+ case 0:
208
+ usedInFeatures = new Set();
209
+ return [4 /*yield*/, findAllUsageInFeatures(deps)];
210
+ case 1:
211
+ usageInFeatures = _a.sent();
212
+ for (featureKey in usageInFeatures) {
213
+ if (usageInFeatures[featureKey].segments.has(segmentKey)) {
214
+ usedInFeatures.add(featureKey);
215
+ }
216
+ }
217
+ return [2 /*return*/, usedInFeatures];
218
+ }
219
+ });
220
+ });
221
+ }
222
+ exports.findSegmentUsage = findSegmentUsage;
223
+ function findAttributeUsage(deps, attributeKey) {
224
+ return __awaiter(this, void 0, void 0, function () {
225
+ var usedIn, usageInFeatures, usageInSegments, featureKey, segmentKey;
226
+ return __generator(this, function (_a) {
227
+ switch (_a.label) {
228
+ case 0:
229
+ usedIn = {
230
+ features: new Set(),
231
+ segments: new Set(),
214
232
  };
215
- _a = 0, segmentKeys_1 = segmentKeys;
216
- _b.label = 7;
217
- case 7:
218
- if (!(_a < segmentKeys_1.length)) return [3 /*break*/, 10];
219
- segmentKey = segmentKeys_1[_a];
220
- return [5 /*yield**/, _loop_3(segmentKey)];
221
- case 8:
222
- _b.sent();
223
- _b.label = 9;
224
- case 9:
225
- _a++;
226
- return [3 /*break*/, 7];
227
- case 10: return [2 /*return*/, usedIn];
233
+ return [4 /*yield*/, findAllUsageInFeatures(deps)];
234
+ case 1:
235
+ usageInFeatures = _a.sent();
236
+ return [4 /*yield*/, findAllUsageInSegments(deps)];
237
+ case 2:
238
+ usageInSegments = _a.sent();
239
+ for (featureKey in usageInFeatures) {
240
+ if (usageInFeatures[featureKey].attributes.has(attributeKey)) {
241
+ usedIn.features.add(featureKey);
242
+ }
243
+ }
244
+ for (segmentKey in usageInSegments) {
245
+ if (usageInSegments[segmentKey].attributes.has(attributeKey)) {
246
+ usedIn.segments.add(segmentKey);
247
+ }
248
+ }
249
+ return [2 /*return*/, usedIn];
228
250
  }
229
251
  });
230
252
  });
@@ -232,31 +254,30 @@ function findAttributeUsage(deps, attributeKey) {
232
254
  exports.findAttributeUsage = findAttributeUsage;
233
255
  function findUnusedSegments(deps) {
234
256
  return __awaiter(this, void 0, void 0, function () {
235
- var datasource, segmentKeys, unusedSegments, _i, segmentKeys_2, segmentKey, usedInFeatures;
257
+ var datasource, unusedSegments, allSegmentKeys, usageInFeatures, usedSegmentKeys, featureKey;
236
258
  return __generator(this, function (_a) {
237
259
  switch (_a.label) {
238
260
  case 0:
239
261
  datasource = deps.datasource;
262
+ unusedSegments = new Set();
240
263
  return [4 /*yield*/, datasource.listSegments()];
241
264
  case 1:
242
- segmentKeys = _a.sent();
243
- unusedSegments = new Set();
244
- _i = 0, segmentKeys_2 = segmentKeys;
245
- _a.label = 2;
265
+ allSegmentKeys = _a.sent();
266
+ return [4 /*yield*/, findAllUsageInFeatures(deps)];
246
267
  case 2:
247
- if (!(_i < segmentKeys_2.length)) return [3 /*break*/, 5];
248
- segmentKey = segmentKeys_2[_i];
249
- return [4 /*yield*/, findSegmentUsage(deps, segmentKey)];
250
- case 3:
251
- usedInFeatures = _a.sent();
252
- if (usedInFeatures.size === 0) {
253
- unusedSegments.add(segmentKey);
268
+ usageInFeatures = _a.sent();
269
+ usedSegmentKeys = new Set();
270
+ for (featureKey in usageInFeatures) {
271
+ usageInFeatures[featureKey].segments.forEach(function (segmentKey) {
272
+ usedSegmentKeys.add(segmentKey);
273
+ });
254
274
  }
255
- _a.label = 4;
256
- case 4:
257
- _i++;
258
- return [3 /*break*/, 2];
259
- case 5: return [2 /*return*/, unusedSegments];
275
+ allSegmentKeys.forEach(function (segmentKey) {
276
+ if (!usedSegmentKeys.has(segmentKey)) {
277
+ unusedSegments.add(segmentKey);
278
+ }
279
+ });
280
+ return [2 /*return*/, unusedSegments];
260
281
  }
261
282
  });
262
283
  });
@@ -264,31 +285,38 @@ function findUnusedSegments(deps) {
264
285
  exports.findUnusedSegments = findUnusedSegments;
265
286
  function findUnusedAttributes(deps) {
266
287
  return __awaiter(this, void 0, void 0, function () {
267
- var datasource, attributeKeys, unusedAttributes, _i, attributeKeys_1, attributeKey, usedIn;
288
+ var datasource, unusedAttributes, allAttributeKeys, usageInFeatures, usageInSegments, usedAttributeKeys, featureKey, segmentKey;
268
289
  return __generator(this, function (_a) {
269
290
  switch (_a.label) {
270
291
  case 0:
271
292
  datasource = deps.datasource;
293
+ unusedAttributes = new Set();
272
294
  return [4 /*yield*/, datasource.listAttributes()];
273
295
  case 1:
274
- attributeKeys = _a.sent();
275
- unusedAttributes = new Set();
276
- _i = 0, attributeKeys_1 = attributeKeys;
277
- _a.label = 2;
296
+ allAttributeKeys = _a.sent();
297
+ return [4 /*yield*/, findAllUsageInFeatures(deps)];
278
298
  case 2:
279
- if (!(_i < attributeKeys_1.length)) return [3 /*break*/, 5];
280
- attributeKey = attributeKeys_1[_i];
281
- return [4 /*yield*/, findAttributeUsage(deps, attributeKey)];
299
+ usageInFeatures = _a.sent();
300
+ return [4 /*yield*/, findAllUsageInSegments(deps)];
282
301
  case 3:
283
- usedIn = _a.sent();
284
- if (usedIn.features.size === 0 && usedIn.segments.size === 0) {
285
- unusedAttributes.add(attributeKey);
302
+ usageInSegments = _a.sent();
303
+ usedAttributeKeys = new Set();
304
+ for (featureKey in usageInFeatures) {
305
+ usageInFeatures[featureKey].attributes.forEach(function (attributeKey) {
306
+ usedAttributeKeys.add(attributeKey);
307
+ });
286
308
  }
287
- _a.label = 4;
288
- case 4:
289
- _i++;
290
- return [3 /*break*/, 2];
291
- case 5: return [2 /*return*/, unusedAttributes];
309
+ for (segmentKey in usageInSegments) {
310
+ usageInSegments[segmentKey].attributes.forEach(function (attributeKey) {
311
+ usedAttributeKeys.add(attributeKey);
312
+ });
313
+ }
314
+ allAttributeKeys.forEach(function (attributeKey) {
315
+ if (!usedAttributeKeys.has(attributeKey)) {
316
+ unusedAttributes.add(attributeKey);
317
+ }
318
+ });
319
+ return [2 /*return*/, unusedAttributes];
292
320
  }
293
321
  });
294
322
  });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/find-usage/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/find-usage/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@featurevisor/core",
3
- "version": "1.13.0",
3
+ "version": "1.13.1",
4
4
  "description": "Core package of Featurevisor for Node.js usage",
5
5
  "main": "lib/index.js",
6
6
  "types": "lib/index.d.ts",
@@ -57,5 +57,5 @@
57
57
  "@types/js-yaml": "^4.0.5",
58
58
  "@types/tar": "^6.1.4"
59
59
  },
60
- "gitHead": "4958688cc7892edeb54583ef5920975a2e6674e7"
60
+ "gitHead": "806b52ab8a519b05f31362f48cdb134d5a794976"
61
61
  }
@@ -6,19 +6,49 @@ import {
6
6
  extractSegmentKeysFromGroupSegments,
7
7
  } from "../utils/extractKeys";
8
8
 
9
- export async function findSegmentUsage(
10
- deps: Dependencies,
11
- segmentKey: SegmentKey,
12
- ): Promise<Set<FeatureKey>> {
9
+ export interface UsageInFeatures {
10
+ [featureKey: string]: {
11
+ features: Set<FeatureKey>;
12
+ segments: Set<SegmentKey>;
13
+ attributes: Set<AttributeKey>;
14
+ };
15
+ }
16
+
17
+ export async function findAllUsageInFeatures(deps: Dependencies): Promise<UsageInFeatures> {
13
18
  const { datasource, projectConfig } = deps;
19
+ const usageInFeatures: UsageInFeatures = {};
14
20
 
15
21
  const featureKeys = await datasource.listFeatures();
16
22
 
17
- const usedInFeatures = new Set<FeatureKey>();
18
-
19
23
  for (const featureKey of featureKeys) {
20
24
  const feature = await datasource.readFeature(featureKey);
21
- const segmentKeys = new Set<SegmentKey>();
25
+ usageInFeatures[featureKey] = {
26
+ features: new Set<FeatureKey>(),
27
+ segments: new Set<SegmentKey>(),
28
+ attributes: new Set<AttributeKey>(),
29
+ };
30
+
31
+ // required
32
+ if (feature.required) {
33
+ feature.required.forEach((required) => {
34
+ if (typeof required === "string") {
35
+ usageInFeatures[featureKey].features.add(required);
36
+ } else if (typeof required === "object" && required.key) {
37
+ usageInFeatures[featureKey].features.add(required.key);
38
+ }
39
+ });
40
+ }
41
+
42
+ // bucketBy
43
+ if (feature.bucketBy) {
44
+ if (typeof feature.bucketBy === "string") {
45
+ usageInFeatures[featureKey].attributes.add(feature.bucketBy);
46
+ } else if (Array.isArray(feature.bucketBy)) {
47
+ feature.bucketBy.forEach((b) => usageInFeatures[featureKey].attributes.add(b));
48
+ } else if (typeof feature.bucketBy === "object" && feature.bucketBy.or) {
49
+ feature.bucketBy.or.forEach((b) => usageInFeatures[featureKey].attributes.add(b));
50
+ }
51
+ }
22
52
 
23
53
  // variable overrides inside variations
24
54
  projectConfig.environments.forEach((environment) => {
@@ -30,7 +60,13 @@ export async function findSegmentUsage(
30
60
  variable.overrides.forEach((override) => {
31
61
  if (override.segments) {
32
62
  extractSegmentKeysFromGroupSegments(override.segments).forEach((segmentKey) =>
33
- segmentKeys.add(segmentKey),
63
+ usageInFeatures[featureKey].segments.add(segmentKey),
64
+ );
65
+ }
66
+
67
+ if (override.conditions) {
68
+ extractAttributeKeysFromConditions(override.conditions).forEach(
69
+ (attributeKey) => usageInFeatures[featureKey].attributes.add(attributeKey),
34
70
  );
35
71
  }
36
72
  });
@@ -45,7 +81,13 @@ export async function findSegmentUsage(
45
81
  feature.environments[environment].force?.forEach((force) => {
46
82
  if (force.segments) {
47
83
  extractSegmentKeysFromGroupSegments(force.segments).forEach((segmentKey) =>
48
- segmentKeys.add(segmentKey),
84
+ usageInFeatures[featureKey].segments.add(segmentKey),
85
+ );
86
+ }
87
+
88
+ if (force.conditions) {
89
+ extractAttributeKeysFromConditions(force.conditions).forEach((attributeKey) =>
90
+ usageInFeatures[featureKey].attributes.add(attributeKey),
49
91
  );
50
92
  }
51
93
  });
@@ -55,13 +97,54 @@ export async function findSegmentUsage(
55
97
  if (feature.environments[environment].rules) {
56
98
  feature.environments[environment].rules?.forEach((rule) => {
57
99
  extractSegmentKeysFromGroupSegments(rule.segments).forEach((segmentKey) =>
58
- segmentKeys.add(segmentKey),
100
+ usageInFeatures[featureKey].segments.add(segmentKey),
59
101
  );
60
102
  });
61
103
  }
62
104
  });
105
+ }
63
106
 
64
- if (segmentKeys.has(segmentKey)) {
107
+ return usageInFeatures;
108
+ }
109
+
110
+ export interface UsageInSegments {
111
+ [segmentKey: string]: {
112
+ attributes: Set<AttributeKey>;
113
+ };
114
+ }
115
+
116
+ export async function findAllUsageInSegments(deps: Dependencies): Promise<UsageInSegments> {
117
+ const { datasource } = deps;
118
+ const usageInSegments: UsageInSegments = {};
119
+
120
+ const segmentKeys = await datasource.listSegments();
121
+
122
+ for (const segmentKey of segmentKeys) {
123
+ const segment = await datasource.readSegment(segmentKey);
124
+ usageInSegments[segmentKey] = {
125
+ attributes: new Set<AttributeKey>(),
126
+ };
127
+
128
+ extractAttributeKeysFromConditions(segment.conditions as Condition | Condition[]).forEach(
129
+ (attributeKey) => {
130
+ usageInSegments[segmentKey].attributes.add(attributeKey);
131
+ },
132
+ );
133
+ }
134
+
135
+ return usageInSegments;
136
+ }
137
+
138
+ export async function findSegmentUsage(
139
+ deps: Dependencies,
140
+ segmentKey: SegmentKey,
141
+ ): Promise<Set<FeatureKey>> {
142
+ const usedInFeatures = new Set<FeatureKey>();
143
+
144
+ const usageInFeatures = await findAllUsageInFeatures(deps);
145
+
146
+ for (const featureKey in usageInFeatures) {
147
+ if (usageInFeatures[featureKey].segments.has(segmentKey)) {
65
148
  usedInFeatures.add(featureKey);
66
149
  }
67
150
  }
@@ -78,69 +161,22 @@ export async function findAttributeUsage(
78
161
  deps: Dependencies,
79
162
  attributeKey: AttributeKey,
80
163
  ): Promise<AttributeUsage> {
81
- const { datasource, projectConfig } = deps;
82
-
83
164
  const usedIn: AttributeUsage = {
84
165
  features: new Set<FeatureKey>(),
85
166
  segments: new Set<SegmentKey>(),
86
167
  };
87
168
 
88
- // features
89
- const featureKeys = await datasource.listFeatures();
90
- for (const featureKey of featureKeys) {
91
- const feature = await datasource.readFeature(featureKey);
92
- const attributeKeys = new Set<AttributeKey>();
169
+ const usageInFeatures = await findAllUsageInFeatures(deps);
170
+ const usageInSegments = await findAllUsageInSegments(deps);
93
171
 
94
- // variable overrides inside variations
95
- projectConfig.environments.forEach((environment) => {
96
- if (feature.variations) {
97
- feature.variations.forEach((variation) => {
98
- if (variation.variables) {
99
- variation.variables.forEach((variable) => {
100
- if (variable.overrides) {
101
- variable.overrides.forEach((override) => {
102
- if (override.conditions) {
103
- extractAttributeKeysFromConditions(override.conditions).forEach(
104
- (attributeKey) => attributeKeys.add(attributeKey),
105
- );
106
- }
107
- });
108
- }
109
- });
110
- }
111
- });
112
- }
113
-
114
- // force
115
- if (feature.environments[environment].force) {
116
- feature.environments[environment].force?.forEach((force) => {
117
- if (force.conditions) {
118
- extractAttributeKeysFromConditions(force.conditions).forEach((attributeKey) =>
119
- attributeKeys.add(attributeKey),
120
- );
121
- }
122
- });
123
- }
124
- });
125
-
126
- if (attributeKeys.has(attributeKey)) {
172
+ for (const featureKey in usageInFeatures) {
173
+ if (usageInFeatures[featureKey].attributes.has(attributeKey)) {
127
174
  usedIn.features.add(featureKey);
128
175
  }
129
176
  }
130
177
 
131
- // segments
132
- const segmentKeys = await datasource.listSegments();
133
- for (const segmentKey of segmentKeys) {
134
- const segment = await datasource.readSegment(segmentKey);
135
- const attributeKeys = new Set<AttributeKey>();
136
-
137
- extractAttributeKeysFromConditions(segment.conditions as Condition | Condition[]).forEach(
138
- (attributeKey) => {
139
- attributeKeys.add(attributeKey);
140
- },
141
- );
142
-
143
- if (attributeKeys.has(attributeKey)) {
178
+ for (const segmentKey in usageInSegments) {
179
+ if (usageInSegments[segmentKey].attributes.has(attributeKey)) {
144
180
  usedIn.segments.add(segmentKey);
145
181
  }
146
182
  }
@@ -150,34 +186,53 @@ export async function findAttributeUsage(
150
186
 
151
187
  export async function findUnusedSegments(deps: Dependencies): Promise<Set<SegmentKey>> {
152
188
  const { datasource } = deps;
153
-
154
- const segmentKeys = await datasource.listSegments();
155
189
  const unusedSegments = new Set<SegmentKey>();
156
190
 
157
- for (const segmentKey of segmentKeys) {
158
- const usedInFeatures = await findSegmentUsage(deps, segmentKey);
191
+ const allSegmentKeys = await datasource.listSegments();
192
+ const usageInFeatures = await findAllUsageInFeatures(deps);
193
+ const usedSegmentKeys = new Set<SegmentKey>();
159
194
 
160
- if (usedInFeatures.size === 0) {
195
+ for (const featureKey in usageInFeatures) {
196
+ usageInFeatures[featureKey].segments.forEach((segmentKey) => {
197
+ usedSegmentKeys.add(segmentKey);
198
+ });
199
+ }
200
+
201
+ allSegmentKeys.forEach((segmentKey) => {
202
+ if (!usedSegmentKeys.has(segmentKey)) {
161
203
  unusedSegments.add(segmentKey);
162
204
  }
163
- }
205
+ });
164
206
 
165
207
  return unusedSegments;
166
208
  }
167
209
 
168
210
  export async function findUnusedAttributes(deps: Dependencies): Promise<Set<AttributeKey>> {
169
211
  const { datasource } = deps;
170
-
171
- const attributeKeys = await datasource.listAttributes();
172
212
  const unusedAttributes = new Set<AttributeKey>();
173
213
 
174
- for (const attributeKey of attributeKeys) {
175
- const usedIn = await findAttributeUsage(deps, attributeKey);
214
+ const allAttributeKeys = await datasource.listAttributes();
215
+ const usageInFeatures = await findAllUsageInFeatures(deps);
216
+ const usageInSegments = await findAllUsageInSegments(deps);
217
+ const usedAttributeKeys = new Set<AttributeKey>();
176
218
 
177
- if (usedIn.features.size === 0 && usedIn.segments.size === 0) {
219
+ for (const featureKey in usageInFeatures) {
220
+ usageInFeatures[featureKey].attributes.forEach((attributeKey) => {
221
+ usedAttributeKeys.add(attributeKey);
222
+ });
223
+ }
224
+
225
+ for (const segmentKey in usageInSegments) {
226
+ usageInSegments[segmentKey].attributes.forEach((attributeKey) => {
227
+ usedAttributeKeys.add(attributeKey);
228
+ });
229
+ }
230
+
231
+ allAttributeKeys.forEach((attributeKey) => {
232
+ if (!usedAttributeKeys.has(attributeKey)) {
178
233
  unusedAttributes.add(attributeKey);
179
234
  }
180
- }
235
+ });
181
236
 
182
237
  return unusedAttributes;
183
238
  }