@featurevisor/core 2.10.0 → 2.12.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 (79) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/coverage/clover.xml +684 -3
  3. package/coverage/coverage-final.json +4 -0
  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 +1 -1
  9. package/coverage/lcov-report/builder/revision.ts.html +1 -1
  10. package/coverage/lcov-report/builder/traffic.ts.html +1 -1
  11. package/coverage/lcov-report/index.html +25 -10
  12. package/coverage/lcov-report/linter/conditionSchema.ts.html +775 -0
  13. package/coverage/lcov-report/linter/featureSchema.ts.html +4924 -0
  14. package/coverage/lcov-report/linter/index.html +161 -0
  15. package/coverage/lcov-report/linter/schema.ts.html +1471 -0
  16. package/coverage/lcov-report/linter/segmentSchema.ts.html +130 -0
  17. package/coverage/lcov-report/list/index.html +1 -1
  18. package/coverage/lcov-report/list/matrix.ts.html +1 -1
  19. package/coverage/lcov-report/parsers/index.html +1 -1
  20. package/coverage/lcov-report/parsers/json.ts.html +1 -1
  21. package/coverage/lcov-report/parsers/yml.ts.html +1 -1
  22. package/coverage/lcov-report/tester/helpers.ts.html +1 -1
  23. package/coverage/lcov-report/tester/index.html +1 -1
  24. package/coverage/lcov.info +1471 -0
  25. package/lib/builder/buildDatafile.js +15 -1
  26. package/lib/builder/buildDatafile.js.map +1 -1
  27. package/lib/config/projectConfig.d.ts +2 -0
  28. package/lib/config/projectConfig.js +3 -1
  29. package/lib/config/projectConfig.js.map +1 -1
  30. package/lib/datasource/datasource.d.ts +6 -1
  31. package/lib/datasource/datasource.js +16 -0
  32. package/lib/datasource/datasource.js.map +1 -1
  33. package/lib/datasource/filesystemAdapter.js +10 -0
  34. package/lib/datasource/filesystemAdapter.js.map +1 -1
  35. package/lib/generate-code/typescript.js +283 -49
  36. package/lib/generate-code/typescript.js.map +1 -1
  37. package/lib/linter/conditionSchema.spec.d.ts +1 -0
  38. package/lib/linter/conditionSchema.spec.js +331 -0
  39. package/lib/linter/conditionSchema.spec.js.map +1 -0
  40. package/lib/linter/featureSchema.d.ts +153 -17
  41. package/lib/linter/featureSchema.js +536 -49
  42. package/lib/linter/featureSchema.js.map +1 -1
  43. package/lib/linter/featureSchema.spec.d.ts +1 -0
  44. package/lib/linter/featureSchema.spec.js +978 -0
  45. package/lib/linter/featureSchema.spec.js.map +1 -0
  46. package/lib/linter/lintProject.js +67 -1
  47. package/lib/linter/lintProject.js.map +1 -1
  48. package/lib/linter/schema.d.ts +42 -0
  49. package/lib/linter/schema.js +417 -0
  50. package/lib/linter/schema.js.map +1 -0
  51. package/lib/linter/schema.spec.d.ts +1 -0
  52. package/lib/linter/schema.spec.js +483 -0
  53. package/lib/linter/schema.spec.js.map +1 -0
  54. package/lib/linter/segmentSchema.spec.d.ts +1 -0
  55. package/lib/linter/segmentSchema.spec.js +231 -0
  56. package/lib/linter/segmentSchema.spec.js.map +1 -0
  57. package/lib/tester/testFeature.js +5 -3
  58. package/lib/tester/testFeature.js.map +1 -1
  59. package/lib/utils/git.js +3 -0
  60. package/lib/utils/git.js.map +1 -1
  61. package/package.json +5 -5
  62. package/src/builder/buildDatafile.ts +17 -1
  63. package/src/config/projectConfig.ts +3 -0
  64. package/src/datasource/datasource.ts +23 -0
  65. package/src/datasource/filesystemAdapter.ts +7 -0
  66. package/src/generate-code/typescript.ts +333 -52
  67. package/src/linter/conditionSchema.spec.ts +446 -0
  68. package/src/linter/featureSchema.spec.ts +1218 -0
  69. package/src/linter/featureSchema.ts +747 -70
  70. package/src/linter/lintProject.ts +84 -0
  71. package/src/linter/schema.spec.ts +617 -0
  72. package/src/linter/schema.ts +462 -0
  73. package/src/linter/segmentSchema.spec.ts +273 -0
  74. package/src/tester/testFeature.ts +5 -3
  75. package/src/utils/git.ts +2 -0
  76. package/lib/linter/propertySchema.d.ts +0 -5
  77. package/lib/linter/propertySchema.js +0 -43
  78. package/lib/linter/propertySchema.js.map +0 -1
  79. package/src/linter/propertySchema.ts +0 -47
@@ -0,0 +1,331 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const conditionSchema_1 = require("./conditionSchema");
4
+ function minimalProjectConfig() {
5
+ return {
6
+ featuresDirectoryPath: "",
7
+ segmentsDirectoryPath: "",
8
+ attributesDirectoryPath: "",
9
+ groupsDirectoryPath: "",
10
+ schemasDirectoryPath: "",
11
+ testsDirectoryPath: "",
12
+ stateDirectoryPath: "",
13
+ datafilesDirectoryPath: "",
14
+ datafileNamePattern: "",
15
+ revisionFileName: "",
16
+ siteExportDirectoryPath: "",
17
+ environments: ["staging", "production"],
18
+ tags: ["all"],
19
+ adapter: {},
20
+ plugins: [],
21
+ defaultBucketBy: "userId",
22
+ parser: "yml",
23
+ prettyState: true,
24
+ prettyDatafile: false,
25
+ stringify: true,
26
+ };
27
+ }
28
+ const TEST_ATTRIBUTES = ["userId", "country", "device", "email"];
29
+ function getConditionsSchema() {
30
+ return (0, conditionSchema_1.getConditionsZodSchema)(minimalProjectConfig(), TEST_ATTRIBUTES);
31
+ }
32
+ function parseConditions(input) {
33
+ return getConditionsSchema().safeParse(input);
34
+ }
35
+ function expectConditionsSuccess(input) {
36
+ const result = parseConditions(input);
37
+ expect(result.success).toBe(true);
38
+ if (!result.success) {
39
+ const err = result.error;
40
+ const msg = err.issues.map((i) => `${i.path.join(".")}: ${i.message}`).join("; ");
41
+ throw new Error(`Expected conditions to pass: ${msg}`);
42
+ }
43
+ }
44
+ function expectConditionsFailure(input, messageSubstring) {
45
+ const result = parseConditions(input);
46
+ expect(result.success).toBe(false);
47
+ if (result.success)
48
+ throw new Error("Expected conditions to fail");
49
+ const err = result.error;
50
+ if (messageSubstring) {
51
+ const messages = err.issues
52
+ .map((i) => (typeof i.message === "string" ? i.message : ""))
53
+ .join(" ");
54
+ expect(messages).toContain(messageSubstring);
55
+ }
56
+ return err;
57
+ }
58
+ /** Assert that an intentional mistake produces an error at the expected path with expected message. */
59
+ function expectConditionErrorSurfaces(input, opts) {
60
+ const err = expectConditionsFailure(input, opts.messageContains);
61
+ const pathStrings = err.issues.map((i) => i.path.join("."));
62
+ const hasMatchingPath = pathStrings.some((p) => opts.pathContains.every((seg) => p.includes(seg)));
63
+ expect(hasMatchingPath).toBe(true);
64
+ }
65
+ describe("conditionSchema.ts :: getConditionsZodSchema", () => {
66
+ describe("attribute", () => {
67
+ it("accepts condition when attribute is in available list", () => {
68
+ expectConditionsSuccess({
69
+ attribute: "userId",
70
+ operator: "equals",
71
+ value: "u1",
72
+ });
73
+ });
74
+ it("rejects condition when attribute is unknown", () => {
75
+ expectConditionsFailure({
76
+ attribute: "unknownAttr",
77
+ operator: "equals",
78
+ value: "x",
79
+ }, "Unknown attribute");
80
+ });
81
+ });
82
+ describe("operator and value: common (equals, notEquals)", () => {
83
+ it("accepts string value with equals", () => {
84
+ expectConditionsSuccess({ attribute: "userId", operator: "equals", value: "u1" });
85
+ });
86
+ it("accepts number value with equals", () => {
87
+ expectConditionsSuccess({ attribute: "userId", operator: "equals", value: 42 });
88
+ });
89
+ it("accepts boolean value with equals", () => {
90
+ expectConditionsSuccess({ attribute: "device", operator: "equals", value: true });
91
+ });
92
+ it("accepts null value with equals", () => {
93
+ expectConditionsSuccess({ attribute: "userId", operator: "equals", value: null });
94
+ });
95
+ it("rejects array value with equals", () => {
96
+ expectConditionsFailure({ attribute: "userId", operator: "equals", value: ["a", "b"] }, "value has to be");
97
+ });
98
+ });
99
+ describe("operator and value: numeric", () => {
100
+ it("accepts number value with greaterThan", () => {
101
+ expectConditionsSuccess({
102
+ attribute: "userId",
103
+ operator: "greaterThan",
104
+ value: 10,
105
+ });
106
+ });
107
+ it("rejects string value with greaterThan", () => {
108
+ expectConditionsFailure({ attribute: "userId", operator: "greaterThan", value: "10" }, "value must be a number");
109
+ });
110
+ it("rejects missing value with lessThan", () => {
111
+ const result = parseConditions({
112
+ attribute: "userId",
113
+ operator: "lessThan",
114
+ });
115
+ expect(result.success).toBe(false);
116
+ });
117
+ });
118
+ describe("operator and value: string", () => {
119
+ it("accepts string value with contains", () => {
120
+ expectConditionsSuccess({
121
+ attribute: "email",
122
+ operator: "contains",
123
+ value: "@",
124
+ });
125
+ });
126
+ it("rejects number value with startsWith", () => {
127
+ expectConditionsFailure({ attribute: "country", operator: "startsWith", value: 123 }, "value must be a string");
128
+ });
129
+ });
130
+ describe("operator and value: date", () => {
131
+ it("accepts ISO 8601 string with before", () => {
132
+ expectConditionsSuccess({
133
+ attribute: "userId",
134
+ operator: "before",
135
+ value: "2025-12-31T23:59:59Z",
136
+ });
137
+ });
138
+ it("rejects non-ISO string with after", () => {
139
+ expectConditionsFailure({ attribute: "userId", operator: "after", value: "not-a-date" }, "ISO 8601");
140
+ });
141
+ it("rejects missing value with before", () => {
142
+ expectConditionsFailure({ attribute: "userId", operator: "before" }, "value must be provided");
143
+ });
144
+ });
145
+ describe("operator and value: array (in, notIn)", () => {
146
+ it("accepts array of strings with in", () => {
147
+ expectConditionsSuccess({
148
+ attribute: "country",
149
+ operator: "in",
150
+ value: ["de", "fr", "nl"],
151
+ });
152
+ });
153
+ it("rejects non-array value with notIn", () => {
154
+ expectConditionsFailure({ attribute: "country", operator: "notIn", value: "de" }, "value must be an array");
155
+ });
156
+ });
157
+ describe("operator and value: regex (matches, notMatches)", () => {
158
+ it("accepts string value with matches", () => {
159
+ expectConditionsSuccess({
160
+ attribute: "email",
161
+ operator: "matches",
162
+ value: "^[a-z]+@",
163
+ });
164
+ });
165
+ it("accepts regexFlags with matches", () => {
166
+ expectConditionsSuccess({
167
+ attribute: "email",
168
+ operator: "matches",
169
+ value: "hello",
170
+ regexFlags: "i",
171
+ });
172
+ });
173
+ it("rejects invalid regexFlags", () => {
174
+ expectConditionsFailure({
175
+ attribute: "email",
176
+ operator: "matches",
177
+ value: "x",
178
+ regexFlags: "invalid",
179
+ }, "regexFlags");
180
+ });
181
+ it("rejects regexFlags when operator is not matches/notMatches", () => {
182
+ expectConditionsFailure({
183
+ attribute: "userId",
184
+ operator: "equals",
185
+ value: "u1",
186
+ regexFlags: "i",
187
+ }, "not needed");
188
+ });
189
+ });
190
+ describe("operator: exists, notExists (no value)", () => {
191
+ it("accepts condition without value for exists", () => {
192
+ expectConditionsSuccess({
193
+ attribute: "userId",
194
+ operator: "exists",
195
+ });
196
+ });
197
+ it("rejects value when operator is exists", () => {
198
+ expectConditionsFailure({ attribute: "userId", operator: "exists", value: "x" }, "value is not needed");
199
+ });
200
+ });
201
+ describe("structure: and / or / not", () => {
202
+ it("accepts and array of conditions", () => {
203
+ expectConditionsSuccess({
204
+ and: [
205
+ { attribute: "userId", operator: "equals", value: "u1" },
206
+ { attribute: "country", operator: "equals", value: "de" },
207
+ ],
208
+ });
209
+ });
210
+ it("accepts or array of conditions", () => {
211
+ expectConditionsSuccess({
212
+ or: [
213
+ { attribute: "country", operator: "equals", value: "de" },
214
+ { attribute: "country", operator: "equals", value: "fr" },
215
+ ],
216
+ });
217
+ });
218
+ it("accepts not array of conditions", () => {
219
+ expectConditionsSuccess({
220
+ not: [{ attribute: "country", operator: "equals", value: "us" }],
221
+ });
222
+ });
223
+ it("accepts nested and inside or", () => {
224
+ expectConditionsSuccess({
225
+ or: [
226
+ {
227
+ and: [
228
+ { attribute: "userId", operator: "equals", value: "u1" },
229
+ { attribute: "device", operator: "equals", value: "mobile" },
230
+ ],
231
+ },
232
+ { attribute: "country", operator: "equals", value: "de" },
233
+ ],
234
+ });
235
+ });
236
+ it("rejects unknown attribute inside nested condition", () => {
237
+ expectConditionsFailure({
238
+ and: [
239
+ { attribute: "userId", operator: "equals", value: "u1" },
240
+ { attribute: "badAttr", operator: "equals", value: "x" },
241
+ ],
242
+ }, "Unknown attribute");
243
+ });
244
+ it("rejects invalid value type inside nested condition", () => {
245
+ expectConditionsFailure({
246
+ or: [{ attribute: "country", operator: "greaterThan", value: "string" }],
247
+ }, "value must be a number");
248
+ });
249
+ });
250
+ describe("everyone (*)", () => {
251
+ it("accepts literal * as conditions", () => {
252
+ expectConditionsSuccess("*");
253
+ });
254
+ });
255
+ describe("conditions as array", () => {
256
+ it("accepts array of plain conditions", () => {
257
+ expectConditionsSuccess([
258
+ { attribute: "userId", operator: "equals", value: "u1" },
259
+ { attribute: "country", operator: "equals", value: "de" },
260
+ ]);
261
+ });
262
+ it("rejects array containing invalid condition", () => {
263
+ expectConditionsFailure([
264
+ { attribute: "userId", operator: "equals", value: "u1" },
265
+ { attribute: "unknown", operator: "equals", value: "x" },
266
+ ], "Unknown attribute");
267
+ });
268
+ });
269
+ describe("strict: no extra keys on and/or/not", () => {
270
+ it("rejects and/or/not with extra key", () => {
271
+ const result = parseConditions({
272
+ and: [{ attribute: "userId", operator: "equals", value: "u1" }],
273
+ extraKey: true,
274
+ });
275
+ expect(result.success).toBe(false);
276
+ });
277
+ });
278
+ describe("operator enum", () => {
279
+ it("rejects unknown operator", () => {
280
+ const result = parseConditions({
281
+ attribute: "userId",
282
+ operator: "unknownOp",
283
+ value: "x",
284
+ });
285
+ expect(result.success).toBe(false);
286
+ });
287
+ it("accepts all common and numeric operators", () => {
288
+ expectConditionsSuccess({ attribute: "userId", operator: "notEquals", value: "x" });
289
+ expectConditionsSuccess({ attribute: "userId", operator: "greaterThanOrEquals", value: 0 });
290
+ expectConditionsSuccess({ attribute: "userId", operator: "lessThanOrEquals", value: 100 });
291
+ });
292
+ it("accepts semver operators with string value", () => {
293
+ expectConditionsSuccess({
294
+ attribute: "userId",
295
+ operator: "semverEquals",
296
+ value: "1.0.0",
297
+ });
298
+ });
299
+ });
300
+ describe("errors surface properly: intentional mistakes produce correct path and message", () => {
301
+ it("unknown attribute: error path includes attribute, message says Unknown attribute", () => {
302
+ expectConditionErrorSurfaces({ attribute: "typoAttr", operator: "equals", value: "x" }, { pathContains: ["attribute"], messageContains: "Unknown attribute" });
303
+ });
304
+ it("numeric operator with string value: error path points to value, message says number", () => {
305
+ expectConditionErrorSurfaces({ attribute: "userId", operator: "greaterThan", value: "10" }, { pathContains: ["value"], messageContains: "number" });
306
+ });
307
+ it("date operator with invalid string: error path points to value, message mentions ISO", () => {
308
+ expectConditionErrorSurfaces({ attribute: "userId", operator: "before", value: "not-a-date" }, { pathContains: ["value"], messageContains: "ISO" });
309
+ });
310
+ it("exists operator with value set: error path points to value, message says not needed", () => {
311
+ expectConditionErrorSurfaces({ attribute: "userId", operator: "exists", value: "x" }, { pathContains: ["value"], messageContains: "not needed" });
312
+ });
313
+ it("regexFlags when operator is not matches: error path points to regexFlags", () => {
314
+ expectConditionErrorSurfaces({
315
+ attribute: "userId",
316
+ operator: "equals",
317
+ value: "u1",
318
+ regexFlags: "i",
319
+ }, { pathContains: ["regexFlags"], messageContains: "not needed" });
320
+ });
321
+ it("nested condition with unknown attribute: error path goes into and.*.attribute", () => {
322
+ expectConditionErrorSurfaces({
323
+ and: [
324
+ { attribute: "userId", operator: "equals", value: "u1" },
325
+ { attribute: "badAttr", operator: "equals", value: "x" },
326
+ ],
327
+ }, { pathContains: ["attribute"], messageContains: "Unknown attribute" });
328
+ });
329
+ });
330
+ });
331
+ //# sourceMappingURL=conditionSchema.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conditionSchema.spec.js","sourceRoot":"","sources":["../../src/linter/conditionSchema.spec.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
+ import type { Schema } from "@featurevisor/types";
1
2
  import { z } from "zod";
2
3
  import { ProjectConfig } from "../config";
3
- export declare function getFeatureZodSchema(projectConfig: ProjectConfig, conditionsZodSchema: any, availableAttributeKeys: [string, ...string[]], availableSegmentKeys: [string, ...string[]], availableFeatureKeys: [string, ...string[]]): z.ZodEffects<z.ZodObject<{
4
+ export declare function getFeatureZodSchema(projectConfig: ProjectConfig, conditionsZodSchema: any, availableAttributeKeys: [string, ...string[]], availableSegmentKeys: [string, ...string[]], availableFeatureKeys: [string, ...string[]], availableSchemaKeys?: string[], schemasByKey?: Record<string, Schema>): z.ZodEffects<z.ZodObject<{
4
5
  archived: z.ZodOptional<z.ZodBoolean>;
5
6
  deprecated: z.ZodOptional<z.ZodBoolean>;
6
7
  description: z.ZodString;
@@ -22,29 +23,112 @@ export declare function getFeatureZodSchema(projectConfig: ProjectConfig, condit
22
23
  }, {
23
24
  or?: string[];
24
25
  }>]>;
25
- variablesSchema: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
26
+ variablesSchema: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodEffects<z.ZodObject<{
26
27
  deprecated: z.ZodOptional<z.ZodBoolean>;
27
- type: z.ZodUnion<[z.ZodLiteral<"json">, z.ZodEnum<["boolean", "string", "integer", "double", "object", "array"]>]>;
28
- items: z.ZodOptional<z.ZodType<import("@featurevisor/types").PropertySchema, z.ZodTypeDef, import("@featurevisor/types").PropertySchema>>;
29
- properties: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodType<import("@featurevisor/types").PropertySchema, z.ZodTypeDef, import("@featurevisor/types").PropertySchema>>>;
28
+ schema: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
29
+ type: z.ZodOptional<z.ZodUnion<[z.ZodLiteral<"json">, z.ZodEnum<["boolean", "string", "integer", "double", "object", "array"]>]>>;
30
+ items: z.ZodOptional<z.ZodType<Schema, z.ZodTypeDef, Schema>>;
31
+ properties: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodType<Schema, z.ZodTypeDef, Schema>>>;
32
+ required: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
33
+ enum: z.ZodOptional<z.ZodArray<z.ZodType<import("@featurevisor/types").Value, z.ZodTypeDef, import("@featurevisor/types").Value>, "many">>;
34
+ const: z.ZodOptional<z.ZodType<import("@featurevisor/types").Value, z.ZodTypeDef, import("@featurevisor/types").Value>>;
35
+ oneOf: z.ZodOptional<z.ZodArray<z.ZodType<Schema, z.ZodTypeDef, Schema>, "many">>;
36
+ minimum: z.ZodOptional<z.ZodNumber>;
37
+ maximum: z.ZodOptional<z.ZodNumber>;
38
+ minLength: z.ZodOptional<z.ZodNumber>;
39
+ maxLength: z.ZodOptional<z.ZodNumber>;
40
+ pattern: z.ZodOptional<z.ZodString>;
41
+ minItems: z.ZodOptional<z.ZodNumber>;
42
+ maxItems: z.ZodOptional<z.ZodNumber>;
43
+ uniqueItems: z.ZodOptional<z.ZodBoolean>;
30
44
  description: z.ZodOptional<z.ZodString>;
31
45
  defaultValue: z.ZodType<import("@featurevisor/types").Value, z.ZodTypeDef, import("@featurevisor/types").Value>;
32
46
  disabledValue: z.ZodOptional<z.ZodType<import("@featurevisor/types").Value, z.ZodTypeDef, import("@featurevisor/types").Value>>;
33
47
  useDefaultWhenDisabled: z.ZodOptional<z.ZodBoolean>;
34
48
  }, "strict", z.ZodTypeAny, {
35
49
  deprecated?: boolean;
50
+ schema?: string;
36
51
  type?: "string" | "boolean" | "object" | "json" | "integer" | "double" | "array";
37
- items?: import("@featurevisor/types").PropertySchema;
38
- properties?: Record<string, import("@featurevisor/types").PropertySchema>;
52
+ items?: Schema;
53
+ properties?: Record<string, Schema>;
54
+ required?: string[];
55
+ enum?: import("@featurevisor/types").Value[];
56
+ const?: import("@featurevisor/types").Value;
57
+ oneOf?: Schema[];
58
+ minimum?: number;
59
+ maximum?: number;
60
+ minLength?: number;
61
+ maxLength?: number;
62
+ pattern?: string;
63
+ minItems?: number;
64
+ maxItems?: number;
65
+ uniqueItems?: boolean;
39
66
  description?: string;
40
67
  defaultValue?: import("@featurevisor/types").Value;
41
68
  disabledValue?: import("@featurevisor/types").Value;
42
69
  useDefaultWhenDisabled?: boolean;
43
70
  }, {
44
71
  deprecated?: boolean;
72
+ schema?: string;
45
73
  type?: "string" | "boolean" | "object" | "json" | "integer" | "double" | "array";
46
- items?: import("@featurevisor/types").PropertySchema;
47
- properties?: Record<string, import("@featurevisor/types").PropertySchema>;
74
+ items?: Schema;
75
+ properties?: Record<string, Schema>;
76
+ required?: string[];
77
+ enum?: import("@featurevisor/types").Value[];
78
+ const?: import("@featurevisor/types").Value;
79
+ oneOf?: Schema[];
80
+ minimum?: number;
81
+ maximum?: number;
82
+ minLength?: number;
83
+ maxLength?: number;
84
+ pattern?: string;
85
+ minItems?: number;
86
+ maxItems?: number;
87
+ uniqueItems?: boolean;
88
+ description?: string;
89
+ defaultValue?: import("@featurevisor/types").Value;
90
+ disabledValue?: import("@featurevisor/types").Value;
91
+ useDefaultWhenDisabled?: boolean;
92
+ }>, {
93
+ deprecated?: boolean;
94
+ schema?: string;
95
+ type?: "string" | "boolean" | "object" | "json" | "integer" | "double" | "array";
96
+ items?: Schema;
97
+ properties?: Record<string, Schema>;
98
+ required?: string[];
99
+ enum?: import("@featurevisor/types").Value[];
100
+ const?: import("@featurevisor/types").Value;
101
+ oneOf?: Schema[];
102
+ minimum?: number;
103
+ maximum?: number;
104
+ minLength?: number;
105
+ maxLength?: number;
106
+ pattern?: string;
107
+ minItems?: number;
108
+ maxItems?: number;
109
+ uniqueItems?: boolean;
110
+ description?: string;
111
+ defaultValue?: import("@featurevisor/types").Value;
112
+ disabledValue?: import("@featurevisor/types").Value;
113
+ useDefaultWhenDisabled?: boolean;
114
+ }, {
115
+ deprecated?: boolean;
116
+ schema?: string;
117
+ type?: "string" | "boolean" | "object" | "json" | "integer" | "double" | "array";
118
+ items?: Schema;
119
+ properties?: Record<string, Schema>;
120
+ required?: string[];
121
+ enum?: import("@featurevisor/types").Value[];
122
+ const?: import("@featurevisor/types").Value;
123
+ oneOf?: Schema[];
124
+ minimum?: number;
125
+ maximum?: number;
126
+ minLength?: number;
127
+ maxLength?: number;
128
+ pattern?: string;
129
+ minItems?: number;
130
+ maxItems?: number;
131
+ uniqueItems?: boolean;
48
132
  description?: string;
49
133
  defaultValue?: import("@featurevisor/types").Value;
50
134
  disabledValue?: import("@featurevisor/types").Value;
@@ -363,9 +447,22 @@ export declare function getFeatureZodSchema(projectConfig: ProjectConfig, condit
363
447
  };
364
448
  variablesSchema?: Record<string, {
365
449
  deprecated?: boolean;
450
+ schema?: string;
366
451
  type?: "string" | "boolean" | "object" | "json" | "integer" | "double" | "array";
367
- items?: import("@featurevisor/types").PropertySchema;
368
- properties?: Record<string, import("@featurevisor/types").PropertySchema>;
452
+ items?: Schema;
453
+ properties?: Record<string, Schema>;
454
+ required?: string[];
455
+ enum?: import("@featurevisor/types").Value[];
456
+ const?: import("@featurevisor/types").Value;
457
+ oneOf?: Schema[];
458
+ minimum?: number;
459
+ maximum?: number;
460
+ minLength?: number;
461
+ maxLength?: number;
462
+ pattern?: string;
463
+ minItems?: number;
464
+ maxItems?: number;
465
+ uniqueItems?: boolean;
369
466
  description?: string;
370
467
  defaultValue?: import("@featurevisor/types").Value;
371
468
  disabledValue?: import("@featurevisor/types").Value;
@@ -440,9 +537,22 @@ export declare function getFeatureZodSchema(projectConfig: ProjectConfig, condit
440
537
  };
441
538
  variablesSchema?: Record<string, {
442
539
  deprecated?: boolean;
540
+ schema?: string;
443
541
  type?: "string" | "boolean" | "object" | "json" | "integer" | "double" | "array";
444
- items?: import("@featurevisor/types").PropertySchema;
445
- properties?: Record<string, import("@featurevisor/types").PropertySchema>;
542
+ items?: Schema;
543
+ properties?: Record<string, Schema>;
544
+ required?: string[];
545
+ enum?: import("@featurevisor/types").Value[];
546
+ const?: import("@featurevisor/types").Value;
547
+ oneOf?: Schema[];
548
+ minimum?: number;
549
+ maximum?: number;
550
+ minLength?: number;
551
+ maxLength?: number;
552
+ pattern?: string;
553
+ minItems?: number;
554
+ maxItems?: number;
555
+ uniqueItems?: boolean;
446
556
  description?: string;
447
557
  defaultValue?: import("@featurevisor/types").Value;
448
558
  disabledValue?: import("@featurevisor/types").Value;
@@ -517,9 +627,22 @@ export declare function getFeatureZodSchema(projectConfig: ProjectConfig, condit
517
627
  };
518
628
  variablesSchema?: Record<string, {
519
629
  deprecated?: boolean;
630
+ schema?: string;
520
631
  type?: "string" | "boolean" | "object" | "json" | "integer" | "double" | "array";
521
- items?: import("@featurevisor/types").PropertySchema;
522
- properties?: Record<string, import("@featurevisor/types").PropertySchema>;
632
+ items?: Schema;
633
+ properties?: Record<string, Schema>;
634
+ required?: string[];
635
+ enum?: import("@featurevisor/types").Value[];
636
+ const?: import("@featurevisor/types").Value;
637
+ oneOf?: Schema[];
638
+ minimum?: number;
639
+ maximum?: number;
640
+ minLength?: number;
641
+ maxLength?: number;
642
+ pattern?: string;
643
+ minItems?: number;
644
+ maxItems?: number;
645
+ uniqueItems?: boolean;
523
646
  description?: string;
524
647
  defaultValue?: import("@featurevisor/types").Value;
525
648
  disabledValue?: import("@featurevisor/types").Value;
@@ -594,9 +717,22 @@ export declare function getFeatureZodSchema(projectConfig: ProjectConfig, condit
594
717
  };
595
718
  variablesSchema?: Record<string, {
596
719
  deprecated?: boolean;
720
+ schema?: string;
597
721
  type?: "string" | "boolean" | "object" | "json" | "integer" | "double" | "array";
598
- items?: import("@featurevisor/types").PropertySchema;
599
- properties?: Record<string, import("@featurevisor/types").PropertySchema>;
722
+ items?: Schema;
723
+ properties?: Record<string, Schema>;
724
+ required?: string[];
725
+ enum?: import("@featurevisor/types").Value[];
726
+ const?: import("@featurevisor/types").Value;
727
+ oneOf?: Schema[];
728
+ minimum?: number;
729
+ maximum?: number;
730
+ minLength?: number;
731
+ maxLength?: number;
732
+ pattern?: string;
733
+ minItems?: number;
734
+ maxItems?: number;
735
+ uniqueItems?: boolean;
600
736
  description?: string;
601
737
  defaultValue?: import("@featurevisor/types").Value;
602
738
  disabledValue?: import("@featurevisor/types").Value;