Skip to content

Commit 15a77f2

Browse files
author
Dimitar Tachev
authored
Merge pull request #235 from NativeScript/tachev/fix-attach
fix: support internal Android runtime ts files during debug
2 parents 8e999cf + 8b7f127 commit 15a77f2

File tree

2 files changed

+33
-12
lines changed

2 files changed

+33
-12
lines changed

src/debug-adapter/nativeScriptPathTransformer.ts

+29-8
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ export class NativeScriptPathTransformer extends UrlPathTransformer {
2222
return;
2323
}
2424

25+
const isAndroid = this.targetPlatform === 'android';
26+
2527
if (_.startsWith(scriptUrl, 'mdha:')) {
2628
scriptUrl = _.trimStart(scriptUrl, 'mdha:');
2729
}
@@ -37,7 +39,7 @@ export class NativeScriptPathTransformer extends UrlPathTransformer {
3739
let relativePath = scriptUrl;
3840

3941
if (matches) {
40-
relativePath = this.targetPlatform === 'android' ? matches[3] : matches[2];
42+
relativePath = isAndroid ? matches[3] : matches[2];
4143
}
4244

4345
const nodePath = path.join('..', 'node_modules');
@@ -48,22 +50,41 @@ export class NativeScriptPathTransformer extends UrlPathTransformer {
4850
relativePath = relativePath.replace('app', this.appDirPath);
4951
}
5052

51-
const absolutePath = path.resolve(path.join(webRoot, relativePath));
53+
let absolutePath = path.resolve(path.join(webRoot, relativePath));
54+
let platformSpecificPath = this.getPlatformSpecificPath(absolutePath);
5255

53-
if (fs.existsSync(absolutePath)) {
54-
return Promise.resolve(absolutePath);
56+
if (platformSpecificPath) {
57+
return Promise.resolve(platformSpecificPath);
5558
}
5659

57-
const fileExtension = path.extname(absolutePath);
60+
if (isAndroid) {
61+
// handle files like /data/data/internal/ts_helpers.ts
62+
absolutePath = path.resolve(path.join(webRoot, 'platforms', this.targetPlatform.toLowerCase(), 'app', 'src', 'main', 'assets', relativePath));
63+
platformSpecificPath = this.getPlatformSpecificPath(absolutePath);
64+
65+
if (platformSpecificPath) {
66+
return Promise.resolve(platformSpecificPath);
67+
}
68+
}
69+
70+
return Promise.resolve(scriptUrl);
71+
}
72+
73+
private getPlatformSpecificPath(rawPath: string): string {
74+
if (fs.existsSync(rawPath)) {
75+
return rawPath;
76+
}
77+
78+
const fileExtension = path.extname(rawPath);
5879

5980
if (fileExtension) {
60-
const platformSpecificPath = absolutePath.replace(fileExtension, `.${this.targetPlatform}${fileExtension}`);
81+
const platformSpecificPath = rawPath.replace(fileExtension, `.${this.targetPlatform}${fileExtension}`);
6182

6283
if (fs.existsSync(platformSpecificPath)) {
63-
return Promise.resolve(platformSpecificPath);
84+
return platformSpecificPath;
6485
}
6586
}
6687

67-
return Promise.resolve(scriptUrl);
88+
return null;
6889
}
6990
}

src/tests/pathTransformData.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ const tests = [
55
{ platform: 'android', scriptUrl: 'native prologue.js', expectedResult: 'native prologue.js' },
66
{ platform: 'android', scriptUrl: 'v8/gc', expectedResult: 'v8/gc' },
77
{ platform: 'android', scriptUrl: 'VM25', expectedResult: 'VM25' },
8-
{ platform: 'android', scriptUrl: '/data/data/org.nativescript.TabNavigation/files/internal/ts_helpers.js', expectedResult: '/data/data/org.nativescript.TabNavigation/files/internal/ts_helpers.js' },
8+
{ platform: 'android', scriptUrl: '/data/data/org.nativescript.TabNavigation/files/internal/ts_helpers.js', expectedResult: `C:\\projectpath\\platforms\\android\\app\\src\\main\\assets\\internal\\ts_helpers.js`, existingPath: 'C:\\projectpath\\platforms\\android\\app\\src\\main\\assets\\internal\\ts_helpers.js' },
99
{ platform: 'android', scriptUrl: 'file:///data/data/org.nativescript.TabNavigation/files/app/tns_modules/nativescript-angular/platform.js', expectedResult: 'C:\\projectpath\\node_modules\\nativescript-angular\\platform.js', existingPath: 'C:\\projectpath\\node_modules\\nativescript-angular\\platform.js' },
1010
{ platform: 'android', scriptUrl: 'file:///data/data/org.nativescript.TabNavigation/files/app/tns_modules/nativescript-angular/platform-common.js', expectedResult: 'C:\\projectpath\\node_modules\\nativescript-angular\\platform-common.js', existingPath: 'C:\\projectpath\\node_modules\\nativescript-angular\\platform-common.js' },
1111
{ platform: 'android', scriptUrl: 'file:///data/data/org.nativescript.TabNavigation/files/app/tns_modules/@angular/common/bundles/common.umd.js', expectedResult: 'C:\\projectpath\\node_modules\\@angular\\common\\bundles\\common.umd.js', existingPath: 'C:\\projectpath\\node_modules\\@angular\\common\\bundles\\common.umd.js' },
@@ -15,9 +15,9 @@ const tests = [
1515
{ platform: 'android', scriptUrl: 'file:///data/data/org.nativescript.TabNavigation/files/app/tns_modules/tns-core-modules/ui/page/page.js', expectedResult: 'C:\\projectpath\\node_modules\\tns-core-modules\\ui\\page\\page.android.js', existingPath: 'C:\\projectpath\\node_modules\\tns-core-modules\\ui\\page\\page.android.js' },
1616
{ platform: 'android', scriptUrl: 'file:///data/data/org.nativescript.TabNavigation/files/app/tns_modules/tns-core-modules/ui/layouts/layout-base.js', expectedResult: 'C:\\projectpath\\node_modules\\tns-core-modules\\ui\\layouts\\layout-base.android.js', existingPath: 'C:\\projectpath\\node_modules\\tns-core-modules\\ui\\layouts\\layout-base.android.js' },
1717
{ platform: 'android', scriptUrl: 'ng:///css/0/data/data/org.nativescript.TabNavigation/files/app/tabs/tabs.component.scss.ngstyle.js', expectedResult: 'ng:///css/0/data/data/org.nativescript.TabNavigation/files/app/tabs/tabs.component.scss.ngstyle.js' },
18-
{ platform: 'android', scriptUrl: 'file:///data/data/org.nativescript.TabNavigation/files/app/main.js', expectedResult: 'C:\\projectpath\\src\\main.js', nsconfig: { appPath: 'src' }, existingPath: 'C:\\projectpath\\src\\main.js' },
19-
{ platform: 'android', scriptUrl: 'file:///data/data/org.nativescript.TabNavigation/files/app/app/main.js', expectedResult: 'C:\\projectpath\\src\\app\\main.js', nsconfig: { appPath: 'src' }, existingPath: 'C:\\projectpath\\src\\app\\main.js' },
20-
{ platform: 'android', scriptUrl: 'file:///data/data/org.nativescript.app1/files/app/app/main.js', expectedResult: 'C:\\projectpath\\src\\app\\main.js', nsconfig: { appPath: 'src' }, existingPath: 'C:\\projectpath\\src\\app\\main.js' },
18+
{ platform: 'android', scriptUrl: 'file:///data/data/org.nativescript.TabNavigation/files/app/main.js', expectedResult: 'C:\\projectpath\\src\\main.js', nsconfig: { appPath: 'src' }, existingPath: 'C:\\projectpath\\src\\main.js' },
19+
{ platform: 'android', scriptUrl: 'file:///data/data/org.nativescript.TabNavigation/files/app/app/main.js', expectedResult: 'C:\\projectpath\\src\\app\\main.js', nsconfig: { appPath: 'src' }, existingPath: 'C:\\projectpath\\src\\app\\main.js' },
20+
{ platform: 'android', scriptUrl: 'file:///data/data/org.nativescript.app1/files/app/app/main.js', expectedResult: 'C:\\projectpath\\src\\app\\main.js', nsconfig: { appPath: 'src' }, existingPath: 'C:\\projectpath\\src\\app\\main.js' },
2121
];
2222

2323
export = tests;

0 commit comments

Comments
 (0)