| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 | 
							- 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);
 
- // 		})
 
- // )
 
 
  |