@wuapi/processor
Version:
Processor of typscript to form WU-API entities
331 lines (330 loc) • 8.82 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Project = exports.Module = exports.createEntity = exports.Entity = exports.enu = exports.obj = exports.unknown = exports.lst = exports.s2s = exports.str = exports.boo = exports.tim = exports.url = exports.idd = exports.dbl = exports.lng = exports.int = exports.ObjectField = exports.EnumField = exports.UnknownField = exports.ListField = exports.SSMapField = exports.StringField = exports.BooleanField = exports.DateTimeField = exports.URLField = exports.IDField = exports.DoubleField = exports.LongField = exports.IntegerField = exports.Field = exports.itm = exports.createEnum = exports.Enum = exports.EnumItem = void 0;
const dedent_js_1 = __importDefault(require("dedent-js"));
const essential_1 = require("@wuapi/essential");
/**
* Wrapper of Essentual $Commentable.
* Adding cmt() function.
*/
class Commentable extends essential_1.$Commentable {
cmt(comment) {
this.comment = (0, dedent_js_1.default)(comment);
return this;
}
}
/**
* Enumeration item.
*/
class EnumItem extends Commentable {
/**
* Constructor of enumeration item.
* @param value The number value of the item, it's mandatory.
*/
constructor(value) {
super();
this.value = value;
this.realname = null;
}
ren(realname) {
this.realname = realname;
return this;
}
cnf(v) {
this.config = v;
return this;
}
}
exports.EnumItem = EnumItem;
/**
* Definition class of enumeration
*/
class Enum extends Commentable {
constructor() {
super(...arguments);
this.items = new Map();
}
setItems(config) {
for (let key in config) {
this.items.set(key, config[key]);
}
return this;
}
cnf(v) {
this.config = v;
return this;
}
}
exports.Enum = Enum;
/**
* Create an iEnum instance.
* @returns newly created {@see iEnum } instance
*/
function createEnum() {
return new Enum();
}
exports.createEnum = createEnum;
/**
* Convenient function to create enumeration item.
* @param v The number value of the new item.
* @returns The newly created enumeration item.
*/
function itm(v) {
var result = new EnumItem(v);
return result;
}
exports.itm = itm;
/**
* Definition class of entity field
*/
class Field extends Commentable {
constructor() {
super(...arguments);
this.realname = null;
this.optional = false;
this.isPathParameter = false;
this.fixed = null;
this.config = null;
}
opt() {
this.optional = true;
return this;
}
ren(realname) {
this.realname = realname;
return this;
}
pth() {
this.isPathParameter = true;
return this;
}
fix(v) {
this.fixed = v;
return this;
}
cnf(v) {
this.config = v;
return this;
}
}
exports.Field = Field;
class IntegerField extends Field {
}
exports.IntegerField = IntegerField;
class LongField extends Field {
}
exports.LongField = LongField;
class DoubleField extends Field {
}
exports.DoubleField = DoubleField;
class IDField extends Field {
}
exports.IDField = IDField;
class URLField extends Field {
}
exports.URLField = URLField;
class DateTimeField extends Field {
}
exports.DateTimeField = DateTimeField;
class BooleanField extends Field {
}
exports.BooleanField = BooleanField;
class StringField extends Field {
}
exports.StringField = StringField;
class SSMapField extends Field {
}
exports.SSMapField = SSMapField;
class ListField extends Field {
constructor(member) {
super();
this.member = member;
}
}
exports.ListField = ListField;
class UnknownField extends Field {
constructor(name) {
super();
this.name = name;
}
}
exports.UnknownField = UnknownField;
class EnumField extends Field {
constructor(enu) {
super();
this.enu = enu;
}
}
exports.EnumField = EnumField;
class ObjectField extends Field {
constructor(entity) {
super();
this.entity = entity;
}
}
exports.ObjectField = ObjectField;
function int() { return new IntegerField(); }
exports.int = int;
function lng() { return new LongField(); }
exports.lng = lng;
function dbl() { return new DoubleField(); }
exports.dbl = dbl;
function idd() { return new IDField(); }
exports.idd = idd;
function url() { return new URLField(); }
exports.url = url;
function tim() { return new DateTimeField(); }
exports.tim = tim;
function boo() { return new BooleanField(); }
exports.boo = boo;
function str() { return new StringField(); }
exports.str = str;
function s2s() { return new SSMapField(); }
exports.s2s = s2s;
function lst(member) { return new ListField(member); }
exports.lst = lst;
function unknown(name) { return new UnknownField(name); }
exports.unknown = unknown;
function obj(elementOrName, _element) {
return new ObjectField((typeof elementOrName === 'string')
? { name: elementOrName, element: _element }
: { name: null, element: elementOrName });
}
exports.obj = obj;
function enu(elementOrName, _element) {
return new EnumField((typeof elementOrName === 'string')
? { name: elementOrName, element: _element }
: { name: null, element: elementOrName });
}
exports.enu = enu;
/**
* Definition of object entity.
*/
class Entity extends Commentable {
constructor() {
super(...arguments);
this.abstract = false;
this.fields = new Map();
this.knownMap = new Map();
this.type = essential_1.$EntityType.OBJECT;
this.response = null;
this.path = null;
this.parent = null;
this.method = null;
}
know(name, field) {
this.knownMap.set(name, field);
return this;
}
setFields(config) {
for (let key in config) {
this.fields.set(key, config[key]);
}
return this;
}
setMethod(m) {
this.method = m ?? null;
return this;
}
abs() {
this.abstract = true;
return this;
}
req(resOrName, _res) {
this.type = essential_1.$EntityType.REQUEST;
this.response = (typeof resOrName === 'string')
? { name: resOrName, element: _res }
: { name: null, element: resOrName };
return this;
}
res() {
this.type = essential_1.$EntityType.RESPONSE;
return this;
}
pth(path) {
this.path = path;
return this;
}
extends(_entity) {
const entity = _entity;
this.parent = entity;
if (entity.type != essential_1.$EntityType.OBJECT) {
this.type = entity.type;
}
if (!this.comment) {
this.comment = entity.comment;
}
return this;
}
cnf(v) {
this.config = v;
return this;
}
}
exports.Entity = Entity;
function createEntity() {
return new Entity();
}
exports.createEntity = createEntity;
/**
* Definition of module.
*/
class Module {
/**
* Constructor of module.
* @param name The initial name of this module.
* @param project The project where this module belongs to.
* @param config The raw config object
*/
constructor(name, project, config) {
this.name = name;
this.project = project;
this.entities = new Map();
this.enums = new Map();
this.name = config['moduleName'] ?? name;
for (const key in config) {
const obj = config[key];
if (obj instanceof Entity) {
this.entities.set(key, obj);
}
if (obj instanceof Enum) {
this.enums.set(key, obj);
}
}
}
}
exports.Module = Module;
/**
* Definition of project.
*/
class Project {
/**
* Constructor of project.
* @param name The name of the project
* @param version The version of the project
* @param targetPackage The package (for Java & Kotlin) into which the entities
*/
constructor(name, version, targetPackage) {
this.name = name;
this.version = version;
this.targetPackage = targetPackage;
this.modules = new Map();
}
/**
* Add modules to this project.
* @param config Map of modules
* @returns this project
*/
setModules(config) {
for (var m in config) {
const module = new Module(m, this, config[m]);
module.project = this;
this.modules.set(module.name, module);
}
return this;
}
}
exports.Project = Project;