Skip to content

Commit 5f2f944

Browse files
committed
Remove the ability to run multiple TypeScript compilers in a project.
1 parent 3febdbd commit 5f2f944

File tree

1 file changed

+25
-88
lines changed

1 file changed

+25
-88
lines changed

apps/heft/src/plugins/TypeScriptPlugin/TypeScriptPlugin.ts

Lines changed: 25 additions & 88 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,7 @@
22
// See LICENSE in the project root for license information.
33

44
import * as path from 'path';
5-
import glob from 'glob';
6-
import { LegacyAdapters, ITerminalProvider, Terminal } from '@rushstack/node-core-library';
5+
import { ITerminalProvider, Terminal, FileSystem } from '@rushstack/node-core-library';
76

87
import { TypeScriptBuilder, ITypeScriptBuilderConfiguration } from './TypeScriptBuilder';
98
import { HeftSession } from '../../pluginFramework/HeftSession';
@@ -30,7 +29,6 @@ interface IRunTypeScriptOptions {
3029

3130
/**
3231
* Fired whenever the compiler emits an output. In watch mode, this event occurs after each recompile.
33-
* If there are multiple tsconfigs being processed in parallel, the event fires for each one.
3432
*/
3533
emitCallback: () => void;
3634

@@ -224,18 +222,11 @@ export class TypeScriptPlugin implements IHeftPlugin {
224222

225223
const typescriptConfigurationJson: ITypeScriptConfigurationJson | undefined =
226224
await this._ensureConfigFileLoadedAsync(logger.terminal, heftConfiguration);
227-
const tsconfigPaths: string[] = await LegacyAdapters.convertCallbackToPromise(
228-
glob,
229-
'tsconfig?(-*).json',
230-
{
231-
cwd: heftConfiguration.buildFolder,
232-
nocase: true
233-
}
234-
);
235225

236-
buildProperties.isTypeScriptProject = tsconfigPaths.length > 0;
226+
const tsconfigPath: string = `${heftConfiguration.buildFolder}/tsconfig.json`;
227+
buildProperties.isTypeScriptProject = await FileSystem.existsAsync(tsconfigPath);
237228
if (!buildProperties.isTypeScriptProject) {
238-
// If there are no TSConfigs, we have nothing to do
229+
// If there are no TSConfig, we have nothing to do
239230
return;
240231
}
241232

@@ -275,15 +266,13 @@ export class TypeScriptPlugin implements IHeftPlugin {
275266
throw new Error('Unable to resolve a TypeScript compiler package');
276267
}
277268

278-
const builderOptions: Omit<
279-
IRunBuilderForTsconfigOptions,
280-
| 'terminalProvider'
281-
| 'tsconfigFilePath'
282-
| 'additionalModuleKindsToEmit'
283-
| 'terminalPrefixLabel'
284-
| 'emitCallback'
285-
| 'firstEmitCallback'
286-
> = {
269+
// Set some properties used by the Jest plugin
270+
buildProperties.emitFolderNameForTests = typeScriptConfiguration.emitFolderNameForTests || 'lib';
271+
buildProperties.emitExtensionForTests = typeScriptConfiguration.emitCjsExtensionForCommonJS
272+
? '.cjs'
273+
: '.js';
274+
275+
await this._runBuilderForTsconfigAsync(logger, {
287276
heftSession: heftSession,
288277
heftConfiguration,
289278
toolPackageResolution,
@@ -292,71 +281,14 @@ export class TypeScriptPlugin implements IHeftPlugin {
292281
lintingEnabled: !!typeScriptConfiguration.isLintingEnabled,
293282
copyFromCacheMode: typeScriptConfiguration.copyFromCacheMode,
294283
watchMode: watchMode,
295-
maxWriteParallelism: typeScriptConfiguration.maxWriteParallelism
296-
};
297-
298-
// Set some properties used by the Jest plugin
299-
buildProperties.emitFolderNameForTests = typeScriptConfiguration.emitFolderNameForTests || 'lib';
300-
buildProperties.emitExtensionForTests = typeScriptConfiguration.emitCjsExtensionForCommonJS
301-
? '.cjs'
302-
: '.js';
303-
304-
// Wrap the "firstEmitCallback" to fire only after all of the builder processes have completed.
305-
const callbacksForTsconfigs: Set<() => void> = new Set<() => void>();
306-
function getFirstEmitCallbackForTsconfig(): () => void {
307-
let hasAlreadyReportedFirstEmit: boolean = false;
308-
309-
const callback: () => void = () => {
310-
if (hasAlreadyReportedFirstEmit) {
311-
return;
312-
}
313-
hasAlreadyReportedFirstEmit = true;
314-
315-
callbacksForTsconfigs.delete(callback);
316-
if (callbacksForTsconfigs.size === 0) {
317-
firstEmitCallback();
318-
}
319-
};
320-
321-
callbacksForTsconfigs.add(callback);
322-
323-
return callback;
324-
}
325-
326-
if (tsconfigPaths.length === 1) {
327-
await this._runBuilderForTsconfigAsync(logger, {
328-
...builderOptions,
329-
tsconfigFilePath: tsconfigPaths[0],
330-
terminalProvider: heftConfiguration.terminalProvider,
331-
additionalModuleKindsToEmit: typeScriptConfiguration.additionalModuleKindsToEmit,
332-
terminalPrefixLabel: undefined,
333-
emitCallback: emitCallback,
334-
firstEmitCallback: getFirstEmitCallbackForTsconfig()
335-
});
336-
} else {
337-
const builderProcesses: Promise<void>[] = [];
338-
for (const tsconfigFilePath of tsconfigPaths) {
339-
const tsconfigFilename: string = path.basename(tsconfigFilePath, path.extname(tsconfigFilePath));
340-
341-
// Only provide additionalModuleKindsToEmit to the default tsconfig.json
342-
const additionalModuleKindsToEmit: IEmitModuleKind[] | undefined =
343-
tsconfigFilename === 'tsconfig' ? typeScriptConfiguration.additionalModuleKindsToEmit : undefined;
344-
345-
builderProcesses.push(
346-
this._runBuilderForTsconfigAsync(logger, {
347-
...builderOptions,
348-
tsconfigFilePath,
349-
terminalProvider: heftConfiguration.terminalProvider,
350-
additionalModuleKindsToEmit,
351-
terminalPrefixLabel: tsconfigFilename,
352-
emitCallback: emitCallback,
353-
firstEmitCallback: getFirstEmitCallbackForTsconfig()
354-
})
355-
);
356-
}
357-
358-
await Promise.all(builderProcesses);
359-
}
284+
maxWriteParallelism: typeScriptConfiguration.maxWriteParallelism,
285+
tsconfigFilePath: tsconfigPath,
286+
terminalProvider: heftConfiguration.terminalProvider,
287+
additionalModuleKindsToEmit: typeScriptConfiguration.additionalModuleKindsToEmit,
288+
terminalPrefixLabel: undefined,
289+
emitCallback: emitCallback,
290+
firstEmitCallback: firstEmitCallback
291+
});
360292
}
361293

362294
private async _runBuilderForTsconfigAsync(
@@ -383,12 +315,17 @@ export class TypeScriptPlugin implements IHeftPlugin {
383315
loggerPrefixLabel: options.terminalPrefixLabel,
384316
maxWriteParallelism: options.maxWriteParallelism
385317
};
318+
let firstEmitAlreadyCalled: boolean = false;
386319
const typeScriptBuilder: TypeScriptBuilder = new TypeScriptBuilder(
387320
options.terminalProvider,
388321
typeScriptBuilderConfiguration,
389322
heftSession,
390323
() => {
391-
options.firstEmitCallback();
324+
if (firstEmitAlreadyCalled) {
325+
firstEmitAlreadyCalled = true;
326+
options.firstEmitCallback();
327+
}
328+
392329
options.emitCallback();
393330
}
394331
);

0 commit comments

Comments
 (0)