aws-cdk
Version:
AWS CDK CLI, the command line tool for CDK apps
102 lines • 10.4 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.PluginHost = exports.TESTING = void 0;
exports.markTesting = markTesting;
const util_1 = require("util");
const context_provider_plugin_1 = require("./context-provider-plugin");
const api_1 = require("../../../../@aws-cdk/tmp-toolkit-helpers/src/api");
exports.TESTING = false;
function markTesting() {
exports.TESTING = true;
}
/**
* A utility to manage plug-ins.
*
*/
class PluginHost {
constructor() {
/**
* Access the currently registered CredentialProviderSources. New sources can
* be registered using the +registerCredentialProviderSource+ method.
*/
this.credentialProviderSources = new Array();
this.contextProviderPlugins = {};
if (!exports.TESTING && PluginHost.instance && PluginHost.instance !== this) {
throw new api_1.ToolkitError('New instances of PluginHost must not be built. Use PluginHost.instance instead!');
}
}
/**
* Loads a plug-in into this PluginHost.
*
* @param moduleSpec the specification (path or name) of the plug-in module to be loaded.
*/
load(moduleSpec) {
try {
/* eslint-disable @typescript-eslint/no-require-imports */
const plugin = require(moduleSpec);
/* eslint-enable */
if (!isPlugin(plugin)) {
throw new api_1.ToolkitError(`Module ${moduleSpec} is not a valid plug-in, or has an unsupported version.`);
}
if (plugin.init) {
plugin.init(this);
}
}
catch (e) {
throw api_1.ToolkitError.withCause(`Unable to load plug-in '${moduleSpec}'`, e);
}
function isPlugin(x) {
return x != null && x.version === '1';
}
}
/**
* Allows plug-ins to register new CredentialProviderSources.
*
* @param source a new CredentialProviderSource to register.
*/
registerCredentialProviderSource(source) {
// Forward to the right credentials-related plugin host
this.credentialProviderSources.push(source);
}
/**
* (EXPERIMENTAL) Allow plugins to register context providers
*
* Context providers are objects with the following method:
*
* ```ts
* getValue(args: {[key: string]: any}): Promise<any>;
* ```
*
* Currently, they cannot reuse the CDK's authentication mechanisms, so they
* must be prepared to either not make AWS calls or use their own source of
* AWS credentials.
*
* This feature is experimental, and only intended to be used internally at Amazon
* as a trial.
*
* After registering with 'my-plugin-name', the provider must be addressed as follows:
*
* ```ts
* const value = ContextProvider.getValue(this, {
* providerName: 'plugin',
* props: {
* pluginName: 'my-plugin-name',
* myParameter1: 'xyz',
* },
* includeEnvironment: true | false,
* dummyValue: 'what-to-return-on-the-first-pass',
* })
* ```
*
* @experimental
*/
registerContextProviderAlpha(pluginProviderName, provider) {
if (!(0, context_provider_plugin_1.isContextProviderPlugin)(provider)) {
throw new api_1.ToolkitError(`Object you gave me does not look like a ContextProviderPlugin: ${(0, util_1.inspect)(provider)}`);
}
this.contextProviderPlugins[pluginProviderName] = provider;
}
}
exports.PluginHost = PluginHost;
PluginHost.instance = new PluginHost();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQU9BLGtDQUVDO0FBVEQsK0JBQStCO0FBRS9CLHVFQUFnRztBQUNoRywwRUFBZ0Y7QUFFckUsUUFBQSxPQUFPLEdBQUcsS0FBSyxDQUFDO0FBRTNCLFNBQWdCLFdBQVc7SUFDekIsZUFBTyxHQUFHLElBQUksQ0FBQztBQUNqQixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBYSxVQUFVO0lBV3JCO1FBUkE7OztXQUdHO1FBQ2EsOEJBQXlCLEdBQUcsSUFBSSxLQUFLLEVBQTRCLENBQUM7UUFFbEUsMkJBQXNCLEdBQTBDLEVBQUUsQ0FBQztRQUdqRixJQUFJLENBQUMsZUFBTyxJQUFJLFVBQVUsQ0FBQyxRQUFRLElBQUksVUFBVSxDQUFDLFFBQVEsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUNwRSxNQUFNLElBQUksa0JBQVksQ0FBQyxpRkFBaUYsQ0FBQyxDQUFDO1FBQzVHLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLElBQUksQ0FBQyxVQUFrQjtRQUM1QixJQUFJLENBQUM7WUFDSCwwREFBMEQ7WUFDMUQsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ25DLG1CQUFtQjtZQUNuQixJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQ3RCLE1BQU0sSUFBSSxrQkFBWSxDQUFDLFVBQVUsVUFBVSx5REFBeUQsQ0FBQyxDQUFDO1lBQ3hHLENBQUM7WUFDRCxJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDaEIsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNwQixDQUFDO1FBQ0gsQ0FBQztRQUFDLE9BQU8sQ0FBTSxFQUFFLENBQUM7WUFDaEIsTUFBTSxrQkFBWSxDQUFDLFNBQVMsQ0FBQywyQkFBMkIsVUFBVSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDNUUsQ0FBQztRQUVELFNBQVMsUUFBUSxDQUFDLENBQU07WUFDdEIsT0FBTyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsQ0FBQyxPQUFPLEtBQUssR0FBRyxDQUFDO1FBQ3hDLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLGdDQUFnQyxDQUFDLE1BQWdDO1FBQ3RFLHVEQUF1RDtRQUN2RCxJQUFJLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQStCRztJQUNJLDRCQUE0QixDQUFDLGtCQUEwQixFQUFFLFFBQStCO1FBQzdGLElBQUksQ0FBQyxJQUFBLGlEQUF1QixFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDdkMsTUFBTSxJQUFJLGtCQUFZLENBQUMsa0VBQWtFLElBQUEsY0FBTyxFQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoSCxDQUFDO1FBQ0QsSUFBSSxDQUFDLHNCQUFzQixDQUFDLGtCQUFrQixDQUFDLEdBQUcsUUFBUSxDQUFDO0lBQzdELENBQUM7O0FBekZILGdDQTBGQztBQXpGZSxtQkFBUSxHQUFHLElBQUksVUFBVSxFQUFFLEFBQW5CLENBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5zcGVjdCB9IGZyb20gJ3V0aWwnO1xuaW1wb3J0IHR5cGUgeyBDcmVkZW50aWFsUHJvdmlkZXJTb3VyY2UsIElQbHVnaW5Ib3N0LCBQbHVnaW4gfSBmcm9tICdAYXdzLWNkay9jbGktcGx1Z2luLWNvbnRyYWN0JztcbmltcG9ydCB7IHR5cGUgQ29udGV4dFByb3ZpZGVyUGx1Z2luLCBpc0NvbnRleHRQcm92aWRlclBsdWdpbiB9IGZyb20gJy4vY29udGV4dC1wcm92aWRlci1wbHVnaW4nO1xuaW1wb3J0IHsgVG9vbGtpdEVycm9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vQGF3cy1jZGsvdG1wLXRvb2xraXQtaGVscGVycy9zcmMvYXBpJztcblxuZXhwb3J0IGxldCBURVNUSU5HID0gZmFsc2U7XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXJrVGVzdGluZygpIHtcbiAgVEVTVElORyA9IHRydWU7XG59XG5cbi8qKlxuICogQSB1dGlsaXR5IHRvIG1hbmFnZSBwbHVnLWlucy5cbiAqXG4gKi9cbmV4cG9ydCBjbGFzcyBQbHVnaW5Ib3N0IGltcGxlbWVudHMgSVBsdWdpbkhvc3Qge1xuICBwdWJsaWMgc3RhdGljIGluc3RhbmNlID0gbmV3IFBsdWdpbkhvc3QoKTtcblxuICAvKipcbiAgICogQWNjZXNzIHRoZSBjdXJyZW50bHkgcmVnaXN0ZXJlZCBDcmVkZW50aWFsUHJvdmlkZXJTb3VyY2VzLiBOZXcgc291cmNlcyBjYW5cbiAgICogYmUgcmVnaXN0ZXJlZCB1c2luZyB0aGUgK3JlZ2lzdGVyQ3JlZGVudGlhbFByb3ZpZGVyU291cmNlKyBtZXRob2QuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY3JlZGVudGlhbFByb3ZpZGVyU291cmNlcyA9IG5ldyBBcnJheTxDcmVkZW50aWFsUHJvdmlkZXJTb3VyY2U+KCk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGNvbnRleHRQcm92aWRlclBsdWdpbnM6IFJlY29yZDxzdHJpbmcsIENvbnRleHRQcm92aWRlclBsdWdpbj4gPSB7fTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBpZiAoIVRFU1RJTkcgJiYgUGx1Z2luSG9zdC5pbnN0YW5jZSAmJiBQbHVnaW5Ib3N0Lmluc3RhbmNlICE9PSB0aGlzKSB7XG4gICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKCdOZXcgaW5zdGFuY2VzIG9mIFBsdWdpbkhvc3QgbXVzdCBub3QgYmUgYnVpbHQuIFVzZSBQbHVnaW5Ib3N0Lmluc3RhbmNlIGluc3RlYWQhJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIExvYWRzIGEgcGx1Zy1pbiBpbnRvIHRoaXMgUGx1Z2luSG9zdC5cbiAgICpcbiAgICogQHBhcmFtIG1vZHVsZVNwZWMgdGhlIHNwZWNpZmljYXRpb24gKHBhdGggb3IgbmFtZSkgb2YgdGhlIHBsdWctaW4gbW9kdWxlIHRvIGJlIGxvYWRlZC5cbiAgICovXG4gIHB1YmxpYyBsb2FkKG1vZHVsZVNwZWM6IHN0cmluZykge1xuICAgIHRyeSB7XG4gICAgICAvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzICovXG4gICAgICBjb25zdCBwbHVnaW4gPSByZXF1aXJlKG1vZHVsZVNwZWMpO1xuICAgICAgLyogZXNsaW50LWVuYWJsZSAqL1xuICAgICAgaWYgKCFpc1BsdWdpbihwbHVnaW4pKSB7XG4gICAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoYE1vZHVsZSAke21vZHVsZVNwZWN9IGlzIG5vdCBhIHZhbGlkIHBsdWctaW4sIG9yIGhhcyBhbiB1bnN1cHBvcnRlZCB2ZXJzaW9uLmApO1xuICAgICAgfVxuICAgICAgaWYgKHBsdWdpbi5pbml0KSB7XG4gICAgICAgIHBsdWdpbi5pbml0KHRoaXMpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgdGhyb3cgVG9vbGtpdEVycm9yLndpdGhDYXVzZShgVW5hYmxlIHRvIGxvYWQgcGx1Zy1pbiAnJHttb2R1bGVTcGVjfSdgLCBlKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1BsdWdpbih4OiBhbnkpOiB4IGlzIFBsdWdpbiB7XG4gICAgICByZXR1cm4geCAhPSBudWxsICYmIHgudmVyc2lvbiA9PT0gJzEnO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBbGxvd3MgcGx1Zy1pbnMgdG8gcmVnaXN0ZXIgbmV3IENyZWRlbnRpYWxQcm92aWRlclNvdXJjZXMuXG4gICAqXG4gICAqIEBwYXJhbSBzb3VyY2UgYSBuZXcgQ3JlZGVudGlhbFByb3ZpZGVyU291cmNlIHRvIHJlZ2lzdGVyLlxuICAgKi9cbiAgcHVibGljIHJlZ2lzdGVyQ3JlZGVudGlhbFByb3ZpZGVyU291cmNlKHNvdXJjZTogQ3JlZGVudGlhbFByb3ZpZGVyU291cmNlKSB7XG4gICAgLy8gRm9yd2FyZCB0byB0aGUgcmlnaHQgY3JlZGVudGlhbHMtcmVsYXRlZCBwbHVnaW4gaG9zdFxuICAgIHRoaXMuY3JlZGVudGlhbFByb3ZpZGVyU291cmNlcy5wdXNoKHNvdXJjZSk7XG4gIH1cblxuICAvKipcbiAgICogKEVYUEVSSU1FTlRBTCkgQWxsb3cgcGx1Z2lucyB0byByZWdpc3RlciBjb250ZXh0IHByb3ZpZGVyc1xuICAgKlxuICAgKiBDb250ZXh0IHByb3ZpZGVycyBhcmUgb2JqZWN0cyB3aXRoIHRoZSBmb2xsb3dpbmcgbWV0aG9kOlxuICAgKlxuICAgKiBgYGB0c1xuICAgKiAgIGdldFZhbHVlKGFyZ3M6IHtba2V5OiBzdHJpbmddOiBhbnl9KTogUHJvbWlzZTxhbnk+O1xuICAgKiBgYGBcbiAgICpcbiAgICogQ3VycmVudGx5LCB0aGV5IGNhbm5vdCByZXVzZSB0aGUgQ0RLJ3MgYXV0aGVudGljYXRpb24gbWVjaGFuaXNtcywgc28gdGhleVxuICAgKiBtdXN0IGJlIHByZXBhcmVkIHRvIGVpdGhlciBub3QgbWFrZSBBV1MgY2FsbHMgb3IgdXNlIHRoZWlyIG93biBzb3VyY2Ugb2ZcbiAgICogQVdTIGNyZWRlbnRpYWxzLlxuICAgKlxuICAgKiBUaGlzIGZlYXR1cmUgaXMgZXhwZXJpbWVudGFsLCBhbmQgb25seSBpbnRlbmRlZCB0byBiZSB1c2VkIGludGVybmFsbHkgYXQgQW1hem9uXG4gICAqIGFzIGEgdHJpYWwuXG4gICAqXG4gICAqIEFmdGVyIHJlZ2lzdGVyaW5nIHdpdGggJ215LXBsdWdpbi1uYW1lJywgdGhlIHByb3ZpZGVyIG11c3QgYmUgYWRkcmVzc2VkIGFzIGZvbGxvd3M6XG4gICAqXG4gICAqIGBgYHRzXG4gICAqIGNvbnN0IHZhbHVlID0gQ29udGV4dFByb3ZpZGVyLmdldFZhbHVlKHRoaXMsIHtcbiAgICogICBwcm92aWRlck5hbWU6ICdwbHVnaW4nLFxuICAgKiAgIHByb3BzOiB7XG4gICAqICAgICBwbHVnaW5OYW1lOiAnbXktcGx1Z2luLW5hbWUnLFxuICAgKiAgICAgbXlQYXJhbWV0ZXIxOiAneHl6JyxcbiAgICogICB9LFxuICAgKiAgIGluY2x1ZGVFbnZpcm9ubWVudDogdHJ1ZSB8IGZhbHNlLFxuICAgKiAgIGR1bW15VmFsdWU6ICd3aGF0LXRvLXJldHVybi1vbi10aGUtZmlyc3QtcGFzcycsXG4gICAqIH0pXG4gICAqIGBgYFxuICAgKlxuICAgKiBAZXhwZXJpbWVudGFsXG4gICAqL1xuICBwdWJsaWMgcmVnaXN0ZXJDb250ZXh0UHJvdmlkZXJBbHBoYShwbHVnaW5Qcm92aWRlck5hbWU6IHN0cmluZywgcHJvdmlkZXI6IENvbnRleHRQcm92aWRlclBsdWdpbikge1xuICAgIGlmICghaXNDb250ZXh0UHJvdmlkZXJQbHVnaW4ocHJvdmlkZXIpKSB7XG4gICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKGBPYmplY3QgeW91IGdhdmUgbWUgZG9lcyBub3QgbG9vayBsaWtlIGEgQ29udGV4dFByb3ZpZGVyUGx1Z2luOiAke2luc3BlY3QocHJvdmlkZXIpfWApO1xuICAgIH1cbiAgICB0aGlzLmNvbnRleHRQcm92aWRlclBsdWdpbnNbcGx1Z2luUHJvdmlkZXJOYW1lXSA9IHByb3ZpZGVyO1xuICB9XG59XG4iXX0=