@featurevisor/core 1.5.1 → 1.6.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 (60) hide show
  1. package/.eslintcache +1 -1
  2. package/CHANGELOG.md +11 -0
  3. package/coverage/clover.xml +2 -2
  4. package/coverage/lcov-report/index.html +1 -1
  5. package/coverage/lcov-report/lib/builder/allocator.js.html +1 -1
  6. package/coverage/lcov-report/lib/builder/index.html +1 -1
  7. package/coverage/lcov-report/lib/builder/traffic.js.html +1 -1
  8. package/coverage/lcov-report/lib/tester/checkIfObjectsAreEqual.js.html +1 -1
  9. package/coverage/lcov-report/lib/tester/index.html +1 -1
  10. package/coverage/lcov-report/lib/tester/matrix.js.html +1 -1
  11. package/coverage/lcov-report/src/builder/allocator.ts.html +1 -1
  12. package/coverage/lcov-report/src/builder/index.html +1 -1
  13. package/coverage/lcov-report/src/builder/traffic.ts.html +1 -1
  14. package/coverage/lcov-report/src/tester/checkIfObjectsAreEqual.ts.html +1 -1
  15. package/coverage/lcov-report/src/tester/index.html +1 -1
  16. package/coverage/lcov-report/src/tester/matrix.ts.html +1 -1
  17. package/lib/linter/attributeSchema.d.ts +17 -2
  18. package/lib/linter/attributeSchema.js +13 -11
  19. package/lib/linter/attributeSchema.js.map +1 -1
  20. package/lib/linter/checkPercentageExceedingSlot.d.ts +3 -0
  21. package/lib/linter/checkPercentageExceedingSlot.js +86 -0
  22. package/lib/linter/checkPercentageExceedingSlot.js.map +1 -0
  23. package/lib/linter/conditionSchema.d.ts +2 -2
  24. package/lib/linter/conditionSchema.js +112 -57
  25. package/lib/linter/conditionSchema.js.map +1 -1
  26. package/lib/linter/featureSchema.d.ts +229 -2
  27. package/lib/linter/featureSchema.js +195 -139
  28. package/lib/linter/featureSchema.js.map +1 -1
  29. package/lib/linter/groupSchema.d.ts +32 -2
  30. package/lib/linter/groupSchema.js +28 -97
  31. package/lib/linter/groupSchema.js.map +1 -1
  32. package/lib/linter/lintProject.js +169 -118
  33. package/lib/linter/lintProject.js.map +1 -1
  34. package/lib/linter/printError.d.ts +2 -0
  35. package/lib/linter/printError.js +20 -0
  36. package/lib/linter/printError.js.map +1 -0
  37. package/lib/linter/segmentSchema.d.ts +14 -2
  38. package/lib/linter/segmentSchema.js +12 -10
  39. package/lib/linter/segmentSchema.js.map +1 -1
  40. package/lib/linter/testSchema.d.ts +90 -2
  41. package/lib/linter/testSchema.js +49 -38
  42. package/lib/linter/testSchema.js.map +1 -1
  43. package/lib/tester/cliFormat.d.ts +1 -0
  44. package/lib/tester/cliFormat.js +2 -1
  45. package/lib/tester/cliFormat.js.map +1 -1
  46. package/package.json +4 -4
  47. package/src/linter/attributeSchema.ts +11 -9
  48. package/src/linter/checkPercentageExceedingSlot.ts +41 -0
  49. package/src/linter/conditionSchema.ts +120 -97
  50. package/src/linter/featureSchema.ts +241 -177
  51. package/src/linter/groupSchema.ts +38 -54
  52. package/src/linter/lintProject.ts +144 -62
  53. package/src/linter/printError.ts +21 -0
  54. package/src/linter/segmentSchema.ts +10 -8
  55. package/src/linter/testSchema.ts +67 -50
  56. package/src/tester/cliFormat.ts +1 -0
  57. package/lib/linter/printJoiError.d.ts +0 -2
  58. package/lib/linter/printJoiError.js +0 -14
  59. package/lib/linter/printJoiError.js.map +0 -1
  60. package/src/linter/printJoiError.ts +0 -11
@@ -1,66 +1,121 @@
1
1
  "use strict";
2
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
3
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
4
+ if (ar || !(i in from)) {
5
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
6
+ ar[i] = from[i];
7
+ }
8
+ }
9
+ return to.concat(ar || Array.prototype.slice.call(from));
10
+ };
2
11
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getConditionsJoiSchema = void 0;
4
- var Joi = require("joi");
5
- function getConditionsJoiSchema(projectConfig, availableAttributeKeys) {
6
- var _a;
7
- var plainConditionJoiSchema = Joi.object({
8
- attribute: (_a = Joi.string())
9
- .valid.apply(_a, availableAttributeKeys).required(),
10
- operator: Joi.string()
11
- .valid("equals", "notEquals",
12
+ exports.getConditionsZodSchema = void 0;
13
+ var zod_1 = require("zod");
14
+ var commonOperators = ["equals", "notEquals"];
15
+ var numericOperators = ["greaterThan", "greaterThanOrEquals", "lessThan", "lessThanOrEquals"];
16
+ var stringOperators = ["contains", "notContains", "startsWith", "endsWith"];
17
+ var semverOperators = [
18
+ "semverEquals",
19
+ "semverNotEquals",
20
+ "semverGreaterThan",
21
+ "semverGreaterThanOrEquals",
22
+ "semverLessThan",
23
+ "semverLessThanOrEquals",
24
+ ];
25
+ var dateOperators = ["before", "after"];
26
+ var arrayOperators = ["in", "notIn"];
27
+ function getConditionsZodSchema(projectConfig, availableAttributeKeys) {
28
+ var plainConditionZodSchema = zod_1.z
29
+ .object({
30
+ attribute: zod_1.z.string().refine(function (value) { return availableAttributeKeys.includes(value); }, function (value) { return ({
31
+ message: "Unknown attribute \"".concat(value, "\""),
32
+ }); }),
33
+ operator: zod_1.z.enum(__spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray([], commonOperators, true), numericOperators, true), stringOperators, true), semverOperators, true), dateOperators, true), arrayOperators, true)),
34
+ value: zod_1.z.union([
35
+ zod_1.z.string(),
36
+ zod_1.z.array(zod_1.z.string()),
37
+ zod_1.z.number(),
38
+ zod_1.z.boolean(),
39
+ zod_1.z.date(),
40
+ zod_1.z.null(),
41
+ ]),
42
+ })
43
+ .superRefine(function (data, context) {
44
+ // common
45
+ if (commonOperators.includes(data.operator) &&
46
+ !(data.value === null ||
47
+ typeof data.value === "string" ||
48
+ typeof data.value === "number" ||
49
+ typeof data.value === "boolean" ||
50
+ data.value instanceof Date ||
51
+ data.value === null)) {
52
+ context.addIssue({
53
+ code: zod_1.z.ZodIssueCode.custom,
54
+ message: "when operator is \"".concat(data.operator, "\", value has to be either a string, number, boolean, date or null"),
55
+ path: ["value"],
56
+ });
57
+ }
12
58
  // numeric
13
- "greaterThan", "greaterThanOrEquals", "lessThan", "lessThanOrEquals",
59
+ if (numericOperators.includes(data.operator) && typeof data.value !== "number") {
60
+ context.addIssue({
61
+ code: zod_1.z.ZodIssueCode.custom,
62
+ message: "when operator is \"".concat(data.operator, "\", value must be a number"),
63
+ path: ["value"],
64
+ });
65
+ }
14
66
  // string
15
- "contains", "notContains", "startsWith", "endsWith",
16
- // semver (string)
17
- "semverEquals", "semverNotEquals", "semverGreaterThan", "semverGreaterThanOrEquals", "semverLessThan", "semverLessThanOrEquals",
18
- // date comparisons
19
- "before", "after",
20
- // array of strings
21
- "in", "notIn")
22
- .required(),
23
- value: Joi.when("operator", {
24
- is: Joi.string().valid("equals", "notEquals"),
25
- then: Joi.alternatives()
26
- .try(Joi.string(), Joi.number(), Joi.boolean(), Joi.date())
27
- .allow(null)
28
- .required(),
29
- })
30
- .when("operator", {
31
- is: Joi.string().valid("greaterThan", "greaterThanOrEquals", "lessThan", "lessThanOrEquals"),
32
- then: Joi.number().required(),
33
- })
34
- .when("operator", {
35
- is: Joi.string().valid("contains", "notContains", "startsWith", "endsWith"),
36
- then: Joi.string().required(),
67
+ if (stringOperators.includes(data.operator) && typeof data.value !== "string") {
68
+ context.addIssue({
69
+ code: zod_1.z.ZodIssueCode.custom,
70
+ message: "when operator is \"".concat(data.operator, "\", value must be a string"),
71
+ path: ["value"],
72
+ });
73
+ }
74
+ // semver
75
+ if (semverOperators.includes(data.operator) && typeof data.value !== "string") {
76
+ context.addIssue({
77
+ code: zod_1.z.ZodIssueCode.custom,
78
+ message: "when operator is \"".concat(data.operator, "\", value must be a string"),
79
+ path: ["value"],
80
+ });
81
+ }
82
+ // date
83
+ if (dateOperators.includes(data.operator) && !(data.value instanceof Date)) {
84
+ context.addIssue({
85
+ code: zod_1.z.ZodIssueCode.custom,
86
+ message: "when operator is \"".concat(data.operator, "\", value must be a date"),
87
+ path: ["value"],
88
+ });
89
+ }
90
+ // array
91
+ if (arrayOperators.includes(data.operator) && !Array.isArray(data.value)) {
92
+ context.addIssue({
93
+ code: zod_1.z.ZodIssueCode.custom,
94
+ message: "when operator is \"".concat(data.operator, "\", value must be an array of strings"),
95
+ path: ["value"],
96
+ });
97
+ }
98
+ });
99
+ var andOrNotConditionZodSchema = zod_1.z.union([
100
+ zod_1.z
101
+ .object({
102
+ and: zod_1.z.array(zod_1.z.lazy(function () { return conditionZodSchema; })),
37
103
  })
38
- .when("operator", {
39
- is: Joi.string().valid("semverEquals", "semverNotEquals", "semverGreaterThan", "semverGreaterThanOrEquals", "semverLessThan", "semverLessThanOrEquals"),
40
- then: Joi.string().required(),
104
+ .strict(),
105
+ zod_1.z
106
+ .object({
107
+ or: zod_1.z.array(zod_1.z.lazy(function () { return conditionZodSchema; })),
41
108
  })
42
- .when("operator", {
43
- is: Joi.string().valid("before", "after"),
44
- then: Joi.alternatives(Joi.date(), Joi.string()).required(),
109
+ .strict(),
110
+ zod_1.z
111
+ .object({
112
+ not: zod_1.z.array(zod_1.z.lazy(function () { return conditionZodSchema; })),
45
113
  })
46
- .when("operator", {
47
- is: Joi.string().valid("in", "notIn"),
48
- then: Joi.array().items(Joi.string()).required(),
49
- }),
50
- });
51
- var andOrNotConditionJoiSchema = Joi.alternatives()
52
- .try(Joi.object({
53
- and: Joi.array().items(Joi.link("#andOrNotCondition"), plainConditionJoiSchema),
54
- }), Joi.object({
55
- or: Joi.array().items(Joi.link("#andOrNotCondition"), plainConditionJoiSchema),
56
- }), Joi.object({
57
- // @TODO: allow plainConditionJoiSchema as well?
58
- not: Joi.array().items(Joi.link("#andOrNotCondition"), plainConditionJoiSchema),
59
- }))
60
- .id("andOrNotCondition");
61
- var conditionJoiSchema = Joi.alternatives().try(andOrNotConditionJoiSchema, plainConditionJoiSchema);
62
- var conditionsJoiSchema = Joi.alternatives().try(conditionJoiSchema, Joi.array().items(conditionJoiSchema));
63
- return conditionsJoiSchema;
114
+ .strict(),
115
+ ]);
116
+ var conditionZodSchema = zod_1.z.union([andOrNotConditionZodSchema, plainConditionZodSchema]);
117
+ var conditionsZodSchema = zod_1.z.union([conditionZodSchema, zod_1.z.array(conditionZodSchema)]);
118
+ return conditionsZodSchema;
64
119
  }
65
- exports.getConditionsJoiSchema = getConditionsJoiSchema;
120
+ exports.getConditionsZodSchema = getConditionsZodSchema;
66
121
  //# sourceMappingURL=conditionSchema.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"conditionSchema.js","sourceRoot":"","sources":["../../src/linter/conditionSchema.ts"],"names":[],"mappings":";;;AAAA,yBAA2B;AAI3B,SAAgB,sBAAsB,CACpC,aAA4B,EAC5B,sBAAgC;;IAEhC,IAAM,uBAAuB,GAAG,GAAG,CAAC,MAAM,CAAC;QACzC,SAAS,EAAE,CAAA,KAAA,GAAG,CAAC,MAAM,EAAE,CAAA;aACpB,KAAK,WAAI,sBAAsB,EAC/B,QAAQ,EAAE;QACb,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE;aACnB,KAAK,CACJ,QAAQ,EACR,WAAW;QAEX,UAAU;QACV,aAAa,EACb,qBAAqB,EACrB,UAAU,EACV,kBAAkB;QAElB,SAAS;QACT,UAAU,EACV,aAAa,EACb,YAAY,EACZ,UAAU;QAEV,kBAAkB;QAClB,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACnB,2BAA2B,EAC3B,gBAAgB,EAChB,wBAAwB;QAExB,mBAAmB;QACnB,QAAQ,EACR,OAAO;QAEP,mBAAmB;QACnB,IAAI,EACJ,OAAO,CACR;aACA,QAAQ,EAAE;QACb,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE;YAC1B,EAAE,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,WAAW,CAAC;YAC7C,IAAI,EAAE,GAAG,CAAC,YAAY,EAAE;iBACrB,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,GAAG,CAAC,MAAM,EAAE,EAAE,GAAG,CAAC,OAAO,EAAE,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC;iBAC1D,KAAK,CAAC,IAAI,CAAC;iBACX,QAAQ,EAAE;SACd,CAAC;aACC,IAAI,CAAC,UAAU,EAAE;YAChB,EAAE,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,KAAK,CACpB,aAAa,EACb,qBAAqB,EACrB,UAAU,EACV,kBAAkB,CACnB;YACD,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;SAC9B,CAAC;aACD,IAAI,CAAC,UAAU,EAAE;YAChB,EAAE,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,aAAa,EAAE,YAAY,EAAE,UAAU,CAAC;YAC3E,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;SAC9B,CAAC;aACD,IAAI,CAAC,UAAU,EAAE;YAChB,EAAE,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,KAAK,CACpB,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACnB,2BAA2B,EAC3B,gBAAgB,EAChB,wBAAwB,CACzB;YACD,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;SAC9B,CAAC;aACD,IAAI,CAAC,UAAU,EAAE;YAChB,EAAE,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC;YACzC,IAAI,EAAE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;SAC5D,CAAC;aACD,IAAI,CAAC,UAAU,EAAE;YAChB,EAAE,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC;YACrC,IAAI,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;SACjD,CAAC;KACL,CAAC,CAAC;IAEH,IAAM,0BAA0B,GAAG,GAAG,CAAC,YAAY,EAAE;SAClD,GAAG,CACF,GAAG,CAAC,MAAM,CAAC;QACT,GAAG,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,EAAE,uBAAuB,CAAC;KAChF,CAAC,EACF,GAAG,CAAC,MAAM,CAAC;QACT,EAAE,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,EAAE,uBAAuB,CAAC;KAC/E,CAAC,EACF,GAAG,CAAC,MAAM,CAAC;QACT,gDAAgD;QAChD,GAAG,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,EAAE,uBAAuB,CAAC;KAChF,CAAC,CACH;SACA,EAAE,CAAC,mBAAmB,CAAC,CAAC;IAE3B,IAAM,kBAAkB,GAAG,GAAG,CAAC,YAAY,EAAE,CAAC,GAAG,CAC/C,0BAA0B,EAC1B,uBAAuB,CACxB,CAAC;IAEF,IAAM,mBAAmB,GAAG,GAAG,CAAC,YAAY,EAAE,CAAC,GAAG,CAChD,kBAAkB,EAClB,GAAG,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,kBAAkB,CAAC,CACtC,CAAC;IAEF,OAAO,mBAAmB,CAAC;AAC7B,CAAC;AA7GD,wDA6GC"}
1
+ {"version":3,"file":"conditionSchema.js","sourceRoot":"","sources":["../../src/linter/conditionSchema.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,230 @@
1
- import * as Joi from "joi";
1
+ import { z } from "zod";
2
2
  import { ProjectConfig } from "../config";
3
- export declare function getFeatureJoiSchema(projectConfig: ProjectConfig, conditionsJoiSchema: any, availableSegmentKeys: string[], availableFeatureKeys: string[]): Joi.ObjectSchema<any>;
3
+ export declare function getFeatureZodSchema(projectConfig: ProjectConfig, conditionsZodSchema: any, availableAttributeKeys: [string, ...string[]], availableSegmentKeys: [string, ...string[]], availableFeatureKeys: [string, ...string[]]): z.ZodObject<{
4
+ archived: z.ZodOptional<z.ZodBoolean>;
5
+ deprecated: z.ZodOptional<z.ZodBoolean>;
6
+ description: z.ZodString;
7
+ tags: z.ZodEffects<z.ZodArray<z.ZodEffects<z.ZodString, string, string>, "many">, string[], string[]>;
8
+ required: z.ZodOptional<z.ZodArray<z.ZodUnion<[z.ZodEffects<z.ZodString, string, string>, z.ZodObject<{
9
+ key: z.ZodEffects<z.ZodString, string, string>;
10
+ variation: z.ZodOptional<z.ZodString>;
11
+ }, "strict", z.ZodTypeAny, {
12
+ key?: string;
13
+ variation?: string;
14
+ }, {
15
+ key?: string;
16
+ variation?: string;
17
+ }>]>, "many">>;
18
+ bucketBy: z.ZodUnion<[z.ZodEffects<z.ZodString, string, string>, z.ZodArray<z.ZodEffects<z.ZodString, string, string>, "many">, z.ZodObject<{
19
+ or: z.ZodArray<z.ZodEffects<z.ZodString, string, string>, "many">;
20
+ }, "strict", z.ZodTypeAny, {
21
+ or?: string[];
22
+ }, {
23
+ or?: string[];
24
+ }>]>;
25
+ variablesSchema: z.ZodOptional<z.ZodEffects<z.ZodArray<z.ZodObject<{
26
+ key: z.ZodEffects<z.ZodString, string, string>;
27
+ type: z.ZodEnum<["string", "integer", "boolean", "double", "array", "object", "json"]>;
28
+ description: z.ZodOptional<z.ZodString>;
29
+ defaultValue: z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodArray<z.ZodString, "many">, z.ZodEffects<z.ZodRecord<z.ZodString, z.ZodUnknown>, Record<string, unknown>, Record<string, unknown>>]>;
30
+ }, "strict", z.ZodTypeAny, {
31
+ key?: string;
32
+ type?: "string" | "boolean" | "object" | "json" | "integer" | "double" | "array";
33
+ description?: string;
34
+ defaultValue?: string | number | boolean | string[] | Record<string, unknown>;
35
+ }, {
36
+ key?: string;
37
+ type?: "string" | "boolean" | "object" | "json" | "integer" | "double" | "array";
38
+ description?: string;
39
+ defaultValue?: string | number | boolean | string[] | Record<string, unknown>;
40
+ }>, "many">, {
41
+ key?: string;
42
+ type?: "string" | "boolean" | "object" | "json" | "integer" | "double" | "array";
43
+ description?: string;
44
+ defaultValue?: string | number | boolean | string[] | Record<string, unknown>;
45
+ }[], {
46
+ key?: string;
47
+ type?: "string" | "boolean" | "object" | "json" | "integer" | "double" | "array";
48
+ description?: string;
49
+ defaultValue?: string | number | boolean | string[] | Record<string, unknown>;
50
+ }[]>>;
51
+ variations: z.ZodOptional<z.ZodEffects<z.ZodArray<z.ZodObject<{
52
+ description: z.ZodOptional<z.ZodString>;
53
+ value: z.ZodString;
54
+ weight: z.ZodNumber;
55
+ variables: z.ZodOptional<z.ZodArray<z.ZodObject<{
56
+ key: z.ZodString;
57
+ value: z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodArray<z.ZodString, "many">, z.ZodEffects<z.ZodRecord<z.ZodString, z.ZodUnknown>, Record<string, unknown>, Record<string, unknown>>]>;
58
+ overrides: z.ZodOptional<z.ZodArray<z.ZodUnion<[z.ZodObject<{
59
+ conditions: any;
60
+ value: z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodArray<z.ZodString, "many">, z.ZodEffects<z.ZodRecord<z.ZodString, z.ZodUnknown>, Record<string, unknown>, Record<string, unknown>>]>;
61
+ }, "strict", z.ZodTypeAny, {
62
+ conditions?: any;
63
+ value?: string | number | boolean | string[] | Record<string, unknown>;
64
+ }, {
65
+ conditions?: any;
66
+ value?: string | number | boolean | string[] | Record<string, unknown>;
67
+ }>, z.ZodObject<{
68
+ segments: z.ZodUnion<[z.ZodArray<any, "many">, any]>;
69
+ value: z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodArray<z.ZodString, "many">, z.ZodEffects<z.ZodRecord<z.ZodString, z.ZodUnknown>, Record<string, unknown>, Record<string, unknown>>]>;
70
+ }, "strict", z.ZodTypeAny, {
71
+ segments?: any;
72
+ value?: string | number | boolean | string[] | Record<string, unknown>;
73
+ }, {
74
+ segments?: any;
75
+ value?: string | number | boolean | string[] | Record<string, unknown>;
76
+ }>]>, "many">>;
77
+ }, "strict", z.ZodTypeAny, {
78
+ key?: string;
79
+ value?: string | number | boolean | string[] | Record<string, unknown>;
80
+ overrides?: ({
81
+ conditions?: any;
82
+ value?: string | number | boolean | string[] | Record<string, unknown>;
83
+ } | {
84
+ segments?: any;
85
+ value?: string | number | boolean | string[] | Record<string, unknown>;
86
+ })[];
87
+ }, {
88
+ key?: string;
89
+ value?: string | number | boolean | string[] | Record<string, unknown>;
90
+ overrides?: ({
91
+ conditions?: any;
92
+ value?: string | number | boolean | string[] | Record<string, unknown>;
93
+ } | {
94
+ segments?: any;
95
+ value?: string | number | boolean | string[] | Record<string, unknown>;
96
+ })[];
97
+ }>, "many">>;
98
+ }, "strict", z.ZodTypeAny, {
99
+ description?: string;
100
+ value?: string;
101
+ weight?: number;
102
+ variables?: {
103
+ key?: string;
104
+ value?: string | number | boolean | string[] | Record<string, unknown>;
105
+ overrides?: ({
106
+ conditions?: any;
107
+ value?: string | number | boolean | string[] | Record<string, unknown>;
108
+ } | {
109
+ segments?: any;
110
+ value?: string | number | boolean | string[] | Record<string, unknown>;
111
+ })[];
112
+ }[];
113
+ }, {
114
+ description?: string;
115
+ value?: string;
116
+ weight?: number;
117
+ variables?: {
118
+ key?: string;
119
+ value?: string | number | boolean | string[] | Record<string, unknown>;
120
+ overrides?: ({
121
+ conditions?: any;
122
+ value?: string | number | boolean | string[] | Record<string, unknown>;
123
+ } | {
124
+ segments?: any;
125
+ value?: string | number | boolean | string[] | Record<string, unknown>;
126
+ })[];
127
+ }[];
128
+ }>, "many">, {
129
+ description?: string;
130
+ value?: string;
131
+ weight?: number;
132
+ variables?: {
133
+ key?: string;
134
+ value?: string | number | boolean | string[] | Record<string, unknown>;
135
+ overrides?: ({
136
+ conditions?: any;
137
+ value?: string | number | boolean | string[] | Record<string, unknown>;
138
+ } | {
139
+ segments?: any;
140
+ value?: string | number | boolean | string[] | Record<string, unknown>;
141
+ })[];
142
+ }[];
143
+ }[], {
144
+ description?: string;
145
+ value?: string;
146
+ weight?: number;
147
+ variables?: {
148
+ key?: string;
149
+ value?: string | number | boolean | string[] | Record<string, unknown>;
150
+ overrides?: ({
151
+ conditions?: any;
152
+ value?: string | number | boolean | string[] | Record<string, unknown>;
153
+ } | {
154
+ segments?: any;
155
+ value?: string | number | boolean | string[] | Record<string, unknown>;
156
+ })[];
157
+ }[];
158
+ }[]>>;
159
+ environments: z.ZodObject<{}, "strict", z.ZodTypeAny, {}, {}>;
160
+ }, "strict", z.ZodTypeAny, {
161
+ archived?: boolean;
162
+ deprecated?: boolean;
163
+ description?: string;
164
+ tags?: string[];
165
+ required?: (string | {
166
+ key?: string;
167
+ variation?: string;
168
+ })[];
169
+ bucketBy?: string | string[] | {
170
+ or?: string[];
171
+ };
172
+ variablesSchema?: {
173
+ key?: string;
174
+ type?: "string" | "boolean" | "object" | "json" | "integer" | "double" | "array";
175
+ description?: string;
176
+ defaultValue?: string | number | boolean | string[] | Record<string, unknown>;
177
+ }[];
178
+ variations?: {
179
+ description?: string;
180
+ value?: string;
181
+ weight?: number;
182
+ variables?: {
183
+ key?: string;
184
+ value?: string | number | boolean | string[] | Record<string, unknown>;
185
+ overrides?: ({
186
+ conditions?: any;
187
+ value?: string | number | boolean | string[] | Record<string, unknown>;
188
+ } | {
189
+ segments?: any;
190
+ value?: string | number | boolean | string[] | Record<string, unknown>;
191
+ })[];
192
+ }[];
193
+ }[];
194
+ environments?: {};
195
+ }, {
196
+ archived?: boolean;
197
+ deprecated?: boolean;
198
+ description?: string;
199
+ tags?: string[];
200
+ required?: (string | {
201
+ key?: string;
202
+ variation?: string;
203
+ })[];
204
+ bucketBy?: string | string[] | {
205
+ or?: string[];
206
+ };
207
+ variablesSchema?: {
208
+ key?: string;
209
+ type?: "string" | "boolean" | "object" | "json" | "integer" | "double" | "array";
210
+ description?: string;
211
+ defaultValue?: string | number | boolean | string[] | Record<string, unknown>;
212
+ }[];
213
+ variations?: {
214
+ description?: string;
215
+ value?: string;
216
+ weight?: number;
217
+ variables?: {
218
+ key?: string;
219
+ value?: string | number | boolean | string[] | Record<string, unknown>;
220
+ overrides?: ({
221
+ conditions?: any;
222
+ value?: string | number | boolean | string[] | Record<string, unknown>;
223
+ } | {
224
+ segments?: any;
225
+ value?: string | number | boolean | string[] | Record<string, unknown>;
226
+ })[];
227
+ }[];
228
+ }[];
229
+ environments?: {};
230
+ }>;