idraw/scripts/build-module.ts

80 lines
2.4 KiB
TypeScript
Raw Permalink Normal View History

2022-12-31 15:21:57 +00:00
import ts from 'typescript';
2023-02-25 03:27:41 +00:00
import { Project } from 'ts-morph';
import type { CompilerOptions } from 'ts-morph';
2022-12-31 15:21:57 +00:00
import path from 'path';
import glob from 'glob';
import { packages } from './config';
2023-02-25 03:27:41 +00:00
import { joinPackagePath, joinProjectPath } from './util/project';
2023-02-12 03:39:24 +00:00
import { removeFullDir } from './util/file';
2022-12-31 15:21:57 +00:00
build();
async function build() {
for (let i = 0; i < packages.length; i++) {
const pkg = packages[i];
const { dirName } = pkg;
const pkgDir = path.resolve(`packages/${dirName}`);
console.log(`Start to build ESM for ${dirName}`);
console.log(`Remove packages/${dirName}/dist/`);
2023-02-12 03:39:24 +00:00
removeFullDir(`${pkgDir}/dist`);
2022-12-31 15:21:57 +00:00
buildPackage(dirName);
console.log(`Build ESM of ${dirName} successfully!`);
}
}
2023-02-12 03:39:24 +00:00
function buildPackage(dirName: string) {
2022-12-31 15:21:57 +00:00
const pattern = '**/*.ts';
2022-12-31 15:29:45 +00:00
const cwd = joinPackagePath(dirName, 'src');
2022-12-31 15:21:57 +00:00
const files = glob.sync(pattern, { cwd });
const targetFiles = files.map((file) => {
2022-12-31 15:29:45 +00:00
return joinPackagePath(dirName, 'src', file);
2022-12-31 15:21:57 +00:00
});
// build ts -> esm
{
2023-02-12 03:39:24 +00:00
// const tsConfig = getTsConfig();
// const compilerOptions = tsConfig.compilerOptions;
const compilerOptions: CompilerOptions = {
noUnusedLocals: true,
declaration: true,
sourceMap: false,
target: ts.ScriptTarget.ES2015,
moduleResolution: ts.ModuleResolutionKind.NodeJs,
allowJs: false,
strict: true,
experimentalDecorators: true,
resolveJsonModule: true,
esModuleInterop: true,
removeComments: true,
// lib: ['ES2016', 'dom'],
outDir: joinPackagePath(dirName, 'dist', 'esm'),
rootDir: joinPackagePath(dirName, 'src'),
skipLibCheck: true
};
2023-02-25 03:27:41 +00:00
const project = new Project({
compilerOptions
// tsConfigFilePath: joinProjectPath('tsconfig.web.json')
});
2022-12-31 15:21:57 +00:00
const program = ts.createProgram(targetFiles, compilerOptions);
2023-02-12 03:39:24 +00:00
2023-02-25 03:27:41 +00:00
// const diagnostics = ts.getPreEmitDiagnostics(program);
// if (diagnostics.length) {
// console.error(diagnostics);
// for (const diagnostic of diagnostics) {
// console.log(JSON.stringify(diagnostic.messageText, null, 2));
// }
// throw Error('TS build error!');
// }
const diagnostics = project.getPreEmitDiagnostics();
if (diagnostics.length > 0) {
console.error(project.formatDiagnosticsWithColorAndContext(diagnostics));
2023-02-12 03:39:24 +00:00
throw Error('TS build error!');
}
2022-12-31 15:21:57 +00:00
program.emit();
}
}