aboutsummaryrefslogtreecommitdiffstats
path: root/packages/monorepo-scripts/src
diff options
context:
space:
mode:
Diffstat (limited to 'packages/monorepo-scripts/src')
-rw-r--r--packages/monorepo-scripts/src/globals.d.ts19
-rw-r--r--packages/monorepo-scripts/src/test_installation.ts57
2 files changed, 76 insertions, 0 deletions
diff --git a/packages/monorepo-scripts/src/globals.d.ts b/packages/monorepo-scripts/src/globals.d.ts
index 757ae4097..1d49559f2 100644
--- a/packages/monorepo-scripts/src/globals.d.ts
+++ b/packages/monorepo-scripts/src/globals.d.ts
@@ -6,3 +6,22 @@ declare module 'es6-promisify';
declare module 'semver-sort' {
const desc: (versions: string[]) => string[];
}
+
+declare interface LernaPackage {
+ location: string;
+ package: {
+ private?: boolean;
+ name: string;
+ main?: string;
+ config?: {
+ additionalTsTypings?: string[];
+ };
+ };
+}
+declare function lernaGetPackages(path: string): LernaPackage[];
+// lerna-get-packages declarations
+declare module 'lerna-get-packages' {
+ export = lernaGetPackages;
+}
+
+declare module 'promisify-child-process';
diff --git a/packages/monorepo-scripts/src/test_installation.ts b/packages/monorepo-scripts/src/test_installation.ts
new file mode 100644
index 000000000..116b70f3a
--- /dev/null
+++ b/packages/monorepo-scripts/src/test_installation.ts
@@ -0,0 +1,57 @@
+#!/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);
+});