baqend
Version:
Baqend JavaScript SDK
163 lines (156 loc) • 13 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.typings = void 0;
/* eslint-disable no-continue */
const os_1 = __importDefault(require("os"));
const baqend_1 = require("baqend");
const helper_1 = require("./helper");
const { CollectionType } = baqend_1.metamodel.PluralAttribute;
const tsTypeMapping = {
Boolean: 'boolean',
Double: 'number',
Integer: 'number',
String: 'string',
DateTime: 'Date',
Time: 'Date',
Date: 'Date',
GeoPoint: 'GeoPoint',
JsonArray: 'unknown[]',
JsonObject: 'Record<string, unknown>',
File: 'binding.File',
};
const nativeTypeExtends = {
User: 'binding.User',
Role: 'binding.Role',
};
const nativeFactoryies = {
User: 'binding.UserFactory',
Role: 'binding.EntityFactory<model.Role>',
Device: 'binding.DeviceFactory',
};
const push = Function.prototype.apply.bind(Array.prototype.push);
function typings(args) {
if (!args.app) {
return Promise.reject(new Error('Please specify the app parameter.'));
}
return createTypings(args.app, args.dest);
}
exports.typings = typings;
function createTypings(app, dest) {
const factory = new baqend_1.EntityManagerFactory({ host: app });
return factory.ready().then(() => {
const types = typingsFromMetamodel(factory.metamodel);
return (0, helper_1.ensureDir)(dest)
.then(() => (0, helper_1.writeFile)(`${dest}/baqend-model.d.ts`, types.join(os_1.default.EOL)))
.then(() => console.log(`Typings successfully saved to: ${dest}/baqend-model.d.ts`));
});
}
function typingsFromMetamodel(metamodel) {
const typing = [];
const namespaces = {};
// import all native types, so they can be easily used in definitions
typing.push('import {binding, GeoPoint} from "baqend";');
typing.push('');
const module = [];
module.push('declare module "baqend" {');
module.push('');
module.push(' interface baqend {');
const model = [];
model.push(' namespace model {');
for (const key of Object.keys(metamodel.entities)) {
const entity = metamodel.entities[key];
if (entity.name === 'Object') {
continue;
}
if ((0, helper_1.isNativeClassNamespace)(entity.name)) {
continue;
}
// register only user defined types
if (entity.name.indexOf('.') !== -1) {
const [namespace, entityName] = entity.name.split('.');
module.push(` ["${entity.name}"]: binding.EntityFactory<model.${entity.name}> & { new(init?: Partial<model.${entity.name}>): model.${entity.name} };`);
if (!namespaces[namespace])
namespaces[namespace] = [];
push(namespaces[namespace], typingsFromSchema(entityName, entity, 'binding.Entity'));
}
else {
const factoryString = nativeFactoryies[entity.name] || `binding.EntityFactory<model.${entity.name}>`;
module.push(` ${entity.name}: ${factoryString} & { new(init?: Partial<model.${entity.name}>): model.${entity.name} };`);
push(model, typingsFromSchema(entity.name, entity, nativeTypeExtends[entity.name] || 'binding.Entity'));
}
model.push('');
}
for (const key of Object.keys(metamodel.embeddables)) {
const embeddable = metamodel.embeddables[key];
if (embeddable.name.indexOf('.') !== -1)
continue;
module.push(` ${embeddable.name}: binding.ManagedFactory<model.${embeddable.name}> & { new(init?: Partial<model.${embeddable.name}>): model.${embeddable.name} };`);
push(model, typingsFromSchema(embeddable.name, embeddable, 'binding.Managed'));
model.push('');
}
module.push(' }');
module.push('');
for (const key of Object.keys(namespaces)) {
model.push(` namespace ${key} {`);
push(model, namespaces[key]);
model.push(' }');
}
model.push(' }');
push(module, model);
module.push('}');
push(typing, module);
return typing;
}
function typingsFromSchema(typeName, entity, type) {
const typing = [];
typing.push(` interface ${typeName} extends ${type} {`);
for (const attribute of entity.declaredAttributes) {
if (!attribute.isMetadata) {
if (attribute.isCollection) {
switch (attribute.collectionType) {
case CollectionType.LIST:
typing.push(` ${attribute.name}: Array<${typingsFromType(attribute.elementType)}> | null;`);
break;
case CollectionType.MAP: {
const mapAttr = attribute;
typing.push(` ${attribute.name}: Map<${typingsFromType(mapAttr.keyType)}, ${typingsFromType(mapAttr.elementType)}> | null;`);
break;
}
case CollectionType.SET:
typing.push(` ${attribute.name}: Set<${typingsFromType(attribute.elementType)}> | null;`);
break;
default:
break;
}
}
else {
typing.push(` ${attribute.name}: ${typingsFromType(attribute.type)} | null;`);
}
}
}
typing.push(' }');
return typing;
}
function typingsFromType(type) {
if (type.isBasic) {
return tsTypeMapping[type.name];
}
return type.name.split('.').pop();
}
/**
import {binding} from "baqend";
declare module "baqend" {
interface baqend {
Campaign:binding.EntityFactory<Campaign> & { new(init?: Partial<model.Campaign>): model.Campaign };
Profile:binding.EntityFactory<Profile> & { new(init?: Partial<model.Profile>): model.Profile };
}
export interface Campaign extends binding.Entity {
}
export interface Profile extends binding.Entity {
}
}
* */
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwaW5ncy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInR5cGluZ3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsZ0NBQWdDO0FBQ2hDLDRDQUFvQjtBQUNwQixtQ0FBaUU7QUFDakUscUNBRWtCO0FBRWxCLE1BQU0sRUFBRSxjQUFjLEVBQUUsR0FBRyxrQkFBSSxDQUFDLGVBQWUsQ0FBQztBQUVoRCxNQUFNLGFBQWEsR0FBK0I7SUFDaEQsT0FBTyxFQUFFLFNBQVM7SUFDbEIsTUFBTSxFQUFFLFFBQVE7SUFDaEIsT0FBTyxFQUFFLFFBQVE7SUFDakIsTUFBTSxFQUFFLFFBQVE7SUFDaEIsUUFBUSxFQUFFLE1BQU07SUFDaEIsSUFBSSxFQUFFLE1BQU07SUFDWixJQUFJLEVBQUUsTUFBTTtJQUNaLFFBQVEsRUFBRSxVQUFVO0lBQ3BCLFNBQVMsRUFBRSxXQUFXO0lBQ3RCLFVBQVUsRUFBRSx5QkFBeUI7SUFDckMsSUFBSSxFQUFFLGNBQWM7Q0FDckIsQ0FBQztBQUVGLE1BQU0saUJBQWlCLEdBQTJCO0lBQ2hELElBQUksRUFBRSxjQUFjO0lBQ3BCLElBQUksRUFBRSxjQUFjO0NBQ3JCLENBQUM7QUFFRixNQUFNLGdCQUFnQixHQUEyQjtJQUMvQyxJQUFJLEVBQUUscUJBQXFCO0lBQzNCLElBQUksRUFBRSxtQ0FBbUM7SUFDekMsTUFBTSxFQUFFLHVCQUF1QjtDQUNoQyxDQUFDO0FBRUYsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7QUFPakUsU0FBZ0IsT0FBTyxDQUFDLElBQWdCO0lBQ3RDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO1FBQ2IsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLG1DQUFtQyxDQUFDLENBQUMsQ0FBQztLQUN2RTtJQUNELE9BQU8sYUFBYSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzVDLENBQUM7QUFMRCwwQkFLQztBQUVELFNBQVMsYUFBYSxDQUFDLEdBQVcsRUFBRSxJQUFZO0lBQzlDLE1BQU0sT0FBTyxHQUFHLElBQUksNkJBQW9CLENBQUMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUV4RCxPQUFPLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO1FBQy9CLE1BQU0sS0FBSyxHQUFHLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUV0RCxPQUFPLElBQUEsa0JBQVMsRUFBQyxJQUFJLENBQUM7YUFDbkIsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUEsa0JBQVMsRUFBQyxHQUFHLElBQUksb0JBQW9CLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQzthQUN0RSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQ0FBa0MsSUFBSSxvQkFBb0IsQ0FBQyxDQUFDLENBQUM7SUFDekYsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsU0FBUyxvQkFBb0IsQ0FBQyxTQUF5QjtJQUNyRCxNQUFNLE1BQU0sR0FBYSxFQUFFLENBQUM7SUFDNUIsTUFBTSxVQUFVLEdBQXNDLEVBQUUsQ0FBQztJQUN6RCxxRUFBcUU7SUFDckUsTUFBTSxDQUFDLElBQUksQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDO0lBQ3pELE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFFaEIsTUFBTSxNQUFNLEdBQWEsRUFBRSxDQUFDO0lBQzVCLE1BQU0sQ0FBQyxJQUFJLENBQUMsMkJBQTJCLENBQUMsQ0FBQztJQUN6QyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hCLE1BQU0sQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUVwQyxNQUFNLEtBQUssR0FBYSxFQUFFLENBQUM7SUFDM0IsS0FBSyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBRWxDLEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUU7UUFDakQsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUV2QyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFO1lBQzVCLFNBQVM7U0FDVjtRQUVELElBQUksSUFBQSwrQkFBc0IsRUFBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDdkMsU0FBUztTQUNWO1FBRUQsbUNBQW1DO1FBQ25DLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7WUFDbkMsTUFBTSxDQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN2RCxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsTUFBTSxDQUFDLElBQUksbUNBQW1DLE1BQU0sQ0FBQyxJQUFJLGtDQUFrQyxNQUFNLENBQUMsSUFBSSxhQUFhLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDO1lBQzFKLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDO2dCQUFFLFVBQVUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDdkQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBRSxpQkFBaUIsQ0FBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLGdCQUFnQixDQUFDLENBQUMsQ0FBQztTQUN0RjthQUFNO1lBQ0wsTUFBTSxhQUFhLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLCtCQUErQixNQUFNLENBQUMsSUFBSSxHQUFHLENBQUM7WUFDckcsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLE1BQU0sQ0FBQyxJQUFJLEtBQUssYUFBYSxpQ0FBaUMsTUFBTSxDQUFDLElBQUksYUFBYSxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQztZQUMzSCxJQUFJLENBQUMsS0FBSyxFQUFFLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7U0FDekc7UUFFRCxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0tBQ2hCO0lBRUQsS0FBSyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsRUFBRTtRQUNwRCxNQUFNLFVBQVUsR0FBRyxTQUFTLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRTlDLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQUUsU0FBUztRQUVsRCxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sVUFBVSxDQUFDLElBQUksa0NBQWtDLFVBQVUsQ0FBQyxJQUFJLGtDQUFrQyxVQUFVLENBQUMsSUFBSSxhQUFhLFVBQVUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDO1FBRXZLLElBQUksQ0FBQyxLQUFLLEVBQUUsaUJBQWlCLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO1FBQy9FLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7S0FDaEI7SUFFRCxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25CLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEIsS0FBSyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFO1FBQ3pDLEtBQUssQ0FBQyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDN0IsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUNuQjtJQUNELEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFbEIsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNwQixNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRWpCLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFFckIsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVELFNBQVMsaUJBQWlCLENBQUMsUUFBZ0IsRUFBRSxNQUF1RCxFQUFFLElBQVk7SUFDaEgsTUFBTSxNQUFNLEdBQWEsRUFBRSxDQUFDO0lBRTVCLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLFFBQVEsWUFBWSxJQUFJLElBQUksQ0FBQyxDQUFDO0lBRTNELEtBQUssTUFBTSxTQUFTLElBQUksTUFBTSxDQUFDLGtCQUFrQixFQUFFO1FBQ2pELElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFO1lBQ3pCLElBQUksU0FBUyxDQUFDLFlBQVksRUFBRTtnQkFDMUIsUUFBUyxTQUE0QyxDQUFDLGNBQWMsRUFBRTtvQkFDcEUsS0FBSyxjQUFjLENBQUMsSUFBSTt3QkFDdEIsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLFNBQVMsQ0FBQyxJQUFJLFdBQVcsZUFBZSxDQUFFLFNBQXFDLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDO3dCQUM5SCxNQUFNO29CQUNSLEtBQUssY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO3dCQUN2QixNQUFNLE9BQU8sR0FBRyxTQUF3QyxDQUFDO3dCQUN6RCxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsU0FBUyxDQUFDLElBQUksU0FBUyxlQUFlLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLGVBQWUsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDO3dCQUNsSSxNQUFNO3FCQUNQO29CQUNELEtBQUssY0FBYyxDQUFDLEdBQUc7d0JBQ3JCLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxTQUFTLENBQUMsSUFBSSxTQUFTLGVBQWUsQ0FBRSxTQUFvQyxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQzt3QkFDM0gsTUFBTTtvQkFDUjt3QkFDRSxNQUFNO2lCQUNUO2FBQ0Y7aUJBQU07Z0JBQ0wsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLFNBQVMsQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFFLFNBQXlDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2FBQ3JIO1NBQ0Y7S0FDRjtJQUVELE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDckIsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVELFNBQVMsZUFBZSxDQUFDLElBQW9CO0lBQzNDLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtRQUNoQixPQUFPLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDakM7SUFDRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRyxDQUFDO0FBQ3JDLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQW1CSSJ9