// Definitions. import { LoadOptions } from "."; import { View, ViewBase, Template, KeyedTemplate } from "../core/view"; import { ViewEntry } from "../frame"; // Types. import { debug, ScopeError, SourceError, Source } from "../../utils/debug"; import * as xml from "../../xml"; import { isString, isObject, isDefined } from "../../utils/types"; import { ComponentModule, setPropertyValue, getComponentModule } from "./component-builder"; import { platformNames, device } from "../../platform"; import { profile } from "../../profiling"; import { sanitizeModuleName } from "./module-name-sanitizer"; import { resolveModuleName } from "../../module-name-resolver"; const ios = platformNames.ios.toLowerCase(); const android = platformNames.android.toLowerCase(); const defaultNameSpaceMatcher = /tns\.xsd$/i; export class Builder { static createViewFromEntry(entry: ViewEntry): View { if (entry.create) { const view = entry.create(); if (!view) { throw new Error("Failed to create View with entry.create() function."); } return view; } else if (entry.moduleName) { const moduleName = sanitizeModuleName(entry.moduleName); const resolvedCodeModuleName = resolveModuleName(moduleName, ""); //`${moduleName}.xml`; let moduleExports = resolvedCodeModuleName ? global.loadModule(resolvedCodeModuleName, true) : null; if (moduleExports && moduleExports.createPage) { // Exports has a createPage() method const view = moduleExports.createPage(); const resolvedCssModuleName = resolveModuleName(moduleName, "css"); //entry.moduleName + ".css"; if (resolvedCssModuleName) { view.addCssFile(resolvedCssModuleName); } return view; } else { const componentModule = loadInternal(moduleName, moduleExports); const componentView = componentModule && componentModule.component; return componentView; } } throw new Error("Failed to load page XML file for module: " + entry.moduleName); } static parse(value: string | Template, context: any): View { if (typeof value === "function") { return (