Skip to content

Commit

Permalink
fix: fix the bug of missing extensions after transformed
Browse files Browse the repository at this point in the history
Change-Id: Ie22fb668441dec985cd68adca26952298cbb06c5
  • Loading branch information
WarrenJones committed Mar 25, 2022
1 parent c241fcf commit e3ad63f
Show file tree
Hide file tree
Showing 5 changed files with 31 additions and 19 deletions.
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -169,8 +169,8 @@ will be transformed into


``` typescript
import _vite_plugin_require_transform_caseA_extB_bbb from "caseA_extB_bbb";
import _vite_plugin_require_transform_caseA_extA_aaa from "caseA_extA_aaa";
import _vite_plugin_require_transform_caseA_extB_bbb from "caseA.extB?bbb";
import _vite_plugin_require_transform_caseA_extA_aaa from "caseA.extA?aaa";
//same path,different extension
const testCaseA = _vite_plugin_require_transform_caseA_extA_aaa;
const testCaseB = _vite_plugin_require_transform_caseA_extB_bbb;
Expand Down
6 changes: 3 additions & 3 deletions __test__/case2/exampleA_transformed_result.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { start as _vite_plugin_require_transform_case2start, stop as _vite_plugin_require_transform_case2stop } from "case2";
import { start as _vite_plugin_require_transform_case2_start, stop as _vite_plugin_require_transform_case2_stop } from "case2";
const _vite_plugin_require_transform_case2 = {
start: _vite_plugin_require_transform_case2start,
stop: _vite_plugin_require_transform_case2stop
start: _vite_plugin_require_transform_case2_start,
stop: _vite_plugin_require_transform_case2_stop
};
const case2A = location.host == 'test' ? null : _vite_plugin_require_transform_case2;

Expand Down
4 changes: 2 additions & 2 deletions __test__/case2/exampleB_transformed_result.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { Something as _vite_plugin_require_transform_test2BSomething } from "test2B";
import { Something as _vite_plugin_require_transform_test2B_Something } from "test2B";
const case2B = {
test: _vite_plugin_require_transform_test2BSomething
test: _vite_plugin_require_transform_test2B_Something
};
4 changes: 2 additions & 2 deletions __test__/case3/index_transformed_result.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import _vite_plugin_require_transform_caseA_extB_bbb from "caseA_extB_bbb";
import _vite_plugin_require_transform_caseA_extA_aaa from "caseA_extA_aaa";
import _vite_plugin_require_transform_caseA_extB_bbb from "caseA.extB?bbb";
import _vite_plugin_require_transform_caseA_extA_aaa from "caseA.extA?aaa";
//same path,different extension
const testCaseA = _vite_plugin_require_transform_caseA_extA_aaa;
const testCaseB = _vite_plugin_require_transform_caseA_extB_bbb;
Expand Down
32 changes: 22 additions & 10 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,10 @@ export default function vitePluginRequireTransform(
* {variable,path}
*/
let variableMather: { [key: string]: string } = {};
/**
* {variable,path}
*/
let requirePathMatcher: { [key: string]: string } = {};
return {
name: prefix,
async transform(code: string, id: string) {
Expand All @@ -41,13 +45,15 @@ export default function vitePluginRequireTransform(
enter(path) {
//require('./xxx')
if (path.isIdentifier({ name: 'require' }) && t.isCallExpression(path?.parentPath?.node)) {
let requirePath = (path.parentPath.node.arguments[0] as t.StringLiteral).value;
let originalRequirePath = (path.parentPath.node.arguments[0] as t.StringLiteral).value;
let requirePath = originalRequirePath;
//get the file name
if (importPathHandler) {
requirePath = importPathHandler(requirePath);
} else {
requirePath = requirePath.replace(/(.*\/)*([^.]+).*/ig, "$2").replace(/-/g, '_');
}
requirePathMatcher[requirePath] = originalRequirePath;
if (!importMap.has(requirePath)) {
importMap.set(requirePath, new Set());
}
Expand All @@ -60,7 +66,7 @@ export default function vitePluginRequireTransform(
requirePathExports.add(currentExport);
importMap.set(requirePath, requirePathExports);
//replace current line code
path.parentPath.parentPath.replaceWithSourceString(prefix + requirePath + currentExport)
path.parentPath.parentPath.replaceWithSourceString(prefix + requirePath + "_" + currentExport)
}
} else {
//replace current line code
Expand Down Expand Up @@ -108,35 +114,41 @@ export default function vitePluginRequireTransform(
});
//insert import
for (const importItem of importMap.entries()) {
const requireSpecifier = importItem[0].replace(/(.*\/)*([^.]+).*/ig, "$2").replace(/-/g, '_');
let originalPath = requirePathMatcher[importItem[0]];
let requireSpecifier = importItem[0];
//get the file name
if (importPathHandler) {
requireSpecifier = importPathHandler(requireSpecifier);
} else {
requireSpecifier = requireSpecifier.replace(/(.*\/)*([^.]+).*/ig, "$2").replace(/-/g, '_');
}
//non default
if (importItem[1].size) {
const importSpecifiers = []
for (const item of importItem[1].values()) {
item && importSpecifiers.push(t.importSpecifier(t.identifier(prefix + requireSpecifier + item), t.identifier(item)))
item && importSpecifiers.push(t.importSpecifier(t.identifier(prefix + requireSpecifier + "_" + item), t.identifier(item)))
}
const importDeclaration = t.importDeclaration(importSpecifiers, t.stringLiteral(importItem[0]));
const importDeclaration = t.importDeclaration(importSpecifiers, t.stringLiteral(originalPath));
ast.program.body.unshift(importDeclaration);
} else {
const importDefaultSpecifier = [t.importDefaultSpecifier(t.identifier(prefix + requireSpecifier))];
const importDeclaration = t.importDeclaration(importDefaultSpecifier, t.stringLiteral(importItem[0]));
const importDeclaration = t.importDeclaration(importDefaultSpecifier, t.stringLiteral(originalPath));
ast.program.body.unshift(importDeclaration);
}
}
const statementList: t.Statement[] = [];
/**
* insert the assignment
* eg:
* const _vite_plugin_require_transform_XXX = {start:_vite_plugin_require_transform__XXXstart,stop:_vite_plugin_require_transform__XXXstop}
* const _vite_plugin_require_transform_XXX = {start:_vite_plugin_require_transform__XXX_start,stop:_vite_plugin_require_transform__XXX_stop}
* */
for (const requirePath of Object.values(variableMather)) {
const importExports = importMap.get(requirePath);
if (importExports?.size) {
const requireSpecifier = requirePath.replace(/(.*\/)*([^.]+).*/ig, "$2").replace(/-/g, '_');
const idIdentifier = t.identifier(prefix + requireSpecifier)
const idIdentifier = t.identifier(prefix + requirePath)
const properties = []
for (const currentExport of importExports?.values()) {
properties.push(t.objectProperty(t.identifier(currentExport), t.identifier(prefix + requireSpecifier + currentExport)));
properties.push(t.objectProperty(t.identifier(currentExport), t.identifier(prefix + requirePath + "_" + currentExport)));
}
const initObjectExpression = t.objectExpression(properties);
statementList.push(t.variableDeclaration('const', [t.variableDeclarator(idIdentifier, initObjectExpression)]));
Expand Down

0 comments on commit e3ad63f

Please sign in to comment.