UNPKG

@devgrid/netron

Version:

A powerful TypeScript library for building distributed systems with event bus, streaming capabilities, and remote object invocation. Features WebSocket-based bidirectional communication between Node.js and browser environments, service discovery, and type

63 lines 2.72 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.NetronMethod = exports.NetronService = exports.Public = exports.Service = void 0; const semver_1 = __importDefault(require("semver")); const constants_1 = require("./constants"); const Service = (qualifiedName) => (target) => { const [name, version] = qualifiedName.split('@'); const nameRegex = /^[a-zA-Z0-9]+(\.[a-zA-Z0-9]+)*$/; if (!name || !nameRegex.test(name)) { throw new Error(`Invalid service name "${name}". Only latin letters and dots are allowed.`); } if (version && !semver_1.default.valid(version)) { throw new Error(`Invalid version "${version}". Version must follow semver.`); } const metadata = { name, version: version ?? '', properties: {}, methods: {} }; for (const key of Object.getOwnPropertyNames(target.prototype)) { const descriptor = Object.getOwnPropertyDescriptor(target.prototype, key); if (!descriptor) continue; const isPublic = Reflect.getMetadata('public', target.prototype, key); if (!isPublic) continue; if (typeof descriptor.value === 'function') { const paramTypes = Reflect.getMetadata('design:paramtypes', target.prototype, key) || []; const returnType = Reflect.getMetadata('design:returntype', target.prototype, key)?.name || 'void'; metadata.methods[key] = { type: returnType, arguments: paramTypes.map((type) => type?.name || 'unknown'), }; } } for (const key of Object.keys(new target())) { const isPublic = Reflect.getMetadata('public', target.prototype, key); if (!isPublic) continue; const type = Reflect.getMetadata('design:type', target.prototype, key)?.name || 'unknown'; const isReadonly = Reflect.getMetadata('readonly', target.prototype, key); metadata.properties[key] = { type, readonly: !!isReadonly, }; } Reflect.defineMetadata(constants_1.SERVICE_ANNOTATION, metadata, target); }; exports.Service = Service; const Public = (options) => (target, propertyKey, descriptor) => { Reflect.defineMetadata('public', true, target, propertyKey); if (!descriptor) { Reflect.defineMetadata('readonly', options?.readonly, target, propertyKey); } }; exports.Public = Public; exports.NetronService = exports.Service; exports.NetronMethod = exports.Public; //# sourceMappingURL=decorators.js.map