mirror of
https://github.com/react/react-native-devtools-frontend.git
synced 2026-10-01 09:47:56 +08:00
These packages will be used to dynamically optimize SVG images during the build. R=jacktfranklin@chromium.org Bug: 1216402 Change-Id: I04e95aa7d79c9d67beaf8a7861182c52b16b7d0f Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/2939992 Reviewed-by: Jack Franklin <jacktfranklin@chromium.org> Commit-Queue: Tim van der Lippe <tvanderlippe@chromium.org>
55 lines
1.3 KiB
JavaScript
55 lines
1.3 KiB
JavaScript
'use strict';
|
|
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
const {
|
|
extendDefaultPlugins,
|
|
optimize,
|
|
createContentItem,
|
|
} = require('./svgo.js');
|
|
|
|
const importConfig = async (configFile) => {
|
|
const config = require(configFile);
|
|
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 file = path.join(dir, 'svgo.config.js');
|
|
if (await isFile(file)) {
|
|
return await importConfig(file);
|
|
}
|
|
const parent = path.dirname(dir);
|
|
if (dir === parent) {
|
|
return null;
|
|
}
|
|
dir = parent;
|
|
}
|
|
};
|
|
|
|
exports.loadConfig = loadConfig;
|
|
exports.extendDefaultPlugins = extendDefaultPlugins;
|
|
exports.optimize = optimize;
|
|
exports.createContentItem = createContentItem;
|