unimported
Version:
Scans your nodejs project folder and shows obsolete files and modules
170 lines (169 loc) • 10.4 kB
JavaScript
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.updateAllowLists = exports.writeConfig = exports.getConfig = exports.getPreset = exports.__clearCachedConfig = exports.expandGlob = void 0;
const cosmiconfig_1 = require("cosmiconfig");
const fs_1 = require("./fs");
const glob_1 = __importDefault(require("glob"));
const util_1 = require("util");
const ensureArray_1 = require("./ensureArray");
const meta_1 = require("./meta");
const presets_1 = require("./presets");
const read_pkg_up_1 = __importDefault(require("read-pkg-up"));
const globAsync = (0, util_1.promisify)(glob_1.default);
const CONFIG_FILE = '.unimportedrc.json';
function expandGlob(patterns, options) {
return __awaiter(this, void 0, void 0, function* () {
const set = new Set();
for (const pattern of (0, ensureArray_1.ensureArray)(patterns)) {
const paths = yield globAsync(pattern, {
realpath: false,
ignore: options === null || options === void 0 ? void 0 : options.ignore,
});
for (const path of paths) {
set.add(path);
}
}
return Array.from(set);
});
}
exports.expandGlob = expandGlob;
let cachedConfig;
function __clearCachedConfig() {
cachedConfig = undefined;
}
exports.__clearCachedConfig = __clearCachedConfig;
function getPreset(name) {
return __awaiter(this, void 0, void 0, function* () {
const packageJson = (yield (0, fs_1.readJson)('package.json')) || {};
const options = {
packageJson,
hasPackage: (name) => (0, meta_1.hasPackage)(packageJson, name),
};
const preset = presets_1.presets.find((preset) => preset.name === name || preset.isMatch(options));
if (!preset) {
return;
}
const config = yield preset.getConfig(options);
return Object.assign({ preset: preset.name }, config);
});
}
exports.getPreset = getPreset;
function getConfig(args) {
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2;
return __awaiter(this, void 0, void 0, function* () {
if (cachedConfig) {
return cachedConfig;
}
const cosmiconfigResult = (0, cosmiconfig_1.cosmiconfigSync)('unimported').search();
const configFile = cosmiconfigResult === null || cosmiconfigResult === void 0 ? void 0 : cosmiconfigResult.config;
const unimportedPkg = yield (0, read_pkg_up_1.default)({ cwd: __dirname });
const preset = yield getPreset(configFile === null || configFile === void 0 ? void 0 : configFile.preset);
const config = {
version: (unimportedPkg === null || unimportedPkg === void 0 ? void 0 : unimportedPkg.packageJson.version) || 'unknown',
preset: preset === null || preset === void 0 ? void 0 : preset.preset,
flow: (_c = (_b = (_a = args === null || args === void 0 ? void 0 : args.flow) !== null && _a !== void 0 ? _a : configFile === null || configFile === void 0 ? void 0 : configFile.flow) !== null && _b !== void 0 ? _b : preset === null || preset === void 0 ? void 0 : preset.flow) !== null && _c !== void 0 ? _c : false,
rootDir: (_d = configFile === null || configFile === void 0 ? void 0 : configFile.rootDir) !== null && _d !== void 0 ? _d : preset === null || preset === void 0 ? void 0 : preset.rootDir,
ignoreUnresolved: (_f = (_e = configFile === null || configFile === void 0 ? void 0 : configFile.ignoreUnresolved) !== null && _e !== void 0 ? _e : preset === null || preset === void 0 ? void 0 : preset.ignoreUnresolved) !== null && _f !== void 0 ? _f : [],
ignoreUnimported: yield expandGlob((_h = (_g = configFile === null || configFile === void 0 ? void 0 : configFile.ignoreUnimported) !== null && _g !== void 0 ? _g : preset === null || preset === void 0 ? void 0 : preset.ignoreUnimported) !== null && _h !== void 0 ? _h : []),
ignoreUnused: (_k = (_j = configFile === null || configFile === void 0 ? void 0 : configFile.ignoreUnused) !== null && _j !== void 0 ? _j : preset === null || preset === void 0 ? void 0 : preset.ignoreUnused) !== null && _k !== void 0 ? _k : [],
ignorePatterns: (_m = (_l = configFile === null || configFile === void 0 ? void 0 : configFile.ignorePatterns) !== null && _l !== void 0 ? _l : preset === null || preset === void 0 ? void 0 : preset.ignorePatterns) !== null && _m !== void 0 ? _m : [],
respectGitignore: (_o = configFile === null || configFile === void 0 ? void 0 : configFile.respectGitignore) !== null && _o !== void 0 ? _o : true,
moduleDirectory: (_p = configFile === null || configFile === void 0 ? void 0 : configFile.moduleDirectory) !== null && _p !== void 0 ? _p : preset === null || preset === void 0 ? void 0 : preset.moduleDirectory,
entryFiles: [],
extensions: [],
assetExtensions: (_q = configFile === null || configFile === void 0 ? void 0 : configFile.assetExtensions) !== null && _q !== void 0 ? _q : [],
pathTransforms: (_r = configFile === null || configFile === void 0 ? void 0 : configFile.pathTransforms) !== null && _r !== void 0 ? _r : preset === null || preset === void 0 ? void 0 : preset.pathTransforms,
scannedDirs: (_t = (_s = configFile === null || configFile === void 0 ? void 0 : configFile.scannedDirs) !== null && _s !== void 0 ? _s : preset === null || preset === void 0 ? void 0 : preset.scannedDirs) !== null && _t !== void 0 ? _t : [],
};
const aliases = (_v = (_u = configFile === null || configFile === void 0 ? void 0 : configFile.aliases) !== null && _u !== void 0 ? _u : preset === null || preset === void 0 ? void 0 : preset.aliases) !== null && _v !== void 0 ? _v : {};
const extensions = (_x = (_w = configFile === null || configFile === void 0 ? void 0 : configFile.extensions) !== null && _w !== void 0 ? _w : preset === null || preset === void 0 ? void 0 : preset.extensions) !== null && _x !== void 0 ? _x : [];
const entryFiles = (_z = (_y = configFile === null || configFile === void 0 ? void 0 : configFile.entry) !== null && _y !== void 0 ? _y : preset === null || preset === void 0 ? void 0 : preset.entry) !== null && _z !== void 0 ? _z : [];
// throw if no entry point could be found
if (entryFiles.length === 0) {
throw new Error(`Unable to locate entry points for this ${(_0 = preset === null || preset === void 0 ? void 0 : preset.preset) !== null && _0 !== void 0 ? _0 : ''} project. Please declare them in package.json or .unimportedrc.json`);
}
for (const entry of entryFiles) {
if (typeof entry === 'string') {
for (const file of yield expandGlob(entry)) {
config.entryFiles.push({
file,
aliases,
extensions,
});
}
}
else {
const entryAliases = entry.aliases
? entry.aliases
: ((_1 = entry.extend) === null || _1 === void 0 ? void 0 : _1.aliases)
? Object.assign(Object.assign({}, aliases), entry.extend.aliases) : aliases;
const entryExtensions = entry.extensions
? entry.extensions
: ((_2 = entry.extend) === null || _2 === void 0 ? void 0 : _2.extensions)
? [...entry.extend.extensions, ...extensions]
: extensions;
for (const file of yield expandGlob(entry.file, {
ignore: entry.ignore,
})) {
config.entryFiles.push({
file,
label: entry.label,
aliases: entryAliases,
extensions: entryExtensions,
});
}
}
}
// collect _all_ extensions for file listing
const uniqExtensions = new Set(extensions);
for (const entryFile of config.entryFiles) {
for (const extension of entryFile.extensions) {
// pop the last part, so that .server.js merges with .js
uniqExtensions.add('.' + extension.split('.').pop());
}
}
config.extensions = Array.from(uniqExtensions);
cachedConfig = config;
return config;
});
}
exports.getConfig = getConfig;
function sort(arr) {
const sorted = [...arr];
sorted.sort();
return sorted;
}
function merge(left, right) {
return sort(Array.from(new Set([...left, ...right])));
}
function writeConfig(config) {
return __awaiter(this, void 0, void 0, function* () {
const current = yield (0, fs_1.readJson)(CONFIG_FILE);
const next = Object.assign({}, current, config);
return yield (0, fs_1.writeJson)(CONFIG_FILE, next);
});
}
exports.writeConfig = writeConfig;
function updateAllowLists(files, context) {
return __awaiter(this, void 0, void 0, function* () {
const cfg = context.config;
yield writeConfig({
ignoreUnresolved: merge(cfg.ignoreUnresolved, files.unresolved),
ignoreUnused: merge(cfg.ignoreUnused, files.unused),
ignoreUnimported: merge(cfg.ignoreUnimported, files.unimported),
});
});
}
exports.updateAllowLists = updateAllowLists;
;