Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #6754 from byzyk/fix/6742
fix: validation error when ! is in the path
- Loading branch information
Showing
2 changed files
with
47 additions
and
10 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,32 +1,55 @@ | ||
"use strict"; | ||
|
||
const errorMessage = (schema, data, message) => ({ | ||
keyword: "absolutePath", | ||
params: { absolutePath: data }, | ||
message: message, | ||
parentSchema: schema | ||
}); | ||
|
||
const getErrorFor = (shouldBeAbsolute, data, schema) => { | ||
const message = shouldBeAbsolute | ||
? `The provided value ${JSON.stringify(data)} is not an absolute path!` | ||
: `A relative path is expected. However the provided value ${JSON.stringify( | ||
: `A relative path is expected. However, the provided value ${JSON.stringify( | ||
data | ||
)} is an absolute path!`; | ||
|
||
return { | ||
keyword: "absolutePath", | ||
params: { absolutePath: data }, | ||
message: message, | ||
parentSchema: schema | ||
}; | ||
return errorMessage(schema, data, message); | ||
}; | ||
|
||
module.exports = ajv => | ||
ajv.addKeyword("absolutePath", { | ||
errors: true, | ||
type: "string", | ||
compile(expected, schema) { | ||
function callback(data) { | ||
const passes = expected === /^(?:[A-Za-z]:\\|\/)/.test(data); | ||
if (!passes) { | ||
let passes = true; | ||
const isExclamationMarkPresent = data.includes("!"); | ||
const isCorrectAbsoluteOrRelativePath = | ||
expected === /^(?:[A-Za-z]:\\|\/)/.test(data); | ||
|
||
if (isExclamationMarkPresent) { | ||
callback.errors = [ | ||
errorMessage( | ||
schema, | ||
data, | ||
`The provided value ${JSON.stringify( | ||
data | ||
)} contans exclamation mark (!) which is not allowed because it's reserved for loader syntax.` | ||
) | ||
]; | ||
passes = false; | ||
} | ||
|
||
if (!isCorrectAbsoluteOrRelativePath) { | ||
callback.errors = [getErrorFor(expected, data, schema)]; | ||
passes = false; | ||
} | ||
|
||
return passes; | ||
} | ||
callback.errors = []; | ||
|
||
return callback; | ||
} | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters