mirror of
https://github.com/jimeh/dotfiles.git
synced 2026-02-19 08:46:39 +00:00
Volta installs all global packages into their own separate sandbox, with no other packages installed in the same node_modules directory. This hack abuses the fact that prettier can be configured with a *.js file, and effectively scans the volta installation directory for sandboxes for prettier plugins, and sets anything it finds as the "pluginSearchDirs" list.
51 lines
1.1 KiB
JavaScript
51 lines
1.1 KiB
JavaScript
const homedir = require('os').homedir();
|
|
const fs = require("fs");
|
|
|
|
function voltaPrettierSearchDirs(voltaDir) {
|
|
const packagesDir = `${voltaDir}/tools/image/packages`;
|
|
|
|
let paths = []
|
|
let parents = [];
|
|
|
|
fs.readdirSync(packagesDir).forEach((item) => {
|
|
if (/^prettier-plugin-[^/]+$/.test(item)) {
|
|
paths.push(`${packagesDir}/${item}/lib`);
|
|
}
|
|
|
|
if (item == '@prettier') {
|
|
paths = paths.concat(
|
|
findDirs(`${packagesDir}/@prettier`, /^plugin-[^/]+$/, "lib")
|
|
);
|
|
} else if (/^@[^/]+$/.test(item)) {
|
|
parents.push(`${packagesDir}/${item}`);
|
|
}
|
|
|
|
return [];
|
|
})
|
|
|
|
parents.forEach((parent) => {
|
|
paths = paths.concat(findDirs(parent, /^prettier-plugin-[^/]+$/, "lib"));
|
|
})
|
|
|
|
return paths;
|
|
}
|
|
|
|
function findDirs(parent, pattern, suffix) {
|
|
return fs.readdirSync(parent).flatMap((item) => {
|
|
const fp = `${parent}/${item}`;
|
|
if (pattern.test(item) && fs.statSync(fp).isDirectory()) {
|
|
if (suffix) {
|
|
return `${fp}/${suffix}`;
|
|
}
|
|
return fp;
|
|
}
|
|
|
|
return [];
|
|
});
|
|
|
|
}
|
|
|
|
module.exports = {
|
|
pluginSearchDirs: voltaPrettierSearchDirs(`${homedir}/.volta`),
|
|
};
|