@featurevisor/core 0.0.3

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 ADDED
@@ -0,0 +1,30 @@
1
+ # Change Log
2
+
3
+ All notable changes to this project will be documented in this file.
4
+ See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
+
6
+ ## [0.0.3](https://github.com/fahad19/featurevisor/compare/v0.0.2...v0.0.3) (2023-03-05)
7
+
8
+
9
+ ### Bug Fixes
10
+
11
+ * publish access ([ea5cd7c](https://github.com/fahad19/featurevisor/commit/ea5cd7cd8554e2def5fdcc1d3488598a08e99bfa))
12
+
13
+
14
+
15
+
16
+
17
+ ## [0.0.2](https://github.com/fahad19/featurevisor/compare/v0.0.1...v0.0.2) (2023-03-05)
18
+
19
+ **Note:** Version bump only for package @featurevisor/core
20
+
21
+
22
+
23
+
24
+
25
+ ## 0.0.1 (2023-03-05)
26
+
27
+
28
+ ### Bug Fixes
29
+
30
+ * linting ([230bfa0](https://github.com/fahad19/featurevisor/commit/230bfa0824f79181581585ccc37c2e78c5aeac42))
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2023 Fahad Heylaal (https://fahad19.com)
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,15 @@
1
+ # @featurevisor/core
2
+
3
+ Core package of Featurevisor.
4
+
5
+ Visit [https://featurevisor.com](https://featurevisor.com) for more information.
6
+
7
+ ## Installation
8
+
9
+ ```
10
+ $ npm install --save @featurevisor/core
11
+ ```
12
+
13
+ ## License
14
+
15
+ MIT © [Fahad Heylaal](https://fahad19.com)
@@ -0,0 +1,12 @@
1
+ import { DatafileContent, EnvironmentKey } from "@featurevisor/types";
2
+ import { ProjectConfig } from "./config";
3
+ export interface BuildOptions {
4
+ schemaVersion: string;
5
+ revision: string;
6
+ environment: string;
7
+ tag: string;
8
+ }
9
+ export declare function getDatafilePath(projectConfig: ProjectConfig, environment: EnvironmentKey, tag: string): string;
10
+ export declare function getExistingStateFilePath(projectConfig: ProjectConfig, environment: EnvironmentKey, tag: string): string;
11
+ export declare function buildDatafile(projectConfig: ProjectConfig, options: BuildOptions): DatafileContent;
12
+ export declare function buildProject(rootDirectoryPath: any, projectConfig: ProjectConfig): void;
package/lib/builder.js ADDED
@@ -0,0 +1,245 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildProject = exports.buildDatafile = exports.getExistingStateFilePath = exports.getDatafilePath = void 0;
4
+ var fs = require("fs");
5
+ var path = require("path");
6
+ var mkdirp = require("mkdirp");
7
+ var sdk_1 = require("@featurevisor/sdk");
8
+ var config_1 = require("./config");
9
+ var traffic_1 = require("./traffic");
10
+ var utils_1 = require("./utils");
11
+ function getDatafilePath(projectConfig, environment, tag) {
12
+ var fileName = "datafile-tag-".concat(tag, ".json");
13
+ return path.join(projectConfig.outputDirectoryPath, environment, fileName);
14
+ }
15
+ exports.getDatafilePath = getDatafilePath;
16
+ function getExistingStateFilePath(projectConfig, environment, tag) {
17
+ return path.join(projectConfig.stateDirectoryPath, "existing-state-".concat(environment, "-").concat(tag, ".json"));
18
+ }
19
+ exports.getExistingStateFilePath = getExistingStateFilePath;
20
+ function buildDatafile(projectConfig, options) {
21
+ var datafileContent = {
22
+ schemaVersion: options.schemaVersion,
23
+ revision: options.revision,
24
+ attributes: [],
25
+ segments: [],
26
+ features: [],
27
+ };
28
+ var segmentKeysUsedByTag = new Set();
29
+ var attributeKeysUsedByTag = new Set();
30
+ // features
31
+ var features = [];
32
+ var featuresDirectory = projectConfig.featuresDirectoryPath;
33
+ var existingState = {};
34
+ var existingFeatures = {};
35
+ var existingStateFilePath = getExistingStateFilePath(projectConfig, options.environment, options.tag);
36
+ if (fs.existsSync(existingStateFilePath)) {
37
+ existingState = JSON.parse(fs.readFileSync(existingStateFilePath, "utf8"));
38
+ if (existingState && existingState.features) {
39
+ existingFeatures = existingState.features;
40
+ }
41
+ }
42
+ if (fs.existsSync(featuresDirectory)) {
43
+ var featureFiles = fs.readdirSync(featuresDirectory).filter(function (f) { return f.endsWith(".yml"); });
44
+ for (var _i = 0, featureFiles_1 = featureFiles; _i < featureFiles_1.length; _i++) {
45
+ var featureFile = featureFiles_1[_i];
46
+ var featureKey = path.basename(featureFile, ".yml");
47
+ var featureFilePath = path.join(featuresDirectory, featureFile);
48
+ var parsedFeature = (0, utils_1.parseYaml)(fs.readFileSync(featureFilePath, "utf8"));
49
+ if (parsedFeature.archived === true) {
50
+ continue;
51
+ }
52
+ if (parsedFeature.tags.indexOf(options.tag) === -1) {
53
+ continue;
54
+ }
55
+ if (parsedFeature.environments[options.environment].expose === false) {
56
+ continue;
57
+ }
58
+ var featureTraffic = [];
59
+ for (var _a = 0, _b = parsedFeature.environments[options.environment].rules; _a < _b.length; _a++) {
60
+ var parsedRule = _b[_a];
61
+ var extractedSegmentKeys = (0, utils_1.extractSegmentKeysFromGroupSegments)(parsedRule.segments);
62
+ extractedSegmentKeys.forEach(function (segmentKey) { return segmentKeysUsedByTag.add(segmentKey); });
63
+ featureTraffic.push({
64
+ key: parsedRule.key,
65
+ segments: typeof parsedRule.segments === "string"
66
+ ? parsedRule.segments
67
+ : JSON.stringify(parsedRule.segments),
68
+ percentage: parsedRule.percentage * (sdk_1.MAX_BUCKETED_NUMBER / 100),
69
+ allocation: [],
70
+ });
71
+ }
72
+ var feature = {
73
+ key: featureKey,
74
+ defaultVariation: parsedFeature.defaultVariation,
75
+ bucketBy: parsedFeature.bucketBy || projectConfig.defaultBucketBy,
76
+ variations: parsedFeature.variations.map(function (variation) {
77
+ var mappedVariation = {
78
+ type: variation.type,
79
+ value: variation.value,
80
+ };
81
+ if (!variation.variables) {
82
+ return mappedVariation;
83
+ }
84
+ mappedVariation.variables = variation.variables.map(function (variable) {
85
+ var mappedVariable = {
86
+ key: variable.key,
87
+ value: variable.value,
88
+ };
89
+ if (!variable.overrides) {
90
+ return mappedVariable;
91
+ }
92
+ mappedVariable.overrides = variable.overrides.map(function (override) {
93
+ if (typeof override.conditions !== "undefined") {
94
+ var extractedAttributeKeys = (0, utils_1.extractAttributeKeysFromConditions)(override.conditions);
95
+ extractedAttributeKeys.forEach(function (attributeKey) {
96
+ return attributeKeysUsedByTag.add(attributeKey);
97
+ });
98
+ return {
99
+ conditions: JSON.stringify(override.conditions),
100
+ value: override.value,
101
+ };
102
+ }
103
+ if (typeof override.segments !== "undefined") {
104
+ var extractedSegmentKeys = (0, utils_1.extractSegmentKeysFromGroupSegments)(override.segments);
105
+ extractedSegmentKeys.forEach(function (segmentKey) { return segmentKeysUsedByTag.add(segmentKey); });
106
+ return {
107
+ segments: JSON.stringify(override.segments),
108
+ value: override.value,
109
+ };
110
+ }
111
+ return override;
112
+ });
113
+ return mappedVariable;
114
+ });
115
+ return mappedVariation;
116
+ }),
117
+ traffic: (0, traffic_1.getNewTraffic)(parsedFeature.variations, parsedFeature.environments[options.environment].rules, existingFeatures && existingFeatures[featureKey]),
118
+ };
119
+ if (parsedFeature.variablesSchema) {
120
+ feature.variablesSchema = parsedFeature.variablesSchema;
121
+ }
122
+ if (parsedFeature.environments[options.environment].force) {
123
+ feature.force = parsedFeature.environments[options.environment].force;
124
+ }
125
+ features.push(feature);
126
+ }
127
+ }
128
+ // segments
129
+ var segments = [];
130
+ var segmentsDirectory = projectConfig.segmentsDirectoryPath;
131
+ if (fs.existsSync(segmentsDirectory)) {
132
+ var segmentFiles = fs.readdirSync(segmentsDirectory).filter(function (f) { return f.endsWith(".yml"); });
133
+ for (var _c = 0, segmentFiles_1 = segmentFiles; _c < segmentFiles_1.length; _c++) {
134
+ var segmentFile = segmentFiles_1[_c];
135
+ var segmentKey = path.basename(segmentFile, ".yml");
136
+ var segmentFilePath = path.join(segmentsDirectory, segmentFile);
137
+ var parsedSegment = (0, utils_1.parseYaml)(fs.readFileSync(segmentFilePath, "utf8"));
138
+ if (parsedSegment.archived === true) {
139
+ continue;
140
+ }
141
+ if (segmentKeysUsedByTag.has(segmentKey) === false) {
142
+ continue;
143
+ }
144
+ var extractedAttributeKeys = (0, utils_1.extractAttributeKeysFromConditions)(parsedSegment.conditions);
145
+ extractedAttributeKeys.forEach(function (attributeKey) { return attributeKeysUsedByTag.add(attributeKey); });
146
+ var segment = {
147
+ key: segmentKey,
148
+ conditions: typeof parsedSegment.conditions !== "string"
149
+ ? JSON.stringify(parsedSegment.conditions)
150
+ : parsedSegment.conditions,
151
+ };
152
+ segments.push(segment);
153
+ }
154
+ }
155
+ // attributes
156
+ var attributes = [];
157
+ var attributesDirectory = projectConfig.attributesDirectoryPath;
158
+ if (fs.existsSync(attributesDirectory)) {
159
+ var attributeFiles = fs.readdirSync(attributesDirectory).filter(function (f) { return f.endsWith(".yml"); });
160
+ for (var _d = 0, attributeFiles_1 = attributeFiles; _d < attributeFiles_1.length; _d++) {
161
+ var attributeFile = attributeFiles_1[_d];
162
+ var attributeKey = path.basename(attributeFile, ".yml");
163
+ var attributeFilePath = path.join(attributesDirectory, attributeFile);
164
+ var parsedAttribute = (0, utils_1.parseYaml)(fs.readFileSync(attributeFilePath, "utf8"));
165
+ if (parsedAttribute.archived === true) {
166
+ continue;
167
+ }
168
+ if (attributeKeysUsedByTag.has(attributeKey) === false && !parsedAttribute.capture) {
169
+ continue;
170
+ }
171
+ var attribute = {
172
+ key: attributeKey,
173
+ type: parsedAttribute.type,
174
+ };
175
+ if (parsedAttribute.capture === true) {
176
+ attribute.capture = true;
177
+ }
178
+ attributes.push(attribute);
179
+ }
180
+ }
181
+ datafileContent.attributes = attributes;
182
+ datafileContent.segments = segments;
183
+ datafileContent.features = features;
184
+ // write
185
+ var outputEnvironmentDirPath = path.join(projectConfig.outputDirectoryPath, options.environment);
186
+ mkdirp.sync(outputEnvironmentDirPath);
187
+ var outputFilePath = getDatafilePath(projectConfig, options.environment, options.tag);
188
+ fs.writeFileSync(outputFilePath, JSON.stringify(datafileContent));
189
+ // write to state directory
190
+ if (!fs.existsSync(projectConfig.stateDirectoryPath)) {
191
+ mkdirp.sync(projectConfig.stateDirectoryPath);
192
+ }
193
+ var updatedExistingFeatures = datafileContent.features.reduce(function (acc, feature) {
194
+ var item = {
195
+ variations: feature.variations.map(function (v) {
196
+ return {
197
+ value: v.value,
198
+ weight: v.weight || 0,
199
+ };
200
+ }),
201
+ traffic: feature.traffic.map(function (t) {
202
+ return {
203
+ key: t.key,
204
+ percentage: t.percentage,
205
+ allocation: t.allocation.map(function (a) {
206
+ return {
207
+ variation: a.variation,
208
+ percentage: a.percentage,
209
+ };
210
+ }),
211
+ };
212
+ }),
213
+ };
214
+ acc[feature.key] = item;
215
+ return acc;
216
+ }, existingFeatures);
217
+ var updatedState = {
218
+ features: updatedExistingFeatures,
219
+ };
220
+ fs.writeFileSync(existingStateFilePath, JSON.stringify(updatedState));
221
+ console.log(" File generated: ".concat(outputFilePath));
222
+ return datafileContent;
223
+ }
224
+ exports.buildDatafile = buildDatafile;
225
+ function buildProject(rootDirectoryPath, projectConfig) {
226
+ var tags = projectConfig.tags;
227
+ var environments = projectConfig.environments;
228
+ var pkg = require(path.join(rootDirectoryPath, "package.json"));
229
+ for (var _i = 0, environments_1 = environments; _i < environments_1.length; _i++) {
230
+ var environment = environments_1[_i];
231
+ console.log("\nBuilding datafiles for environment: ".concat(environment));
232
+ for (var _a = 0, tags_1 = tags; _a < tags_1.length; _a++) {
233
+ var tag = tags_1[_a];
234
+ console.log(" => Tag: ".concat(tag));
235
+ buildDatafile(projectConfig, {
236
+ schemaVersion: config_1.SCHEMA_VERSION,
237
+ revision: pkg.version,
238
+ environment: environment,
239
+ tag: tag,
240
+ });
241
+ }
242
+ }
243
+ }
244
+ exports.buildProject = buildProject;
245
+ //# sourceMappingURL=builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builder.js","sourceRoot":"","sources":["../src/builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import { BucketBy } from "@featurevisor/types";
2
+ export declare const FEATURES_DIRECTORY_NAME = "features";
3
+ export declare const SEGMENTS_DIRECTORY_NAME = "segments";
4
+ export declare const ATTRIBUTES_DIRECTORY_NAME = "attributes";
5
+ export declare const TESTS_DIRECTORY_NAME = "tests";
6
+ export declare const STATE_DIRECTORY_NAME = ".featurevisor";
7
+ export declare const OUTPUT_DIRECTORY_NAME = "dist";
8
+ export declare const CONFIG_MODULE_NAME = "featurevisor.config.js";
9
+ export declare const ROOT_DIR_PLACECOLDER = "<rootDir>";
10
+ export declare const DEFAULT_ENVIRONMENTS: string[];
11
+ export declare const DEFAULT_TAGS: string[];
12
+ export declare const DEFAULT_BUCKET_BY_ATTRIBUTE = "userId";
13
+ export declare const SCHEMA_VERSION = "1";
14
+ export interface ProjectConfig {
15
+ featuresDirectoryPath: string;
16
+ segmentsDirectoryPath: string;
17
+ attributesDirectoryPath: string;
18
+ testsDirectoryPath: string;
19
+ stateDirectoryPath: string;
20
+ outputDirectoryPath: string;
21
+ environments: string[];
22
+ tags: string[];
23
+ defaultBucketBy: BucketBy;
24
+ }
25
+ export declare function getProjectConfig(rootDirectoryPath: string): ProjectConfig;
package/lib/config.js ADDED
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getProjectConfig = exports.SCHEMA_VERSION = exports.DEFAULT_BUCKET_BY_ATTRIBUTE = exports.DEFAULT_TAGS = exports.DEFAULT_ENVIRONMENTS = exports.ROOT_DIR_PLACECOLDER = exports.CONFIG_MODULE_NAME = exports.OUTPUT_DIRECTORY_NAME = exports.STATE_DIRECTORY_NAME = exports.TESTS_DIRECTORY_NAME = exports.ATTRIBUTES_DIRECTORY_NAME = exports.SEGMENTS_DIRECTORY_NAME = exports.FEATURES_DIRECTORY_NAME = void 0;
4
+ var path = require("path");
5
+ exports.FEATURES_DIRECTORY_NAME = "features";
6
+ exports.SEGMENTS_DIRECTORY_NAME = "segments";
7
+ exports.ATTRIBUTES_DIRECTORY_NAME = "attributes";
8
+ exports.TESTS_DIRECTORY_NAME = "tests";
9
+ exports.STATE_DIRECTORY_NAME = ".featurevisor";
10
+ exports.OUTPUT_DIRECTORY_NAME = "dist";
11
+ exports.CONFIG_MODULE_NAME = "featurevisor.config.js";
12
+ exports.ROOT_DIR_PLACECOLDER = "<rootDir>";
13
+ exports.DEFAULT_ENVIRONMENTS = ["staging", "production"];
14
+ exports.DEFAULT_TAGS = ["all"];
15
+ exports.DEFAULT_BUCKET_BY_ATTRIBUTE = "userId";
16
+ exports.SCHEMA_VERSION = "1";
17
+ // rootDirectoryPath: path to the root directory of the project (without ending with a slash)
18
+ function getProjectConfig(rootDirectoryPath) {
19
+ var baseConfig = {
20
+ featuresDirectoryPath: path.join(rootDirectoryPath, exports.FEATURES_DIRECTORY_NAME),
21
+ segmentsDirectoryPath: path.join(rootDirectoryPath, exports.SEGMENTS_DIRECTORY_NAME),
22
+ attributesDirectoryPath: path.join(rootDirectoryPath, exports.ATTRIBUTES_DIRECTORY_NAME),
23
+ testsDirectoryPath: path.join(rootDirectoryPath, exports.TESTS_DIRECTORY_NAME),
24
+ stateDirectoryPath: path.join(rootDirectoryPath, exports.STATE_DIRECTORY_NAME),
25
+ outputDirectoryPath: path.join(rootDirectoryPath, exports.OUTPUT_DIRECTORY_NAME),
26
+ environments: exports.DEFAULT_ENVIRONMENTS,
27
+ tags: exports.DEFAULT_TAGS,
28
+ };
29
+ var configModulePath = path.join(rootDirectoryPath, exports.CONFIG_MODULE_NAME);
30
+ var customConfig = require(configModulePath);
31
+ var finalConfig = {};
32
+ Object.keys(baseConfig).forEach(function (key) {
33
+ finalConfig[key] = customConfig[key] || baseConfig[key];
34
+ if (key.endsWith("Path") && finalConfig[key].indexOf(exports.ROOT_DIR_PLACECOLDER) !== -1) {
35
+ finalConfig[key] = finalConfig[key].replace(exports.ROOT_DIR_PLACECOLDER, rootDirectoryPath);
36
+ }
37
+ });
38
+ return finalConfig;
39
+ }
40
+ exports.getProjectConfig = getProjectConfig;
41
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";;;AAAA,2BAA6B;AAIhB,QAAA,uBAAuB,GAAG,UAAU,CAAC;AACrC,QAAA,uBAAuB,GAAG,UAAU,CAAC;AACrC,QAAA,yBAAyB,GAAG,YAAY,CAAC;AACzC,QAAA,oBAAoB,GAAG,OAAO,CAAC;AAC/B,QAAA,oBAAoB,GAAG,eAAe,CAAC;AACvC,QAAA,qBAAqB,GAAG,MAAM,CAAC;AAE/B,QAAA,kBAAkB,GAAG,wBAAwB,CAAC;AAC9C,QAAA,oBAAoB,GAAG,WAAW,CAAC;AAEnC,QAAA,oBAAoB,GAAG,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;AACjD,QAAA,YAAY,GAAG,CAAC,KAAK,CAAC,CAAC;AACvB,QAAA,2BAA2B,GAAG,QAAQ,CAAC;AAEvC,QAAA,cAAc,GAAG,GAAG,CAAC;AAclC,6FAA6F;AAC7F,SAAgB,gBAAgB,CAAC,iBAAyB;IACxD,IAAM,UAAU,GAAG;QACjB,qBAAqB,EAAE,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,+BAAuB,CAAC;QAC5E,qBAAqB,EAAE,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,+BAAuB,CAAC;QAC5E,uBAAuB,EAAE,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,iCAAyB,CAAC;QAChF,kBAAkB,EAAE,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,4BAAoB,CAAC;QAEtE,kBAAkB,EAAE,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,4BAAoB,CAAC;QACtE,mBAAmB,EAAE,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,6BAAqB,CAAC;QAExE,YAAY,EAAE,4BAAoB;QAClC,IAAI,EAAE,oBAAY;KACnB,CAAC;IAEF,IAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,0BAAkB,CAAC,CAAC;IAC1E,IAAM,YAAY,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAE/C,IAAM,WAAW,GAAG,EAAE,CAAC;IAEvB,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,UAAC,GAAG;QAClC,WAAW,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;QAExD,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,4BAAoB,CAAC,KAAK,CAAC,CAAC,EAAE;YACjF,WAAW,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,4BAAoB,EAAE,iBAAiB,CAAC,CAAC;SACtF;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,WAA4B,CAAC;AACtC,CAAC;AA5BD,4CA4BC"}
package/lib/index.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ export * from "./config";
2
+ export * from "./linter";
3
+ export * from "./builder";
4
+ export * from "./tester";
5
+ export * from "./init";
package/lib/index.js ADDED
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./config"), exports);
18
+ __exportStar(require("./linter"), exports);
19
+ __exportStar(require("./builder"), exports);
20
+ __exportStar(require("./tester"), exports);
21
+ __exportStar(require("./init"), exports);
22
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAyB;AACzB,2CAAyB;AACzB,4CAA0B;AAC1B,2CAAyB;AACzB,yCAAuB"}
package/lib/init.d.ts ADDED
@@ -0,0 +1,6 @@
1
+ export declare const DEFAULT_EXAMPLE = "example-1";
2
+ export declare const EXAMPLES_ORG_NAME = "fahad19";
3
+ export declare const EXAMPLES_REPO_NAME = "featurevisor";
4
+ export declare const EXAMPLES_BRANCH_NAME = "main";
5
+ export declare const EXAMPLES_TAR_URL: string;
6
+ export declare function initProject(directoryPath: string, exampleName?: string): Promise<boolean>;
package/lib/init.js ADDED
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.initProject = exports.EXAMPLES_TAR_URL = exports.EXAMPLES_BRANCH_NAME = exports.EXAMPLES_REPO_NAME = exports.EXAMPLES_ORG_NAME = exports.DEFAULT_EXAMPLE = void 0;
4
+ var axios_1 = require("axios");
5
+ var tar = require("tar");
6
+ exports.DEFAULT_EXAMPLE = "example-1";
7
+ exports.EXAMPLES_ORG_NAME = "fahad19";
8
+ exports.EXAMPLES_REPO_NAME = "featurevisor";
9
+ exports.EXAMPLES_BRANCH_NAME = "main";
10
+ exports.EXAMPLES_TAR_URL = "https://codeload.github.com/".concat(exports.EXAMPLES_ORG_NAME, "/").concat(exports.EXAMPLES_REPO_NAME, "/tar.gz/").concat(exports.EXAMPLES_BRANCH_NAME);
11
+ function getExamplePath(exampleName) {
12
+ return "".concat(exports.EXAMPLES_REPO_NAME, "-").concat(exports.EXAMPLES_BRANCH_NAME, "/examples/").concat(exampleName, "/");
13
+ }
14
+ function initProject(directoryPath, exampleName) {
15
+ if (exampleName === void 0) { exampleName = exports.DEFAULT_EXAMPLE; }
16
+ return new Promise(function (resolve, reject) {
17
+ axios_1.default.get(exports.EXAMPLES_TAR_URL, { responseType: "stream" }).then(function (response) {
18
+ response.data
19
+ .pipe(tar.x({
20
+ C: directoryPath,
21
+ filter: function (path) { return path.indexOf(getExamplePath(exampleName)) === 0; },
22
+ strip: 3,
23
+ }))
24
+ .on("error", function (e) {
25
+ console.error(e);
26
+ resolve(false);
27
+ })
28
+ .on("finish", function () {
29
+ console.log("Project scaffolded in ".concat(directoryPath));
30
+ console.log("");
31
+ console.log("Please run \"npm ci\" in the directory above.");
32
+ resolve(true);
33
+ });
34
+ });
35
+ });
36
+ }
37
+ exports.initProject = initProject;
38
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":";;;AAAA,+BAA0B;AAC1B,yBAA2B;AAEd,QAAA,eAAe,GAAG,WAAW,CAAC;AAE9B,QAAA,iBAAiB,GAAG,SAAS,CAAC;AAC9B,QAAA,kBAAkB,GAAG,cAAc,CAAC;AACpC,QAAA,oBAAoB,GAAG,MAAM,CAAC;AAE9B,QAAA,gBAAgB,GAAG,sCAA+B,yBAAiB,cAAI,0BAAkB,qBAAW,4BAAoB,CAAE,CAAC;AAExI,SAAS,cAAc,CAAC,WAAmB;IACzC,OAAO,UAAG,0BAAkB,cAAI,4BAAoB,uBAAa,WAAW,MAAG,CAAC;AAClF,CAAC;AAED,SAAgB,WAAW,CACzB,aAAqB,EACrB,WAAqC;IAArC,4BAAA,EAAA,cAAsB,uBAAe;IAErC,OAAO,IAAI,OAAO,CAAC,UAAU,OAAO,EAAE,MAAM;QAC1C,eAAK,CAAC,GAAG,CAAC,wBAAgB,EAAE,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,UAAC,QAAQ;YACpE,QAAQ,CAAC,IAAI;iBACV,IAAI,CACH,GAAG,CAAC,CAAC,CAAC;gBACJ,CAAC,EAAE,aAAa;gBAChB,MAAM,EAAE,UAAC,IAAI,IAAK,OAAA,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,EAA/C,CAA+C;gBACjE,KAAK,EAAE,CAAC;aACT,CAAC,CACH;iBACA,EAAE,CAAC,OAAO,EAAE,UAAC,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAEjB,OAAO,CAAC,KAAK,CAAC,CAAC;YACjB,CAAC,CAAC;iBACD,EAAE,CAAC,QAAQ,EAAE;gBACZ,OAAO,CAAC,GAAG,CAAC,gCAAyB,aAAa,CAAE,CAAC,CAAC;gBACtD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAChB,OAAO,CAAC,GAAG,CAAC,+CAA6C,CAAC,CAAC;gBAE3D,OAAO,CAAC,IAAI,CAAC,CAAC;YAChB,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AA5BD,kCA4BC"}
@@ -0,0 +1,9 @@
1
+ import * as Joi from "joi";
2
+ import { ProjectConfig } from "./config";
3
+ export declare function getAttributeJoiSchema(projectConfig: ProjectConfig): Joi.ObjectSchema<any>;
4
+ export declare function getConditionsJoiSchema(projectConfig: ProjectConfig): Joi.AlternativesSchema<any>;
5
+ export declare function getSegmentJoiSchema(projectConfig: ProjectConfig, conditionsJoiSchema: any): Joi.ObjectSchema<any>;
6
+ export declare function getFeatureJoiSchema(projectConfig: ProjectConfig, conditionsJoiSchema: any): Joi.ObjectSchema<any>;
7
+ export declare function getTestsJoiSchema(projectConfig: ProjectConfig): Joi.ObjectSchema<any>;
8
+ export declare function printJoiError(e: Joi.ValidationError): void;
9
+ export declare function lintProject(projectConfig: ProjectConfig): Promise<boolean>;