Skip to content

Commit 8ca8373

Browse files
added a plugin hook for custom module resolution strategies
1 parent 251ab04 commit 8ca8373

2 files changed

Lines changed: 14 additions & 0 deletions

File tree

src/transpilation/plugins.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ export interface Plugin {
4545
emitHost: EmitHost,
4646
result: EmitFile[]
4747
) => ts.Diagnostic[] | void;
48+
49+
onImportResolutionFailure?: (fileDirectory : string, dependencyPath : string) => string | undefined
4850
}
4951

5052
export function getPlugins(program: ts.Program): { diagnostics: ts.Diagnostic[]; plugins: Plugin[] } {

src/transpilation/resolve.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +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";
1213

1314
const resolver = resolve.ResolverFactory.createResolver({
1415
extensions: [".lua"],
@@ -167,6 +168,17 @@ class ResolutionContext {
167168
const resolveResult = resolver.resolveSync({}, fileDirectory, dependencyPath);
168169
if (resolveResult) return resolveResult;
169170
} catch (e: any) {
171+
172+
const plugins = getPlugins(this.program).plugins;
173+
for (let p of plugins) {
174+
if (p.onImportResolutionFailure != null) {
175+
const pluginResolvedPath = p.onImportResolutionFailure(fileDirectory, dependencyPath)
176+
if (pluginResolvedPath !== undefined) {
177+
return pluginResolvedPath;
178+
}
179+
}
180+
}
181+
170182
// resolveSync errors if it fails to resolve
171183
if (this.options.tstlVerbose && e.details) {
172184
// Output resolver log

0 commit comments

Comments
 (0)