Comparing version 0.0.1-21 to 0.0.1-22
@@ -115,4 +115,5 @@ import { MethodMetaData, ClassMetaData } from "kecubung"; | ||
export interface MetaDataStorage { | ||
get(classId: string): Kecubung.ClassMetaData; | ||
getByCategory(category: MetaDataLoaderCategory): Kecubung.ParentMetaData[]; | ||
get(classId: string): QualifiedClassMetaData; | ||
getFiles(category: MetaDataLoaderCategory): Kecubung.ParentMetaData[]; | ||
getClasses(category: MetaDataLoaderCategory): QualifiedClassMetaData[]; | ||
} | ||
@@ -218,1 +219,4 @@ export interface Engine { | ||
export declare function getRouteDetail(info: RouteInfo): string; | ||
export interface QualifiedClassMetaData extends Kecubung.ClassMetaData { | ||
qualifiedClassName: string; | ||
} |
@@ -1,2 +0,2 @@ | ||
import { MetaDataLoaderCategory, IdentifierResolver, MetaDataStorage } from "../core"; | ||
import { MetaDataLoaderCategory, IdentifierResolver, MetaDataStorage, QualifiedClassMetaData } from "../core"; | ||
import * as Kecubung from "kecubung"; | ||
@@ -6,8 +6,10 @@ export declare class MetaDataLoader implements MetaDataStorage { | ||
private pathResolver; | ||
private flatStorage; | ||
private storage; | ||
constructor(idResolver: IdentifierResolver); | ||
load(path: string | string[], category: MetaDataLoaderCategory): void; | ||
private getFiles(paths, category); | ||
getByCategory(category: MetaDataLoaderCategory): Kecubung.ParentMetaData[]; | ||
get(classId: string): Kecubung.ClassMetaData; | ||
private getFilePaths(paths, category); | ||
getFiles(category: MetaDataLoaderCategory): Kecubung.ParentMetaData[]; | ||
getClasses(category: MetaDataLoaderCategory): QualifiedClassMetaData[]; | ||
get(classId: string): QualifiedClassMetaData; | ||
} |
@@ -9,4 +9,4 @@ export declare class QualifiedName { | ||
isValid(): boolean; | ||
equals(qualifiedName: any): boolean; | ||
equals(qualifiedName: string | QualifiedName): boolean; | ||
isArray(): boolean; | ||
} |
@@ -94,3 +94,3 @@ "use strict"; | ||
this.storage.load(this.options.modelPath, "Model"); | ||
var routeInfos = this.generateRoutes(this.storage.getByCategory("Controller")); | ||
var routeInfos = this.generateRoutes(this.storage.getFiles("Controller")); | ||
if (routeInfos.length == 0) | ||
@@ -97,0 +97,0 @@ throw new Error("Fatal error"); |
@@ -9,2 +9,25 @@ "use strict"; | ||
var Babylon = require("babylon"); | ||
function flatten(metaList, fileName) { | ||
var result = []; | ||
metaList.forEach(function (x) { | ||
switch (x.type) { | ||
case "Module": | ||
var file_1 = x; | ||
var clazz = flatten(file_1.children, fileName); | ||
if (clazz && clazz.length > 0) { | ||
clazz.forEach(function (cls) { | ||
cls.qualifiedClassName = file_1.name + "." + cls.qualifiedClassName; | ||
}); | ||
result.push.apply(result, clazz); | ||
} | ||
break; | ||
case "Class": | ||
var curClass = x; | ||
curClass.qualifiedClassName = curClass.name + ", " + fileName; | ||
result.push(curClass); | ||
break; | ||
} | ||
}); | ||
return result; | ||
} | ||
var MetaDataLoader = (function () { | ||
@@ -14,3 +37,4 @@ function MetaDataLoader(idResolver) { | ||
this.pathResolver = new path_resolver_1.PathResolver(); | ||
this.storage = []; | ||
this.flatStorage = {}; | ||
this.storage = {}; | ||
} | ||
@@ -20,5 +44,7 @@ MetaDataLoader.prototype.load = function (path, category) { | ||
if (typeof path == "string") | ||
files = this.getFiles([path], category); | ||
files = this.getFilePaths([path], category); | ||
else | ||
files = this.getFiles(path, category); | ||
files = this.getFilePaths(path, category); | ||
var flatResult = []; | ||
var result = []; | ||
for (var _i = 0, files_1 = files; _i < files_1.length; _i++) { | ||
@@ -30,6 +56,9 @@ var file = files_1[_i]; | ||
var meta = Kecubung.transform("ASTree", ast, fileName); | ||
this.storage.push({ meta: meta, category: category }); | ||
flatResult.push.apply(flatResult, flatten(meta.children, meta.name)); | ||
result.push(meta); | ||
} | ||
this.flatStorage[category] = flatResult; | ||
this.storage[category] = result; | ||
}; | ||
MetaDataLoader.prototype.getFiles = function (paths, category) { | ||
MetaDataLoader.prototype.getFilePaths = function (paths, category) { | ||
var result = []; | ||
@@ -54,33 +83,17 @@ var _loop_1 = function (path) { | ||
}; | ||
MetaDataLoader.prototype.getByCategory = function (category) { | ||
return this.storage.filter(function (x) { return x.category == category; }) | ||
.map(function (x) { return x.meta; }); | ||
MetaDataLoader.prototype.getFiles = function (category) { | ||
return this.storage[category]; | ||
}; | ||
MetaDataLoader.prototype.getClasses = function (category) { | ||
return this.flatStorage[category]; | ||
}; | ||
MetaDataLoader.prototype.get = function (classId) { | ||
var qualifiedName = this.idResolver.getClassName(classId); | ||
var classInfo = new qualified_name_1.QualifiedName(qualifiedName); | ||
var file = this.storage | ||
.map(function (x) { return x.meta; }) | ||
.filter(function (x) { return x.name == classInfo.fileName; })[0]; | ||
if (!file) | ||
return; | ||
var result = file; | ||
var found = false; | ||
for (var _i = 0, _a = classInfo.className.split("."); _i < _a.length; _i++) { | ||
var className = _a[_i]; | ||
for (var _b = 0, _c = result.children; _b < _c.length; _b++) { | ||
var item = _c[_b]; | ||
if (item.name == className) { | ||
found = true; | ||
if (item.type == "Class") { | ||
return item; | ||
} | ||
else { | ||
result = item; | ||
break; | ||
} | ||
} | ||
} | ||
if (!found) | ||
return; | ||
var request = new qualified_name_1.QualifiedName(classId); | ||
for (var key in this.flatStorage) { | ||
var result = this.flatStorage[key].filter(function (x) { | ||
var qualified = new qualified_name_1.QualifiedName(x.qualifiedClassName); | ||
return request.equals(qualified); | ||
}); | ||
if (result.length > 0) | ||
return result[0]; | ||
} | ||
@@ -87,0 +100,0 @@ }; |
@@ -28,3 +28,7 @@ "use strict"; | ||
QualifiedName.prototype.equals = function (qualifiedName) { | ||
var qualified = new QualifiedName(qualifiedName); | ||
var qualified; | ||
if (typeof qualifiedName == "string") | ||
qualified = new QualifiedName(qualifiedName); | ||
else | ||
qualified = qualifiedName; | ||
return this.className === qualified.className | ||
@@ -31,0 +35,0 @@ && this.fileName === qualified.fileName; |
{ | ||
"name": "kamboja", | ||
"version": "0.0.1-21", | ||
"version": "0.0.1-22", | ||
"description": "MVC Framework powered by TypeScript", | ||
@@ -5,0 +5,0 @@ "main": "lib/source/index.js", |
140721
3277