| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 | 
							- 'use strict';
 
- const os = require('os');
 
- const fs = require('fs');
 
- const { pathToFileURL } = require('url');
 
- const path = require('path');
 
- const {
 
-   extendDefaultPlugins,
 
-   optimize: optimizeAgnostic,
 
-   createContentItem,
 
- } = require('./svgo.js');
 
- exports.extendDefaultPlugins = extendDefaultPlugins;
 
- exports.createContentItem = createContentItem;
 
- const importConfig = async (configFile) => {
 
-   let config;
 
-   // at the moment dynamic import may randomly fail with segfault
 
-   // to workaround this for some users .cjs extension is loaded
 
-   // exclusively with require
 
-   if (configFile.endsWith('.cjs')) {
 
-     config = require(configFile);
 
-   } else {
 
-     try {
 
-       // dynamic import expects file url instead of path and may fail
 
-       // when windows path is provided
 
-       const { default: imported } = await import(pathToFileURL(configFile));
 
-       config = imported;
 
-     } catch (importError) {
 
-       // TODO remove require in v3
 
-       try {
 
-         config = require(configFile);
 
-       } catch (requireError) {
 
-         // throw original error if es module is detected
 
-         if (requireError.code === 'ERR_REQUIRE_ESM') {
 
-           throw importError;
 
-         } else {
 
-           throw requireError;
 
-         }
 
-       }
 
-     }
 
-   }
 
-   if (config == null || typeof config !== 'object' || Array.isArray(config)) {
 
-     throw Error(`Invalid config file "${configFile}"`);
 
-   }
 
-   return config;
 
- };
 
- const isFile = async (file) => {
 
-   try {
 
-     const stats = await fs.promises.stat(file);
 
-     return stats.isFile();
 
-   } catch {
 
-     return false;
 
-   }
 
- };
 
- const loadConfig = async (configFile, cwd = process.cwd()) => {
 
-   if (configFile != null) {
 
-     if (path.isAbsolute(configFile)) {
 
-       return await importConfig(configFile);
 
-     } else {
 
-       return await importConfig(path.join(cwd, configFile));
 
-     }
 
-   }
 
-   let dir = cwd;
 
-   // eslint-disable-next-line no-constant-condition
 
-   while (true) {
 
-     const js = path.join(dir, 'svgo.config.js');
 
-     if (await isFile(js)) {
 
-       return await importConfig(js);
 
-     }
 
-     const mjs = path.join(dir, 'svgo.config.mjs');
 
-     if (await isFile(mjs)) {
 
-       return await importConfig(mjs);
 
-     }
 
-     const cjs = path.join(dir, 'svgo.config.cjs');
 
-     if (await isFile(cjs)) {
 
-       return await importConfig(cjs);
 
-     }
 
-     const parent = path.dirname(dir);
 
-     if (dir === parent) {
 
-       return null;
 
-     }
 
-     dir = parent;
 
-   }
 
- };
 
- exports.loadConfig = loadConfig;
 
- const optimize = (input, config) => {
 
-   if (config == null) {
 
-     config = {};
 
-   }
 
-   if (typeof config !== 'object') {
 
-     throw Error('Config should be an object');
 
-   }
 
-   return optimizeAgnostic(input, {
 
-     ...config,
 
-     js2svg: {
 
-       // platform specific default for end of line
 
-       eol: os.EOL === '\r\n' ? 'crlf' : 'lf',
 
-       ...config.js2svg,
 
-     },
 
-   });
 
- };
 
- exports.optimize = optimize;
 
 
  |