@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
JavaScript
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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
;