Skip to content

Commit 8851835

Browse files
Alexander Vakrilovmanoldonev
authored andcommitted
refactor(builder): handle modules with "/" or "~/" (#7418)
1 parent 4437cd6 commit 8851835

2 files changed

Lines changed: 16 additions & 5 deletions

File tree

‎tests/app/ui/builder/builder-tests.ts‎

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { createViewFromEntry } from "tns-core-modules/ui/builder";
2-
import { assertEqual, assertNull, assertThrows } from "../../tk-unit";
2+
import { assertEqual, assertNull, assertThrows, assertNotNull } from "../../tk-unit";
33

44
const COMPONENT_MODULE = "ui/builder/component-module";
55
const MISSING_MODULE = "ui/builder/missing-module";
@@ -22,7 +22,17 @@ export function test_view_is_NOT_module_root_component() {
2222
assertNull(undefinedModule, `View<${nestedView}> should NOT be a root component of a module.`);
2323
}
2424

25-
export function test_load_component_from_missing_module_throws() {
25+
export function test_create_view_from_entry_from_missing_module_throws() {
2626
assertThrows(() => getViewComponent(MISSING_MODULE),
2727
"Loading component from a missing module SHOULD throw an error.");
2828
}
29+
30+
export function test_create_view_from_entry_with_path_with_slash() {
31+
const view = getViewComponent("/" + COMPONENT_MODULE);
32+
assertNotNull(view, `Module starting with "/" could not be loaded`);
33+
}
34+
35+
export function test_create_view_from_entry_with_path_with_tilde() {
36+
const view = getViewComponent("~/" + COMPONENT_MODULE);
37+
assertNotNull(view, `Module starting with "~/" could not be loaded`);
38+
}

‎tns-core-modules/ui/builder/builder.ts‎

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,20 +57,21 @@ export const createViewFromEntry = profile("createViewFromEntry", (entry: ViewEn
5757

5858
return view;
5959
} else if (entry.moduleName) {
60-
const resolvedCodeModuleName = resolveModuleName(entry.moduleName, ""); //`${moduleName}.xml`;
60+
const moduleName = sanitizeModuleName(entry.moduleName);
61+
const resolvedCodeModuleName = resolveModuleName(moduleName, ""); //`${moduleName}.xml`;
6162
let moduleExports = resolvedCodeModuleName ? global.loadModule(resolvedCodeModuleName) : null;
6263

6364
if (moduleExports && moduleExports.createPage) {
6465
// Exports has a createPage() method
6566
const view = moduleExports.createPage();
66-
const resolvedCssModuleName = resolveModuleName(entry.moduleName, "css"); //entry.moduleName + ".css";
67+
const resolvedCssModuleName = resolveModuleName(moduleName, "css"); //entry.moduleName + ".css";
6768
if (resolvedCssModuleName) {
6869
view.addCssFile(resolvedCssModuleName);
6970
}
7071

7172
return view;
7273
} else {
73-
const componentModule = loadInternal(entry.moduleName, moduleExports);
74+
const componentModule = loadInternal(moduleName, moduleExports);
7475
const componentView = componentModule && componentModule.component;
7576

7677
return componentView;

0 commit comments

Comments
 (0)