@featurevisor/core 2.12.0 → 2.14.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.
Files changed (92) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/coverage/clover.xml +1663 -596
  3. package/coverage/coverage-final.json +24 -6
  4. package/coverage/lcov-report/builder/allocator.ts.html +1 -1
  5. package/coverage/lcov-report/builder/buildScopedConditions.ts.html +1 -1
  6. package/coverage/lcov-report/builder/buildScopedDatafile.ts.html +1 -1
  7. package/coverage/lcov-report/builder/buildScopedSegments.ts.html +1 -1
  8. package/coverage/lcov-report/builder/index.html +38 -8
  9. package/coverage/lcov-report/builder/mutateVariables.ts.html +400 -0
  10. package/coverage/lcov-report/builder/mutator.ts.html +796 -0
  11. package/coverage/lcov-report/builder/revision.ts.html +1 -1
  12. package/coverage/lcov-report/builder/traffic.ts.html +1 -1
  13. package/coverage/lcov-report/config/index.html +116 -0
  14. package/coverage/lcov-report/config/projectConfig.ts.html +676 -0
  15. package/coverage/lcov-report/datasource/adapter.ts.html +235 -0
  16. package/coverage/lcov-report/datasource/datasource.ts.html +862 -0
  17. package/coverage/lcov-report/datasource/filesystemAdapter.ts.html +1354 -0
  18. package/coverage/lcov-report/datasource/index.html +161 -0
  19. package/coverage/lcov-report/datasource/index.ts.html +94 -0
  20. package/coverage/lcov-report/index.html +83 -38
  21. package/coverage/lcov-report/linter/attributeSchema.ts.html +175 -0
  22. package/coverage/lcov-report/linter/checkCircularDependency.ts.html +220 -0
  23. package/coverage/lcov-report/linter/checkPercentageExceedingSlot.ts.html +268 -0
  24. package/coverage/lcov-report/linter/conditionSchema.ts.html +38 -38
  25. package/coverage/lcov-report/linter/featureSchema.ts.html +956 -485
  26. package/coverage/lcov-report/linter/groupSchema.ts.html +226 -0
  27. package/coverage/lcov-report/linter/index.html +139 -19
  28. package/coverage/lcov-report/linter/lintProject.ts.html +1840 -0
  29. package/coverage/lcov-report/linter/mutationNotation.ts.html +1309 -0
  30. package/coverage/lcov-report/linter/printError.ts.html +238 -0
  31. package/coverage/lcov-report/linter/schema.ts.html +116 -116
  32. package/coverage/lcov-report/linter/segmentSchema.ts.html +5 -5
  33. package/coverage/lcov-report/linter/testSchema.ts.html +550 -0
  34. package/coverage/lcov-report/list/index.html +1 -1
  35. package/coverage/lcov-report/list/matrix.ts.html +1 -1
  36. package/coverage/lcov-report/parsers/index.html +20 -5
  37. package/coverage/lcov-report/parsers/index.ts.html +151 -0
  38. package/coverage/lcov-report/parsers/json.ts.html +2 -2
  39. package/coverage/lcov-report/parsers/yml.ts.html +6 -6
  40. package/coverage/lcov-report/tester/cliFormat.ts.html +103 -0
  41. package/coverage/lcov-report/tester/helpers.ts.html +1 -1
  42. package/coverage/lcov-report/tester/index.html +20 -5
  43. package/coverage/lcov-report/utils/git.ts.html +481 -0
  44. package/coverage/lcov-report/utils/index.html +116 -0
  45. package/coverage/lcov.info +3253 -1214
  46. package/lib/builder/buildDatafile.js +8 -3
  47. package/lib/builder/buildDatafile.js.map +1 -1
  48. package/lib/builder/mutateVariables.d.ts +14 -0
  49. package/lib/builder/mutateVariables.js +90 -0
  50. package/lib/builder/mutateVariables.js.map +1 -0
  51. package/lib/builder/mutateVariables.spec.d.ts +1 -0
  52. package/lib/builder/mutateVariables.spec.js +1045 -0
  53. package/lib/builder/mutateVariables.spec.js.map +1 -0
  54. package/lib/builder/mutator.d.ts +20 -0
  55. package/lib/builder/mutator.js +223 -0
  56. package/lib/builder/mutator.js.map +1 -0
  57. package/lib/builder/mutator.spec.d.ts +1 -0
  58. package/lib/builder/mutator.spec.js +368 -0
  59. package/lib/builder/mutator.spec.js.map +1 -0
  60. package/lib/linter/featureSchema.d.ts +7 -7
  61. package/lib/linter/featureSchema.js +138 -62
  62. package/lib/linter/featureSchema.js.map +1 -1
  63. package/lib/linter/featureSchema.spec.js +150 -0
  64. package/lib/linter/featureSchema.spec.js.map +1 -1
  65. package/lib/linter/lintProject.d.ts +17 -1
  66. package/lib/linter/lintProject.js +191 -198
  67. package/lib/linter/lintProject.js.map +1 -1
  68. package/lib/linter/lintProject.spec.d.ts +1 -0
  69. package/lib/linter/lintProject.spec.js +86 -0
  70. package/lib/linter/lintProject.spec.js.map +1 -0
  71. package/lib/linter/mutationNotation.d.ts +47 -0
  72. package/lib/linter/mutationNotation.js +381 -0
  73. package/lib/linter/mutationNotation.js.map +1 -0
  74. package/lib/linter/mutationNotation.spec.d.ts +1 -0
  75. package/lib/linter/mutationNotation.spec.js +549 -0
  76. package/lib/linter/mutationNotation.spec.js.map +1 -0
  77. package/lib/linter/printError.d.ts +7 -0
  78. package/lib/linter/printError.js +30 -15
  79. package/lib/linter/printError.js.map +1 -1
  80. package/package.json +2 -2
  81. package/src/builder/buildDatafile.ts +29 -3
  82. package/src/builder/mutateVariables.spec.ts +1134 -0
  83. package/src/builder/mutateVariables.ts +105 -0
  84. package/src/builder/mutator.spec.ts +413 -0
  85. package/src/builder/mutator.ts +237 -0
  86. package/src/linter/featureSchema.spec.ts +182 -0
  87. package/src/linter/featureSchema.ts +254 -97
  88. package/src/linter/lintProject.spec.ts +115 -0
  89. package/src/linter/lintProject.ts +256 -254
  90. package/src/linter/mutationNotation.spec.ts +642 -0
  91. package/src/linter/mutationNotation.ts +408 -0
  92. package/src/linter/printError.ts +40 -16
@@ -1,24 +1,39 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getLintIssuesFromZodError = getLintIssuesFromZodError;
3
4
  exports.printZodError = printZodError;
4
5
  const cliFormat_1 = require("../tester/cliFormat");
5
- function printZodError(e) {
6
- const { issues } = e;
7
- issues.forEach((issue) => {
8
- if (issue.code === "invalid_union" && issue.path.length === 0 && issue.unionErrors.length > 0) {
9
- // invalid_union
6
+ function getLintIssuesFromZodError(e) {
7
+ return e.issues
8
+ .map((issue) => {
9
+ if (issue.code === "invalid_union" &&
10
+ issue.path.length === 0 &&
11
+ issue.unionErrors.length > 0) {
10
12
  const lastUnionError = issue.unionErrors[issue.unionErrors.length - 1];
11
- console.error(cliFormat_1.CLI_FORMAT_RED, ` => Error: ${lastUnionError.issues[0].message}`);
12
- console.error(" Path:", lastUnionError.issues[0].path.join("."));
13
+ const nestedIssue = lastUnionError.issues[0];
14
+ return {
15
+ message: nestedIssue.message,
16
+ path: nestedIssue.path,
17
+ code: nestedIssue.code,
18
+ value: nestedIssue.received,
19
+ };
13
20
  }
14
- else {
15
- // others
16
- console.error(cliFormat_1.CLI_FORMAT_RED, ` => Error: ${issue.message}`);
17
- console.error(" Path:", issue.path.join("."));
18
- const receivedValue = issue.received;
19
- if (typeof receivedValue !== "undefined" && receivedValue !== "undefined") {
20
- console.error(" Value:", receivedValue);
21
- }
21
+ return {
22
+ message: issue.message,
23
+ path: issue.path,
24
+ code: issue.code,
25
+ value: issue.received,
26
+ };
27
+ })
28
+ .filter(Boolean);
29
+ }
30
+ function printZodError(e) {
31
+ const issues = getLintIssuesFromZodError(e);
32
+ issues.forEach((issue) => {
33
+ console.error(cliFormat_1.CLI_FORMAT_RED, ` => Error: ${issue.message}`);
34
+ console.error(" Path:", issue.path.join("."));
35
+ if (typeof issue.value !== "undefined" && issue.value !== "undefined") {
36
+ console.error(" Value:", issue.value);
22
37
  }
23
38
  console.error("");
24
39
  });
@@ -1 +1 @@
1
- {"version":3,"file":"printError.js","sourceRoot":"","sources":["../../src/linter/printError.ts"],"names":[],"mappings":";;AAIA,sCAsBC;AAxBD,mDAAqD;AAErD,SAAgB,aAAa,CAAC,CAAW;IACvC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;IAErB,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;QACvB,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9F,gBAAgB;YAChB,MAAM,cAAc,GAAG,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACvE,OAAO,CAAC,KAAK,CAAC,0BAAc,EAAE,eAAe,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YACjF,OAAO,CAAC,KAAK,CAAC,YAAY,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACvE,CAAC;aAAM,CAAC;YACN,SAAS;YACT,OAAO,CAAC,KAAK,CAAC,0BAAc,EAAE,eAAe,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAC9D,OAAO,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YAElD,MAAM,aAAa,GAAI,KAAa,CAAC,QAAQ,CAAC;YAC9C,IAAI,OAAO,aAAa,KAAK,WAAW,IAAI,aAAa,KAAK,WAAW,EAAE,CAAC;gBAC1E,OAAO,CAAC,KAAK,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC;QAED,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACpB,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"printError.js","sourceRoot":"","sources":["../../src/linter/printError.ts"],"names":[],"mappings":";;AAWA,8DA2BC;AAED,sCAUC;AAhDD,mDAAqD;AASrD,SAAgB,yBAAyB,CAAC,CAAW;IACnD,OAAO,CAAC,CAAC,MAAM;SACZ,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACb,IACE,KAAK,CAAC,IAAI,KAAK,eAAe;YAC9B,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;YACvB,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAC5B,CAAC;YACD,MAAM,cAAc,GAAG,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACvE,MAAM,WAAW,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAE7C,OAAO;gBACL,OAAO,EAAE,WAAW,CAAC,OAAO;gBAC5B,IAAI,EAAE,WAAW,CAAC,IAAI;gBACtB,IAAI,EAAE,WAAW,CAAC,IAAI;gBACtB,KAAK,EAAG,WAAmB,CAAC,QAAQ;aACrC,CAAC;QACJ,CAAC;QAED,OAAO;YACL,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,KAAK,EAAG,KAAa,CAAC,QAAQ;SAC/B,CAAC;IACJ,CAAC,CAAC;SACD,MAAM,CAAC,OAAO,CAAC,CAAC;AACrB,CAAC;AAED,SAAgB,aAAa,CAAC,CAAW;IACvC,MAAM,MAAM,GAAG,yBAAyB,CAAC,CAAC,CAAC,CAAC;IAC5C,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;QACvB,OAAO,CAAC,KAAK,CAAC,0BAAc,EAAE,eAAe,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9D,OAAO,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAClD,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,WAAW,IAAI,KAAK,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;YACtE,OAAO,CAAC,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACpB,CAAC,CAAC,CAAC;AACL,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@featurevisor/core",
3
- "version": "2.12.0",
3
+ "version": "2.14.0",
4
4
  "description": "Core package of Featurevisor for Node.js usage",
5
5
  "main": "lib/index.js",
6
6
  "types": "lib/index.d.ts",
@@ -49,5 +49,5 @@
49
49
  "yargs": "^17.7.2",
50
50
  "zod": "^3.22.4"
51
51
  },
52
- "gitHead": "d7542c7da3615c821b031912e4d12ca4c81e5db2"
52
+ "gitHead": "626b7b14c3811d495dad8ac89980210f1bcdf226"
53
53
  }
@@ -30,6 +30,10 @@ import { generateHashForDatafile, generateHashForFeature, getSegmentHashes } fro
30
30
  import { getTraffic } from "./traffic";
31
31
  import { getFeatureRanges } from "./getFeatureRanges";
32
32
  import { convertToV1 } from "./convertToV1";
33
+ import {
34
+ resolveMutationsForMultipleVariables,
35
+ resolveMutationsForSingleVariable,
36
+ } from "./mutateVariables";
33
37
 
34
38
  export interface CustomDatafileOptions {
35
39
  featureKey?: string;
@@ -210,7 +214,10 @@ export async function buildDatafile(
210
214
  const mappedVariation: any = {
211
215
  value: variation.value,
212
216
  weight: variation.weight, // @NOTE: added so state files can maintain weight info, but datafiles don't need this. find a way to remove it from datafiles later
213
- variables: variation.variables,
217
+ variables: resolveMutationsForMultipleVariables(
218
+ parsedFeature.variablesSchema,
219
+ variation.variables,
220
+ ),
214
221
  variableOverrides: variation.variableOverrides,
215
222
  };
216
223
 
@@ -235,7 +242,11 @@ export async function buildDatafile(
235
242
  projectConfig.stringify && typeof override.conditions !== "string"
236
243
  ? JSON.stringify(override.conditions)
237
244
  : override.conditions,
238
- value: override.value,
245
+ value: resolveMutationsForSingleVariable(
246
+ parsedFeature.variablesSchema,
247
+ variableKey,
248
+ override.value,
249
+ ),
239
250
  };
240
251
  }
241
252
 
@@ -252,7 +263,11 @@ export async function buildDatafile(
252
263
  projectConfig.stringify && typeof override.segments !== "string"
253
264
  ? JSON.stringify(override.segments)
254
265
  : override.segments,
255
- value: override.value,
266
+ value: resolveMutationsForSingleVariable(
267
+ parsedFeature.variablesSchema,
268
+ variableKey,
269
+ override.value,
270
+ ),
256
271
  };
257
272
  }
258
273
 
@@ -272,6 +287,10 @@ export async function buildDatafile(
272
287
  ).map((t: Traffic) => {
273
288
  return {
274
289
  ...t,
290
+ variables: resolveMutationsForMultipleVariables(
291
+ parsedFeature.variablesSchema,
292
+ t.variables,
293
+ ),
275
294
  segments:
276
295
  typeof t.segments !== "string" && projectConfig.stringify
277
296
  ? JSON.stringify(t.segments)
@@ -352,6 +371,13 @@ export async function buildDatafile(
352
371
  : f.conditions;
353
372
  }
354
373
 
374
+ if (f.variables) {
375
+ f.variables = resolveMutationsForMultipleVariables(
376
+ parsedFeature.variablesSchema,
377
+ f.variables,
378
+ );
379
+ }
380
+
355
381
  return f;
356
382
  });
357
383
  }