Skip to content

Commit 5d098db

Browse files
passed plugins directory to the emitPlan function so we can avoid using
the getPlugins call again
1 parent f30f500 commit 5d098db

3 files changed

Lines changed: 104 additions & 18 deletions

File tree

src/transpilation/resolve.ts

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { formatPathToLuaPath, normalizeSlashes, trimExtension } from "../utils";
99
import { couldNotReadDependency, couldNotResolveRequire } from "./diagnostics";
1010
import { BuildMode, CompilerOptions } from "../CompilerOptions";
1111
import { findLuaRequires, LuaRequire } from "./find-lua-requires";
12-
import { getPlugins } from "./plugins";
12+
import { Plugin } from "./plugins";
1313

1414
const resolver = resolve.ResolverFactory.createResolver({
1515
extensions: [".lua"],
@@ -34,7 +34,8 @@ class ResolutionContext {
3434
constructor(
3535
public readonly program: ts.Program,
3636
public readonly options: CompilerOptions,
37-
private readonly emitHost: EmitHost
37+
private readonly emitHost: EmitHost,
38+
private readonly plugins: Plugin[]
3839
) {
3940
this.noResolvePaths = new Set(options.noResolvePaths);
4041
}
@@ -200,17 +201,18 @@ class ResolutionContext {
200201
}
201202
}
202203

203-
const plugins = getPlugins(this.program).plugins;
204-
for (let p of plugins) {
205-
if (p.onImportResolutionFailure != null) {
206-
const pluginResolvedPath = p.onImportResolutionFailure(packageRoot, dependency)
207-
if (pluginResolvedPath !== undefined) {
208-
const fileFromPath = this.getFileFromPath(pluginResolvedPath);
209-
if(fileFromPath){
210-
if(this.options.tstlVerbose){
211-
console.log(`Resolved file path for ${dependency} to path ${fileFromPath} using plugin.`)
204+
if (this.plugins != null) {
205+
for (let p of this.plugins) {
206+
if (p.onImportResolutionFailure != null) {
207+
const pluginResolvedPath = p.onImportResolutionFailure(packageRoot, dependency)
208+
if (pluginResolvedPath !== undefined) {
209+
const fileFromPath = this.getFileFromPath(pluginResolvedPath);
210+
if (fileFromPath) {
211+
if (this.options.tstlVerbose) {
212+
console.log(`Resolved file path for ${dependency} to path ${fileFromPath} using plugin.`)
213+
}
214+
return fileFromPath
212215
}
213-
return fileFromPath
214216
}
215217
}
216218
}
@@ -254,7 +256,7 @@ class ResolutionContext {
254256
path.join(resolvedPath, "init.lua"), // lua looks for <require>/init.lua if it cannot find <require>.lua
255257
];
256258

257-
if(resolvedPath.endsWith(".lua")){
259+
if (resolvedPath.endsWith(".lua")) {
258260
possibleLuaProjectFiles.push(resolvedPath)
259261
}
260262

@@ -300,10 +302,10 @@ class ResolutionContext {
300302
}
301303
}
302304

303-
export function resolveDependencies(program: ts.Program, files: ProcessedFile[], emitHost: EmitHost): ResolutionResult {
305+
export function resolveDependencies(program: ts.Program, files: ProcessedFile[], emitHost: EmitHost, plugins: Plugin[]): ResolutionResult {
304306
const options = program.getCompilerOptions() as CompilerOptions;
305307

306-
const resolutionContext = new ResolutionContext(program, options, emitHost);
308+
const resolutionContext = new ResolutionContext(program, options, emitHost, plugins);
307309

308310
// Resolve dependencies for all processed files
309311
for (const file of files) {

src/transpilation/transpiler.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ export class Transpiler {
4545
}
4646
);
4747

48-
const { emitPlan } = this.getEmitPlan(program, transpileDiagnostics, freshFiles);
48+
const { emitPlan } = this.getEmitPlan(program, transpileDiagnostics, freshFiles, plugins);
4949

5050
const emitDiagnostics = this.emitFiles(program, plugins, emitPlan, writeFile);
5151

@@ -102,7 +102,8 @@ export class Transpiler {
102102
protected getEmitPlan(
103103
program: ts.Program,
104104
diagnostics: ts.Diagnostic[],
105-
files: ProcessedFile[]
105+
files: ProcessedFile[],
106+
plugins : Plugin[]
106107
): { emitPlan: EmitFile[] } {
107108
performance.startSection("getEmitPlan");
108109
const options = program.getCompilerOptions() as CompilerOptions;
@@ -112,7 +113,7 @@ export class Transpiler {
112113
}
113114

114115
// Resolve imported modules and modify output Lua requires
115-
const resolutionResult = resolveDependencies(program, files, this.emitHost);
116+
const resolutionResult = resolveDependencies(program, files, this.emitHost, plugins);
116117
diagnostics.push(...resolutionResult.diagnostics);
117118

118119
const lualibRequired = resolutionResult.resolvedFiles.some(f => f.fileName === "lualib_bundle");

tatus

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
diff --git a/src/CompilerOptions.ts b/src/CompilerOptions.ts
2+
index 5f74012..17720d6 100644
3+
--- a/src/CompilerOptions.ts
4+
+++ b/src/CompilerOptions.ts
5+
@@ -1,5 +1,6 @@
6+
import * as ts from "typescript";
7+
import { JsxEmit } from "typescript";
8+
+import { Plugin } from "./transpilation/plugins"
9+
import * as diagnosticFactories from "./transpilation/diagnostics";
10+

11+
type OmitIndexSignature<T> = {
12+
@@ -35,7 +36,7 @@ export interface TypeScriptToLuaOptions {
13+
noImplicitSelf?: boolean;
14+
noHeader?: boolean;
15+
noResolvePaths?: string[];
16+
- plugins?: Array<ts.PluginImport | TransformerImport>;
17+
+ plugins?: Array<ts.PluginImport | TransformerImport | {inline : Plugin}>;
18+
sourceMapTraceback?: boolean;
19+
tstlVerbose?: boolean;
20+
lua51AllowTryCatchInAsyncAwait?: boolean;
21+
diff --git a/src/transpilation/index.ts b/src/transpilation/index.ts
22+
index d4e8907..1fed6d3 100644
23+
--- a/src/transpilation/index.ts
24+
+++ b/src/transpilation/index.ts
25+
@@ -1,3 +1,4 @@
26+
+import { Plugin } from "enhanced-resolve";
27+
import * as fs from "fs";
28+
import * as path from "path";
29+
import * as ts from "typescript";
30+
@@ -16,7 +17,8 @@ export { TranspiledFile };
31+
export function transpileFiles(
32+
rootNames: string[],
33+
options: CompilerOptions = {},
34+
- writeFile?: ts.WriteFileCallback
35+
+ writeFile?: ts.WriteFileCallback,
36+
+ pluginsApi? : Plugin
37+
): EmitResult {
38+
const program = ts.createProgram(rootNames, options);
39+
const preEmitDiagnostics = ts.getPreEmitDiagnostics(program);
40+
@@ -29,7 +31,8 @@ export function transpileFiles(
41+
export function transpileProject(
42+
configFileName: string,
43+
optionsToExtend?: CompilerOptions,
44+
- writeFile?: ts.WriteFileCallback
45+
+ writeFile?: ts.WriteFileCallback,
46+
+ pluginsApi? : Plugin[]
47+
): EmitResult {
48+
const parseResult = parseConfigFileWithSystem(configFileName, optionsToExtend);
49+
if (parseResult.errors.length > 0) {
50+
diff --git a/src/transpilation/plugins.ts b/src/transpilation/plugins.ts
51+
index 0296fe6..25614bb 100644
52+
--- a/src/transpilation/plugins.ts
53+
+++ b/src/transpilation/plugins.ts
54+
@@ -49,7 +49,7 @@ export interface Plugin {
55+
onImportResolutionFailure?: (packageRoot : string, dependency : string) => string | undefined
56+
}
57+

58+
-export function getPlugins(program: ts.Program): { diagnostics: ts.Diagnostic[]; plugins: Plugin[] } {
59+
+export function getPlugins(program: ts.Program, apiPlugins : Plugin[] = []) : { diagnostics: ts.Diagnostic[]; plugins: Plugin[] } {
60+
performance.startSection("getPlugins");
61+
const diagnostics: ts.Diagnostic[] = [];
62+
const pluginsFromOptions: Plugin[] = [];
63+
@@ -78,6 +78,6 @@ export function getPlugins(program: ts.Program): { diagnostics: ts.Diagnostic[];
64+
}
65+

66+
performance.endSection("getPlugins");
67+
-
68+
- return { diagnostics, plugins: pluginsFromOptions };
69+
+ 
70+
+ return { diagnostics, plugins: pluginsFromOptions.concat(apiPlugins) };
71+
}
72+
diff --git a/src/transpilation/transpiler.ts b/src/transpilation/transpiler.ts
73+
index b4a9770..bd96f35 100644
74+
--- a/src/transpilation/transpiler.ts
75+
+++ b/src/transpilation/transpiler.ts
76+
@@ -12,6 +12,7 @@ import * as performance from "../measure-performance";
77+

78+
export interface TranspilerOptions {
79+
emitHost?: EmitHost;
80+
+ apiPlugins? : Plugin
81+
}
82+

83+
export interface EmitOptions extends TranspileOptions {

0 commit comments

Comments
 (0)