Skip to content

Commit 12376d4

Browse files
authored
Merge pull request #127 from shirookie/fix/import-dir
fix: import from dir
2 parents 995d379 + 52859a0 commit 12376d4

File tree

4 files changed

+31
-3
lines changed

4 files changed

+31
-3
lines changed

src/index.ts

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,20 @@ import { isRelativePath } from './utilities/index';
3838
const defaultOptions = {
3939
showDiagnostics: true,
4040
emitHeader: true,
41-
getModulePathCode: (name, _, moduleIt) => {
41+
getModulePathCode: (name, _, moduleIt, dirname) => {
4242
if (moduleIt && moduleIt.path) {
4343
return JSON.stringify(moduleIt.path);
4444
}
4545
const isRelative = isRelativePath(name);
46+
if (isRelative && _) {
47+
const { resolvedFileName, extension } = _;
48+
name = path
49+
.relative(dirname, resolvedFileName)
50+
.replace(new RegExp(`${extension}$`, 'i'), '');
51+
if (name[0] !== '.') {
52+
name = './' + name;
53+
}
54+
}
4655
const outPath = isRelative ? (name + '.php') : name;
4756
const pathCode = JSON.stringify(outPath);
4857
return isRelative ? `dirname(__FILE__) . '/' . ${pathCode}` : pathCode;
@@ -206,11 +215,16 @@ export class Ts2Php {
206215
.getEmitResolver(sourceFile, /* cancellationToken */ undefined);
207216

208217
if (sourceFile.resolvedModules) {
218+
let fileName = sourceFile.fileName;
219+
if (!path.isAbsolute(fileName)) {
220+
fileName = path.resolve(fileName);
221+
}
222+
const dirname = path.dirname(fileName);
209223
sourceFile.resolvedModules.forEach((item, name) => {
210224
const moduleIt = state.modules[name] || {} as ModuleInfo;
211225
state.modules[name] = {
212226
name,
213-
pathCode: state.getModulePathCode(name, item, moduleIt),
227+
pathCode: state.getModulePathCode(name, item, moduleIt, dirname),
214228
namespace: state.getModuleNamespace(name, item, moduleIt),
215229
...moduleIt
216230
};

test/features/helper/foo/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export default function foo () {};

test/features/import.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,3 +97,15 @@ require_once("abcdef/multi-files/square.php");
9797
require_once("aaa/bbb.php");
9898
require_once("aaa/bbb/ccc.php");
9999
```
100+
101+
## import path is a directory
102+
103+
```ts
104+
import foo from './helper/foo';
105+
foo();
106+
```
107+
108+
```php
109+
require_once(dirname(__FILE__) . '/' . "./helper/foo/index.php");
110+
foo();
111+
```

types/index.d.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,9 +92,10 @@ export interface Ts2phpCompileOptions {
9292
*
9393
* @params importPath 模块引入路径
9494
* @params module 模块相关信息
95+
* @params dirname 当前文件所在目录
9596
* @returns 路径代码
9697
*/
97-
getModulePathCode?: (importPath: string, module?: ts.ResolvedModuleFull, moduleIt?: ModuleInfo) => string;
98+
getModulePathCode?: (importPath: string, module?: ts.ResolvedModuleFull, moduleIt?: ModuleInfo, dirname?: string) => string;
9899

99100
/**
100101
* 获取外部模块的命名空间

0 commit comments

Comments
 (0)