feat(core): compile only schematics realted source when using workspace-schematics

ISSUES CLOSED: #1215
This commit is contained in:
Martin Hochel 2020-08-28 13:26:54 +02:00 committed by Victor Savkin
parent 8c4904240e
commit ac643a70fa

View File

@ -28,11 +28,21 @@ import * as path from 'path';
import * as yargsParser from 'yargs-parser'; import * as yargsParser from 'yargs-parser';
import { appRootPath } from '../utils/app-root'; import { appRootPath } from '../utils/app-root';
import { detectPackageManager } from '../utils/detect-package-manager'; import { detectPackageManager } from '../utils/detect-package-manager';
import { fileExists, readJsonFile } from '../utils/fileutils'; import { fileExists, readJsonFile, writeJsonFile } from '../utils/fileutils';
import { output } from '../utils/output'; import { output } from '../utils/output';
import { CompilerOptions } from 'typescript';
const rootDirectory = appRootPath; const rootDirectory = appRootPath;
type TsConfig = {
extends: string;
compilerOptions: CompilerOptions;
files?: string[];
include?: string[];
exclude?: string[];
references?: Array<{ path: string }>;
};
export async function workspaceSchematic(args: string[]) { export async function workspaceSchematic(args: string[]) {
const outDir = compileTools(); const outDir = compileTools();
const parsedArgs = parseOptions(args, outDir); const parsedArgs = parseOptions(args, outDir);
@ -69,26 +79,22 @@ function compileTools() {
} }
function getToolsOutDir() { function getToolsOutDir() {
return path.resolve( return path.resolve(toolsDir(), toolsTsConfig().compilerOptions.outDir);
rootDirectory,
'tools',
JSON.parse(
readFileSync(
path.join(rootDirectory, 'tools', 'tsconfig.tools.json'),
'UTF-8'
)
).compilerOptions.outDir
);
} }
function compileToolsDir(outDir: string) { function compileToolsDir(outDir: string) {
copySync(path.join(rootDirectory, 'tools'), outDir); copySync(schematicsDir(), path.join(outDir, 'schematics'));
const tmpTsConfigPath = createTmpTsConfig(toolsTsConfigPath(), {
include: [path.join(schematicsDir(), '**/*.ts')],
});
const tsc = const tsc =
platform() === 'win32' platform() === 'win32'
? `.\\node_modules\\.bin\\tsc` ? `.\\node_modules\\.bin\\tsc`
: `./node_modules/.bin/tsc`; : `./node_modules/.bin/tsc`;
try { try {
execSync(`${tsc} -p tools/tsconfig.tools.json`, { execSync(`${tsc} -p ${tmpTsConfigPath}`, {
stdio: 'inherit', stdio: 'inherit',
cwd: rootDirectory, cwd: rootDirectory,
}); });
@ -124,7 +130,18 @@ function saveCollection(dir: string, collection: any) {
} }
function schematicsDir() { function schematicsDir() {
return path.join('tools', 'schematics'); return path.join(rootDirectory, 'tools', 'schematics');
}
function toolsDir() {
return path.join(rootDirectory, 'tools');
}
function toolsTsConfigPath() {
return path.join(toolsDir(), 'tsconfig.tools.json');
}
function toolsTsConfig() {
return readJsonFile<TsConfig>(toolsTsConfigPath());
} }
function createWorkflow(dryRun: boolean) { function createWorkflow(dryRun: boolean) {
@ -355,3 +372,42 @@ function exists(file: string): boolean {
return false; return false;
} }
} }
function createTmpTsConfig(
tsconfigPath: string,
updateConfig: Partial<TsConfig>
) {
const tmpTsConfigPath = path.join(
path.dirname(tsconfigPath),
'tsconfig.generated.json'
);
const originalTSConfig = readJsonFile<TsConfig>(tsconfigPath);
const generatedTSConfig: TsConfig = {
...originalTSConfig,
...updateConfig,
};
process.on('exit', () => {
cleanupTmpTsConfigFile(tmpTsConfigPath);
});
process.on('SIGTERM', () => {
cleanupTmpTsConfigFile(tmpTsConfigPath);
process.exit(0);
});
process.on('SIGINT', () => {
cleanupTmpTsConfigFile(tmpTsConfigPath);
process.exit(0);
});
writeJsonFile(tmpTsConfigPath, generatedTSConfig);
return tmpTsConfigPath;
}
function cleanupTmpTsConfigFile(tmpTsConfigPath) {
try {
if (tmpTsConfigPath) {
fs.unlinkSync(tmpTsConfigPath);
}
} catch (e) {}
}