Remove dependency on tsickle
There is still a compile-time dependency, so to avoid users having to install tsickle,
this depends on shipping a JS distro of @bazel/typescript on npm
Closes #260
PiperOrigin-RevId: 209859448
diff --git a/internal/tsc_wrapped/tsc_wrapped.ts b/internal/tsc_wrapped/tsc_wrapped.ts
index 87600b3..2e99ccb 100644
--- a/internal/tsc_wrapped/tsc_wrapped.ts
+++ b/internal/tsc_wrapped/tsc_wrapped.ts
@@ -139,34 +139,48 @@
console.error(diagnostics.format(bazelOpts.target, diags));
return false;
}
-
+ const toEmit = program.getSourceFiles().filter(isCompilationTarget);
const emitResults: ts.EmitResult[] = [];
const afterTransforms = [fixUmdModuleDeclarations(
(sf: ts.SourceFile) => compilerHost.amdModuleName(sf))];
- for (const sf of program.getSourceFiles().filter(isCompilationTarget)) {
- if (bazelOpts.tsickle) {
- emitResults.push(tsickle.emitWithTsickle(
+
+ if (bazelOpts.tsickle) {
+ // The 'tsickle' import above is only used in type positions, so it won't
+ // result in a runtime dependency on tsickle.
+ // If the user requests the tsickle emit, then we dynamically require it
+ // here for use at runtime.
+ let optTsickle: typeof tsickle;
+ try {
+ // tslint:disable-next-line:no-require-imports dependency on tsickle only
+ // if requested
+ optTsickle = require('tsickle');
+ } catch {
+ throw new Error(
+ 'When setting bazelOpts { tsickle: true }, ' +
+ 'you must also add a devDependency on the tsickle npm package');
+ }
+ for (const sf of toEmit) {
+ emitResults.push(optTsickle.emitWithTsickle(
program, compilerHost, compilerHost, options, sf,
/*writeFile*/ undefined,
/*cancellationToken*/ undefined, /*emitOnlyDtsFiles*/ undefined,
{afterTs: afterTransforms}));
- } else {
+ }
+ diags.push(
+ ...optTsickle.mergeEmitResults(emitResults as tsickle.EmitResult[])
+ .diagnostics);
+ } else {
+ for (const sf of toEmit) {
emitResults.push(program.emit(
sf, /*writeFile*/ undefined,
/*cancellationToken*/ undefined, /*emitOnlyDtsFiles*/ undefined,
{after: afterTransforms}));
}
- }
- if (bazelOpts.tsickle) {
- diags.push(...tsickle.mergeEmitResults(emitResults as tsickle.EmitResult[])
- .diagnostics);
- } else {
for (const d of emitResults) {
diags.push(...d.diagnostics);
}
}
-
if (diags.length > 0) {
console.error(diagnostics.format(bazelOpts.target, diags));
return false;
diff --git a/package.json b/package.json
index 7e38fe8..518d664 100644
--- a/package.json
+++ b/package.json
@@ -13,7 +13,6 @@
},
"dependencies": {
"protobufjs": "5.0.0",
- "tsickle": "0.32.1",
"tsutils": "2.20.0"
},
"devDependencies": {
@@ -28,6 +27,7 @@
"http-server": "^0.11.1",
"protractor": "^5.2.0",
"shelljs": "^0.8.2",
+ "tsickle": "0.32.1",
"typescript": "2.7.x"
},
"scripts": {