| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 | 
							- "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(
 
- 				data
 
- 		  )} is an absolute path!`;
 
- 	return errorMessage(schema, data, message);
 
- };
 
- module.exports = ajv =>
 
- 	ajv.addKeyword("absolutePath", {
 
- 		errors: true,
 
- 		type: "string",
 
- 		compile(expected, schema) {
 
- 			function callback(data) {
 
- 				let passes = true;
 
- 				const isExclamationMarkPresent = data.includes("!");
 
- 				if (isExclamationMarkPresent) {
 
- 					callback.errors = [
 
- 						errorMessage(
 
- 							schema,
 
- 							data,
 
- 							`The provided value ${JSON.stringify(
 
- 								data
 
- 							)} contains exclamation mark (!) which is not allowed because it's reserved for loader syntax.`
 
- 						)
 
- 					];
 
- 					passes = false;
 
- 				}
 
- 				// ?:[A-Za-z]:\\ - Windows absolute path
 
- 				// \\\\ - Windows network absolute path
 
- 				// \/ - Unix-like OS absolute path
 
- 				const isCorrectAbsolutePath =
 
- 					expected === /^(?:[A-Za-z]:\\|\\\\|\/)/.test(data);
 
- 				if (!isCorrectAbsolutePath) {
 
- 					callback.errors = [getErrorFor(expected, data, schema)];
 
- 					passes = false;
 
- 				}
 
- 				return passes;
 
- 			}
 
- 			callback.errors = [];
 
- 			return callback;
 
- 		}
 
- 	});
 
 
  |