58 lines
2.4 KiB
JavaScript
58 lines
2.4 KiB
JavaScript
#!/usr/bin/env node
|
|
|
|
import * as fs from 'fs';
|
|
import lernaGetPackages = require('lerna-get-packages');
|
|
import * as _ from 'lodash';
|
|
import * as path from 'path';
|
|
import { exec as execAsync } from 'promisify-child-process';
|
|
import * as rimraf from 'rimraf';
|
|
|
|
import { utils } from './utils';
|
|
|
|
(async () => {
|
|
const monorepoRootPath = path.join(__dirname, '../../..');
|
|
const lernaPackages = lernaGetPackages(monorepoRootPath);
|
|
const installablePackages = _.filter(
|
|
lernaPackages,
|
|
lernaPackage =>
|
|
!lernaPackage.package.private &&
|
|
!_.isUndefined(lernaPackage.package.main) &&
|
|
lernaPackage.package.main.endsWith('.js'),
|
|
);
|
|
for (const installableLernaPackage of installablePackages) {
|
|
const packagePath = installableLernaPackage.location;
|
|
const packageName = installableLernaPackage.package.name;
|
|
utils.log(`Testing ${packageName}`);
|
|
let result = await execAsync('npm pack', { cwd: packagePath });
|
|
const packedPackageFileName = result.stdout.trim();
|
|
const testDirectory = path.join(monorepoRootPath, '../test-env');
|
|
fs.mkdirSync(testDirectory);
|
|
result = await execAsync('yarn init --yes', { cwd: testDirectory });
|
|
utils.log(`Installing ${packedPackageFileName}`);
|
|
result = await execAsync(`yarn add ${packagePath}/${packedPackageFileName}`, { cwd: testDirectory });
|
|
const indexFilePath = path.join(testDirectory, 'index.ts');
|
|
fs.writeFileSync(indexFilePath, `import * as Package from '${packageName}'`);
|
|
const tsConfig = {
|
|
compilerOptions: {
|
|
module: 'commonjs',
|
|
target: 'es5',
|
|
lib: ['es2017', 'dom'],
|
|
declaration: true,
|
|
noImplicitReturns: true,
|
|
pretty: true,
|
|
strict: true,
|
|
},
|
|
include: ['index.ts'],
|
|
};
|
|
const tsconfigFilePath = path.join(testDirectory, 'tsconfig.json');
|
|
fs.writeFileSync(tsconfigFilePath, JSON.stringify(tsConfig, null, 4));
|
|
utils.log(`Compiling ${packageName}`);
|
|
await execAsync('../node_modules/typescript/bin/tsc', { cwd: testDirectory });
|
|
utils.log(`Successfully compiled with ${packageName} as a dependency`);
|
|
rimraf.sync(testDirectory);
|
|
}
|
|
})().catch(err => {
|
|
utils.log(err.stdout);
|
|
process.exit(1);
|
|
});
|