Skip to content

Commit 260c71d

Browse files
committed
Use typescript internal api over "path" module for better windows compat
1 parent fbb9f23 commit 260c71d

5 files changed

Lines changed: 17 additions & 23 deletions

File tree

src/transpilation/chunk/bundle.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
import * as path from "path";
21
import { SourceNode } from "source-map";
2+
import * as ts from "typescript";
33
import { Chunk } from ".";
44
import { CompilerOptions, isBundleEnabled } from "../../CompilerOptions";
55
import { escapeString } from "../../LuaPrinter";
6-
import { assert, normalizeSlashes } from "../../utils";
6+
import { assert } from "../../utils";
77
import { couldNotFindBundleEntryPoint } from "../diagnostics";
88
import { Module } from "../module";
99
import { Transpilation } from "../transpilation";
@@ -34,8 +34,8 @@ export function modulesToBundleChunks(transpilation: Transpilation, modules: Mod
3434
const options = transpilation.program.getCompilerOptions() as CompilerOptions;
3535
assert(isBundleEnabled(options));
3636

37-
const outputPath = normalizeSlashes(path.resolve(transpilation.projectDir, options.luaBundle));
38-
const entryFileName = normalizeSlashes(path.resolve(transpilation.projectDir, options.luaBundleEntry));
37+
const outputPath = ts.getNormalizedAbsolutePath(options.luaBundle, transpilation.projectDir);
38+
const entryFileName = ts.getNormalizedAbsolutePath(options.luaBundleEntry, transpilation.projectDir);
3939

4040
const entryModule = modules.find(m => m.request === entryFileName);
4141
if (entryModule === undefined) {

src/transpilation/transpilation.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { SourceNode } from "source-map";
55
import * as ts from "typescript";
66
import { CompilerOptions, isBundleEnabled, LuaTarget } from "../CompilerOptions";
77
import { getLuaLibBundle } from "../LuaLib";
8-
import { assert, cast, isNonNull, trimExtension } from "../utils";
8+
import { assert, cast, isNonNull, normalizeSlashes, trimExtension } from "../utils";
99
import { Chunk, modulesToBundleChunks, modulesToChunks } from "./chunk";
1010
import { createResolutionErrorDiagnostic } from "./diagnostics";
1111
import { buildModule, Module } from "./module";
@@ -39,7 +39,7 @@ export class Transpilation {
3939

4040
this.projectDir =
4141
this.options.configFilePath !== undefined
42-
? path.dirname(this.options.configFilePath)
42+
? ts.getDirectoryPath(this.options.configFilePath)
4343
: this.host.getCurrentDirectory();
4444

4545
this.plugins = getPlugins(this, extraPlugins);
@@ -85,10 +85,10 @@ export class Transpilation {
8585

8686
let resolvedPath: string;
8787
try {
88-
const result = this.resolver.resolveSync({}, path.dirname(issuer), request);
88+
const result = this.resolver.resolveSync({}, ts.getDirectoryPath(issuer), request);
8989
assert(typeof result === "string", `Invalid resolution result: ${result}`);
9090
// https://github.com/webpack/enhanced-resolve#escaping
91-
resolvedPath = result.replace(/\0#/g, "#");
91+
resolvedPath = normalizeSlashes(result.replace(/\0#/g, "#"));
9292
} catch (error) {
9393
if (!isResolveError(error)) throw error;
9494
return { error: error.message };

src/transpilation/transpile/index.ts

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
1-
import * as path from "path";
21
import * as ts from "typescript";
32
import { CompilerOptions, validateOptions } from "../../CompilerOptions";
43
import { LuaPrinter } from "../../LuaPrinter";
54
import { createVisitorMap, transformSourceFile } from "../../transformation";
6-
import { assert, isNonNull } from "../../utils";
5+
import { isNonNull } from "../../utils";
76
import { applySinglePlugin } from "../plugins";
87
import { Transpilation } from "../transpilation";
98
import { getTransformers } from "./transformers";
@@ -57,17 +56,7 @@ export function emitProgramModules(
5756
transpilation.diagnostics.push(...transformDiagnostics);
5857
if (!options.noEmit && !options.emitDeclarationOnly) {
5958
const source = printer(program, transpilation.host, sourceFile.fileName, file);
60-
61-
let request: string;
62-
if (path.isAbsolute(sourceFile.fileName)) {
63-
request = sourceFile.fileName;
64-
} else {
65-
const currentDirectory = transpilation.host.getCurrentDirectory();
66-
// Having no absolute path in path.resolve would make it fallback to real cwd
67-
assert(path.isAbsolute(currentDirectory), `Invalid path: ${currentDirectory}`);
68-
request = path.resolve(currentDirectory, sourceFile.fileName);
69-
}
70-
59+
const request = ts.getNormalizedAbsolutePath(sourceFile.fileName, transpilation.projectDir);
7160
transpilation.modules.push({ request, isBuilt: false, source, sourceFiles: [sourceFile] });
7261
}
7362
};

src/typescript-internal.d.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,12 @@ export {};
33
declare module "typescript" {
44
function createDiagnosticReporter(system: System, pretty?: boolean): DiagnosticReporter;
55
function createWatchStatusReporter(system: System, pretty?: boolean): WatchStatusReporter;
6-
function getNormalizedAbsolutePath(fileName: string, currentDirectory: string): string;
6+
7+
// https://github.com/microsoft/TypeScript/blob/master/src/compiler/path.ts
8+
// Prefer to use these methods over "path" module, because they don't depend on runtime platform,
9+
// preserving input path style, which works better with tests that always use "/" as cwd.
10+
function getNormalizedAbsolutePath(fileName: string, currentDirectory: string | undefined): string;
11+
function getDirectoryPath(path: string): string;
712

813
interface System {
914
setBlocking?(): void;

test/util.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -260,7 +260,7 @@ export abstract class TestBuilder {
260260
host.resolutionFileSystem = virtualFS;
261261
host.getCurrentDirectory = () => "/";
262262
host.readFile = (fileName, encoding = "utf8") =>
263-
fileName.includes("/lualib/")
263+
/[\\/]lualib[\\/]/.test(fileName)
264264
? ts.sys.readFile(fileName, encoding)
265265
: (virtualFS.readFileSync(fileName, encoding) as string);
266266
}

0 commit comments

Comments
 (0)