Frontend/25_01_07/mai/node_modules/es-abstract/tmp.mjs

51 lines
2.1 KiB
JavaScript
Raw Permalink Normal View History

2025-01-28 10:38:27 +00:00
import { dirname, join } from 'path';
import { readFileSync } from 'fs';
import hasTypes from 'hastypes';
import semver from 'semver';
import { execSync } from 'child_process';
import { createRequire } from 'module';
import { pathToFileURL } from 'url';
const packageJSONpath = join(process.cwd(), 'package.json');
const require = createRequire(pathToFileURL(packageJSONpath));
const { dependencies, devDependencies } = JSON.parse(readFileSync(packageJSONpath));
const typesPackagesPresent = Object.entries(devDependencies).filter(([name]) => name.startsWith('@types/'));
console.log(`Found ${typesPackagesPresent.length} \`@types/\` packages...`);
const typesPackagesToRemove = Promise.all(typesPackagesPresent.filter(([x]) => x !== '@types/node').map(async ([name, version]) => {
const actualName = name.replace('@types/', '');
let actualVersion;
try {
actualVersion = JSON.parse(readFileSync(join(process.cwd(), 'node_modules', actualName, 'package.json'))).version;
} catch (e) {
console.error(e, join(actualName, '/package.json'));
return [name, , true];
}
const expectedVersion = `${semver.major(actualVersion)}.${semver.minor(actualVersion)}`;
const specifier = `${actualName}@${expectedVersion}`;
return [name, expectedVersion, await hasTypes(specifier)];
})).then((x) => x.filter(([, , hasTypes]) => hasTypes === true));// .then((x) => x.map(([name, expectedVersion]) => [name, expectedVersion]));
typesPackagesToRemove.then((x) => {
console.log(`Found ${x.length} \`@types/\` packages to remove...`);
console.log(x);
if (x.length > 0) {
execSync(`npm uninstall --save ${x.map(([name, version]) => `"${name}@${version}"`).join(' ')}`, { cwd: process.cwd() });
}
});
// const typesPackagesToAdd = Promise.all(
// Object.entries(dependencies)
// .filter(([name]) => !typesPackagesPresent.includes(`@types/${name}`))
// .map(async ([name, version]) => {
// const actualVersion = require(`${name}/package.json`).version;
// const expectedVersion = `${semver.major(actualVersion)}.${semver.minor(actualVersion)}`;
// console.log(specifier);
// })
// )