@featurevisor/core 2.14.0 → 2.16.0
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 +22 -0
- package/coverage/clover.xml +774 -652
- package/coverage/coverage-final.json +19 -18
- package/coverage/lcov-report/builder/allocator.ts.html +1 -1
- package/coverage/lcov-report/builder/buildScopedConditions.ts.html +1 -1
- package/coverage/lcov-report/builder/buildScopedDatafile.ts.html +1 -1
- package/coverage/lcov-report/builder/buildScopedSegments.ts.html +1 -1
- package/coverage/lcov-report/builder/index.html +1 -1
- package/coverage/lcov-report/builder/mutateVariables.ts.html +1 -1
- package/coverage/lcov-report/builder/mutator.ts.html +1 -1
- package/coverage/lcov-report/builder/revision.ts.html +1 -1
- package/coverage/lcov-report/builder/traffic.ts.html +1 -1
- package/coverage/lcov-report/config/index.html +30 -15
- package/coverage/lcov-report/config/index.ts.html +88 -0
- package/coverage/lcov-report/config/projectConfig.ts.html +79 -46
- package/coverage/lcov-report/datasource/adapter.ts.html +74 -11
- package/coverage/lcov-report/datasource/datasource.ts.html +76 -25
- package/coverage/lcov-report/datasource/filesystemAdapter.ts.html +690 -66
- package/coverage/lcov-report/datasource/index.html +35 -35
- package/coverage/lcov-report/datasource/index.ts.html +1 -1
- package/coverage/lcov-report/index.html +43 -43
- package/coverage/lcov-report/linter/attributeSchema.ts.html +4 -4
- package/coverage/lcov-report/linter/checkCircularDependency.ts.html +1 -1
- package/coverage/lcov-report/linter/checkPercentageExceedingSlot.ts.html +1 -1
- package/coverage/lcov-report/linter/conditionSchema.ts.html +7 -7
- package/coverage/lcov-report/linter/featureSchema.ts.html +152 -164
- package/coverage/lcov-report/linter/groupSchema.ts.html +3 -3
- package/coverage/lcov-report/linter/index.html +34 -34
- package/coverage/lcov-report/linter/lintProject.ts.html +428 -83
- package/coverage/lcov-report/linter/mutationNotation.ts.html +3 -3
- package/coverage/lcov-report/linter/printError.ts.html +9 -9
- package/coverage/lcov-report/linter/schema.ts.html +4 -4
- package/coverage/lcov-report/linter/segmentSchema.ts.html +3 -3
- package/coverage/lcov-report/linter/testSchema.ts.html +6 -6
- package/coverage/lcov-report/list/index.html +1 -1
- package/coverage/lcov-report/list/matrix.ts.html +1 -1
- package/coverage/lcov-report/parsers/index.html +1 -1
- package/coverage/lcov-report/parsers/index.ts.html +4 -4
- package/coverage/lcov-report/parsers/json.ts.html +2 -2
- package/coverage/lcov-report/parsers/yml.ts.html +6 -6
- package/coverage/lcov-report/tester/cliFormat.ts.html +1 -1
- package/coverage/lcov-report/tester/helpers.ts.html +1 -1
- package/coverage/lcov-report/tester/index.html +1 -1
- package/coverage/lcov-report/utils/git.ts.html +118 -16
- package/coverage/lcov-report/utils/index.html +14 -14
- package/coverage/lcov.info +1374 -1107
- package/lib/config/projectConfig.d.ts +3 -0
- package/lib/config/projectConfig.js +7 -1
- package/lib/config/projectConfig.js.map +1 -1
- package/lib/config/projectConfig.spec.d.ts +1 -0
- package/lib/config/projectConfig.spec.js +24 -0
- package/lib/config/projectConfig.spec.js.map +1 -0
- package/lib/datasource/adapter.d.ts +7 -0
- package/lib/datasource/adapter.js +7 -0
- package/lib/datasource/adapter.js.map +1 -1
- package/lib/datasource/datasource.d.ts +3 -1
- package/lib/datasource/datasource.js +6 -0
- package/lib/datasource/datasource.js.map +1 -1
- package/lib/datasource/filesystemAdapter.d.ts +8 -0
- package/lib/datasource/filesystemAdapter.js +134 -7
- package/lib/datasource/filesystemAdapter.js.map +1 -1
- package/lib/datasource/filesystemAdapter.spec.d.ts +1 -0
- package/lib/datasource/filesystemAdapter.spec.js +88 -0
- package/lib/datasource/filesystemAdapter.spec.js.map +1 -0
- package/lib/generate-code/index.d.ts +3 -0
- package/lib/generate-code/index.js +16 -1
- package/lib/generate-code/index.js.map +1 -1
- package/lib/generate-code/typescript.d.ts +6 -1
- package/lib/generate-code/typescript.js +193 -42
- package/lib/generate-code/typescript.js.map +1 -1
- package/lib/linter/conditionSchema.spec.js +2 -0
- package/lib/linter/conditionSchema.spec.js.map +1 -1
- package/lib/linter/featureSchema.js +46 -49
- package/lib/linter/featureSchema.js.map +1 -1
- package/lib/linter/featureSchema.spec.js +17 -0
- package/lib/linter/featureSchema.spec.js.map +1 -1
- package/lib/linter/lintProject.d.ts +2 -0
- package/lib/linter/lintProject.js +85 -8
- package/lib/linter/lintProject.js.map +1 -1
- package/lib/linter/lintProject.spec.js +37 -0
- package/lib/linter/lintProject.spec.js.map +1 -1
- package/lib/linter/segmentSchema.spec.js +2 -0
- package/lib/linter/segmentSchema.spec.js.map +1 -1
- package/lib/utils/git.js +32 -7
- package/lib/utils/git.js.map +1 -1
- package/package.json +2 -2
- package/src/config/projectConfig.spec.ts +31 -0
- package/src/config/projectConfig.ts +11 -0
- package/src/datasource/adapter.ts +21 -0
- package/src/datasource/datasource.ts +18 -1
- package/src/datasource/filesystemAdapter.spec.ts +153 -0
- package/src/datasource/filesystemAdapter.ts +216 -8
- package/src/generate-code/index.ts +20 -1
- package/src/generate-code/typescript.ts +266 -64
- package/src/linter/conditionSchema.spec.ts +2 -0
- package/src/linter/featureSchema.spec.ts +21 -0
- package/src/linter/featureSchema.ts +84 -88
- package/src/linter/lintProject.spec.ts +74 -0
- package/src/linter/lintProject.ts +123 -8
- package/src/linter/segmentSchema.spec.ts +2 -0
- package/src/utils/git.ts +41 -7
|
@@ -13,6 +13,7 @@ export declare const DATAFILES_DIRECTORY_NAME = "datafiles";
|
|
|
13
13
|
export declare const DATAFILE_NAME_PATTERN = "featurevisor-%s.json";
|
|
14
14
|
export declare const REVISION_FILE_NAME = "REVISION";
|
|
15
15
|
export declare const SITE_EXPORT_DIRECTORY_NAME = "out";
|
|
16
|
+
export declare const ENVIRONMENTS_DIRECTORY_NAME = "environments";
|
|
16
17
|
export declare const CONFIG_MODULE_NAME = "featurevisor.config.js";
|
|
17
18
|
export declare const ROOT_DIR_PLACEHOLDER = "<rootDir>";
|
|
18
19
|
export declare const DEFAULT_ENVIRONMENTS: string[];
|
|
@@ -40,7 +41,9 @@ export interface ProjectConfig {
|
|
|
40
41
|
datafileNamePattern: string;
|
|
41
42
|
revisionFileName: string;
|
|
42
43
|
siteExportDirectoryPath: string;
|
|
44
|
+
environmentsDirectoryPath: string;
|
|
43
45
|
environments: string[] | false;
|
|
46
|
+
splitByEnvironment: boolean;
|
|
44
47
|
tags: string[];
|
|
45
48
|
scopes?: Scope[];
|
|
46
49
|
adapter: any;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.configPlugin = exports.SCHEMA_VERSION = exports.DEFAULT_PARSER = exports.DEFAULT_PRETTY_DATAFILE = exports.DEFAULT_PRETTY_STATE = exports.DEFAULT_BUCKET_BY_ATTRIBUTE = exports.DEFAULT_TAGS = exports.DEFAULT_ENVIRONMENTS = exports.ROOT_DIR_PLACEHOLDER = exports.CONFIG_MODULE_NAME = exports.SITE_EXPORT_DIRECTORY_NAME = exports.REVISION_FILE_NAME = exports.DATAFILE_NAME_PATTERN = exports.DATAFILES_DIRECTORY_NAME = exports.STATE_DIRECTORY_NAME = exports.TESTS_DIRECTORY_NAME = exports.SCHEMAS_DIRECTORY_NAME = exports.GROUPS_DIRECTORY_NAME = exports.ATTRIBUTES_DIRECTORY_NAME = exports.SEGMENTS_DIRECTORY_NAME = exports.FEATURES_DIRECTORY_NAME = void 0;
|
|
3
|
+
exports.configPlugin = exports.SCHEMA_VERSION = exports.DEFAULT_PARSER = exports.DEFAULT_PRETTY_DATAFILE = exports.DEFAULT_PRETTY_STATE = exports.DEFAULT_BUCKET_BY_ATTRIBUTE = exports.DEFAULT_TAGS = exports.DEFAULT_ENVIRONMENTS = exports.ROOT_DIR_PLACEHOLDER = exports.CONFIG_MODULE_NAME = exports.ENVIRONMENTS_DIRECTORY_NAME = exports.SITE_EXPORT_DIRECTORY_NAME = exports.REVISION_FILE_NAME = exports.DATAFILE_NAME_PATTERN = exports.DATAFILES_DIRECTORY_NAME = exports.STATE_DIRECTORY_NAME = exports.TESTS_DIRECTORY_NAME = exports.SCHEMAS_DIRECTORY_NAME = exports.GROUPS_DIRECTORY_NAME = exports.ATTRIBUTES_DIRECTORY_NAME = exports.SEGMENTS_DIRECTORY_NAME = exports.FEATURES_DIRECTORY_NAME = void 0;
|
|
4
4
|
exports.getProjectConfig = getProjectConfig;
|
|
5
5
|
exports.showProjectConfig = showProjectConfig;
|
|
6
6
|
const path = require("path");
|
|
@@ -17,6 +17,7 @@ exports.DATAFILES_DIRECTORY_NAME = "datafiles";
|
|
|
17
17
|
exports.DATAFILE_NAME_PATTERN = "featurevisor-%s.json";
|
|
18
18
|
exports.REVISION_FILE_NAME = "REVISION";
|
|
19
19
|
exports.SITE_EXPORT_DIRECTORY_NAME = "out";
|
|
20
|
+
exports.ENVIRONMENTS_DIRECTORY_NAME = "environments";
|
|
20
21
|
exports.CONFIG_MODULE_NAME = "featurevisor.config.js";
|
|
21
22
|
exports.ROOT_DIR_PLACEHOLDER = "<rootDir>";
|
|
22
23
|
exports.DEFAULT_ENVIRONMENTS = ["staging", "production"];
|
|
@@ -39,6 +40,7 @@ function getProjectConfig(rootDirectoryPath) {
|
|
|
39
40
|
stringify: true,
|
|
40
41
|
adapter: filesystemAdapter_1.FilesystemAdapter,
|
|
41
42
|
featuresDirectoryPath: path.join(rootDirectoryPath, exports.FEATURES_DIRECTORY_NAME),
|
|
43
|
+
environmentsDirectoryPath: path.join(rootDirectoryPath, exports.ENVIRONMENTS_DIRECTORY_NAME),
|
|
42
44
|
segmentsDirectoryPath: path.join(rootDirectoryPath, exports.SEGMENTS_DIRECTORY_NAME),
|
|
43
45
|
attributesDirectoryPath: path.join(rootDirectoryPath, exports.ATTRIBUTES_DIRECTORY_NAME),
|
|
44
46
|
groupsDirectoryPath: path.join(rootDirectoryPath, exports.GROUPS_DIRECTORY_NAME),
|
|
@@ -51,6 +53,7 @@ function getProjectConfig(rootDirectoryPath) {
|
|
|
51
53
|
siteExportDirectoryPath: path.join(rootDirectoryPath, exports.SITE_EXPORT_DIRECTORY_NAME),
|
|
52
54
|
enforceCatchAllRule: false,
|
|
53
55
|
plugins: [],
|
|
56
|
+
splitByEnvironment: false,
|
|
54
57
|
maxVariableStringLength: undefined,
|
|
55
58
|
maxVariableArrayStringifiedLength: undefined,
|
|
56
59
|
maxVariableObjectStringifiedLength: undefined,
|
|
@@ -74,6 +77,9 @@ function getProjectConfig(rootDirectoryPath) {
|
|
|
74
77
|
}
|
|
75
78
|
finalConfig.parser = parsers_1.parsers[finalConfig.parser];
|
|
76
79
|
}
|
|
80
|
+
if (finalConfig.splitByEnvironment && finalConfig.environments === false) {
|
|
81
|
+
throw new Error("Invalid configuration: splitByEnvironment=true requires environments to be an array");
|
|
82
|
+
}
|
|
77
83
|
return finalConfig;
|
|
78
84
|
}
|
|
79
85
|
function showProjectConfig(projectConfig, options = {}) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"projectConfig.js","sourceRoot":"","sources":["../../src/config/projectConfig.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"projectConfig.js","sourceRoot":"","sources":["../../src/config/projectConfig.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const fs = require("fs");
|
|
4
|
+
const os = require("os");
|
|
5
|
+
const path = require("path");
|
|
6
|
+
const projectConfig_1 = require("./projectConfig");
|
|
7
|
+
function createTempProject(configBody) {
|
|
8
|
+
const tempRoot = fs.mkdtempSync(path.join(os.tmpdir(), "featurevisor-project-config-"));
|
|
9
|
+
fs.writeFileSync(path.join(tempRoot, "featurevisor.config.js"), configBody, "utf8");
|
|
10
|
+
return tempRoot;
|
|
11
|
+
}
|
|
12
|
+
describe("core: projectConfig", () => {
|
|
13
|
+
it("sets splitByEnvironment=false and environmentsDirectoryPath by default", () => {
|
|
14
|
+
const root = createTempProject("module.exports = {};");
|
|
15
|
+
const config = (0, projectConfig_1.getProjectConfig)(root);
|
|
16
|
+
expect(config.splitByEnvironment).toBe(false);
|
|
17
|
+
expect(config.environmentsDirectoryPath).toBe(path.join(root, projectConfig_1.ENVIRONMENTS_DIRECTORY_NAME));
|
|
18
|
+
});
|
|
19
|
+
it("throws when splitByEnvironment=true and environments=false", () => {
|
|
20
|
+
const root = createTempProject("module.exports = { splitByEnvironment: true, environments: false };");
|
|
21
|
+
expect(() => (0, projectConfig_1.getProjectConfig)(root)).toThrow("Invalid configuration: splitByEnvironment=true requires environments to be an array");
|
|
22
|
+
});
|
|
23
|
+
});
|
|
24
|
+
//# sourceMappingURL=projectConfig.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projectConfig.spec.js","sourceRoot":"","sources":["../../src/config/projectConfig.spec.ts"],"names":[],"mappings":";;AAAA,yBAAyB;AACzB,yBAAyB;AACzB,6BAA6B;AAE7B,mDAAgF;AAEhF,SAAS,iBAAiB,CAAC,UAAkB;IAC3C,MAAM,QAAQ,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,8BAA8B,CAAC,CAAC,CAAC;IACxF,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,wBAAwB,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IACpF,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,EAAE,CAAC,wEAAwE,EAAE,GAAG,EAAE;QAChF,MAAM,IAAI,GAAG,iBAAiB,CAAC,sBAAsB,CAAC,CAAC;QACvD,MAAM,MAAM,GAAG,IAAA,gCAAgB,EAAC,IAAI,CAAC,CAAC;QAEtC,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9C,MAAM,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,2CAA2B,CAAC,CAAC,CAAC;IAC9F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QACpE,MAAM,IAAI,GAAG,iBAAiB,CAC5B,qEAAqE,CACtE,CAAC;QAEF,MAAM,CAAC,GAAG,EAAE,CAAC,IAAA,gCAAgB,EAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAC1C,qFAAqF,CACtF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -6,6 +6,11 @@ export interface DatafileOptions {
|
|
|
6
6
|
scope?: Scope;
|
|
7
7
|
datafilesDir?: string;
|
|
8
8
|
}
|
|
9
|
+
export type FeatureEnvironmentProperty = "rules" | "force" | "expose";
|
|
10
|
+
export interface FeatureSourcePaths {
|
|
11
|
+
baseFilePath: string;
|
|
12
|
+
environmentFilePaths: Record<string, string>;
|
|
13
|
+
}
|
|
9
14
|
export declare abstract class Adapter {
|
|
10
15
|
abstract listEntities(entityType: EntityType): Promise<string[]>;
|
|
11
16
|
abstract entityExists(entityType: EntityType, entityKey: string): Promise<boolean>;
|
|
@@ -20,4 +25,6 @@ export declare abstract class Adapter {
|
|
|
20
25
|
abstract writeRevision(revision: string): Promise<void>;
|
|
21
26
|
abstract listHistoryEntries(entityType?: EntityType, entityKey?: string): Promise<HistoryEntry[]>;
|
|
22
27
|
abstract readCommit(commit: CommitHash, entityType?: EntityType, entityKey?: string): Promise<Commit>;
|
|
28
|
+
getFeatureSourcePaths(_featureKey: string): Promise<FeatureSourcePaths | undefined>;
|
|
29
|
+
getFeaturePropertySourcePath(_featureKey: string, _property: FeatureEnvironmentProperty, _environment?: string): Promise<string | undefined>;
|
|
23
30
|
}
|
|
@@ -2,6 +2,13 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Adapter = void 0;
|
|
4
4
|
class Adapter {
|
|
5
|
+
// feature source helpers (used by lint/history attribution)
|
|
6
|
+
async getFeatureSourcePaths(_featureKey) {
|
|
7
|
+
return undefined;
|
|
8
|
+
}
|
|
9
|
+
async getFeaturePropertySourcePath(_featureKey, _property, _environment) {
|
|
10
|
+
return undefined;
|
|
11
|
+
}
|
|
5
12
|
}
|
|
6
13
|
exports.Adapter = Adapter;
|
|
7
14
|
//# sourceMappingURL=adapter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/datasource/adapter.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/datasource/adapter.ts"],"names":[],"mappings":";;;AA2BA,MAAsB,OAAO;IA+B3B,4DAA4D;IAC5D,KAAK,CAAC,qBAAqB,CAAC,WAAmB;QAC7C,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,4BAA4B,CAChC,WAAmB,EACnB,SAAqC,EACrC,YAAqB;QAErB,OAAO,SAAS,CAAC;IACnB,CAAC;CACF;AA3CD,0BA2CC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ParsedFeature, Segment, Attribute, Group, FeatureKey, Test, EnvironmentKey, ExistingState, SegmentKey, AttributeKey, DatafileContent, EntityType, SchemaKey, Schema } from "@featurevisor/types";
|
|
2
2
|
import { ProjectConfig } from "../config";
|
|
3
|
-
import { DatafileOptions } from "./adapter";
|
|
3
|
+
import { DatafileOptions, FeatureEnvironmentProperty, FeatureSourcePaths } from "./adapter";
|
|
4
4
|
export declare class Datasource {
|
|
5
5
|
private config;
|
|
6
6
|
private rootDirectoryPath?;
|
|
@@ -30,6 +30,8 @@ export declare class Datasource {
|
|
|
30
30
|
readFeature(featureKey: FeatureKey): Promise<ParsedFeature>;
|
|
31
31
|
writeFeature(featureKey: FeatureKey, feature: ParsedFeature): Promise<ParsedFeature>;
|
|
32
32
|
deleteFeature(featureKey: FeatureKey): Promise<void>;
|
|
33
|
+
getFeatureSourcePaths(featureKey: FeatureKey): Promise<FeatureSourcePaths | undefined>;
|
|
34
|
+
getFeaturePropertySourcePath(featureKey: FeatureKey, property: FeatureEnvironmentProperty, environment?: string): Promise<string | undefined>;
|
|
33
35
|
getRequiredFeaturesChain(featureKey: FeatureKey, chain?: Set<string>): Promise<Set<FeatureKey>>;
|
|
34
36
|
listSegments(): Promise<string[]>;
|
|
35
37
|
segmentExists(segmentKey: SegmentKey): Promise<boolean>;
|
|
@@ -57,6 +57,12 @@ class Datasource {
|
|
|
57
57
|
deleteFeature(featureKey) {
|
|
58
58
|
return this.adapter.deleteEntity("feature", featureKey);
|
|
59
59
|
}
|
|
60
|
+
getFeatureSourcePaths(featureKey) {
|
|
61
|
+
return this.adapter.getFeatureSourcePaths(featureKey);
|
|
62
|
+
}
|
|
63
|
+
getFeaturePropertySourcePath(featureKey, property, environment) {
|
|
64
|
+
return this.adapter.getFeaturePropertySourcePath(featureKey, property, environment);
|
|
65
|
+
}
|
|
60
66
|
async getRequiredFeaturesChain(featureKey, chain = new Set()) {
|
|
61
67
|
chain.add(featureKey);
|
|
62
68
|
if (!this.adapter.entityExists("feature", featureKey)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"datasource.js","sourceRoot":"","sources":["../../src/datasource/datasource.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"datasource.js","sourceRoot":"","sources":["../../src/datasource/datasource.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,6 +11,9 @@ export declare class FilesystemAdapter extends Adapter {
|
|
|
11
11
|
constructor(config: ProjectConfig, rootDirectoryPath?: string);
|
|
12
12
|
getEntityDirectoryPath(entityType: EntityType): string;
|
|
13
13
|
getEntityPath(entityType: EntityType, entityKey: string): string;
|
|
14
|
+
getFeatureEnvironmentPath(featureKey: string, environment: string): string;
|
|
15
|
+
private assertSplitByEnvironmentIsValidFeatureBase;
|
|
16
|
+
private readFeatureEnvironmentEntity;
|
|
14
17
|
listEntities(entityType: EntityType): Promise<string[]>;
|
|
15
18
|
entityExists(entityType: EntityType, entityKey: string): Promise<boolean>;
|
|
16
19
|
readEntity<T>(entityType: EntityType, entityKey: string): Promise<T>;
|
|
@@ -37,6 +40,11 @@ export declare class FilesystemAdapter extends Adapter {
|
|
|
37
40
|
*/
|
|
38
41
|
getRawHistory(pathPatterns: string[]): Promise<string>;
|
|
39
42
|
getPathPatterns(entityType?: EntityType, entityKey?: string): string[];
|
|
43
|
+
getFeatureSourcePaths(featureKey: string): Promise<{
|
|
44
|
+
baseFilePath: string;
|
|
45
|
+
environmentFilePaths: Record<string, string>;
|
|
46
|
+
}>;
|
|
47
|
+
getFeaturePropertySourcePath(featureKey: string, _property: "rules" | "force" | "expose", environment?: string): Promise<string>;
|
|
40
48
|
listHistoryEntries(entityType?: EntityType, entityKey?: string): Promise<HistoryEntry[]>;
|
|
41
49
|
readCommit(commitHash: CommitHash, entityType?: EntityType, entityKey?: string): Promise<Commit>;
|
|
42
50
|
}
|
|
@@ -9,6 +9,14 @@ const path = require("path");
|
|
|
9
9
|
const child_process_1 = require("child_process");
|
|
10
10
|
const adapter_1 = require("./adapter");
|
|
11
11
|
const git_1 = require("../utils/git");
|
|
12
|
+
const FEATURE_ENVIRONMENT_ALLOWED_KEYS = ["rules", "force", "expose"];
|
|
13
|
+
class FeatureSplitConfigError extends Error {
|
|
14
|
+
constructor(filePath, message) {
|
|
15
|
+
super(message);
|
|
16
|
+
this.featurevisorFilePath = filePath;
|
|
17
|
+
this.name = "FeatureSplitConfigError";
|
|
18
|
+
}
|
|
19
|
+
}
|
|
12
20
|
function getExistingStateFilePath(projectConfig, environment) {
|
|
13
21
|
const fileName = environment ? `existing-state-${environment}.json` : `existing-state.json`;
|
|
14
22
|
return path.join(projectConfig.stateDirectoryPath, fileName);
|
|
@@ -34,6 +42,9 @@ function getAllEntityFilePathsRecursively(directoryPath, extension) {
|
|
|
34
42
|
}
|
|
35
43
|
return entities;
|
|
36
44
|
}
|
|
45
|
+
function isWithinDirectory(directoryPath, fileDirectoryPath) {
|
|
46
|
+
return (fileDirectoryPath === directoryPath || fileDirectoryPath.startsWith(directoryPath + path.sep));
|
|
47
|
+
}
|
|
37
48
|
class FilesystemAdapter extends adapter_1.Adapter {
|
|
38
49
|
constructor(config, rootDirectoryPath) {
|
|
39
50
|
super();
|
|
@@ -65,6 +76,31 @@ class FilesystemAdapter extends adapter_1.Adapter {
|
|
|
65
76
|
const relativeEntityPath = entityKey.replace(/\//g, path.sep);
|
|
66
77
|
return path.join(basePath, `${relativeEntityPath}.${this.parser.extension}`);
|
|
67
78
|
}
|
|
79
|
+
getFeatureEnvironmentPath(featureKey, environment) {
|
|
80
|
+
const relativeEntityPath = featureKey.replace(/\//g, path.sep);
|
|
81
|
+
return path.join(this.config.environmentsDirectoryPath, environment, `${relativeEntityPath}.${this.parser.extension}`);
|
|
82
|
+
}
|
|
83
|
+
assertSplitByEnvironmentIsValidFeatureBase(baseFeature, featurePath) {
|
|
84
|
+
if (typeof baseFeature.rules !== "undefined" ||
|
|
85
|
+
typeof baseFeature.force !== "undefined" ||
|
|
86
|
+
typeof baseFeature.expose !== "undefined") {
|
|
87
|
+
throw new FeatureSplitConfigError(featurePath, `Feature "${baseFeature.key}" base file must not define rules, force, or expose when splitByEnvironment=true`);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
readFeatureEnvironmentEntity(featureKey, environment) {
|
|
91
|
+
const featureEnvironmentPath = this.getFeatureEnvironmentPath(featureKey, environment);
|
|
92
|
+
if (!fs.existsSync(featureEnvironmentPath)) {
|
|
93
|
+
throw new FeatureSplitConfigError(featureEnvironmentPath, `Missing environment feature file: environments/${environment}/${featureKey}.${this.parser.extension}`);
|
|
94
|
+
}
|
|
95
|
+
const content = fs.readFileSync(featureEnvironmentPath, "utf8");
|
|
96
|
+
const parsed = this.parser.parse(content, featureEnvironmentPath);
|
|
97
|
+
const keys = Object.keys(parsed);
|
|
98
|
+
const unknownKeys = keys.filter((key) => FEATURE_ENVIRONMENT_ALLOWED_KEYS.indexOf(key) === -1);
|
|
99
|
+
if (unknownKeys.length > 0) {
|
|
100
|
+
throw new FeatureSplitConfigError(featureEnvironmentPath, `Unknown key(s) in environment feature file: ${unknownKeys.join(", ")}`);
|
|
101
|
+
}
|
|
102
|
+
return parsed;
|
|
103
|
+
}
|
|
68
104
|
async listEntities(entityType) {
|
|
69
105
|
const directoryPath = this.getEntityDirectoryPath(entityType);
|
|
70
106
|
const filePaths = getAllEntityFilePathsRecursively(directoryPath, this.parser.extension);
|
|
@@ -83,6 +119,37 @@ class FilesystemAdapter extends adapter_1.Adapter {
|
|
|
83
119
|
return fs.existsSync(entityPath);
|
|
84
120
|
}
|
|
85
121
|
async readEntity(entityType, entityKey) {
|
|
122
|
+
if (entityType === "feature" && this.config.splitByEnvironment) {
|
|
123
|
+
const featurePath = this.getEntityPath(entityType, entityKey);
|
|
124
|
+
const featureContent = fs.readFileSync(featurePath, "utf8");
|
|
125
|
+
const baseFeature = this.parser.parse(featureContent, featurePath);
|
|
126
|
+
this.assertSplitByEnvironmentIsValidFeatureBase(baseFeature, featurePath);
|
|
127
|
+
if (!Array.isArray(this.config.environments)) {
|
|
128
|
+
throw new FeatureSplitConfigError(featurePath, "splitByEnvironment=true requires environments to be configured as an array");
|
|
129
|
+
}
|
|
130
|
+
const rulesByEnvironment = {};
|
|
131
|
+
const forceByEnvironment = {};
|
|
132
|
+
const exposeByEnvironment = {};
|
|
133
|
+
for (const environment of this.config.environments) {
|
|
134
|
+
const envFeature = this.readFeatureEnvironmentEntity(entityKey, environment);
|
|
135
|
+
if (typeof envFeature.rules !== "undefined") {
|
|
136
|
+
rulesByEnvironment[environment] = envFeature.rules;
|
|
137
|
+
}
|
|
138
|
+
if (typeof envFeature.force !== "undefined") {
|
|
139
|
+
forceByEnvironment[environment] = envFeature.force;
|
|
140
|
+
}
|
|
141
|
+
if (typeof envFeature.expose !== "undefined") {
|
|
142
|
+
exposeByEnvironment[environment] = envFeature.expose;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
const mergedFeature = {
|
|
146
|
+
...baseFeature,
|
|
147
|
+
rules: Object.keys(rulesByEnvironment).length > 0 ? rulesByEnvironment : undefined,
|
|
148
|
+
force: Object.keys(forceByEnvironment).length > 0 ? forceByEnvironment : undefined,
|
|
149
|
+
expose: Object.keys(exposeByEnvironment).length > 0 ? exposeByEnvironment : undefined,
|
|
150
|
+
};
|
|
151
|
+
return mergedFeature;
|
|
152
|
+
}
|
|
86
153
|
const filePath = this.getEntityPath(entityType, entityKey);
|
|
87
154
|
const entityContent = fs.readFileSync(filePath, "utf8");
|
|
88
155
|
return this.parser.parse(entityContent, filePath);
|
|
@@ -220,6 +287,13 @@ class FilesystemAdapter extends adapter_1.Adapter {
|
|
|
220
287
|
let pathPatterns = [];
|
|
221
288
|
if (entityType && entityKey) {
|
|
222
289
|
pathPatterns = [this.getEntityPath(entityType, entityKey)];
|
|
290
|
+
if (entityType === "feature" &&
|
|
291
|
+
this.config.splitByEnvironment &&
|
|
292
|
+
Array.isArray(this.config.environments)) {
|
|
293
|
+
for (const environment of this.config.environments) {
|
|
294
|
+
pathPatterns.push(this.getFeatureEnvironmentPath(entityKey, environment));
|
|
295
|
+
}
|
|
296
|
+
}
|
|
223
297
|
}
|
|
224
298
|
else if (entityType) {
|
|
225
299
|
if (entityType === "attribute") {
|
|
@@ -230,6 +304,9 @@ class FilesystemAdapter extends adapter_1.Adapter {
|
|
|
230
304
|
}
|
|
231
305
|
else if (entityType === "feature") {
|
|
232
306
|
pathPatterns = [this.config.featuresDirectoryPath];
|
|
307
|
+
if (this.config.splitByEnvironment) {
|
|
308
|
+
pathPatterns.push(this.config.environmentsDirectoryPath);
|
|
309
|
+
}
|
|
233
310
|
}
|
|
234
311
|
else if (entityType === "group") {
|
|
235
312
|
pathPatterns = [this.config.groupsDirectoryPath];
|
|
@@ -244,6 +321,7 @@ class FilesystemAdapter extends adapter_1.Adapter {
|
|
|
244
321
|
else {
|
|
245
322
|
pathPatterns = [
|
|
246
323
|
this.config.featuresDirectoryPath,
|
|
324
|
+
...(this.config.splitByEnvironment ? [this.config.environmentsDirectoryPath] : []),
|
|
247
325
|
this.config.attributesDirectoryPath,
|
|
248
326
|
this.config.segmentsDirectoryPath,
|
|
249
327
|
this.config.groupsDirectoryPath,
|
|
@@ -253,6 +331,25 @@ class FilesystemAdapter extends adapter_1.Adapter {
|
|
|
253
331
|
}
|
|
254
332
|
return pathPatterns.map((p) => p.replace(this.rootDirectoryPath + path.sep, ""));
|
|
255
333
|
}
|
|
334
|
+
async getFeatureSourcePaths(featureKey) {
|
|
335
|
+
const baseFilePath = this.getEntityPath("feature", featureKey);
|
|
336
|
+
const environmentFilePaths = {};
|
|
337
|
+
if (this.config.splitByEnvironment && Array.isArray(this.config.environments)) {
|
|
338
|
+
for (const environment of this.config.environments) {
|
|
339
|
+
environmentFilePaths[environment] = this.getFeatureEnvironmentPath(featureKey, environment);
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
return {
|
|
343
|
+
baseFilePath,
|
|
344
|
+
environmentFilePaths,
|
|
345
|
+
};
|
|
346
|
+
}
|
|
347
|
+
async getFeaturePropertySourcePath(featureKey, _property, environment) {
|
|
348
|
+
if (this.config.splitByEnvironment && environment) {
|
|
349
|
+
return this.getFeatureEnvironmentPath(featureKey, environment);
|
|
350
|
+
}
|
|
351
|
+
return this.getEntityPath("feature", featureKey);
|
|
352
|
+
}
|
|
256
353
|
async listHistoryEntries(entityType, entityKey) {
|
|
257
354
|
const pathPatterns = this.getPathPatterns(entityType, entityKey);
|
|
258
355
|
const rawHistory = await this.getRawHistory(pathPatterns);
|
|
@@ -273,29 +370,59 @@ class FilesystemAdapter extends adapter_1.Adapter {
|
|
|
273
370
|
const absolutePath = path.join(this.rootDirectoryPath, relativePath);
|
|
274
371
|
const fileName = absolutePath.split(path.sep).pop();
|
|
275
372
|
const relativeDir = path.dirname(absolutePath);
|
|
276
|
-
const
|
|
373
|
+
const extensionWithDot = "." + this.parser.extension;
|
|
374
|
+
const key = fileName.replace(extensionWithDot, "");
|
|
277
375
|
let type = "attribute";
|
|
278
|
-
if (
|
|
376
|
+
if (isWithinDirectory(this.config.attributesDirectoryPath, relativeDir)) {
|
|
279
377
|
type = "attribute";
|
|
280
378
|
}
|
|
281
|
-
else if (
|
|
379
|
+
else if (isWithinDirectory(this.config.segmentsDirectoryPath, relativeDir)) {
|
|
282
380
|
type = "segment";
|
|
283
381
|
}
|
|
284
|
-
else if (
|
|
382
|
+
else if (isWithinDirectory(this.config.featuresDirectoryPath, relativeDir)) {
|
|
285
383
|
type = "feature";
|
|
286
384
|
}
|
|
287
|
-
else if (
|
|
385
|
+
else if (this.config.splitByEnvironment &&
|
|
386
|
+
isWithinDirectory(this.config.environmentsDirectoryPath, relativeDir)) {
|
|
387
|
+
type = "feature";
|
|
388
|
+
}
|
|
389
|
+
else if (isWithinDirectory(this.config.groupsDirectoryPath, relativeDir)) {
|
|
288
390
|
type = "group";
|
|
289
391
|
}
|
|
290
|
-
else if (
|
|
392
|
+
else if (isWithinDirectory(this.config.schemasDirectoryPath, relativeDir)) {
|
|
291
393
|
type = "schema";
|
|
292
394
|
}
|
|
293
|
-
else if (
|
|
395
|
+
else if (isWithinDirectory(this.config.testsDirectoryPath, relativeDir)) {
|
|
294
396
|
type = "test";
|
|
295
397
|
}
|
|
296
398
|
else {
|
|
297
399
|
continue;
|
|
298
400
|
}
|
|
401
|
+
if (type === "feature") {
|
|
402
|
+
if (this.config.splitByEnvironment &&
|
|
403
|
+
relativePath.startsWith(this.config.environmentsDirectoryPath.replace(this.rootDirectoryPath + path.sep, "") + path.sep)) {
|
|
404
|
+
const featureRelativePath = relativePath
|
|
405
|
+
.replace(this.config.environmentsDirectoryPath.replace(this.rootDirectoryPath + path.sep, "") + path.sep, "")
|
|
406
|
+
.split(path.sep)
|
|
407
|
+
.slice(1)
|
|
408
|
+
.join(path.sep)
|
|
409
|
+
.replace(extensionWithDot, "");
|
|
410
|
+
entities.push({
|
|
411
|
+
type,
|
|
412
|
+
key: featureRelativePath.replace(/\\/g, "/"),
|
|
413
|
+
});
|
|
414
|
+
continue;
|
|
415
|
+
}
|
|
416
|
+
const baseRelativePath = absolutePath
|
|
417
|
+
.replace(this.config.featuresDirectoryPath + path.sep, "")
|
|
418
|
+
.replace(extensionWithDot, "")
|
|
419
|
+
.replace(/\\/g, "/");
|
|
420
|
+
entities.push({
|
|
421
|
+
type,
|
|
422
|
+
key: baseRelativePath,
|
|
423
|
+
});
|
|
424
|
+
continue;
|
|
425
|
+
}
|
|
299
426
|
entities.push({
|
|
300
427
|
type,
|
|
301
428
|
key,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filesystemAdapter.js","sourceRoot":"","sources":["../../src/datasource/filesystemAdapter.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"filesystemAdapter.js","sourceRoot":"","sources":["../../src/datasource/filesystemAdapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const fs = require("fs");
|
|
4
|
+
const os = require("os");
|
|
5
|
+
const path = require("path");
|
|
6
|
+
const config_1 = require("../config");
|
|
7
|
+
const datasource_1 = require("./datasource");
|
|
8
|
+
function writeFile(filePath, content) {
|
|
9
|
+
fs.mkdirSync(path.dirname(filePath), { recursive: true });
|
|
10
|
+
fs.writeFileSync(filePath, content, "utf8");
|
|
11
|
+
}
|
|
12
|
+
function createSplitProject(configBody) {
|
|
13
|
+
const root = fs.mkdtempSync(path.join(os.tmpdir(), "featurevisor-fs-adapter-"));
|
|
14
|
+
writeFile(path.join(root, "featurevisor.config.js"), configBody);
|
|
15
|
+
return root;
|
|
16
|
+
}
|
|
17
|
+
describe("core: filesystemAdapter (splitByEnvironment)", () => {
|
|
18
|
+
it("merges environment files into readFeature output", async () => {
|
|
19
|
+
const root = createSplitProject("module.exports = { environments: ['staging', 'production'], splitByEnvironment: true };");
|
|
20
|
+
writeFile(path.join(root, "features", "checkout.yml"), [
|
|
21
|
+
"key: checkout",
|
|
22
|
+
"description: Checkout feature",
|
|
23
|
+
"tags:",
|
|
24
|
+
" - all",
|
|
25
|
+
"bucketBy: userId",
|
|
26
|
+
].join("\n"));
|
|
27
|
+
writeFile(path.join(root, "environments", "staging", "checkout.yml"), ["rules:", " - key: everyone", " segments: '*'", " percentage: 100"].join("\n"));
|
|
28
|
+
writeFile(path.join(root, "environments", "production", "checkout.yml"), [
|
|
29
|
+
"rules:",
|
|
30
|
+
" - key: everyone",
|
|
31
|
+
" segments: '*'",
|
|
32
|
+
" percentage: 0",
|
|
33
|
+
"expose: false",
|
|
34
|
+
].join("\n"));
|
|
35
|
+
const config = (0, config_1.getProjectConfig)(root);
|
|
36
|
+
const datasource = new datasource_1.Datasource(config, root);
|
|
37
|
+
const feature = await datasource.readFeature("checkout");
|
|
38
|
+
const rulesByEnvironment = feature.rules;
|
|
39
|
+
const exposeByEnvironment = feature.expose;
|
|
40
|
+
expect(rulesByEnvironment?.staging?.[0]?.percentage).toBe(100);
|
|
41
|
+
expect(rulesByEnvironment?.production?.[0]?.percentage).toBe(0);
|
|
42
|
+
expect(exposeByEnvironment?.production).toBe(false);
|
|
43
|
+
});
|
|
44
|
+
it("throws when any environment feature file is missing", async () => {
|
|
45
|
+
const root = createSplitProject("module.exports = { environments: ['staging', 'production'], splitByEnvironment: true };");
|
|
46
|
+
writeFile(path.join(root, "features", "myFeature.yml"), ["key: myFeature", "description: My feature", "tags:", " - all", "bucketBy: userId"].join("\n"));
|
|
47
|
+
writeFile(path.join(root, "environments", "staging", "myFeature.yml"), ["rules:", " - key: everyone", " segments: '*'", " percentage: 100"].join("\n"));
|
|
48
|
+
const config = (0, config_1.getProjectConfig)(root);
|
|
49
|
+
const datasource = new datasource_1.Datasource(config, root);
|
|
50
|
+
await expect(datasource.readFeature("myFeature")).rejects.toMatchObject({
|
|
51
|
+
featurevisorFilePath: expect.stringContaining(path.join("environments", "production", "myFeature.yml")),
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
it("throws when base feature file still defines rules in split mode", async () => {
|
|
55
|
+
const root = createSplitProject("module.exports = { environments: ['staging'], splitByEnvironment: true };");
|
|
56
|
+
writeFile(path.join(root, "features", "foo.yml"), [
|
|
57
|
+
"key: foo",
|
|
58
|
+
"description: Foo",
|
|
59
|
+
"tags:",
|
|
60
|
+
" - all",
|
|
61
|
+
"bucketBy: userId",
|
|
62
|
+
"rules:",
|
|
63
|
+
" staging:",
|
|
64
|
+
" - key: everyone",
|
|
65
|
+
" segments: '*'",
|
|
66
|
+
" percentage: 100",
|
|
67
|
+
].join("\n"));
|
|
68
|
+
writeFile(path.join(root, "environments", "staging", "foo.yml"), ["rules:", " - key: everyone", " segments: '*'", " percentage: 100"].join("\n"));
|
|
69
|
+
const config = (0, config_1.getProjectConfig)(root);
|
|
70
|
+
const datasource = new datasource_1.Datasource(config, root);
|
|
71
|
+
await expect(datasource.readFeature("foo")).rejects.toThrow("base file must not define rules, force, or expose when splitByEnvironment=true");
|
|
72
|
+
});
|
|
73
|
+
it("throws when environment file has unknown keys", async () => {
|
|
74
|
+
const root = createSplitProject("module.exports = { environments: ['staging'], splitByEnvironment: true };");
|
|
75
|
+
writeFile(path.join(root, "features", "foo.yml"), ["key: foo", "description: Foo", "tags:", " - all", "bucketBy: userId"].join("\n"));
|
|
76
|
+
writeFile(path.join(root, "environments", "staging", "foo.yml"), [
|
|
77
|
+
"rules:",
|
|
78
|
+
" - key: everyone",
|
|
79
|
+
" segments: '*'",
|
|
80
|
+
" percentage: 100",
|
|
81
|
+
"extraKey: not allowed",
|
|
82
|
+
].join("\n"));
|
|
83
|
+
const config = (0, config_1.getProjectConfig)(root);
|
|
84
|
+
const datasource = new datasource_1.Datasource(config, root);
|
|
85
|
+
await expect(datasource.readFeature("foo")).rejects.toThrow("Unknown key(s) in environment feature file: extraKey");
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
//# sourceMappingURL=filesystemAdapter.spec.js.map
|