Skip to content

Commit

Permalink
fix: fix Windows bugs
Browse files Browse the repository at this point in the history
  • Loading branch information
wessberg committed Nov 16, 2019
1 parent 516de30 commit 9de491b
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 14 deletions.
8 changes: 4 additions & 4 deletions src/cli/task/transform/transform-task.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import {
sys,
TransformationContext
} from "typescript";
import {dirname, isAbsolute, join, relative} from "path";
import {normalize, dirname, isAbsolute, join, relative} from "path";
import {cjsToEsmTransformerFactory} from "../../../transformer/cjs-to-esm-transformer-factory";

/**
Expand Down Expand Up @@ -82,13 +82,13 @@ export async function transformTask({logger, input, outDir, root, fs}: Transform
const transformer = cjsToEsmTransformerFactory()(context);

for (const sourceFile of program.getSourceFiles()) {
if (!matchedFiles.has(sourceFile.fileName)) continue;
if (!matchedFiles.has(normalize(sourceFile.fileName))) continue;
const transformedSourceFile = transformer(sourceFile);

const destinationFile = join(absoluteOutDir, relative(root, transformedSourceFile.fileName));
const destinationFile = join(absoluteOutDir, relative(root, normalize(transformedSourceFile.fileName)));

fs.mkdirSync(dirname(destinationFile), {recursive: true});
fs.writeFileSync(destinationFile, printer.printFile(transformedSourceFile));
logger.info(`${relative(root, transformedSourceFile.fileName)} => ${relative(root, destinationFile)}`);
logger.info(`${relative(root, normalize(transformedSourceFile.fileName))} => ${relative(root, destinationFile)}`);
}
}
9 changes: 5 additions & 4 deletions src/transformer/before/transform-source-file.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ import {getLocalsForBindingName} from "../util/get-locals-for-binding-name";
import {shouldSkipEmit} from "../util/should-skip-emit";
import {ModuleExports} from "../module-exports/module-exports";
import {visitImportAndExportDeclarations} from "./visitor/visit/visit-import-and-export-declarations";
import {normalize} from "path";

export interface BeforeTransformerSourceFileStepResult {
sourceFile: SourceFile;
Expand Down Expand Up @@ -192,9 +193,9 @@ export function transformSourceFile(
isIdentifierFree,
getFreeIdentifier,
ignoreIdentifier,
getModuleExportsForPath: path => moduleExportsMap.get(path),
getModuleExportsForPath: path => moduleExportsMap.get(normalize(path)),
addModuleExportsForPath: (path, exports) => {
return moduleExportsMap.set(path, exports);
return moduleExportsMap.set(normalize(path), exports);
},
get imports() {
return [...imports.entries()].filter(([, noEmit]) => !noEmit).map(([declaration]) => declaration);
Expand Down Expand Up @@ -331,9 +332,9 @@ export function transformSourceFile(
}

// Add the relevant module exports for the SourceFile
visitorContext.addModuleExportsForPath(sourceFile.fileName, moduleExports);
visitorContext.addModuleExportsForPath(normalize(sourceFile.fileName), moduleExports);
if (!visitorContext.onlyExports && visitorContext.debug && visitorContext.printer != null) {
console.log("===", sourceFile.fileName, "===");
console.log("===", normalize(sourceFile.fileName), "===");
console.log(visitorContext.printer.printFile(updatedSourceFile));
console.log("EXPORTS:", visitorContext.exportedLocals);
}
Expand Down
5 changes: 3 additions & 2 deletions src/transformer/cjs-to-esm-transformer-factory.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,16 @@ import {beforeTransformer} from "./before/before-transformer";
import {VisitorContext} from "./visitor-context";
import {CjsToEsmOptions} from "./cjs-to-esm-options";
import {existsSync, readFileSync, statSync} from "fs";
import {normalize} from "path";

/**
* A TransformerFactory that converts CommonJS to tree-shakeable ESM
* @param {CjsToEsmOptions} [options]
* @returns {TransformerFactory<SourceFile>}
*/
export function cjsToEsmTransformerFactory({
fileExists = file => existsSync(file) && !statSync(file).isDirectory(),
readFile = (file: string, encoding?: string) => (existsSync(file) ? readFileSync(file, encoding).toString() : undefined),
fileExists = file => existsSync(normalize(file)) && !statSync(normalize(file)).isDirectory(),
readFile = (file: string, encoding?: string) => (existsSync(normalize(file)) ? readFileSync(normalize(file), encoding).toString() : undefined),
debug = false,
...rest
}: CjsToEsmOptions = {}): TransformerFactory<SourceFile> {
Expand Down
13 changes: 9 additions & 4 deletions src/transformer/util/is-require-call.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import {isIdentifier, isStringLiteralLike, SourceFile, Expression, isCallExpression} from "typescript";
import {VisitorContext} from "../visitor-context";
import {resolvePath} from "./resolve-path";
import {normalize} from "path";
import {walkThroughFillerNodes} from "./walk-through-filler-nodes";
import {isBuiltInModule} from "../built-in/built-in-module-map";

Expand All @@ -22,7 +23,10 @@ export interface IsRequireCallMatchResultWithResolvedModuleSpecifier {
resolvedModuleSpecifierText: string;
}

export type IsRequireCallResult = IsRequireCallNoMatchResult | IsRequireCallMatchResultWithNoResolvedModuleSpecifier | IsRequireCallMatchResultWithResolvedModuleSpecifier;
export type IsRequireCallResult =
| IsRequireCallNoMatchResult
| IsRequireCallMatchResultWithNoResolvedModuleSpecifier
| IsRequireCallMatchResultWithResolvedModuleSpecifier;

/**
* Checks if the CallExpression represents a require call (e.g.: 'require(...)')
Expand All @@ -49,12 +53,13 @@ export function isRequireCall(inputExpression: Expression, sourceFile: SourceFil
? undefined
: resolvePath({
id: moduleSpecifier,
parent: sourceFile.fileName,
parent: normalize(sourceFile.fileName),
readFile: context.readFile,
fileExists: context.fileExists
});

const resolvedModuleSpecifierText = resolvedModuleSpecifier == null || isBuiltInModule(resolvedModuleSpecifier) ? undefined : context.readFile(resolvedModuleSpecifier);
const resolvedModuleSpecifierText =
resolvedModuleSpecifier == null || isBuiltInModule(resolvedModuleSpecifier) ? undefined : context.readFile(resolvedModuleSpecifier);

if (moduleSpecifier == null || resolvedModuleSpecifier == null || resolvedModuleSpecifierText == null) {
return {
Expand All @@ -67,7 +72,7 @@ export function isRequireCall(inputExpression: Expression, sourceFile: SourceFil
return {
match: true,
moduleSpecifier,
resolvedModuleSpecifier,
resolvedModuleSpecifier: normalize(resolvedModuleSpecifier),
resolvedModuleSpecifierText
};
}
Expand Down

0 comments on commit 9de491b

Please sign in to comment.