UNPKG

liborm

Version:

ORM that use the legacy libsqlite

114 lines (103 loc) 3.81 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Entity = undefined; var _char = require("hjs-core/lib/char"); var char = _interopRequireWildcard(_char); var _type2 = require("hjs-core/lib/type"); var type = _interopRequireWildcard(_type2); var _helper = require("libsqlite/lib/helper"); var _model = require("./model"); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } /** @babel */ var ENTITIES = {}; var GENERATED = false; var Entity = exports.Entity = { generate: function generate() { if (!GENERATED) { var tables = _helper.TableInfo.getTables(); for (var tableName in tables) { if (tables.hasOwnProperty(tableName)) { var table = tables[tableName]; if (!ENTITIES[tableName]) { var _type = this.generateCtr(tableName); var proto = this.generateProto(_type, table); proto = this.generateMembers(table, proto); ENTITIES[tableName] = this.generateClass(table, proto); } } } GENERATED = true; } }, generateCtr: function generateCtr(name) { var ctrName = char.camelify(name); var F = new Function("return function " + ctrName + "(){" + ctrName + ".superclass.call(this); }"); return F(); }, generateField: function generateField(name, proto) { proto[name] = null; return proto; }, generateGetter: function generateGetter(name, proto) { var methodName = char.asCamelifyGetMethod(name); var M = new Function("return function " + methodName + "(){ return this." + name + "; }"); proto[methodName] = M(); return proto; }, generateClass: function generateClass(table, proto) { var C = type.Class.extend(proto); C.table = table; return C; }, generateMembers: function generateMembers(table, proto) { var columns = table.getColumnNames(); var len = columns.length; while (len--) { var field = columns[len]; if (field === _helper.BaseColumns._ID) { continue; } proto = this.generateField(field, proto); proto = this.generateGetter(field, proto); proto = this.generateSetter(field, proto); } return proto; }, generateProto: function generateProto(type, table) { return { extends: _model.SQLiteModel, constructor: type, getTable: function getTable() { return this.constructor.table; }, getTableName: function getTableName() { return this.getTable().getTableName(); } }; }, generateSetter: function generateSetter(name, proto) { var methodName = char.asCamelifySetMethod(name); var M = new Function("return function " + methodName + "(value){ this." + name + " = value; }"); proto[methodName] = M(); return proto; }, getTableClass: function getTableClass(table) { var type = ENTITIES[table]; if (type) { return type; } return null; }, getTableInstance: function getTableInstance(table) { var type = this.getTableClass(table); if (type) { return new type(); } return null; }, isGenerated: function isGenerated() { return GENERATED; } };