Skip to content

Commit

Permalink
use a new global ajv instance for each releaseFIle
Browse files Browse the repository at this point in the history
  • Loading branch information
pablomendezroyo committed May 19, 2022
1 parent 96498af commit 0c58520
Showing 1 changed file with 20 additions and 9 deletions.
29 changes: 20 additions & 9 deletions src/releaseFiles/validateSchema.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import Ajv from "ajv";
import Ajv, { ValidateFunction } from "ajv";
import ajvErrors from "ajv-errors";
import manifestSchema from "../releaseFiles/manifest/manifest.schema.json";
import composeSchema from "../releaseFiles/compose/compose.schema.json";
Expand All @@ -7,7 +7,17 @@ import { CliError } from "../params";
import { ReleaseFile, ReleaseFileType } from "./types";
import { processError } from "./renderAjvError";

const ajv = new Ajv({
const ajvSetupWizard = new Ajv({
allErrors: true,
coerceTypes: true,
strictSchema: false
});
const ajvManifest = new Ajv({
allErrors: true,
coerceTypes: true,
strictSchema: false
});
const ajvCompose = new Ajv({
allErrors: true,
coerceTypes: true,
strictSchema: false
Expand Down Expand Up @@ -39,27 +49,28 @@ export function validateSchema(releaseFile: ReleaseFile): void {
function validateReleaseFile(
releaseFile: ReleaseFile
): { valid: boolean; errors: string[] } {
ajvErrors(ajv);

// eslint-disable-next-line @typescript-eslint/no-explicit-any
let schema: any;
let validate: ValidateFunction<unknown>;
const releaseFileType = releaseFile.type;

// Compile
switch (releaseFile.type) {
case ReleaseFileType.manifest:
schema = manifestSchema;
ajvErrors(ajvManifest);
validate = ajvManifest.compile(manifestSchema);
break;
case ReleaseFileType.compose:
schema = composeSchema;
ajvErrors(ajvCompose);
validate = ajvManifest.compile(composeSchema);
break;
case ReleaseFileType.setupWizard:
schema = setupWizardSchema;
ajvErrors(ajvSetupWizard);
validate = ajvManifest.compile(setupWizardSchema);
break;
default:
throw new Error(`Unknown release file type: ${releaseFileType}`);
}
const validate = ajv.compile(schema);

const valid = validate(releaseFile.data);

return {
Expand Down

0 comments on commit 0c58520

Please sign in to comment.