Skip to content

Commit deefc88

Browse files
committed
Move plugin handling to Transpilation class
1 parent 53ba64e commit deefc88

5 files changed

Lines changed: 18 additions & 17 deletions

File tree

src/transpilation/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
export * from "./managed";
2+
export { Plugin } from "./plugins";
23
export * from "./transpile";
34
export * from "./transpiler";
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
import { Printer } from "../../LuaPrinter";
2-
import { Visitors } from "../../transformation/context";
3-
import { Transpilation } from "../transpilation";
4-
import { getConfigDirectory, resolvePlugin } from "../utils";
1+
import { Printer } from "../LuaPrinter";
2+
import { Visitors } from "../transformation/context";
3+
import { Transpilation } from "./transpilation";
4+
import { getConfigDirectory, resolvePlugin } from "./utils";
55

66
export interface Plugin {
77
/**

src/transpilation/transpilation.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import { assert, cast, isNonNull, normalizeSlashes, trimExtension } from "../uti
88
import { Chunk, modulesToBundleChunks, modulesToChunks } from "./chunk";
99
import { createResolutionErrorDiagnostic } from "./diagnostics";
1010
import { buildModule, Module } from "./module";
11+
import { getPlugins, Plugin } from "./plugins";
1112
import { Transpiler, TranspilerHost } from "./transpiler";
1213

1314
export class Transpilation {
@@ -21,16 +22,16 @@ export class Transpilation {
2122

2223
private readonly implicitScriptExtensions = [".ts", ".tsx", ".js", ".jsx"] as const;
2324
protected resolver: Resolver;
25+
public plugins: Plugin[];
2426

25-
constructor(public transpiler: Transpiler, public program: ts.Program) {
27+
constructor(public transpiler: Transpiler, public program: ts.Program, extraPlugins: Plugin[]) {
2628
this.host = transpiler.host;
2729

28-
const { rootDir } = program.getCompilerOptions();
2930
this.rootDir =
3031
// getCommonSourceDirectory ignores provided rootDir when TS6059 is emitted
31-
rootDir == null
32+
this.options.rootDir == null
3233
? program.getCommonSourceDirectory()
33-
: ts.getNormalizedAbsolutePath(rootDir, this.host.getCurrentDirectory());
34+
: ts.getNormalizedAbsolutePath(this.options.rootDir, this.host.getCurrentDirectory());
3435

3536
this.outDir = this.options.outDir ?? this.rootDir;
3637

@@ -40,6 +41,8 @@ export class Transpilation {
4041
fileSystem: this.host.resolutionFileSystem ?? fs,
4142
useSyncFileSystemCalls: true,
4243
});
44+
45+
this.plugins = getPlugins(this, extraPlugins);
4346
}
4447

4548
public emit(): Chunk[] {

src/transpilation/transpile/index.ts

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,22 +5,18 @@ import { createPrinter } from "../../LuaPrinter";
55
import { createVisitorMap, transformSourceFile } from "../../transformation";
66
import { assert, isNonNull } from "../../utils";
77
import { Transpilation } from "../transpilation";
8-
import { getPlugins, Plugin } from "./plugins";
98
import { getTransformers } from "./transformers";
109

11-
export { Plugin };
12-
1310
export interface TranspileOptions {
1411
program: ts.Program;
1512
sourceFiles?: ts.SourceFile[];
1613
customTransformers?: ts.CustomTransformers;
17-
plugins?: Plugin[];
1814
}
1915

2016
export function emitProgramModules(
2117
transpilation: Transpilation,
2218
writeFileResult: ts.WriteFileCallback,
23-
{ program, sourceFiles: targetSourceFiles, customTransformers = {}, plugins: customPlugins = [] }: TranspileOptions
19+
{ program, sourceFiles: targetSourceFiles, customTransformers = {} }: TranspileOptions
2420
) {
2521
const options = program.getCompilerOptions() as CompilerOptions;
2622

@@ -49,9 +45,8 @@ export function emitProgramModules(
4945
}
5046
}
5147

52-
const plugins = getPlugins(transpilation, customPlugins);
53-
const visitorMap = createVisitorMap(plugins.map(p => p.visitors).filter(isNonNull));
54-
const printer = createPrinter(plugins.map(p => p.printer).filter(isNonNull));
48+
const visitorMap = createVisitorMap(transpilation.plugins.map(p => p.visitors).filter(isNonNull));
49+
const printer = createPrinter(transpilation.plugins.map(p => p.printer).filter(isNonNull));
5550
const processSourceFile = (sourceFile: ts.SourceFile) => {
5651
const { luaAst, luaLibFeatures, diagnostics: transformDiagnostics } = transformSourceFile(
5752
program,

src/transpilation/transpiler.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { FileSystem } from "enhanced-resolve";
22
import * as ts from "typescript";
3+
import { Plugin } from "./plugins";
34
import { Transpilation } from "./transpilation";
45
import { emitProgramModules, TranspileOptions } from "./transpile";
56

@@ -13,6 +14,7 @@ export interface TranspilerOptions {
1314

1415
export interface EmitOptions extends TranspileOptions {
1516
writeFile?: ts.WriteFileCallback;
17+
plugins?: Plugin[];
1618
}
1719

1820
export interface EmitResult {
@@ -30,7 +32,7 @@ export class Transpiler {
3032
const { program, writeFile = this.host.writeFile } = emitOptions;
3133
const options = program.getCompilerOptions();
3234

33-
const transpilation = new Transpilation(this, program);
35+
const transpilation = new Transpilation(this, program, emitOptions.plugins ?? []);
3436
emitProgramModules(transpilation, writeFile, emitOptions);
3537
if (options.noEmit || (options.noEmitOnError && transpilation.diagnostics.length > 0)) {
3638
return { diagnostics: transpilation.diagnostics, emitSkipped: true };

0 commit comments

Comments
 (0)