UNPKG

@microsoft/teams.apps

Version:

<p> <a href="https://www.npmjs.com/package/@microsoft/teams.apps" target="_blank"> <img src="https://img.shields.io/npm/v/@microsoft/teams.apps/latest" /> </a> <a href="https://www.npmjs.com/package/@microsoft/teams.apps?activeTab=code

108 lines 7.85 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.plugin = plugin; exports.getPlugin = getPlugin; exports.inject = inject; exports.getMetadata = getMetadata; const events_1 = require("./events"); const dependency_1 = require("./types/plugin/decorators/dependency"); const event_1 = require("./types/plugin/decorators/event"); const plugin_1 = require("./types/plugin/decorators/plugin"); /** * add a plugin * @param plugin plugin to add */ function plugin(plugin) { const { name } = getMetadata(plugin); if (this.getPlugin(name)) { throw new Error(`duplicate plugin "${name}" found`); } this.plugins.push(plugin); this.container.register(name, { useValue: plugin }); if (plugin.constructor.name !== name) { this.container.register(plugin.constructor.name, { useValue: plugin }); } return this; } /** * get a plugin */ function getPlugin(name) { return this.plugins.find((plugin) => { const metadata = getMetadata(plugin); return metadata.name === name; }); } /** * inject fields/events into a plugin */ function inject(plugin) { const { name, dependencies, events } = getMetadata(plugin); // inject dependencies for (const { key, type, optional } of dependencies) { let dependency = this.container.resolve(type); if (!dependency) { dependency = this.container.resolve(key); } if (!dependency) { if (optional) continue; throw new Error(`dependency "${type}" of property "${key}" not found, but plugin "${name}" depends on it`); } if (type === 'ILogger') { dependency = dependency.child(name); } Object.defineProperty(plugin, key, { value: dependency, writable: true, enumerable: false, configurable: false, }); } // inject event handlers for (const { key, name } of events) { let handler = (..._) => { }; if (name === 'error') { handler = (event) => { this.onError({ ...event, sender: plugin }); }; } else if (name === 'activity') { handler = (event) => { this.onActivity(plugin, event); }; } else if (name === 'custom') { handler = (name, event) => { if (events_1.allIEventKeys.includes(name)) { this.log.warn(`event "${name}" is reserved by core app-events but an plugin is trying to emit it`); return; } this.events.emit(name, event); }; } Object.defineProperty(plugin, key, { value: handler, writable: false, enumerable: false, configurable: false, }); } } // // PLUGIN HELPERS // function getMetadata(plugin) { if (!Reflect.hasMetadata(plugin_1.PLUGIN_METADATA_KEY, plugin.constructor)) { throw new Error(`type "${plugin.constructor.name}" is not a valid plugin`); } const metadata = Reflect.getMetadata(plugin_1.PLUGIN_METADATA_KEY, plugin.constructor); const dependencies = Reflect.getMetadata(dependency_1.PLUGIN_DEPENDENCIES_METADATA_KEY, plugin.constructor) || []; const events = Reflect.getMetadata(event_1.PLUGIN_EVENTS_METADATA_KEY, plugin.constructor) || []; return { ...metadata, dependencies, events, }; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLnBsdWdpbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvYXBwLnBsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFnQkEsd0JBYUM7QUFLRCw4QkFRQztBQUtELHdCQTJEQztBQU1ELGtDQWdCQztBQTdIRCxxQ0FBa0Q7QUFFbEQscUVBRzhDO0FBQzlDLDJEQUE0RjtBQUM1Riw2REFBc0Y7QUFFdEY7OztHQUdHO0FBQ0gsU0FBZ0IsTUFBTSxDQUE4QyxNQUFlO0lBQ2pGLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFckMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDekIsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQkFBcUIsSUFBSSxTQUFTLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDMUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDcEQsSUFBSSxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUNyQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLFNBQVMsQ0FFdkIsSUFBZ0I7SUFFaEIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1FBQ2xDLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztR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