diff --git a/packages/telescope/__tests__/bundler.test.ts b/packages/telescope/__tests__/bundler.test.ts index 924a24760..7ae58c59b 100644 --- a/packages/telescope/__tests__/bundler.test.ts +++ b/packages/telescope/__tests__/bundler.test.ts @@ -1,7 +1,8 @@ import * as t from "@babel/types"; import { bundlePackages, getPackagesBundled } from "../src/bundle"; import generate from "@babel/generator"; -import { recursiveModuleBundle } from "@cosmology/ast"; +import { exportAllFromRelPath, exportTypesWithAlias, recursiveModuleBundle } from "@cosmology/ast"; +import { restoreExtension } from "@cosmology/utils"; import { getTestProtoStore } from "../test-utils"; import { getImportStatements } from "../src/imports"; @@ -124,3 +125,47 @@ it("get import statements with ext without .", () => { expect(importStat).toMatchSnapshot(); }); + +describe("module bundle type with restoreImportExtension", () => { + it("exportAllFromRelPath applies restoreExtension with .js", () => { + const relPath = "./auth/v1beta1/auth"; + const restored = restoreExtension(relPath, ".js"); + const node = exportAllFromRelPath(restored); + const code = generate(t.program([node])).code; + expect(code).toBe('export * from "./auth/v1beta1/auth.js";'); + }); + + it("exportAllFromRelPath applies restoreExtension with .mjs", () => { + const relPath = "./bank/v1beta1/tx"; + const restored = restoreExtension(relPath, ".mjs"); + const node = exportAllFromRelPath(restored); + const code = generate(t.program([node])).code; + expect(code).toBe('export * from "./bank/v1beta1/tx.mjs";'); + }); + + it("exportTypesWithAlias applies restoreExtension", () => { + const relPath = "./auth/v1beta1/auth"; + const restored = restoreExtension(relPath, ".js"); + const types = [ + { name: "BaseAccount", alias: "BaseAccount" }, + { name: "ModuleAccount", alias: "ModuleAccount" }, + ]; + const node = exportTypesWithAlias(types, restored); + const code = generate(t.program([node])).code; + expect(code).toBe( + 'export { BaseAccount, ModuleAccount } from "./auth/v1beta1/auth.js";' + ); + }); + + it("restoreExtension does not double-add extension", () => { + const relPath = "./auth/v1beta1/auth.js"; + const restored = restoreExtension(relPath, ".js"); + expect(restored).toBe("./auth/v1beta1/auth.js"); + }); + + it("restoreExtension without ext returns original path", () => { + const relPath = "./auth/v1beta1/auth"; + const restored = restoreExtension(relPath, undefined); + expect(restored).toBe("./auth/v1beta1/auth"); + }); +}); diff --git a/packages/telescope/src/generators/create-bundle.ts b/packages/telescope/src/generators/create-bundle.ts index cfbbb6fce..ac09a52bc 100644 --- a/packages/telescope/src/generators/create-bundle.ts +++ b/packages/telescope/src/generators/create-bundle.ts @@ -9,6 +9,7 @@ import { duplicateImportPathsWithExt, makeAliasName, makeAliasNameWithPackageAtEnd, + restoreExtension, } from "@cosmology/utils"; /** @@ -72,6 +73,8 @@ export const plugin = (builder: TelescopeBuilder, bundler: Bundler) => { return; } + const restoreImportExt = builder.options.restoreImportExtension; + // check each of exported identifiers is duplicated exportObjs.forEach((exportObj) => { const duplicatedTypeNames = exportObj.exportedIdentifiers.filter( @@ -125,10 +128,11 @@ export const plugin = (builder: TelescopeBuilder, bundler: Bundler) => { return { name: identifier, alias: identifier }; } ); - prog.push(exportTypesWithAlias(typesWithAlias, exportObj.relativePath)); + const relPath = restoreExtension(exportObj.relativePath, restoreImportExt); + prog.push(exportTypesWithAlias(typesWithAlias, relPath)); } else { // export * - prog.push(exportAllFromRelPath(exportObj.relativePath)); + prog.push(exportAllFromRelPath(restoreExtension(exportObj.relativePath, restoreImportExt))); } }); }