source: trip-planner-front/node_modules/svgo/lib/svgo-node.js@ 188ee53

Last change on this file since 188ee53 was 6a3a178, checked in by Ema <ema_spirova@…>, 3 years ago

initial commit

  • Property mode set to 100644
File size: 2.5 KB
Line 
1'use strict';
2
3const os = require('os');
4const fs = require('fs');
5const { pathToFileURL } = require('url');
6const path = require('path');
7const {
8 extendDefaultPlugins,
9 optimize: optimizeAgnostic,
10 createContentItem,
11} = require('./svgo.js');
12
13exports.extendDefaultPlugins = extendDefaultPlugins;
14exports.createContentItem = createContentItem;
15
16const importConfig = async (configFile) => {
17 let config;
18 try {
19 // dynamic import expects file url instead of path and may fail
20 // when windows path is provided
21 const { default: imported } = await import(pathToFileURL(configFile));
22 config = imported;
23 } catch (importError) {
24 // TODO remove require in v3
25 try {
26 config = require(configFile);
27 } catch (requireError) {
28 // throw original error if es module is detected
29 if (requireError.code === 'ERR_REQUIRE_ESM') {
30 throw importError;
31 } else {
32 throw requireError;
33 }
34 }
35 }
36 if (config == null || typeof config !== 'object' || Array.isArray(config)) {
37 throw Error(`Invalid config file "${configFile}"`);
38 }
39 return config;
40};
41
42const isFile = async (file) => {
43 try {
44 const stats = await fs.promises.stat(file);
45 return stats.isFile();
46 } catch {
47 return false;
48 }
49};
50
51const loadConfig = async (configFile, cwd = process.cwd()) => {
52 if (configFile != null) {
53 if (path.isAbsolute(configFile)) {
54 return await importConfig(configFile);
55 } else {
56 return await importConfig(path.join(cwd, configFile));
57 }
58 }
59 let dir = cwd;
60 // eslint-disable-next-line no-constant-condition
61 while (true) {
62 const js = path.join(dir, 'svgo.config.js');
63 if (await isFile(js)) {
64 return await importConfig(js);
65 }
66 const mjs = path.join(dir, 'svgo.config.mjs');
67 if (await isFile(mjs)) {
68 return await importConfig(mjs);
69 }
70 const cjs = path.join(dir, 'svgo.config.cjs');
71 if (await isFile(cjs)) {
72 return await importConfig(cjs);
73 }
74 const parent = path.dirname(dir);
75 if (dir === parent) {
76 return null;
77 }
78 dir = parent;
79 }
80};
81exports.loadConfig = loadConfig;
82
83const optimize = (input, config) => {
84 if (config == null) {
85 config = {};
86 }
87 if (typeof config !== 'object') {
88 throw Error('Config should be an object');
89 }
90 return optimizeAgnostic(input, {
91 ...config,
92 js2svg: {
93 // platform specific default for end of line
94 eol: os.EOL === '\r\n' ? 'crlf' : 'lf',
95 ...config.js2svg,
96 },
97 });
98};
99exports.optimize = optimize;
Note: See TracBrowser for help on using the repository browser.