Ignore:
Timestamp:
12/12/24 17:06:06 (5 weeks ago)
Author:
stefan toskovski <stefantoska84@…>
Branches:
main
Parents:
d565449
Message:

Pred finalna verzija

File:
1 edited

Legend:

Unmodified
Added
Removed
  • imaps-frontend/node_modules/@humanwhocodes/config-array/api.js

    rd565449 r0c6b92a  
    155155const CONFIG_TYPES = new Set(['array', 'function']);
    156156
     157/**
     158 * Fields that are considered metadata and not part of the config object.
     159 */
     160const META_FIELDS = new Set(['name']);
     161
    157162const FILES_AND_IGNORES_SCHEMA = new objectSchema.ObjectSchema(filesAndIgnoresSchema);
     163
     164/**
     165 * Wrapper error for config validation errors that adds a name to the front of the
     166 * error message.
     167 */
     168class ConfigError extends Error {
     169
     170        /**
     171         * Creates a new instance.
     172         * @param {string} name The config object name causing the error.
     173         * @param {number} index The index of the config object in the array.
     174         * @param {Error} source The source error.
     175         */
     176        constructor(name, index, { cause, message }) {
     177
     178
     179                const finalMessage = message || cause.message;
     180
     181                super(`Config ${name}: ${finalMessage}`, { cause });
     182
     183                // copy over custom properties that aren't represented
     184                if (cause) {
     185                        for (const key of Object.keys(cause)) {
     186                                if (!(key in this)) {
     187                                        this[key] = cause[key];
     188                                }
     189                        }
     190                }
     191
     192                /**
     193                 * The name of the error.
     194                 * @type {string}
     195                 * @readonly
     196                 */
     197                this.name = 'ConfigError';
     198
     199                /**
     200                 * The index of the config object in the array.
     201                 * @type {number}
     202                 * @readonly
     203                 */
     204                this.index = index;
     205        }
     206}
     207
     208/**
     209 * Gets the name of a config object.
     210 * @param {object} config The config object to get the name of.
     211 * @returns {string} The name of the config object.
     212 */
     213function getConfigName(config) {
     214        if (config && typeof config.name === 'string' && config.name) {
     215                return `"${config.name}"`;
     216        }
     217
     218        return '(unnamed)';
     219}
     220
     221/**
     222 * Rethrows a config error with additional information about the config object.
     223 * @param {object} config The config object to get the name of.
     224 * @param {number} index The index of the config object in the array.
     225 * @param {Error} error The error to rethrow.
     226 * @throws {ConfigError} When the error is rethrown for a config.
     227 */
     228function rethrowConfigError(config, index, error) {
     229        const configName = getConfigName(config);
     230        throw new ConfigError(configName, index, error);
     231}
    158232
    159233/**
     
    167241
    168242/**
    169  * Asserts that the files and ignores keys of a config object are valid as per base schema.
    170  * @param {object} config The config object to check.
     243 * Creates a function that asserts that the config is valid
     244 * during normalization. This checks that the config is not nullish
     245 * and that files and ignores keys  of a config object are valid as per base schema.
     246 * @param {Object} config The config object to check.
     247 * @param {number} index The index of the config object in the array.
    171248 * @returns {void}
    172  * @throws {TypeError} If the files and ignores keys of a config object are not valid.
    173  */
    174 function assertValidFilesAndIgnores(config) {
    175         if (!config || typeof config !== 'object') {
    176                 return;
    177         }
     249 * @throws {ConfigError} If the files and ignores keys of a config object are not valid.
     250 */
     251function assertValidBaseConfig(config, index) {
     252
     253        if (config === null) {
     254                throw new ConfigError(getConfigName(config), index, { message: 'Unexpected null config.' });
     255        }
     256
     257        if (config === undefined) {
     258                throw new ConfigError(getConfigName(config), index, { message: 'Unexpected undefined config.' });
     259        }
     260
     261        if (typeof config !== 'object') {
     262                throw new ConfigError(getConfigName(config), index, { message: 'Unexpected non-object config.' });
     263        }
     264
    178265        const validateConfig = { };
     266       
    179267        if ('files' in config) {
    180268                validateConfig.files = config.files;
    181269        }
     270       
    182271        if ('ignores' in config) {
    183272                validateConfig.ignores = config.ignores;
    184273        }
    185         FILES_AND_IGNORES_SCHEMA.validate(validateConfig);
     274
     275        try {
     276                FILES_AND_IGNORES_SCHEMA.validate(validateConfig);
     277        } catch (validationError) {
     278                rethrowConfigError(config, index, { cause: validationError });
     279        }
    186280}
    187281
     
    378472        const relativeFilePath = path.relative(basePath, filePath);
    379473
    380         return Object.keys(config).length > 1 &&
     474        return Object.keys(config).filter(key => !META_FIELDS.has(key)).length > 1 &&
    381475                !shouldIgnorePath(config.ignores, filePath, relativeFilePath);
    382476}
     
    512606                 * Tracks if the array has been normalized.
    513607                 * @property isNormalized
    514                  * @type boolean
     608                 * @type {boolean}
    515609                 * @private
    516610                 */
     
    531625                 * This is used to calculate filename matches.
    532626                 * @property basePath
    533                  * @type string
     627                 * @type {string}
    534628                 */
    535629                this.basePath = basePath;
     
    540634                 * The supported config types.
    541635                 * @property configTypes
    542                  * @type Array<string>
     636                 * @type {Array<string>}
    543637                 */
    544638                this.extraConfigTypes = Object.freeze([...extraConfigTypes]);
     
    547641                 * A cache to store calculated configs for faster repeat lookup.
    548642                 * @property configCache
    549                  * @type Map
     643                 * @type {Map<string, Object>}
    550644                 * @private
    551645                 */
     
    646740                         * are additional keys, then ignores act like exclusions.
    647741                         */
    648                         if (config.ignores && Object.keys(config).length === 1) {
     742                        if (config.ignores && Object.keys(config).filter(key => !META_FIELDS.has(key)).length === 1) {
    649743                                result.push(...config.ignores);
    650744                        }
     
    678772                        this.length = 0;
    679773                        this.push(...normalizedConfigs.map(this[ConfigArraySymbol.preprocessConfig].bind(this)));
    680                         this.forEach(assertValidFilesAndIgnores);
     774                        this.forEach(assertValidBaseConfig);
    681775                        this[ConfigArraySymbol.isNormalized] = true;
    682776
     
    700794                        this.length = 0;
    701795                        this.push(...normalizedConfigs.map(this[ConfigArraySymbol.preprocessConfig].bind(this)));
    702                         this.forEach(assertValidFilesAndIgnores);
     796                        this.forEach(assertValidBaseConfig);
    703797                        this[ConfigArraySymbol.isNormalized] = true;
    704798
     
    9331027
    9341028                finalConfig = matchingConfigIndices.reduce((result, index) => {
    935                         return this[ConfigArraySymbol.schema].merge(result, this[index]);
     1029                        try {
     1030                                return this[ConfigArraySymbol.schema].merge(result, this[index]);
     1031                        } catch (validationError) {
     1032                                rethrowConfigError(this[index], index, { cause: validationError});
     1033                        }
    9361034                }, {}, this);
    9371035
Note: See TracChangeset for help on using the changeset viewer.