@featurevisor/core
Version:
Core package of Featurevisor for Node.js usage
98 lines • 4.42 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getTestsZodSchema = getTestsZodSchema;
const zod_1 = require("zod");
function getTestsZodSchema(projectConfig, availableFeatureKeys, availableSegmentKeys) {
const matrixZodSchema = zod_1.z.record(zod_1.z.array(zod_1.z.union([
// allowed values in arrays
zod_1.z.string(),
zod_1.z.number(),
zod_1.z.boolean(),
zod_1.z.null(),
])));
const segmentTestZodSchema = zod_1.z
.object({
segment: zod_1.z.string().refine((value) => availableSegmentKeys.includes(value), (value) => ({
message: `Unknown segment "${value}"`,
})),
assertions: zod_1.z.array(zod_1.z
.object({
matrix: matrixZodSchema.optional(),
description: zod_1.z.string().optional(),
context: zod_1.z.record(zod_1.z.unknown()),
expectedToMatch: zod_1.z.boolean(),
})
.strict()),
})
.strict();
const featureTestZodSchema = zod_1.z
.object({
feature: zod_1.z.string().refine((value) => availableFeatureKeys.includes(value), (value) => ({
message: `Unknown feature "${value}"`,
})),
assertions: zod_1.z.array(zod_1.z
.object({
matrix: matrixZodSchema.optional(),
description: zod_1.z.string().optional(),
at: zod_1.z.union([
zod_1.z.number().min(0).max(100),
// because of supporting matrix
zod_1.z.string(),
]),
environment: Array.isArray(projectConfig.environments)
? zod_1.z.string().refine((value) => {
if (value.indexOf("${{") === 0) {
// allow unknown strings for matrix
return true;
}
// otherwise only known environments should be passed
if (Array.isArray(projectConfig.environments) &&
projectConfig.environments.includes(value)) {
return true;
}
return false;
}, (value) => ({
message: `Unknown environment "${value}"`,
}))
: zod_1.z.never().optional(),
// parent
sticky: zod_1.z.record(zod_1.z.record(zod_1.z.any())).optional(),
context: zod_1.z.record(zod_1.z.unknown()).optional(),
defaultVariationValue: zod_1.z.string().optional(),
defaultVariableValues: zod_1.z.record(zod_1.z.unknown()).optional(),
expectedToBeEnabled: zod_1.z.boolean().optional(),
expectedVariation: zod_1.z.string().nullable().optional(),
expectedVariables: zod_1.z.record(zod_1.z.unknown()).optional(),
expectedEvaluations: zod_1.z
.object({
flag: zod_1.z.record(zod_1.z.any()).optional(),
variation: zod_1.z.record(zod_1.z.any()).optional(),
variables: zod_1.z.record(zod_1.z.record(zod_1.z.any())).optional(),
})
.optional(),
children: zod_1.z
.array(zod_1.z.object({
// copied from parent
sticky: zod_1.z.record(zod_1.z.record(zod_1.z.any())).optional(),
context: zod_1.z.record(zod_1.z.unknown()).optional(),
defaultVariationValue: zod_1.z.string().optional(),
defaultVariableValues: zod_1.z.record(zod_1.z.unknown()).optional(),
expectedToBeEnabled: zod_1.z.boolean().optional(),
expectedVariation: zod_1.z.string().nullable().optional(),
expectedVariables: zod_1.z.record(zod_1.z.unknown()).optional(),
expectedEvaluations: zod_1.z
.object({
flag: zod_1.z.record(zod_1.z.any()).optional(),
variation: zod_1.z.record(zod_1.z.any()).optional(),
variables: zod_1.z.record(zod_1.z.record(zod_1.z.any())).optional(),
})
.optional(),
}))
.optional(),
})
.strict()),
})
.strict();
return zod_1.z.union([segmentTestZodSchema, featureTestZodSchema]);
}
//# sourceMappingURL=testSchema.js.map