import ResourceComponent from "../../data/ResourceComponent"; import Path from "../../Path"; import {TemplateSystem} from "../../TemplateSystem"; import PathHelper from "../../PathHelper"; import Ts3PathTemplate from "./Ts3PathTemplate"; import Ts3PathOut from "./Ts3PathOut"; import Setting from "../../Setting"; import * as path from 'path'; export interface ILines { } export default class Ts3ExportComponent { public com: ResourceComponent; constructor(com: ResourceComponent) { this.com = com; this.name = this.com.className; } public name: string; structClassContent:string; structClassDeclareContent:string; public Export() { this.ExportStructClass(); this.ExportExtend(); } /// /// 导出结构, 合并版本 /// private ExportStructClass() { let com = this.com; let imports: any[] = []; let fields: any[] = []; let setControllerList: any[] = []; let setTransitionList: any[] = []; let setDisplayList: any[] = []; // fields for(let node of this.com.controllerList) { if(node.isIgnore) continue; let line = [node.fieldName,node.type, node.type]; fields.push(line); let lineCtrl = [node.fieldName, node.name]; setControllerList.push(lineCtrl); } for (let node of this.com.transitionList) { if (node.isIgnore) continue; let line = [node.fieldName, node.type, node.type]; fields.push(line); let lineTrans = [node.fieldName, node.name]; setTransitionList.push(lineTrans); } for(let node of this.com.displayList) { if(node.isIgnore) continue; let lines = [node.fieldName,node.type, node.type]; fields.push(lines); let lineDis = [node.fieldName,node.name,node.type]; setDisplayList.push(lineDis); } for(let node of this.com.componentNodeList) { if(node.isIgnore) continue; let type = node.GetTypeForLaya2(this.com); var typeStr; if (node.resourceComponent.isIgnore) { typeStr = node.resourceComponent.extendClassName; } else { let typePath = "src/" + path.basename(Setting.Options.outCodePath) + "/Extends/" + node.resourceComponent.package.codeFolderName + "/" + node.resourceComponent.classNameExtend; // console.log(typePath); typeStr = `import('${typePath}').default`; } let lines = [node.fieldName, type , typeStr]; fields.push(lines); let lines2 = [node.fieldName,node.name, type]; setDisplayList.push(lines2); } // dependPackages let dependPackages = ""; let dependPackageList: string[] = new Array(); for (let pkg of this.com.dependPackageList) { dependPackageList.push(`\"${pkg.name}\"`); } dependPackages = dependPackageList.toString(); // imports // let importDict = new Map(); // for(let node of this.com.componentNodeList) // { // if (node.isIgnore) // continue; // if (node.resourceComponent == null) // continue; // if (node.resourceComponent.isIgnore) // continue; // if (!importDict.has(node.resourceComponent.classNameExtend)) // { // importDict.set(node.resourceComponent.classNameExtend, true); // let lines = [node.resourceComponent.classNameExtend, node.GetImportPathForStruct(com) ]; // imports.push(lines); // } // } // imports.push([ com.classNameExtend, PathHelper.GetImportPath(com.tsStructPath, com.tsExtendPath)]); var template = new TemplateSystem(Path.ReadTxt(Ts3PathTemplate.ComponentStructClassJS)); // template.AddVariable("imports", imports); template.AddVariable("classNameFGUI", com.classNameFGUI); template.AddVariable("classNameStruct", com.classNameStruct); template.AddVariable("classNameExtend", com.classNameExtend); template.AddVariable("pkgNamespace", com.package.codeFolderName); template.AddVariable("packagename", com.packageName); template.AddVariable("dependPackages", dependPackages); template.AddVariable("comname", Path.GetFileNameWithoutExtension(com.name)); template.AddVariable("URL", com.URL); template.AddVariable("fields", fields); template.AddVariable("setControllerList", setControllerList); template.AddVariable("setDisplayList", setDisplayList); template.AddVariable("setTransitionList", setTransitionList); var content = template.Parse(); this.structClassContent = content; // let path = TsPathOut.ComponentStructClass; // Path.CheckPath(path, true); // fs.appendFileSync(path, content , {encoding:'utf-8'}) // 描述文件 let typePath = "src/" + path.basename(Setting.Options.outCodePath) + "/Extends/" + com.package.codeFolderName + "/" + com.classNameExtend; // console.log(typePath); var classNameExtend = `import('${typePath}').default`; var template = new TemplateSystem(Path.ReadTxt(Ts3PathTemplate.ComponentStructClassDeclare)); template.AddVariable("classNameFGUI", com.classNameFGUI); template.AddVariable("classNameStruct", com.classNameStruct); template.AddVariable("classNameExtend", classNameExtend); template.AddVariable("pkgNamespace", com.package.codeFolderName); template.AddVariable("packagename", com.packageName); template.AddVariable("dependPackages", dependPackages); template.AddVariable("comname", Path.GetFileNameWithoutExtension(com.name)); template.AddVariable("URL", com.URL); template.AddVariable("fields", fields); template.AddVariable("setControllerList", setControllerList); template.AddVariable("setDisplayList", setDisplayList); template.AddVariable("setTransitionList", setTransitionList); var content = template.Parse(); this.structClassDeclareContent = content; } /// /// 导出扩展 /// private ExportExtend() { let com = this.com; let path = Ts3PathOut.ComponentExtend.format(com.package.codeFolderName,this.name); if(Path.IsFile(path)) return; // imports var imports = []; var lines = [ com.classNameStruct, PathHelper.GetImportPath(com.ts3ExtendPath, Ts3PathOut.FguiStruct) ]; imports.push(lines); let template: TemplateSystem = new TemplateSystem(Path.ReadTxt(Ts3PathTemplate.ComponentExtend)); // template.AddVariable("imports", imports); template.AddVariable("pkgNamespace", com.package.codeFolderName); template.AddVariable("classNameFGUI", com.classNameFGUI); template.AddVariable("classNameStruct", com.classNameStruct); template.AddVariable("classNameExtend", com.classNameExtend); let content = template.Parse(); Path.CheckPath(path); Path.WriteTxt(path, content); } }