From 88adb61fd9b6859e29ce5427695e0ed77bbe0285 Mon Sep 17 00:00:00 2001 From: Patrick McElhaney Date: Wed, 15 May 2024 16:17:58 -0400 Subject: [PATCH] fix #906 -- transpile imports without JS extension properly --- .changeset/tough-horses-switch.md | 5 +++++ src/server/convert-js-extensions-to-cjs.ts | 3 ++- .../convert-js-extension-to-cjs.test.ts | 22 ++++++++++++++----- 3 files changed, 24 insertions(+), 6 deletions(-) create mode 100644 .changeset/tough-horses-switch.md diff --git a/.changeset/tough-horses-switch.md b/.changeset/tough-horses-switch.md new file mode 100644 index 00000000..f36918d0 --- /dev/null +++ b/.changeset/tough-horses-switch.md @@ -0,0 +1,5 @@ +--- +"counterfact": patch +--- + +fixes an issue where imports without a file extension were not transpiled properly diff --git a/src/server/convert-js-extensions-to-cjs.ts b/src/server/convert-js-extensions-to-cjs.ts index d0f68497..6697dd72 100644 --- a/src/server/convert-js-extensions-to-cjs.ts +++ b/src/server/convert-js-extensions-to-cjs.ts @@ -23,7 +23,8 @@ export function convertFileExtensionsToCjs(code: string) { ) { // Change the module string from "foo.js" to "foo.cjs" node.arguments[0].value = node.arguments[0].value.replace( - /\.js$/u, + // eslint-disable-next-line prefer-named-capture-group, regexp/no-unused-capturing-group, regexp/prefer-named-capture-group + /(\.js|\.ts)?$/u, ".cjs", ); } diff --git a/test/server/convert-js-extension-to-cjs.test.ts b/test/server/convert-js-extension-to-cjs.test.ts index ad24f9db..241c75a1 100644 --- a/test/server/convert-js-extension-to-cjs.test.ts +++ b/test/server/convert-js-extension-to-cjs.test.ts @@ -1,11 +1,23 @@ import { convertFileExtensionsToCjs } from "../../src/server/convert-js-extensions-to-cjs.js"; describe("convertFileExtensionsToCjs", () => { - it("converts a local require", () => { - expect(convertFileExtensionsToCjs('require("./foo.js");')).toEqual( - 'require("./foo.cjs");', - ); - }); + it.each(["./foo.js", "./foo.ts", "./foo"])( + "converts %s a local require", + (path) => { + expect(convertFileExtensionsToCjs(`require("${path}");`)).toEqual( + 'require("./foo.cjs");', + ); + }, + ); + + it.each(["../foo.js", "../foo.ts", "../foo"])( + "converts %s a local require", + (path) => { + expect(convertFileExtensionsToCjs(`require("${path}");`)).toEqual( + 'require("../foo.cjs");', + ); + }, + ); it("does not convert a non-local require", () => { expect(convertFileExtensionsToCjs('require("foo/bar.js");')).toEqual(