| "use strict"; |
| |
| Object.defineProperty(exports, "__esModule", { |
| value: true |
| }); |
| exports.default = void 0; |
| |
| /** @typedef {import("ajv").default} Ajv */ |
| |
| /** @typedef {import("ajv").SchemaValidateFunction} SchemaValidateFunction */ |
| |
| /** @typedef {import("ajv").AnySchemaObject} AnySchemaObject */ |
| |
| /** @typedef {import("../validate").SchemaUtilErrorObject} SchemaUtilErrorObject */ |
| |
| /** |
| * @param {string} message |
| * @param {object} schema |
| * @param {string} data |
| * @returns {SchemaUtilErrorObject} |
| */ |
| function errorMessage(message, schema, data) { |
| return { |
| // @ts-ignore |
| // eslint-disable-next-line no-undefined |
| dataPath: undefined, |
| // @ts-ignore |
| // eslint-disable-next-line no-undefined |
| schemaPath: undefined, |
| keyword: "absolutePath", |
| params: { |
| absolutePath: data |
| }, |
| message, |
| parentSchema: schema |
| }; |
| } |
| /** |
| * @param {boolean} shouldBeAbsolute |
| * @param {object} schema |
| * @param {string} data |
| * @returns {SchemaUtilErrorObject} |
| */ |
| |
| |
| function getErrorFor(shouldBeAbsolute, schema, data) { |
| 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(message, schema, data); |
| } |
| /** |
| * |
| * @param {Ajv} ajv |
| * @returns {Ajv} |
| */ |
| |
| |
| function addAbsolutePathKeyword(ajv) { |
| ajv.addKeyword({ |
| keyword: "absolutePath", |
| type: "string", |
| errors: true, |
| |
| /** |
| * @param {boolean} schema |
| * @param {AnySchemaObject} parentSchema |
| * @returns {SchemaValidateFunction} |
| */ |
| compile(schema, parentSchema) { |
| /** @type {SchemaValidateFunction} */ |
| const callback = data => { |
| let passes = true; |
| const isExclamationMarkPresent = data.includes("!"); |
| |
| if (isExclamationMarkPresent) { |
| callback.errors = [errorMessage(`The provided value ${JSON.stringify(data)} contains exclamation mark (!) which is not allowed because it's reserved for loader syntax.`, parentSchema, data)]; |
| passes = false; |
| } // ?:[A-Za-z]:\\ - Windows absolute path |
| // \\\\ - Windows network absolute path |
| // \/ - Unix-like OS absolute path |
| |
| |
| const isCorrectAbsolutePath = schema === /^(?:[A-Za-z]:(\\|\/)|\\\\|\/)/.test(data); |
| |
| if (!isCorrectAbsolutePath) { |
| callback.errors = [getErrorFor(schema, parentSchema, data)]; |
| passes = false; |
| } |
| |
| return passes; |
| }; |
| |
| callback.errors = []; |
| return callback; |
| } |
| |
| }); |
| return ajv; |
| } |
| |
| var _default = addAbsolutePathKeyword; |
| exports.default = _default; |