UNPKG

baqend

Version:

Baqend JavaScript SDK

163 lines (156 loc) 13 kB
"use strict"; 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwaW5ncy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInR5cGluZ3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsZ0NBQWdDO0FBQ2hDLDRDQUFvQjtBQUNwQixtQ0FBaUU7QUFDakUscUNBRWtCO0FBRWxCLE1BQU0sRUFBRSxjQUFjLEVBQUUsR0FBRyxrQkFBSSxDQUFDLGVBQWUsQ0FBQztBQUVoRCxNQUFNLGFBQWEsR0FBK0I7SUFDaEQsT0FBTyxFQUFFLFNBQVM7SUFDbEIsTUFBTSxFQUFFLFFBQVE7SUFDaEIsT0FBTyxFQUFFLFFBQVE7SUFDakIsTUFBTSxFQUFFLFFBQVE7SUFDaEIsUUFBUSxFQUFFLE1BQU07SUFDaEIsSUFBSSxFQUFFLE1BQU07SUFDWixJQUFJLEVBQUUsTUFBTTtJQUNaLFFBQVEsRUFBRSxVQUFVO0lBQ3BCLFNBQVMsRUFBRSxXQUFXO0lBQ3RCLFVBQVUsRUFBRSx5QkFBeUI7SUFDckMsSUFBSSxFQUFFLGNBQWM7Q0FDckIsQ0FBQztBQUVGLE1BQU0saUJBQWlCLEdBQTJCO0lBQ2hELElBQUksRUFBRSxjQUFjO0lBQ3BCLElBQUksRUFBRSxjQUFjO0NBQ3JCLENBQUM7QUFFRixNQUFNLGdCQUFnQixHQUEyQjtJQUMvQyxJQUFJLEVBQUUscUJBQXFCO0lBQzNCLElBQUksRUFBRSxtQ0FBbUM7SUFDekMsTUFBTSxFQUFFLHVCQUF1QjtDQUNoQyxDQUFDO0FBRUYsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7QUFPakUsU0FBZ0IsT0FBTyxDQUFDLElBQWdCO0lBQ3RDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFO1FBQ2IsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLG1DQUFtQyxDQUFDLENBQUMsQ0FBQztLQUN2RTtJQUNELE9BQU8sYUFBYSxDQUFD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