123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- "use strict";
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = void 0;
- /** @typedef {import("ajv").Ajv} Ajv */
- /** @typedef {import("ajv").ValidateFunction} ValidateFunction */
- /** @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('absolutePath', {
- errors: true,
- type: 'string',
- compile(schema, parentSchema) {
- /** @type {ValidateFunction} */
- 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;
|