console/configs/tsup/utils.ts

76 lines
2.2 KiB
TypeScript

import { readFileSync } from 'fs';
import { join, resolve } from 'path';
import { getPackagesSync } from '@manypkg/get-packages';
const rootDir = resolve(__dirname, '../../');
const libDir = process.cwd();
const packagesMetadata = getPackagesSync(rootDir);
const currentPackage = packagesMetadata.packages.find(p => p.dir === libDir);
export const commonWatchList = () => {
return [
libDir + '/src/**/*',
libDir + '/.env',
libDir + '/tsconfig.json',
rootDir + '/tsconfig.json',
rootDir + '/tsup.config.*',
];
};
export const monorepoWatchList = () => {
if (!currentPackage) {
return [];
}
const internalDeps = Object.entries({
...(currentPackage.packageJson.dependencies || {}),
...(currentPackage.packageJson.devDependencies || {}),
...(currentPackage.packageJson.peerDependencies || {}),
}).reduce((prev, [name, version]) => {
if (version === 'workspace:*') {
return [...prev, name];
}
return prev;
}, [] as string[]);
return internalDeps.reduce((prev, dep) => {
const found = packagesMetadata.packages.find(p => p.packageJson.name === dep);
if (!found) {
return prev;
}
return [...prev, join(found.dir, '/src/**/*')];
}, [] as string[]);
};
const nodeVersion = readFileSync(join(rootDir, '/.node-version')).toString();
export const targetFromNodeVersion = () => {
const clean = nodeVersion.trim().split('.');
return `node${clean[0]}` as any;
};
export const watchEntryPlugin = () => {
return {
name: 'node-watch-entry',
esbuildOptions(options) {
const entries = (options.entryPoints as string[]) || [];
const entry = entries.find(entry => entry === 'src/dev.ts' || entry === 'test/root.ts');
if (!entry) {
throw new Error('No entry point found');
}
const outFile = entry
.replace('src/', 'dist/')
.replace('test/', 'dist/')
.replace('.ts', '.js');
const inspectFlag = process.env.INSPECT ? '--inspect ' : ' ';
const nodeOptions = process.env.NODE_OPTIONS || '';
this.options.onSuccess = `node --enable-source-maps ${inspectFlag} ${nodeOptions} ${outFile} | pino-pretty --translateTime HH:MM:ss TT --ignore pid,hostname`;
},
};
};