UNPKG

unimported

Version:

Scans your nodejs project folder and shows obsolete files and modules

170 lines (169 loc) 10.4 kB
"use strict"; 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;